{"record":{"id":"15ecfd8c0b90caf6","repo":"microsoft/semantic-kernel","slug":"model-type-self-ai-model-type-is-not-supported-15ecfd","errorCode":null,"errorMessage":"Model type {self.ai_model_type} is not supported","messagePattern":"Model type (.+?) is not supported","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/connectors/ai/open_ai/services/open_ai_handler.py","lineNumber":74,"sourceCode":"    async def _send_request(self, settings: PromptExecutionSettings) -> RESPONSE_TYPE:\n        \"\"\"Send a request to the OpenAI API.\"\"\"\n        if self.ai_model_type == OpenAIModelTypes.TEXT or self.ai_model_type == OpenAIModelTypes.CHAT:\n            assert isinstance(settings, OpenAIPromptExecutionSettings)  # nosec\n            return await self._send_completion_request(settings)\n        if self.ai_model_type == OpenAIModelTypes.EMBEDDING:\n            assert isinstance(settings, OpenAIEmbeddingPromptExecutionSettings)  # nosec\n            return await self._send_embedding_request(settings)\n        if self.ai_model_type == OpenAIModelTypes.TEXT_TO_IMAGE:\n            assert isinstance(settings, OpenAITextToImageExecutionSettings)  # nosec\n            return await self._send_text_to_image_request(settings)\n        if self.ai_model_type == OpenAIModelTypes.AUDIO_TO_TEXT:\n            assert isinstance(settings, OpenAIAudioToTextExecutionSettings)  # nosec\n            return await self._send_audio_to_text_request(settings)\n        if self.ai_model_type == OpenAIModelTypes.TEXT_TO_AUDIO:\n            assert isinstance(settings, OpenAITextToAudioExecutionSettings)  # nosec\n            return await self._send_text_to_audio_request(settings)\n\n        raise NotImplementedError(f\"Model type {self.ai_model_type} is not supported\")\n\n    async def _send_completion_request(\n        self,\n        settings: OpenAIPromptExecutionSettings,\n    ) -> ChatCompletion | Completion | AsyncStream[ChatCompletionChunk] | AsyncStream[Completion]:\n        \"\"\"Execute the appropriate call to OpenAI models.\"\"\"\n        try:\n            settings_dict = settings.prepare_settings_dict()\n            if self.ai_model_type == OpenAIModelTypes.CHAT:\n                assert isinstance(settings, OpenAIChatPromptExecutionSettings)  # nosec\n                self._handle_structured_output(settings, settings_dict)\n                if settings.tools is None:\n                    settings_dict.pop(\"parallel_tool_calls\", None)\n                response = await self.client.chat.completions.create(**settings_dict)\n            else:\n                response = await self.client.completions.create(**settings_dict)\n\n            self.store_usage(response)","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/ai/open_ai/services/open_ai_handler.py#L56-L92","documentation":"Raised in OpenAIHandler._send_request as a NotImplementedError when self.ai_model_type does not match any of the known OpenAIModelTypes branches (CHAT, TEXT, EMBEDDING, TEXT_TO_IMAGE, AUDIO_TO_TEXT, TEXT_TO_AUDIO). This is a defensive guard indicating an unhandled or newly introduced model type.","triggerScenarios":"Constructing a service with an ai_model_type that is not covered by the request dispatcher — typically from subclassing OpenAIHandler with a custom OpenAIModelTypes enum member, or from a future model-type value that this version of Semantic Kernel does not yet support.","commonSituations":"Subclassing OpenAIHandler to add a custom endpoint type without overriding _send_request; using an internal or experimental model type that was added to the enum but not yet handled in the dispatcher; version mismatch where the enum has more members than the handler knows about.","solutions":["Use a supported OpenAIModelTypes value: CHAT, TEXT, EMBEDDING, TEXT_TO_IMAGE, AUDIO_TO_TEXT, or TEXT_TO_AUDIO","If you subclassed OpenAIHandler, override _send_request to handle your custom model type","Check the Semantic Kernel changelog for newly added model types and upgrade if needed"],"exampleFix":"# before — custom subclass with unsupported type\nclass MyHandler(OpenAIHandler):\n    ai_model_type = MyCustomModelTypes.SOMETHING_NEW\n# after — override the dispatcher\nclass MyHandler(OpenAIHandler):\n    async def _send_request(self, settings):\n        if self.ai_model_type == MyCustomModelTypes.SOMETHING_NEW:\n            return await self._send_custom_request(settings)\n        return await super()._send_request(settings)","handlingStrategy":"try-catch","validationCode":"from semantic_kernel.connectors.ai.open_ai.services.open_ai_model_types import OpenAIModelTypes\n\nSUPPORTED = {OpenAIModelTypes.CHAT, OpenAIModelTypes.TEXT, OpenAIModelTypes.EMBEDDING,\n             OpenAIModelTypes.TEXT_TO_IMAGE, OpenAIModelTypes.AUDIO_TO_TEXT,\n             OpenAIModelTypes.TEXT_TO_AUDIO}\nif service.ai_model_type not in SUPPORTED:\n    raise ValueError(f'Unsupported model type: {service.ai_model_type}')","typeGuard":"from semantic_kernel.connectors.ai.open_ai.services.open_ai_model_types import OpenAIModelTypes\n\ndef is_supported_model_type(model_type) -> bool:\n    return model_type in {\n        OpenAIModelTypes.CHAT, OpenAIModelTypes.TEXT, OpenAIModelTypes.EMBEDDING,\n        OpenAIModelTypes.TEXT_TO_IMAGE, OpenAIModelTypes.AUDIO_TO_TEXT,\n        OpenAIModelTypes.TEXT_TO_AUDIO,\n    }","tryCatchPattern":"try:\n    response = await service._send_request(settings)\nexcept NotImplementedError:\n    logger.error(f'Model type {service.ai_model_type} not supported by this handler')\n    raise","preventionTips":["Do not subclass OpenAIHandler with custom model types without overriding _send_request","Pin semantic-kernel and openai versions together to avoid enum/handler mismatches"],"tags":["openai","model-type","not-implemented","handler"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}