From 5bde5d07582e979a4effdc8e2d8620db1d8fb754 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Tue, 28 Oct 2025 11:43:39 +0530 Subject: [PATCH 1/2] fix image edit method --- .../llms/vertex_ai/gemini/transformation.py | 2 +- .../vertex_ai/gemini/test_transformation.py | 43 ++++++++++++++++++- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/litellm/llms/vertex_ai/gemini/transformation.py b/litellm/llms/vertex_ai/gemini/transformation.py index 4f84586cfc19..05d371f2dc3a 100644 --- a/litellm/llms/vertex_ai/gemini/transformation.py +++ b/litellm/llms/vertex_ai/gemini/transformation.py @@ -473,7 +473,7 @@ def _transform_request_body( labels = {k: v for k, v in rm.items() if isinstance(v, str)} filtered_params = { - k: v for k, v in optional_params.items() if k in config_fields + k: v for k, v in optional_params.items() if _get_equivalent_key(k, config_fields) } generation_config: Optional[GenerationConfig] = GenerationConfig( diff --git a/tests/litellm/llms/vertex_ai/gemini/test_transformation.py b/tests/litellm/llms/vertex_ai/gemini/test_transformation.py index 139df0d6f09b..a0f24376614a 100644 --- a/tests/litellm/llms/vertex_ai/gemini/test_transformation.py +++ b/tests/litellm/llms/vertex_ai/gemini/test_transformation.py @@ -151,5 +151,44 @@ async def test__transform_request_body_image_config(): rb: RequestBody = transformation._transform_request_body(**transform_request_params) - assert "imageConfig" in rb - assert rb["imageConfig"] == {"aspectRatio": "16:9"} \ No newline at end of file + assert "generationConfig" in rb + assert "imageConfig" in rb["generationConfig"] + assert rb["generationConfig"]["imageConfig"] == {"aspectRatio": "16:9"} + + +@pytest.mark.asyncio +async def test__transform_request_body_image_config_snake_case(): + """ + Test that Vertex AI Gemini supports the image_config parameter (snake_case) for gemini-2.5-flash-image model. + This should be transformed to imageConfig with aspectRatio. + """ + model = "gemini-2.5-flash-image" + messages = [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme" + } + ] + } + ] + optional_params = { + "image_config": {"aspect_ratio": "16:9"} + } + litellm_params = {} + transform_request_params = { + "messages": messages, + "model": model, + "optional_params": optional_params, + "custom_llm_provider": "gemini", + "litellm_params": litellm_params, + "cached_content": None, + } + + rb: RequestBody = transformation._transform_request_body(**transform_request_params) + + assert "generationConfig" in rb + assert "image_config" in rb["generationConfig"] + assert rb["generationConfig"]["image_config"] == {"aspect_ratio": "16:9"} \ No newline at end of file From 82f4ba1b4eca780e47fee3eec14803581431b255 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Tue, 28 Oct 2025 11:52:24 +0530 Subject: [PATCH 2/2] fix mypy error --- litellm/llms/vertex_ai/gemini/transformation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/llms/vertex_ai/gemini/transformation.py b/litellm/llms/vertex_ai/gemini/transformation.py index 05d371f2dc3a..08c91a6fad18 100644 --- a/litellm/llms/vertex_ai/gemini/transformation.py +++ b/litellm/llms/vertex_ai/gemini/transformation.py @@ -473,7 +473,7 @@ def _transform_request_body( labels = {k: v for k, v in rm.items() if isinstance(v, str)} filtered_params = { - k: v for k, v in optional_params.items() if _get_equivalent_key(k, config_fields) + k: v for k, v in optional_params.items() if _get_equivalent_key(k, set(config_fields)) } generation_config: Optional[GenerationConfig] = GenerationConfig(