8000 models - litellm - capture usage (#73) · KarmaENT/sdk-python@d0a57a9 · GitHub
[go: up one dir, main page]

Skip to content

Commit d0a57a9

Browse files
authored
models - litellm - capture usage (strands-agents#73)
1 parent 43aad3c commit d0a57a9

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

src/strands/models/litellm.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,8 @@ def stream(self, request: dict[str, Any]) -> Iterable[dict[str, Any]]:
334334

335335
yield {"chunk_type": "message_stop", "data": choice.finish_reason}
336336

337-
event = next(response)
338-
if hasattr(event, "usage"):
339-
yield {"chunk_type": "metadata", "data": event.usage}
337+
# Skip remaining events as we don't have use for anything except the final usage payload
338+
for event in response:
339+
_ = event
340+
341+
yield {"chunk_type": "metadata", "data": event.usage}

tests/strands/models/test_litellm.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -545,12 +545,14 @@ def test_stream(litellm_client, model):
545545

546546
def test_stream_empty(litellm_client, model):
547547
mock_delta = unittest.mock.Mock(content=None, tool_calls=None)
548+
mock_usage = unittest.mock.Mock(prompt_tokens=0, completion_tokens=0, total_tokens=0)
548549

549550
mock_event_1 = unittest.mock.Mock(choices=[unittest.mock.Mock(finish_reason=None, delta=mock_delta)])
550551
mock_event_2 = unittest.mock.Mock(choices=[unittest.mock.Mock(finish_reason="stop")])
551-
mock_event_3 = unittest.mock.Mock(spec=[])
552+
mock_event_3 = unittest.mock.Mock()
553+
mock_event_4 = unittest.mock.Mock(usage=mock_usage)
552554

553-
litellm_client.chat.completions.create.return_value = iter([mock_event_1, mock_event_2, mock_event_3])
555+
litellm_client.chat.completions.create.return_value = iter([mock_event_1, mock_event_2, mock_event_3, mock_event_4])
554556

555557
request = {"model": "m1", "messages": [{"role": "user", "content": []}]}
556558
response = model.stream(request)
@@ -561,6 +563,7 @@ def test_stream_empty(litellm_client, model):
561563
{"chunk_type": "content_start", "data_type": "text"},
562564
{"chunk_type": "content_stop", "data_type": "text"},
563565
{"chunk_type": "message_stop", "data": "stop"},
566+
{"chunk_type": "metadata", "data": mock_usage},
564567
]
565568

566569
assert tru_events == exp_events

0 commit comments

Comments
 (0)
0