diff --git a/litellm/responses/utils.py b/litellm/responses/utils.py index 336f2b5a947..fdbc692a977 100644 --- a/litellm/responses/utils.py +++ b/litellm/responses/utils.py @@ -23,7 +23,7 @@ from litellm.types.llms.openai import ( ResponseText, ) from litellm.types.responses.main import DecodedResponseId -from litellm.types.utils import SpecialEnums, Usage +from litellm.types.utils import PromptTokensDetails, SpecialEnums, Usage class ResponsesAPIRequestUtils: @@ -375,8 +375,15 @@ class ResponseAPILoggingUtils: ) prompt_tokens: int = response_api_usage.input_tokens or 0 completion_tokens: int = response_api_usage.output_tokens or 0 + prompt_tokens_details: Optional[PromptTokensDetails] = None + if response_api_usage.input_tokens_details: + prompt_tokens_details = PromptTokensDetails( + cached_tokens=response_api_usage.input_tokens_details.cached_tokens, + audio_tokens=response_api_usage.input_tokens_details.audio_tokens, + ) return Usage( prompt_tokens=prompt_tokens, completion_tokens=completion_tokens, total_tokens=prompt_tokens + completion_tokens, - ) \ No newline at end of file + prompt_tokens_details=prompt_tokens_details, + ) diff --git a/tests/test_litellm/responses/test_responses_utils.py b/tests/test_litellm/responses/test_responses_utils.py index 097dce26185..96ac2e2c345 100644 --- a/tests/test_litellm/responses/test_responses_utils.py +++ b/tests/test_litellm/responses/test_responses_utils.py @@ -168,6 +168,7 @@ class TestResponseAPILoggingUtils: "input_tokens": 10, "output_tokens": 20, "total_tokens": 30, + "input_tokens_details": {"cached_tokens": 2}, "output_tokens_details": {"reasoning_tokens": 5}, } @@ -181,6 +182,7 @@ class TestResponseAPILoggingUtils: assert result.prompt_tokens == 10 assert result.completion_tokens == 20 assert result.total_tokens == 30 + assert result.prompt_tokens_details and result.prompt_tokens_details.cached_tokens == 2 def test_transform_response_api_usage_with_none_values(self): """Test transformation handles None values properly"""