{"record":{"id":"79a4c40d172eb644","repo":"microsoft/semantic-kernel","slug":"failed-to-generate-image","errorCode":null,"errorMessage":"Failed to generate image.","messagePattern":"Failed to generate image\\.","errorType":"exception","errorClass":"ServiceResponseException","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/connectors/ai/open_ai/services/open_ai_text_to_image_base.py","lineNumber":72,"sourceCode":"            if settings.size and not settings.size.height:\n                settings.size.height = height\n        if not settings.size and width and height:\n            settings.size = ImageSize(width=width, height=height)\n\n        if not settings.prompt:\n            settings.prompt = description\n\n        if not settings.prompt:\n            raise ServiceInvalidRequestError(\"Prompt is required.\")\n\n        if not settings.ai_model_id:\n            settings.ai_model_id = self.ai_model_id\n\n        response = await self._send_request(settings)\n\n        assert isinstance(response, ImagesResponse)  # nosec\n        if not response.data or not (response.data[0].url or response.data[0].b64_json):\n            raise ServiceResponseException(\"Failed to generate image.\")\n\n        return response.data[0].url or response.data[0].b64_json  # type: ignore[return-value]\n\n    async def generate_images(\n        self,\n        prompt: str,\n        settings: PromptExecutionSettings | None = None,\n        **kwargs: Any,\n    ) -> list[str]:\n        \"\"\"Generate one or more images from text. Returns URLs or base64-encoded images.\n\n        Args:\n            prompt: Description of the image(s) to generate.\n            settings: Execution settings for the prompt.\n            kwargs: Additional arguments, check the openai images.generate documentation for the supported arguments.\n\n        Returns:\n            list[str]: Image URLs or base64-encoded images.","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/ai/open_ai/services/open_ai_text_to_image_base.py#L54-L90","documentation":"Raised by the deprecated generate_image method after the OpenAI images API returns. It checks that response.data exists and that its first element carries either a url or b64_json; if data is empty/None or the first image has neither field, it throws ServiceResponseException. This signals the upstream API returned an unusable payload.","triggerScenarios":"The OpenAI image endpoint returned a 200 but with an empty data array, or response.data[0] has neither url nor b64_json (e.g. a content-filtered or partially-flagged response, or an unexpected response shape from a custom/proxy endpoint).","commonSituations":"Content policy filtered the generation so no image payload was returned; a gateway/proxy stripped fields; an unsupported response_format was requested; intermittent upstream issue.","solutions":["Retry the request with a less policy-sensitive prompt","Set response_format explicitly in settings (e.g. url or b64_json) to match what you expect to read back","Verify you are hitting the real OpenAI endpoint and not a proxy that altered the response","Migrate to generate_images, which has a more defensive data check and returns a list"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"from semantic_kernel.exceptions.service_exceptions import ServiceResponseException\n\ntry:\n    img = await service.generate_image(description=desc)\nexcept ServiceResponseException as e:\n    if \"Failed to generate image\" in str(e):\n        # upstream returned empty/ unusable payload; retry or fall back\n        ...\n    raise","preventionTips":["Migrate to generate_images for a more robust response check","Set response_format explicitly on settings","Avoid prompts likely to trip content filters"],"tags":["openai","text-to-image","response","deprecated","python"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}