From 0664604fdaf386555f7eece0dc48e9b80e28df4b Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Thu, 19 Feb 2026 08:47:09 +0530 Subject: [PATCH] Fix:test_standard_logging_payload_stream_usage --- litellm/litellm_core_utils/streaming_handler.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/litellm/litellm_core_utils/streaming_handler.py b/litellm/litellm_core_utils/streaming_handler.py index 46e95304cb..7a6752fbff 100644 --- a/litellm/litellm_core_utils/streaming_handler.py +++ b/litellm/litellm_core_utils/streaming_handler.py @@ -1931,11 +1931,16 @@ class CustomStreamWrapper: hasattr(processed_chunk, "usage") and getattr(processed_chunk, "usage", None) is not None ): - # Strip usage from the outgoing chunk so - # model_dump_json(exclude_none=True) drops it. - # The copy in self.chunks retains usage for - # calculate_total_usage(). - processed_chunk.usage = None # type: ignore + # Strip usage from the outgoing chunk so it's not sent twice + # (once in the chunk, once in _hidden_params). + # Create a new object without usage, matching sync behavior. + # The copy in self.chunks retains usage for calculate_total_usage(). + obj_dict = processed_chunk.model_dump() + if "usage" in obj_dict: + del obj_dict["usage"] + processed_chunk = self.model_response_creator( + chunk=obj_dict, hidden_params=processed_chunk._hidden_params + ) is_empty = is_model_response_stream_empty( model_response=cast(ModelResponseStream, processed_chunk) )