From e95b9b8015cba433e9eb1a32f46d1cab16105864 Mon Sep 17 00:00:00 2001 From: Rhys Date: Fri, 30 Jan 2026 10:44:56 +0700 Subject: [PATCH] fix(ResponseAPILoggingUtils): extract input tokens details as dict --- litellm/responses/utils.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/litellm/responses/utils.py b/litellm/responses/utils.py index 469eeb3da06..39aebb262fe 100644 --- a/litellm/responses/utils.py +++ b/litellm/responses/utils.py @@ -462,12 +462,17 @@ class ResponseAPILoggingUtils: completion_tokens: int = response_api_usage.output_tokens or 0 prompt_tokens_details: Optional[PromptTokensDetailsWrapper] = None if response_api_usage.input_tokens_details: - prompt_tokens_details = PromptTokensDetailsWrapper( - cached_tokens=getattr(response_api_usage.input_tokens_details, "cached_tokens", None), - audio_tokens=getattr(response_api_usage.input_tokens_details, "audio_tokens", None), - text_tokens=getattr(response_api_usage.input_tokens_details, "text_tokens", None), - image_tokens=getattr(response_api_usage.input_tokens_details, "image_tokens", None), - ) + if isinstance(response_api_usage.input_tokens_details, dict): + prompt_tokens_details = PromptTokensDetailsWrapper( + **response_api_usage.input_tokens_details + ) + else: + prompt_tokens_details = PromptTokensDetailsWrapper( + cached_tokens=getattr(response_api_usage.input_tokens_details, "cached_tokens", None), + audio_tokens=getattr(response_api_usage.input_tokens_details, "audio_tokens", None), + text_tokens=getattr(response_api_usage.input_tokens_details, "text_tokens", None), + image_tokens=getattr(response_api_usage.input_tokens_details, "image_tokens", None), + ) completion_tokens_details: Optional[CompletionTokensDetailsWrapper] = None output_tokens_details = getattr(response_api_usage, "output_tokens_details", None) if output_tokens_details: