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
- Read the interpolated exception message (f'Failed to generate image: {ex}') for the specific API error
- Verify the model name (e.g., dall-e-3) and size/quality parameters are valid for that model
- For content-filter rejections, rephrase the prompt
- 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
- Validate image parameters (size, quality, model) against the model spec before calling
- Pre-screen prompts for prohibited content to avoid content-filter rejections
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
- Failed to edit image: {ex}
- The generated image has no valid content.
- Invalid image size: {size.width}x{size.height}.
- {type(self)} service failed to generate embeddings
- {type(self)} service failed to transcribe audio
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/156e3475f2350550.
Report an issue: GitHub.