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

  1. Point the model at a config that implements transform_image_generation_response (a generation config).
  2. Implement the method in your subclass to map the provider's generation response to ImageResponse.
  3. Fix the config-selection logic so variation configs are never used on the generation path.
  4. 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

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


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