microsoft/semantic-kernel · error · ServiceResponseException

Failed to generate image: {ex}

Error message

Failed to generate image: {ex}

What it means

Raised as ServiceResponseException in _send_text_to_image_request when any exception occurs during client.images.generate. Unlike other handlers, this error message interpolates the exception directly into the string rather than passing it as the __cause__ positional arg (though `from ex` still chains it). The wrapped error reveals the image-generation failure reason.

Source

Thrown at python/semantic_kernel/connectors/ai/open_ai/services/open_ai_handler.py:132

            self.store_usage(response)
            return [x.embedding for x in response.data]
        except Exception as ex:
            raise ServiceResponseException(
                f"{type(self)} service failed to generate embeddings",
                ex,
            ) from ex

    async def _send_text_to_image_request(self, settings: OpenAITextToImageExecutionSettings) -> ImagesResponse:
        """Send a request to the OpenAI text to image endpoint."""
        try:
            response: ImagesResponse = await self.client.images.generate(
                **settings.prepare_settings_dict(),
            )
            self.store_usage(response)
            return response
        except Exception as ex:
            raise ServiceResponseException(f"Failed to generate image: {ex}") from ex

    async def _send_image_edit_request(
        self,
        image: list[FileTypes],
        settings: OpenAITextToImageExecutionSettings,
        mask: FileTypes | Omit = omit,
    ) -> ImagesResponse:
        """Send a request to the OpenAI image edit endpoint.

        Args:
            image: List of image files to edit. Accepts file paths or bytes.
            settings: Image edit execution settings.
            mask: Optional mask image. Accepts file path or bytes.

        Returns:
            ImagesResponse: The response from the image edit API.
        """
        try:

View on GitHub (pinned to c028a0c7dc)

Solutions

  1. Read the interpolated exception message (f'Failed to generate image: {ex}') for the specific API error
  2. Verify the model name (e.g., dall-e-3) and size/quality parameters are valid for that model
  3. For content-filter rejections, rephrase the prompt
  4. For rate limits, reduce request frequency or implement backoff

Example fix

# before
settings = OpenAITextToImageExecutionSettings(ai_model_id='dall-e-3', size='1024x1024')
# after — also validate the prompt is not empty
if not prompt.strip():
    raise ValueError('Prompt cannot be empty for image generation')
settings = OpenAITextToImageExecutionSettings(ai_model_id='dall-e-3', size='1024x1024')
Defensive patterns

Strategy: try-catch

Validate before calling

VALID_SIZES_DALLE3 = {'1024x1024', '1792x1024', '1024x1792'}
if settings.size and settings.size not in VALID_SIZES_DALLE3:
    raise ValueError(f'Invalid size {settings.size}; valid: {VALID_SIZES_DALLE3}')

Try / catch

from semantic_kernel.exceptions import ServiceResponseException

try:
    response = await service._send_text_to_image_request(settings)
except ServiceResponseException as e:
    logger.error('Image generation failed: %s', e)
    raise

Prevention

When it happens

Trigger: Calling text-to-image generation with invalid parameters: unsupported image model, prompt that triggers content filter, invalid size/quality parameters, rate limit, or network failure during client.images.generate.

Common situations: Using DALL-E with an unsupported size parameter; prompt flagged by content moderation; model name misspelled; rate limit from too many image generation requests; quota exhausted for image API.

Related errors


AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13). Data as JSON: /api/errors/156e3475f2350550. Report an issue: GitHub.