From ef9a8d86d9cdae1d873279a6d0b205a917467556 Mon Sep 17 00:00:00 2001 From: Liam McDonald Date: Tue, 12 May 2026 14:08:11 -0700 Subject: [PATCH] style: Black-format Realtime usage and completion usage merge Resolve combine_usage_objects and responses/utils wrapping for CI black --check. Restore model_fields comments above completion_tokens_details merge loop. Co-authored-by: Cursor --- litellm/cost_calculator.py | 13 +++++-------- litellm/responses/utils.py | 14 +++++++++++--- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/litellm/cost_calculator.py b/litellm/cost_calculator.py index 041b4873d87..a2e823bb83a 100644 --- a/litellm/cost_calculator.py +++ b/litellm/cost_calculator.py @@ -2226,20 +2226,17 @@ class BaseTokenUsageProcessor: CompletionTokensDetailsWrapper() ) + # Check what keys exist in the model's completion_tokens_details + # Access model_fields on the class, not the instance, to avoid Pydantic 2.11+ deprecation warnings for attr in type(usage.completion_tokens_details).model_fields: if not attr.startswith("_") and not callable( getattr(usage.completion_tokens_details, attr) ): current_val = ( - getattr(combined.completion_tokens_details, attr, 0) - or 0 + getattr(combined.completion_tokens_details, attr, 0) or 0 ) - new_val = ( - getattr(usage.completion_tokens_details, attr, 0) or 0 - ) - if new_val is not None and isinstance( - new_val, (int, float) - ): + new_val = getattr(usage.completion_tokens_details, attr, 0) or 0 + if new_val is not None and isinstance(new_val, (int, float)): setattr( combined.completion_tokens_details, attr, diff --git a/litellm/responses/utils.py b/litellm/responses/utils.py index 5ee91c70483..5e0b8f176c5 100644 --- a/litellm/responses/utils.py +++ b/litellm/responses/utils.py @@ -916,10 +916,18 @@ class ResponseAPILoggingUtils: if isinstance(usage_input, dict): usage_input = dict(usage_input) # shallow copy; avoid mutating caller # Realtime *_token_details → *_tokens_details when unset. - if usage_input.get("input_tokens_details") is None and "input_token_details" in usage_input: + if ( + usage_input.get("input_tokens_details") is None + and "input_token_details" in usage_input + ): usage_input["input_tokens_details"] = usage_input["input_token_details"] - if usage_input.get("output_tokens_details") is None and "output_token_details" in usage_input: - usage_input["output_tokens_details"] = usage_input["output_token_details"] + if ( + usage_input.get("output_tokens_details") is None + and "output_token_details" in usage_input + ): + usage_input["output_tokens_details"] = usage_input[ + "output_token_details" + ] total_tokens = usage_input.get("total_tokens") if total_tokens is None: input_tokens = usage_input.get("input_tokens")