From d5f76a4da4719193aaf784e894ebac864426ef72 Mon Sep 17 00:00:00 2001 From: Alexsander Hamir Date: Wed, 14 Jan 2026 11:42:54 -0800 Subject: [PATCH] fix: handle ResponseAPIUsage objects in get_usage_from_response_obj - Fix bug where ResponseAPIUsage objects from ResponsesAPIResponse were not being transformed - Add explicit handling for ResponseAPIUsage objects (not just dicts) - Use _is_response_api_usage() helper to handle both ResponseAPIUsage objects and dicts - Remove problematic 'or {}' fallback that was converting None to empty dict This fixes the test failure where prompt_tokens was 0 instead of 8 for ResponsesAPIResponse objects. --- litellm/litellm_core_utils/litellm_logging.py | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/litellm/litellm_core_utils/litellm_logging.py b/litellm/litellm_core_utils/litellm_logging.py index fa1e9d70adf..bf47619d5ae 100644 --- a/litellm/litellm_core_utils/litellm_logging.py +++ b/litellm/litellm_core_utils/litellm_logging.py @@ -4506,12 +4506,11 @@ class StandardLoggingPayloadSetup: ) if isinstance(response_obj, dict): - usage = response_obj.get("usage", None) or {} + usage = response_obj.get("usage", None) else: - usage = getattr(response_obj, "usage", None) or {} - if usage is None or ( - not isinstance(usage, dict) and not isinstance(usage, Usage) - ): + usage = getattr(response_obj, "usage", None) + + if usage is None: return Usage( prompt_tokens=0, completion_tokens=0, @@ -4519,13 +4518,12 @@ class StandardLoggingPayloadSetup: ) elif isinstance(usage, Usage): return usage + elif ResponseAPILoggingUtils._is_response_api_usage(usage): + # Handle ResponseAPIUsage (object or dict) from ResponsesAPIResponse + return ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( + usage + ) elif isinstance(usage, dict): - if ResponseAPILoggingUtils._is_response_api_usage(usage): - return ( - ResponseAPILoggingUtils._transform_response_api_usage_to_chat_usage( - usage - ) - ) return Usage(**usage) raise ValueError(f"usage is required, got={usage} of type {type(usage)}")