Skip to content

Commit 33e4a65

Browse files
authored
feat!: Remove bedrock-specific tracker method, use track_metrics_of method with custom extractor (#191)
1 parent dddc00a commit 33e4a65

2 files changed

Lines changed: 1 addition & 113 deletions

File tree

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

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -500,35 +500,13 @@ def track_error(self) -> None:
500500
"$ld:ai:generation:error", self._context, self.__get_track_data(), 1
501501
)
502502

503-
def track_bedrock_converse_metrics(self, res: dict) -> dict:
504-
"""
505-
Track AWS Bedrock conversation operations.
506-
507-
508-
This function will track the duration of the operation, the token
509-
usage, and the success or error status.
510-
511-
:param res: Response dictionary from Bedrock.
512-
:return: The original response dictionary.
513-
"""
514-
status_code = res.get("ResponseMetadata", {}).get("HTTPStatusCode", 0)
515-
if status_code == 200:
516-
self.track_success()
517-
elif status_code >= 400:
518-
self.track_error()
519-
if res.get("metrics", {}).get("latencyMs"):
520-
self.track_duration(res["metrics"]["latencyMs"])
521-
if res.get("usage"):
522-
self.track_tokens(_bedrock_to_token_usage(res["usage"]))
523-
return res
524-
525503
def track_tokens(self, tokens: TokenUsage) -> None:
526504
"""
527505
Track token usage metrics.
528506
529507
Records at most once per Tracker; further calls are ignored.
530508
531-
:param tokens: Token usage data from either custom, OpenAI, or Bedrock sources.
509+
:param tokens: Token usage data.
532510
"""
533511
if self._summary.tokens is not None:
534512
log.warning(
@@ -587,20 +565,6 @@ def get_summary(self) -> LDAIMetricSummary:
587565
return self._summary
588566

589567

590-
def _bedrock_to_token_usage(data: dict) -> TokenUsage:
591-
"""
592-
Convert a Bedrock usage dictionary to a TokenUsage object.
593-
594-
:param data: Dictionary containing Bedrock usage data.
595-
:return: TokenUsage object containing usage data.
596-
"""
597-
return TokenUsage(
598-
total=data.get("totalTokens", 0),
599-
input=data.get("inputTokens", 0),
600-
output=data.get("outputTokens", 0),
601-
)
602-
603-
604568
class AIGraphTracker:
605569
"""
606570
Tracks graph-level metrics for AI agent graph operations.

packages/sdk/server-ai/tests/test_tracker.py

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -174,82 +174,6 @@ def test_tracks_token_usage(client: LDClient):
174174
assert tracker.get_summary().tokens == tokens
175175

176176

177-
def test_tracks_bedrock_metrics(client: LDClient):
178-
context = Context.create("user-key")
179-
tracker = LDAIConfigTracker(
180-
ld_client=client, run_id="test-run-id", config_key="config-key",
181-
variation_key="variation-key", version=3, model_name="fakeModel",
182-
provider_name="fakeProvider", context=context,
183-
)
184-
185-
bedrock_result = {
186-
"ResponseMetadata": {"HTTPStatusCode": 200},
187-
"usage": {
188-
"inputTokens": 220,
189-
"outputTokens": 110,
190-
"totalTokens": 330,
191-
},
192-
"metrics": {
193-
"latencyMs": 50,
194-
},
195-
}
196-
tracker.track_bedrock_converse_metrics(bedrock_result)
197-
198-
_btd = {"runId": ANY, "variationKey": "variation-key", "configKey": "config-key",
199-
"version": 3, "modelName": "fakeModel", "providerName": "fakeProvider"}
200-
calls = [
201-
call("$ld:ai:generation:success", context, _btd, 1),
202-
call("$ld:ai:duration:total", context, _btd, 50),
203-
call("$ld:ai:tokens:total", context, _btd, 330),
204-
call("$ld:ai:tokens:input", context, _btd, 220),
205-
call("$ld:ai:tokens:output", context, _btd, 110),
206-
]
207-
208-
client.track.assert_has_calls(calls) # type: ignore
209-
210-
assert tracker.get_summary().success is True
211-
assert tracker.get_summary().duration_ms == 50
212-
assert tracker.get_summary().tokens == TokenUsage(330, 220, 110)
213-
214-
215-
def test_tracks_bedrock_metrics_with_error(client: LDClient):
216-
context = Context.create("user-key")
217-
tracker = LDAIConfigTracker(
218-
ld_client=client, run_id="test-run-id", config_key="config-key",
219-
variation_key="variation-key", version=3, model_name="fakeModel",
220-
provider_name="fakeProvider", context=context,
221-
)
222-
223-
bedrock_result = {
224-
"ResponseMetadata": {"HTTPStatusCode": 500},
225-
"usage": {
226-
"totalTokens": 330,
227-
"inputTokens": 220,
228-
"outputTokens": 110,
229-
},
230-
"metrics": {
231-
"latencyMs": 50,
232-
},
233-
}
234-
tracker.track_bedrock_converse_metrics(bedrock_result)
235-
236-
_etd = {"runId": ANY, "variationKey": "variation-key", "configKey": "config-key",
237-
"version": 3, "modelName": "fakeModel", "providerName": "fakeProvider"}
238-
calls = [
239-
call("$ld:ai:generation:error", context, _etd, 1),
240-
call("$ld:ai:duration:total", context, _etd, 50),
241-
call("$ld:ai:tokens:total", context, _etd, 330),
242-
call("$ld:ai:tokens:input", context, _etd, 220),
243-
call("$ld:ai:tokens:output", context, _etd, 110),
244-
]
245-
246-
client.track.assert_has_calls(calls) # type: ignore
247-
248-
assert tracker.get_summary().success is False
249-
assert tracker.get_summary().duration_ms == 50
250-
assert tracker.get_summary().tokens == TokenUsage(330, 220, 110)
251-
252-
253177
@pytest.mark.parametrize(
254178
"kind,label",
255179
[

0 commit comments

Comments
 (0)