From 103b3a9b816c817f70c73f757906c65c737ef9e0 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 10 Jul 2026 07:06:52 +0000 Subject: [PATCH] fix(vertex-ai): default missing native content roles --- .../vertex_ai/google_genai/transformation.py | 12 ++++++++-- .../google_genai/test_transformation.py | 24 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 tests/test_litellm/llms/vertex_ai/google_genai/test_transformation.py diff --git a/litellm/llms/vertex_ai/google_genai/transformation.py b/litellm/llms/vertex_ai/google_genai/transformation.py index c1120d9ab8b..b8b056b4bb4 100644 --- a/litellm/llms/vertex_ai/google_genai/transformation.py +++ b/litellm/llms/vertex_ai/google_genai/transformation.py @@ -82,10 +82,18 @@ class VertexAIGoogleGenAIConfig(GoogleGenAIConfig): if generate_content_config_dict: self._normalize_response_schema(generate_content_config_dict, model) - # Build the request in Google GenAI format that Vertex AI expects + vertex_contents = ( + [ + {**content, "role": content.get("role", "user")} if isinstance(content, dict) else content + for content in contents + ] + if isinstance(contents, list) + else contents + ) + result = { "model": model, - "contents": contents, + "contents": vertex_contents, } # Add tools if provided diff --git a/tests/test_litellm/llms/vertex_ai/google_genai/test_transformation.py b/tests/test_litellm/llms/vertex_ai/google_genai/test_transformation.py new file mode 100644 index 00000000000..bfbabc43c19 --- /dev/null +++ b/tests/test_litellm/llms/vertex_ai/google_genai/test_transformation.py @@ -0,0 +1,24 @@ +from litellm.llms.vertex_ai.google_genai.transformation import ( + VertexAIGoogleGenAIConfig, +) + + +def test_transform_generate_content_request_defaults_omitted_role(): + config = VertexAIGoogleGenAIConfig() + contents = [ + {"parts": [{"text": "Hello"}]}, + {"role": "model", "parts": [{"text": "Hi"}]}, + ] + + result = config.transform_generate_content_request( + model="gemini-2.5-flash", + contents=contents, + tools=None, + generate_content_config_dict={}, + ) + + assert result["contents"] == [ + {"role": "user", "parts": [{"text": "Hello"}]}, + {"role": "model", "parts": [{"text": "Hi"}]}, + ] + assert "role" not in contents[0]