From f11083e992dda90ab082bb3e24a5ad8d337b5104 Mon Sep 17 00:00:00 2001 From: Adam Tao Date: Thu, 18 Sep 2025 18:28:13 +0800 Subject: [PATCH 1/2] fix: Fix cost calculation for responses Signed-off-by: Adam Tao --- litellm/responses/utils.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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, + ) From 9b0eaf0989875a9a638bebb0b28be4da24675832 Mon Sep 17 00:00:00 2001 From: Adam Tao Date: Thu, 18 Sep 2025 18:40:11 +0800 Subject: [PATCH 2/2] test: add a testcase for cached_tokens Signed-off-by: Adam Tao --- tests/test_litellm/responses/test_responses_utils.py | 2 ++ 1 file changed, 2 insertions(+) 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"""