{"record":{"id":"232fb4ad3e052dc1","repo":"BerriAI/litellm","slug":"vertex-ai-imagen-image-edit-requires-a-prompt","errorCode":null,"errorMessage":"Vertex AI Imagen image edit requires a prompt.","messagePattern":"Vertex AI Imagen image edit requires a prompt\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/vertex_ai/image_edit/vertex_imagen_transformation.py","lineNumber":163,"sourceCode":"\n    def transform_image_edit_request(\n        self,\n        model: str,\n        prompt: str | None,\n        image: FileTypes | None,\n        image_edit_optional_request_params: dict[str, Any],\n        litellm_params: GenericLiteLLMParams,\n        headers: dict,\n    ) -> tuple[dict[str, Any], RequestFiles | None]:\n        # Prepare reference images in the correct Imagen format\n        if image is None:\n            raise ValueError(\"Vertex AI Imagen image edit requires at least one reference image.\")\n        reference_images: Final = self._prepare_reference_images(image, image_edit_optional_request_params)\n        if not reference_images:\n            raise ValueError(\"Vertex AI Imagen image edit requires at least one reference image.\")\n\n        if prompt is None:\n            raise ValueError(\"Vertex AI Imagen image edit requires a prompt.\")\n\n        # Correct Imagen instances format\n        instances: Final = [{\"prompt\": prompt, \"referenceImages\": reference_images}]\n\n        # Extract OpenAI parameters and set sensible defaults for Vertex AI-specific parameters\n        sample_count: Final = image_edit_optional_request_params.get(\"sampleCount\", 1)\n        # Use sensible defaults for Vertex AI-specific parameters (not exposed to users)\n        edit_mode: Final = \"EDIT_MODE_INPAINT_INSERTION\"  # Default edit mode\n        base_steps: Final = 50  # Default number of steps\n\n        # Imagen parameters with correct structure\n        parameters: Final = {\n            \"sampleCount\": sample_count,\n            \"editMode\": edit_mode,\n            \"editConfig\": {\"baseSteps\": base_steps},\n        }\n\n        # Set default values for Vertex AI-specific parameters (not configurable by users via OpenAI API)","sourceCodeStart":145,"sourceCodeEnd":181,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/llms/vertex_ai/image_edit/vertex_imagen_transformation.py#L145-L181","documentation":"Every Imagen edit instance is {'prompt': ..., 'referenceImages': [...]}; the API has no prompt-less edit. After reference images are validated, the transformer checks prompt and raises if it is None (kwarg omitted). Note the check is strict None only — an empty string '' passes this local guard and is sent upstream, where Vertex AI decides.","triggerScenarios":"litellm.image_edit(model='vertex_ai/imagen-...', image=f) with no prompt kwarg; a proxy route that forwards the file but drops an empty prompt field so it deserializes to None; prompt=prompt or None patterns that collapse '' to None.","commonSituations":"Treating prompt as optional because Gemini edit tolerates prompt=None; form handlers converting empty textarea values to None instead of ''; request models using Optional[str] defaults of None.","solutions":["Always send a non-empty instruction string as prompt for Imagen edits","Map empty UI input to a sensible default prompt instead of None (e.g. prompt or 'edit this image')","Validate prompt presence in your request schema (min_length=1) before calling litellm"],"exampleFix":"# before\nresp = litellm.image_edit(\n    model='vertex_ai/imagen-3.0-capability-001',\n    image=open('cat.png', 'rb').read(),\n)  # prompt omitted -> raises\n\n# after\nresp = litellm.image_edit(\n    model='vertex_ai/imagen-3.0-capability-001',\n    prompt='remove the background',\n    image=open('cat.png', 'rb').read(),\n)","handlingStrategy":"validation","validationCode":"if prompt is None:\n    raise ValueError('imagen edit requires a prompt')\n# pydantic: prompt: str = Field(min_length=1)","typeGuard":null,"tryCatchPattern":"try:\n    resp = litellm.image_edit(model='vertex_ai/imagen-3.0-capability-001', prompt=prompt, image=img)\nexcept ValueError as e:\n    if 'requires a prompt' in str(e):\n        return bad_request('prompt is required')\n    raise","preventionTips":["Declare prompt as a required str (not Optional) in request models for imagen edit routes","Avoid 'prompt or None' coercions that turn empty strings into None","Default empty UI input to a meaningful instruction instead of dropping the field"],"tags":["vertex-ai","imagen","image-edit","input-validation","missing-parameter"],"backgroundTag":"missing-required-parameter","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}