From e1a4e79bdafb7a3ddb9d842a04a9b9719fd4438d Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Fri, 12 Jun 2026 05:05:40 +0000 Subject: [PATCH] fix(gemini): forward toolConfig in image generation request body --- .../gemini/image_generation/transformation.py | 2 ++ .../vertex_gemini_transformation.py | 2 ++ ..._gemini_image_generation_transformation.py | 13 ++++++++++++ ...rtex_ai_image_generation_transformation.py | 20 +++++++++++++++++++ 4 files changed, 37 insertions(+) diff --git a/litellm/llms/gemini/image_generation/transformation.py b/litellm/llms/gemini/image_generation/transformation.py index 1c6774a261..6b190f538e 100644 --- a/litellm/llms/gemini/image_generation/transformation.py +++ b/litellm/llms/gemini/image_generation/transformation.py @@ -148,6 +148,8 @@ class GoogleImageGenConfig(BaseImageGenerationConfig): } if tools := optional_params.get("tools"): request_body["tools"] = tools + if tool_config := optional_params.get("toolConfig"): + request_body["toolConfig"] = tool_config return request_body else: # For other Imagen models, use the original Imagen format diff --git a/litellm/llms/vertex_ai/image_generation/vertex_gemini_transformation.py b/litellm/llms/vertex_ai/image_generation/vertex_gemini_transformation.py index 764a0e614a..2be32f8bea 100644 --- a/litellm/llms/vertex_ai/image_generation/vertex_gemini_transformation.py +++ b/litellm/llms/vertex_ai/image_generation/vertex_gemini_transformation.py @@ -253,6 +253,8 @@ class VertexAIGeminiImageGenerationConfig(BaseImageGenerationConfig, VertexLLM): if tools := optional_params.get("tools"): request_body["tools"] = tools + if tool_config := optional_params.get("toolConfig"): + request_body["toolConfig"] = tool_config return request_body diff --git a/tests/test_litellm/llms/gemini/test_gemini_image_generation_transformation.py b/tests/test_litellm/llms/gemini/test_gemini_image_generation_transformation.py index 5895ef77dd..3a480b0a63 100644 --- a/tests/test_litellm/llms/gemini/test_gemini_image_generation_transformation.py +++ b/tests/test_litellm/llms/gemini/test_gemini_image_generation_transformation.py @@ -276,6 +276,19 @@ def test_gemini_image_generation_preserves_tool_config_side_effect(): "retrievalConfig": {"latLng": {"latitude": 37.7, "longitude": -122.4}} } + request = config.transform_image_generation_request( + model="gemini-3.1-flash-image-preview", + prompt="Generate an image of a coffee shop nearby", + optional_params=mapped, + litellm_params={}, + headers={}, + ) + + assert request["tools"] == [{"googleMaps": {}}] + assert request["toolConfig"] == { + "retrievalConfig": {"latLng": {"latitude": 37.7, "longitude": -122.4}} + } + def test_gemini_image_generation_usage_without_output_details_treats_output_as_image(): config = GoogleImageGenConfig() diff --git a/tests/test_litellm/llms/vertex_ai/image_generation/test_vertex_ai_image_generation_transformation.py b/tests/test_litellm/llms/vertex_ai/image_generation/test_vertex_ai_image_generation_transformation.py index 5796a65861..275384afbe 100644 --- a/tests/test_litellm/llms/vertex_ai/image_generation/test_vertex_ai_image_generation_transformation.py +++ b/tests/test_litellm/llms/vertex_ai/image_generation/test_vertex_ai_image_generation_transformation.py @@ -157,6 +157,26 @@ class TestVertexAIGeminiImageGenerationConfig: ) assert request["tools"] == [{"googleSearch": {}}] + def test_transform_image_generation_request_forwards_tool_config(self): + """Test request transformation forwards toolConfig side-effects from tool mapping""" + mapped = self.config.map_openai_params( + {"tools": [{"googleMaps": {"latitude": 37.7, "longitude": -122.4}}]}, + {}, + "gemini-3.1-flash-image-preview", + False, + ) + request = self.config.transform_image_generation_request( + model="gemini-3.1-flash-image-preview", + prompt="Generate an image of a coffee shop nearby", + optional_params=mapped, + litellm_params={}, + headers={}, + ) + assert request["tools"] == [{"googleMaps": {}}] + assert request["toolConfig"] == { + "retrievalConfig": {"latLng": {"latitude": 37.7, "longitude": -122.4}} + } + def test_transform_image_generation_request_with_candidate_count(self): """Test request transformation with candidate_count""" request = self.config.transform_image_generation_request(