From 098cca6d5dc6f7079423613e3dfe66363e65141c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 8 Jun 2026 07:40:10 +0000 Subject: [PATCH] Use assembled model for streaming metadata hook --- .../streaming_chunk_builder_utils.py | 7 +--- .../test_streaming_chunk_builder_utils.py | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/litellm/litellm_core_utils/streaming_chunk_builder_utils.py b/litellm/litellm_core_utils/streaming_chunk_builder_utils.py index f1de30fa72d..2cfe7e7af5f 100644 --- a/litellm/litellm_core_utils/streaming_chunk_builder_utils.py +++ b/litellm/litellm_core_utils/streaming_chunk_builder_utils.py @@ -88,12 +88,7 @@ class ChunkProcessor: if not chunks: return - first_chunk = chunks[0] - model = ( - first_chunk.get("model") - if isinstance(first_chunk, dict) - else getattr(first_chunk, "model", None) - ) + model = getattr(response, "model", None) if not model: return diff --git a/tests/test_litellm/litellm_core_utils/test_streaming_chunk_builder_utils.py b/tests/test_litellm/litellm_core_utils/test_streaming_chunk_builder_utils.py index 22383deb569..85661a9ecb9 100644 --- a/tests/test_litellm/litellm_core_utils/test_streaming_chunk_builder_utils.py +++ b/tests/test_litellm/litellm_core_utils/test_streaming_chunk_builder_utils.py @@ -667,6 +667,44 @@ def test_stream_chunk_builder_propagates_vertex_ai_metadata_from_chunks(): assert dumped["vertex_ai_url_context_metadata"] == url_context_metadata +def test_stream_chunk_builder_uses_assembled_model_for_provider_metadata(): + grounding_metadata = [{"webSearchQueries": ["weather in SF"]}] + + chunk1 = ModelResponseStream( + id="chatcmpl-vertex-router", + created=1, + model="gpt-4o", + object="chat.completion.chunk", + choices=[ + StreamingChoices( + finish_reason=None, + index=0, + delta=Delta(content="The weather", role="assistant"), + ) + ], + ) + chunk2 = ModelResponseStream( + id="chatcmpl-vertex-router", + created=1, + model="gemini-2.5-flash", + object="chat.completion.chunk", + choices=[ + StreamingChoices( + finish_reason="stop", + index=0, + delta=Delta(content=" is sunny.", role=None), + ) + ], + ) + setattr(chunk2, "vertex_ai_grounding_metadata", grounding_metadata) + chunk2._hidden_params["vertex_ai_grounding_metadata"] = grounding_metadata + + response = stream_chunk_builder(chunks=[chunk1, chunk2]) + assert response is not None + assert response.model == "gemini-2.5-flash" + assert getattr(response, "vertex_ai_grounding_metadata") == grounding_metadata + + def test_stream_chunk_builder_propagates_vertex_ai_metadata_from_dict_chunks(): """Dict snapshot chunks (model_dump) should also propagate Vertex AI metadata.""" chunk_dict = ModelResponseStream(