BerriAI/litellm · error · Exception

Model needs to be set for bedrock

Error message

Model needs to be set for bedrock

What it means

Bedrock image generation (e.g. Titan Image, Stability on Bedrock, Nova Canvas) is routed to a Bedrock-specific handler that performs AWS SigV4 signing (litellm/images/main.py:486-497). The model id is required to build the invoke-model URL, so model=None raises this Exception.

Source

Thrown at litellm/images/main.py:486

            # Forward OpenAI organization if present (set by proxy pre-call utils)
            organization: Final[str | None] = kwargs.get("organization", None)
            model_response = openai_chat_completions.image_generation(
                model=model,
                prompt=prompt,
                timeout=timeout,
                api_key=api_key or dynamic_api_key,
                api_base=api_base,
                logging_obj=litellm_logging_obj,
                optional_params=optional_params,
                model_response=model_response,
                organization=organization,
                aimg_generation=aimg_generation,
                client=client,
                headers=headers,
            )
        elif custom_llm_provider == "bedrock":
            if model is None:
                raise Exception("Model needs to be set for bedrock")
            model_response = bedrock_image_generation.image_generation(
                model=model,
                prompt=prompt,
                timeout=timeout,
                logging_obj=litellm_logging_obj,
                optional_params=optional_params,
                model_response=model_response,
                aimg_generation=aimg_generation,
                client=client,
                api_base=api_base,
                api_key=api_key,
            )
        elif custom_llm_provider in litellm._custom_providers:  # Assume custom LLM provider
            # Get the Custom Handler
            custom_handler: CustomLLM | None = None
            for item in litellm.custom_provider_map:
                if item["provider"] == custom_llm_provider:
                    custom_handler = item["custom_handler"]

View on GitHub (pinned to 6c2dcb801b)

Solutions

  1. Pass the full Bedrock model id, e.g. model='bedrock/amazon.titan-image-generator-v1' or 'bedrock/stability.stable-diffusion-xl-v1'
  2. If specifying custom_llm_provider='bedrock' separately, still pass model='amazon.nova-canvas-v1' etc.
  3. Confirm AWS credentials (AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_REGION_NAME) are set so the call proceeds after the model fix

Example fix

# before
litellm.image_generation(prompt="a cat", custom_llm_provider="bedrock")

# after
litellm.image_generation(model="bedrock/amazon.titan-image-generator-v1", prompt="a cat")
Defensive patterns

Strategy: validation

Validate before calling

def validate_bedrock_image_call(model: str | None) -> str:
    if not model:
        raise ValueError("model is required for bedrock image generation, e.g. 'bedrock/amazon.titan-image-generator-v1'")
    return model

Type guard

def has_model(model: str | None) -> bool:
    return isinstance(model, str) and model.strip() != ''

Try / catch

try:
    r = litellm.image_generation(model=m, prompt=p, custom_llm_provider="bedrock")
except Exception as e:
    if "Model needs to be set for bedrock" in str(e):
        raise ValueError("pass model='bedrock/<model-id>'") from e
    raise

Prevention

When it happens

Trigger: Calling litellm.image_generation(prompt=..., custom_llm_provider='bedrock') with no model; or the model string failed provider parsing so model resolved to None; or passing model=None explicitly.

Common situations: Developer omits model expecting a default; or uses 'bedrock/' with an empty model suffix; or copies an OpenAI-style call (where dall-e defaults exist) to Bedrock.

Related errors


AI-assisted analysis of BerriAI/litellm@6c2dcb801b (2026-08-15). Data as JSON: /api/errors/b9615d2fa30f1626. Report an issue: GitHub.