Skip to content

Commit adfd9f0

Browse files
committed
fix: avoid double metrics extraction in track_metrics_of helpers
Previously, metrics_extractor(result) was called twice — once in the public track_metrics_of/track_metrics_of_async to read duration_ms, and again inside _track_from_metrics_extractor to track success, tokens, and tool calls. Extract metrics once in the public method and pass the resulting metrics + elapsed_ms into the private helper, which now also handles the duration tracking.
1 parent 2dd9329 commit adfd9f0

1 file changed

Lines changed: 8 additions & 13 deletions

File tree

packages/sdk/server-ai/src/ldai/tracker.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -279,12 +279,8 @@ def track_duration_of(self, func):
279279

280280
return result
281281

282-
def _track_from_metrics_extractor(
283-
self,
284-
result: Any,
285-
metrics_extractor: Callable[[Any], Any],
286-
) -> Any:
287-
metrics = metrics_extractor(result)
282+
def _track_from_metrics_extractor(self, metrics: Any, duration_ms: int) -> None:
283+
self.track_duration(duration_ms)
288284
if metrics.success:
289285
self.track_success()
290286
else:
@@ -293,7 +289,6 @@ def _track_from_metrics_extractor(
293289
self.track_tokens(metrics.usage)
294290
if getattr(metrics, 'tool_calls', None):
295291
self.track_tool_calls(metrics.tool_calls)
296-
return result
297292

298293
def track_metrics_of(
299294
self,
@@ -331,9 +326,9 @@ def track_metrics_of(
331326

332327
elapsed_ms = (time.perf_counter_ns() - start_ns) // 1_000_000
333328
metrics = metrics_extractor(result)
334-
reported_ms = getattr(metrics, 'duration_ms', None) if metrics else None
335-
self.track_duration(reported_ms if reported_ms is not None else elapsed_ms)
336-
return self._track_from_metrics_extractor(result, metrics_extractor)
329+
duration_ms = getattr(metrics, 'duration_ms', None) or elapsed_ms
330+
self._track_from_metrics_extractor(metrics, duration_ms)
331+
return result
337332

338333
async def track_metrics_of_async(self, metrics_extractor, func):
339334
"""
@@ -361,9 +356,9 @@ async def track_metrics_of_async(self, metrics_extractor, func):
361356

362357
elapsed_ms = (time.perf_counter_ns() - start_ns) // 1_000_000
363358
metrics = metrics_extractor(result)
364-
reported_ms = getattr(metrics, 'duration_ms', None) if metrics else None
365-
self.track_duration(reported_ms if reported_ms is not None else elapsed_ms)
366-
return self._track_from_metrics_extractor(result, metrics_extractor)
359+
duration_ms = getattr(metrics, 'duration_ms', None) or elapsed_ms
360+
self._track_from_metrics_extractor(metrics, duration_ms)
361+
return result
367362

368363
def track_judge_result(self, judge_result: Any) -> None:
369364
"""

0 commit comments

Comments
 (0)