Skip to content

Commit 36886b8

Browse files
committed
support tool call record metrics
1 parent 761335a commit 36886b8

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

veadk/tracing/telemetry/exporters/apmplus_exporter.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
from typing import Any
1818

1919
from google.adk.agents.invocation_context import InvocationContext
20+
from google.adk.events import Event
2021
from google.adk.models.llm_request import LlmRequest
2122
from google.adk.models.llm_response import LlmResponse
23+
from google.adk.tools import BaseTool
2224
from opentelemetry import metrics, trace
2325
from opentelemetry import metrics as metrics_api
2426
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
@@ -195,7 +197,7 @@ def __init__(
195197
explicit_bucket_boundaries_advisory=_GEN_AI_SERVER_TIME_PER_OUTPUT_TOKEN_BUCKETS,
196198
)
197199

198-
def record(
200+
def record_call_llm(
199201
self,
200202
invocation_context: InvocationContext,
201203
event_id: str,
@@ -267,6 +269,14 @@ def record(
267269
# time_per_output_token, attributes=attributes
268270
# )
269271

272+
def record_tool_call(
273+
self,
274+
tool: BaseTool,
275+
args: dict[str, Any],
276+
function_response_event: Event,
277+
):
278+
logger.debug(f"Record tool call work in progress. Tool: {tool.name}")
279+
270280

271281
class APMPlusExporterConfig(BaseModel):
272282
endpoint: str = Field(

veadk/tracing/telemetry/telemetry.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@
3333

3434
logger = get_logger(__name__)
3535

36+
meter_uploader = None
3637

37-
def _upload_metrics(
38+
39+
def _upload_call_llm_metrics(
3840
invocation_context: InvocationContext,
3941
event_id: str,
4042
llm_request: LlmRequest,
@@ -47,11 +49,27 @@ def _upload_metrics(
4749
for tracer in tracers:
4850
for exporter in getattr(tracer, "exporters", []):
4951
if getattr(exporter, "meter_uploader", None):
50-
exporter.meter_uploader.record(
52+
global meter_uploader
53+
meter_uploader = exporter.meter_uploader
54+
exporter.meter_uploader.record_call_llm(
5155
invocation_context, event_id, llm_request, llm_response
5256
)
5357

5458

59+
def _upload_tool_call_metrics(
60+
tool: BaseTool,
61+
args: dict[str, Any],
62+
function_response_event: Event,
63+
):
64+
global meter_uploader
65+
if meter_uploader:
66+
meter_uploader.record_tool_call(tool, args, function_response_event)
67+
else:
68+
logger.warning(
69+
"Meter uploader is not initialized yet. Skip recording tool call metrics."
70+
)
71+
72+
5573
def _set_agent_input_attribute(
5674
span: Span, invocation_context: InvocationContext
5775
) -> None:
@@ -203,6 +221,8 @@ def trace_tool_call(
203221
response: ExtractorResponse = attr_extractor(params)
204222
ExtractorResponse.update_span(span, attr_name, response)
205223

224+
_upload_tool_call_metrics(tool, args, function_response_event)
225+
206226

207227
def trace_call_llm(
208228
invocation_context: InvocationContext,
@@ -252,7 +272,7 @@ def trace_call_llm(
252272
response: ExtractorResponse = attr_extractor(params)
253273
ExtractorResponse.update_span(span, attr_name, response)
254274

255-
_upload_metrics(invocation_context, event_id, llm_request, llm_response)
275+
_upload_call_llm_metrics(invocation_context, event_id, llm_request, llm_response)
256276

257277

258278
# Do not modify this function

0 commit comments

Comments
 (0)