BerriAI/litellm · error · NotImplementedError
ImageVariationConfig implements 'transform_response_image_va
Error message
ImageVariationConfig implements 'transform_response_image_variation' for image variation models
What it means
Companion stub to the request-side one: ImageVariationConfig does not implement transform_image_generation_response, so parsing a generation API response through a variation config raises NotImplementedError before any response mapping occurs. It marks the generation response path as unsupported for variation-only configs.
Source
Thrown at litellm/llms/base_llm/image_generation/transformation.py:98
) -> dict:
raise NotImplementedError(
"ImageVariationConfig implementa 'transform_request_image_variation' for image variation models"
)
def transform_image_generation_response(
self,
model: str,
raw_response: httpx.Response,
model_response: ImageResponse,
logging_obj: LiteLLMLoggingObj,
request_data: dict,
optional_params: dict,
litellm_params: dict,
encoding: Any,
api_key: str | None = None,
json_mode: bool | None = None,
) -> ImageResponse:
raise NotImplementedError(
"ImageVariationConfig implements 'transform_response_image_variation' for image variation models"
)
def use_multipart_form_data(self) -> bool:
"""
Returns True if this provider requires multipart/form-data instead of JSON.
Override this method in subclasses that need form-data (e.g., Stability AI).
"""
return False
View on GitHub (pinned to 6c2dcb801b)
Solutions
- Point the model at a config that implements transform_image_generation_response (a generation config).
- Implement the method in your subclass to map the provider's generation response to ImageResponse.
- Fix the config-selection logic so variation configs are never used on the generation path.
- Check provider registry entries (provider config mapping) for copy-paste errors.
Example fix
# before
class MyProviderConfig(ImageVariationConfig): # no generation response mapping
...
# after
class MyProviderConfig(ImageVariationConfig):
def transform_image_generation_response(self, model, raw_response, model_response, logging_obj, request_data, optional_params, litellm_params, encoding, api_key=None, json_mode=None):
data = raw_response.json()
model_response.data = [{'url': item['url']} for item in data.get('data', [])]
return model_response Defensive patterns
Strategy: type-guard
Type guard
def implements_generation_response(config) -> bool:
return type(config).transform_image_generation_response is not \
BaseImageGenerationConfig.transform_image_generation_response Try / catch
try:
resp = litellm.image_generation(...)
except NotImplementedError as e:
if 'transform_response_image_variation' in str(e) or 'transform_image_generation_response' in str(e):
raise ModelConfigError('config/response-path mismatch') from e
raise Prevention
- Keep generation and variation configs in separate classes from the start.
- Smoke-test each provider registration end-to-end (request AND response) in CI.
- Check overrides at registration time using introspection like the type guard above.
When it happens
Trigger: A variation config is selected for a model and the response handler (generic for image generation) calls transform_image_generation_response — typically after a generation request already succeeded at HTTP level, or when a handler pre-validates config capabilities.
Common situations: Same root cause as the request stub: mis-registered config class, dispatch bug after refactor, or a provider that only wired variation methods being used for generation.
Related errors
- ImageVariationConfig implementa 'transform_request_image_var
- ImageVariationConfig implements 'transform_response_image_va
- ImageVariationConfig implementa 'transform_request_image_var
- transform_ocr_response must be implemented by provider
- Task type {task_type} is not supported
AI-assisted analysis of BerriAI/litellm@6c2dcb801b (2026-08-15).
Data as JSON: /api/errors/4a03a7f77cf0be3e.
Report an issue: GitHub.