{"record":{"id":"6f8a59d0b5c1e415","repo":"BerriAI/litellm","slug":"unable-to-get-image-response-please-pass-a-valid","errorCode":null,"errorMessage":"Unable to get Image Response. Please pass a valid llm_provider.","messagePattern":"Unable to get Image Response\\. Please pass a valid llm_provider\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/images/main.py","lineNumber":118,"sourceCode":"        # Add the context to the function\n        ctx: Final = contextvars.copy_context()\n        func_with_context: Final = partial(ctx.run, func)\n\n        _, custom_llm_provider, _, _ = get_llm_provider(model=model, api_base=kwargs.get(\"api_base\", None))\n\n        # Await normally\n        init_response: Final = await loop.run_in_executor(None, func_with_context)\n\n        response: ImageResponse | None = None\n        if isinstance(init_response, dict):\n            response = ImageResponse(**init_response)\n        elif isinstance(init_response, ImageResponse):  ## CACHING SCENARIO\n            response = init_response\n        elif asyncio.iscoroutine(init_response):\n            response = await init_response\n\n        if response is None:\n            raise ValueError(\"Unable to get Image Response. Please pass a valid llm_provider.\")\n\n        return response\n    except Exception as e:\n        custom_llm_provider = custom_llm_provider or \"openai\"\n        raise exception_type(\n            model=model,\n            custom_llm_provider=custom_llm_provider,\n            original_exception=e,\n            completion_kwargs=args,\n            extra_kwargs=kwargs,\n        )\n\n\n# fmt: off\n\n# Overload for when aimg_generation=True (returns Coroutine)\n@overload\ndef image_generation(","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/images/main.py#L100-L136","documentation":"In image generation, the provider function's result is normalized: a dict is unpacked into ImageResponse, an ImageResponse passes through (cache hits), and a pending coroutine is awaited. If after all that response is still None — the provider returned nothing recognizable — LiteLLM raises ValueError and then re-raises it through exception_type with the provider's error mapping.","triggerScenarios":"Calling litellm.image_generation with a custom_llm_provider that has no real image implementation (returns None), a provider adapter that silently swallows errors and returns None, or kwargs (e.g. async flags) that route to a code path which never produces a response.","commonSituations":"Passing an unsupported provider/model for image generation (e.g. a text-only provider); version mismatches where a provider class exists but its image method is a stub; mocking provider calls to return None in tests.","solutions":["Verify image support: use a model/provider with real image support (e.g. openai/dall-e-3, azure image models, gemini image models, stability)","Set custom_llm_provider correctly for your model string instead of omitting/typoing it","Upgrade litellm — image adapters that previously returned None for some paths have been filled in over releases","Reproduce with litellm.image_generation(model='<provider>/<image-model>', prompt=..., custom_llm_provider='<provider>') and inspect the provider call if it still fails"],"exampleFix":"# before\nr = litellm.image_generation(model='some-oss-model', prompt='a cat')  # provider returns None\n\n# after\nr = litellm.image_generation(model='dall-e-3', prompt='a cat', custom_llm_provider='openai')","handlingStrategy":"fallback","validationCode":"SUPPORTED_IMAGE_PROVIDERS = {\"openai\", \"azure\", \"gemini\", \"stability\", \"bedrock\", \"vertex_ai\"}\nif custom_llm_provider not in SUPPORTED_IMAGE_PROVIDERS:\n    raise ValueError(f\"{custom_llm_provider} has no image generation support\")","typeGuard":"def provider_supports_images(provider: str) -> bool:\n    import litellm\n    return provider in getattr(litellm, \"image_providers\", {\"openai\", \"azure\", \"gemini\", \"stability\"})","tryCatchPattern":"try:\n    r = litellm.image_generation(model=m, prompt=p, custom_llm_provider=prov)\nexcept Exception as e:\n    if \"Unable to get Image Response\" in str(e):\n        r = litellm.image_generation(model=\"dall-e-3\", prompt=p, custom_llm_provider=\"openai\")  # fallback","preventionTips":["Always pass custom_llm_provider for image calls","Verify the model actually serves images before wiring it in"],"tags":["images","provider-support","configuration"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}