From a667b6cd70f39d6bcab0867e58813e352c0efeae Mon Sep 17 00:00:00 2001 From: Liam McDonald Date: Fri, 8 May 2026 14:32:26 -0700 Subject: [PATCH] Test usage transform for Realtime versus tokens_details keys --- .../responses/test_responses_utils.py | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tests/test_litellm/responses/test_responses_utils.py b/tests/test_litellm/responses/test_responses_utils.py index 60b84f0e0a8..2b3e601b134 100644 --- a/tests/test_litellm/responses/test_responses_utils.py +++ b/tests/test_litellm/responses/test_responses_utils.py @@ -348,6 +348,58 @@ class TestResponseAPILoggingUtils: assert result.completion_tokens_details.image_tokens == 100 assert result.completion_tokens_details.text_tokens == 70 + def test_transform_response_api_usage_with_realtime_keys(self): + """Realtime input_token_details / output_token_details normalize for Usage.""" + usage = { + "input_tokens": 10, + "output_tokens": 20, + "total_tokens": 30, + "input_token_details": { + "text_tokens": 8, + "audio_tokens": 2, + "cached_tokens": 0, + }, + "output_token_details": { + "text_tokens": 12, + "audio_tokens": 8, + }, + } + + result = ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( + usage + ) + + assert result.prompt_tokens_details is not None + assert result.prompt_tokens_details.text_tokens == 8 + assert result.prompt_tokens_details.audio_tokens == 2 + + assert result.completion_tokens_details is not None + assert result.completion_tokens_details.text_tokens == 12 + + def test_transform_response_api_usage_tokens_details_keep_values(self): + """Keeps input_tokens_details / output_tokens_details when singular keys are also present.""" + usage = { + "input_tokens": 10, + "output_tokens": 20, + "total_tokens": 30, + "input_tokens_details": {"text_tokens": 10}, + "output_tokens_details": {"text_tokens": 20}, + "input_token_details": {"text_tokens": 1, "audio_tokens": 99}, + "output_token_details": {"text_tokens": 2, "audio_tokens": 98}, + } + + result = ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( + usage + ) + + assert result.prompt_tokens_details is not None + assert result.prompt_tokens_details.text_tokens == 10 + assert result.prompt_tokens_details.audio_tokens is None + + assert result.completion_tokens_details is not None + assert result.completion_tokens_details.text_tokens == 20 + assert result.completion_tokens_details.audio_tokens is None + class TestResponsesAPIProviderSpecificParams: """