{"record":{"id":"b9615d2fa30f1626","repo":"BerriAI/litellm","slug":"model-needs-to-be-set-for-bedrock","errorCode":null,"errorMessage":"Model needs to be set for bedrock","messagePattern":"Model needs to be set for bedrock","errorType":"validation","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"litellm/images/main.py","lineNumber":486,"sourceCode":"            # Forward OpenAI organization if present (set by proxy pre-call utils)\n            organization: Final[str | None] = kwargs.get(\"organization\", None)\n            model_response = openai_chat_completions.image_generation(\n                model=model,\n                prompt=prompt,\n                timeout=timeout,\n                api_key=api_key or dynamic_api_key,\n                api_base=api_base,\n                logging_obj=litellm_logging_obj,\n                optional_params=optional_params,\n                model_response=model_response,\n                organization=organization,\n                aimg_generation=aimg_generation,\n                client=client,\n                headers=headers,\n            )\n        elif custom_llm_provider == \"bedrock\":\n            if model is None:\n                raise Exception(\"Model needs to be set for bedrock\")\n            model_response = bedrock_image_generation.image_generation(\n                model=model,\n                prompt=prompt,\n                timeout=timeout,\n                logging_obj=litellm_logging_obj,\n                optional_params=optional_params,\n                model_response=model_response,\n                aimg_generation=aimg_generation,\n                client=client,\n                api_base=api_base,\n                api_key=api_key,\n            )\n        elif custom_llm_provider in litellm._custom_providers:  # Assume custom LLM provider\n            # Get the Custom Handler\n            custom_handler: CustomLLM | None = None\n            for item in litellm.custom_provider_map:\n                if item[\"provider\"] == custom_llm_provider:\n                    custom_handler = item[\"custom_handler\"]","sourceCodeStart":468,"sourceCodeEnd":504,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/images/main.py#L468-L504","documentation":"The bedrock image route delegates to bedrock_image_generation.image_generation, which must build a signed boto3 request against a concrete Bedrock inference endpoint, so the model id (e.g. 'stability.sd3-large-v1:0', 'amazon.titan-image-generator-v1') is mandatory. As with other providers, litellm's dall-e-2 fallback only applies when neither model nor custom_llm_provider is given, so provider-without-model reaches this guard.","triggerScenarios":"litellm.image_generation(prompt='...', custom_llm_provider='bedrock') with no model; proxy Router model entry with custom_llm_provider='bedrock' and an empty model field; passing model=None explicitly with the bedrock provider kwarg.","commonSituations":"AWS proxy config where model_name is set for routing but the actual Bedrock model id under litellm_params is blank; assuming env credentials (AWS_ACCESS_KEY_ID etc.) are enough and model is optional; migrating an azure/openai config and forgetting the model line.","solutions":["Use the provider-prefixed form: litellm.image_generation(model='bedrock/stability.sd3-large-v1:0', prompt='...') with AWS credentials in the environment.","Or pass model='amazon.titan-image-generator-v2:0' together with custom_llm_provider='bedrock'.","Check your proxy/Router yaml: every bedrock deployment needs a concrete model id, not just model_name."],"exampleFix":"# before\nresp = litellm.image_generation(prompt=\"a cat\", custom_llm_provider=\"bedrock\")\n# Exception: Model needs to be set for bedrock\n\n# after\nresp = litellm.image_generation(model=\"bedrock/stability.sd3-large-v1:0\", prompt=\"a cat\")","handlingStrategy":"validation","validationCode":"def call_bedrock_image(prompt: str, model: str | None = None):\n    model = model or \"bedrock/stability.sd3-large-v1:0\"\n    if not isinstance(model, str) or not model.strip():\n        raise ValueError(\"model is required for bedrock image generation (e.g. 'bedrock/stability.sd3-large-v1:0')\")\n    return litellm.image_generation(model=model, prompt=prompt)","typeGuard":"def is_bedrock_image_ready(model: str | None, custom_llm_provider: str | None) -> bool:\n    if custom_llm_provider == \"bedrock\":\n        return isinstance(model, str) and model.strip() != \"\"\n    return True","tryCatchPattern":"try:\n    resp = litellm.image_generation(prompt=p, custom_llm_provider=\"bedrock\")\nexcept Exception as e:\n    if \"Model needs to be set for bedrock\" in str(e):\n        raise ValueError(\"set model='bedrock/<model-id>' and AWS credentials\") from e\n    raise","preventionTips":["Always pass concrete Bedrock model ids (e.g. amazon.titan-image-generator-v2:0) in prefixed form.","Lint proxy configs so bedrock deployments have non-empty model fields.","Keep AWS credential checks alongside the model check in one pre-flight helper."],"tags":["litellm","image-generation","bedrock","aws","missing-argument"],"backgroundTag":"missing-required-argument","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}