mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
fix(responses): keep chat-shaped usage extras from colliding in the bridge
Gemini image usage carries prompt_tokens and friends as extra fields on ResponseAPIUsage, which collided with the bridge's explicit kwargs and raised TypeError. Exclude keys the bridge already sets explicitly.
This commit is contained in:
parent
280844c2f5
commit
6bce073520
2 changed files with 29 additions and 1 deletions
|
|
@ -1099,7 +1099,16 @@ class ResponseAPILoggingUtils:
|
|||
extra_usage_fields: Final = {
|
||||
key: value
|
||||
for key, value in (response_api_usage.model_extra or {}).items()
|
||||
if key not in ("input_token_details", "output_token_details")
|
||||
if key
|
||||
not in (
|
||||
"input_token_details",
|
||||
"output_token_details",
|
||||
"prompt_tokens",
|
||||
"completion_tokens",
|
||||
"total_tokens",
|
||||
"prompt_tokens_details",
|
||||
"completion_tokens_details",
|
||||
)
|
||||
}
|
||||
chat_usage: Final = Usage(
|
||||
prompt_tokens=prompt_tokens,
|
||||
|
|
|
|||
|
|
@ -459,6 +459,25 @@ class TestResponseAPILoggingUtils:
|
|||
assert result.completion_tokens == 20
|
||||
assert getattr(result, "server_side_tool_usage_details") == details
|
||||
|
||||
def test_transform_response_api_usage_ignores_chat_shaped_extras(self):
|
||||
"""Gemini image usage carries chat-shaped keys as extras; they must not collide with explicit kwargs."""
|
||||
usage = ResponseAPIUsage(
|
||||
input_tokens=35,
|
||||
output_tokens=1716,
|
||||
total_tokens=1751,
|
||||
prompt_tokens=35,
|
||||
prompt_tokens_details={"image_tokens": 5, "text_tokens": 30},
|
||||
completion_tokens=1716,
|
||||
completion_tokens_details={"image_tokens": 1120, "text_tokens": 596},
|
||||
server_side_tool_usage_details={"web_search_calls": 1},
|
||||
)
|
||||
|
||||
result = ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage(usage)
|
||||
|
||||
assert result.prompt_tokens == 35
|
||||
assert result.completion_tokens == 1716
|
||||
assert getattr(result, "server_side_tool_usage_details") == {"web_search_calls": 1}
|
||||
|
||||
def test_transform_already_chat_usage_passthrough_keeps_tool_details(self):
|
||||
"""Re-running the bridge on an already-converted chat Usage must not drop fields."""
|
||||
details = {"web_search_calls": 2, "x_search_calls": 0}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue