From 4ed339b2fc2a0ffe590bbbb058816e86eae71062 Mon Sep 17 00:00:00 2001 From: Mukesh Dewangan <143334238+MukeshK17@users.noreply.github.com> Date: Sat, 7 Nov 2026 23:08:46 +0530 Subject: [PATCH] fix(vertex_ai): map missing image on Gemini image edit to BadRequestError (400) (#50244) --- .../vertex_ai/image_edit/vertex_gemini_transformation.py | 6 +++++- .../image_edit/test_vertex_ai_image_edit_transformation.py | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/litellm/llms/vertex_ai/image_edit/vertex_gemini_transformation.py b/litellm/llms/vertex_ai/image_edit/vertex_gemini_transformation.py index 0b90f74ea6d..3633bb68b50 100644 --- a/litellm/llms/vertex_ai/image_edit/vertex_gemini_transformation.py +++ b/litellm/llms/vertex_ai/image_edit/vertex_gemini_transformation.py @@ -166,7 +166,11 @@ class VertexAIGeminiImageEditConfig(BaseImageEditConfig, VertexLLM): ) -> tuple[dict[str, object], RequestFiles | None]: inline_parts: Final = self._prepare_inline_image_parts(image) if image else [] if not inline_parts: - raise ValueError("Vertex AI Gemini image edit requires at least one image.") + raise litellm.BadRequestError( + message="Vertex AI Gemini image edit requires at least one image.", + model=model, + llm_provider="vertex_ai", + ) # Build parts list with image and prompt (if provided) text_parts: Final[list[HttpxPartType]] = [{"text": prompt}] if prompt is not None and prompt != "" else [] diff --git a/tests/unit/llms/vertex_ai/image_edit/test_vertex_ai_image_edit_transformation.py b/tests/unit/llms/vertex_ai/image_edit/test_vertex_ai_image_edit_transformation.py index 60d7629276f..f36480ae7df 100644 --- a/tests/unit/llms/vertex_ai/image_edit/test_vertex_ai_image_edit_transformation.py +++ b/tests/unit/llms/vertex_ai/image_edit/test_vertex_ai_image_edit_transformation.py @@ -231,10 +231,10 @@ class TestVertexAIGeminiImageEditTransformation: ) def test_transform_image_edit_request_without_image_raises(self) -> None: - """Test that missing image raises ValueError""" + """Test that missing image raises BadRequestError with 400 status code""" optional_params = {} - with pytest.raises(ValueError, match="requires at least one image"): + with pytest.raises(litellm.BadRequestError, match="requires at least one image") as exc_info: self.config.transform_image_edit_request( model=self.model, prompt=self.prompt, @@ -243,6 +243,7 @@ class TestVertexAIGeminiImageEditTransformation: litellm_params=MagicMock(), headers={}, ) + assert exc_info.value.status_code == 400 def test_validate_environment_with_litellm_params(self) -> None: """Test validate_environment uses credentials from litellm_params"""