{"record":{"id":"493b49c506af09e3","repo":"microsoft/semantic-kernel","slug":"failed-to-create-openai-settings-493b49","errorCode":null,"errorMessage":"Failed to create OpenAI settings.","messagePattern":"Failed to create OpenAI settings\\.","errorType":"exception","errorClass":"ServiceInitializationError","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/connectors/ai/open_ai/services/open_ai_chat_completion.py","lineNumber":62,"sourceCode":"                the env vars or .env file value.\n            default_headers: The default headers mapping of string keys to\n                string values for HTTP requests. (Optional)\n            async_client (Optional[AsyncOpenAI]): An existing client to use. (Optional)\n            env_file_path (str | None): Use the environment settings file as a fallback\n                to environment variables. (Optional)\n            env_file_encoding (str | None): The encoding of the environment settings file. (Optional)\n            instruction_role (str | None): The role to use for 'instruction' messages, for example,\n        \"\"\"\n        try:\n            openai_settings = OpenAISettings(\n                api_key=api_key,\n                org_id=org_id,\n                chat_model_id=ai_model_id,\n                env_file_path=env_file_path,\n                env_file_encoding=env_file_encoding,\n            )\n        except ValidationError as ex:\n            raise ServiceInitializationError(\"Failed to create OpenAI settings.\", ex) from ex\n\n        if not async_client and not openai_settings.api_key:\n            raise ServiceInitializationError(\"The OpenAI API key is required.\")\n        if not openai_settings.chat_model_id:\n            raise ServiceInitializationError(\"The OpenAI model ID is required.\")\n\n        super().__init__(\n            ai_model_id=openai_settings.chat_model_id,\n            api_key=openai_settings.api_key.get_secret_value() if openai_settings.api_key else None,\n            org_id=openai_settings.org_id,\n            service_id=service_id,\n            ai_model_type=OpenAIModelTypes.CHAT,\n            default_headers=default_headers,\n            client=async_client,\n            instruction_role=instruction_role,\n        )\n\n    @classmethod","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/ai/open_ai/services/open_ai_chat_completion.py#L44-L80","documentation":"Raised by OpenAIChatCompletion.__init__ when OpenAISettings construction throws a pydantic ValidationError. The settings model (non-Azure) validates api_key (SecretStr|None), org_id (str|None), chat_model_id (str|None). If any field receives a value that fails type coercion, pydantic raises ValidationError which is wrapped here as ServiceInitializationError.","triggerScenarios":"Constructing OpenAIChatCompletion with a malformed .env file, an api_key of the wrong type (e.g. bytes), or an OPENAI_API_KEY environment variable with an incompatible value. Since most fields are str|None, type errors are uncommon but can arise from corrupt env files or passing SecretStr where str is expected.","commonSituations":"Corrupted .env file with invalid dotenv syntax; OPENAI_API_KEY set to an empty string in CI; env_file_encoding mismatch; passing api_key as a SecretStr object rather than a plain string; OPENAI_ORG_ID set to a non-string value in config management tools.","solutions":["Inspect the chained ValidationError for the specific field and constraint that failed.","Pass api_key as a plain string (str), not a SecretStr or bytes.","Verify .env file syntax and encoding (default utf-8).","Ensure OPENAI_API_KEY and OPENAI_ORG_ID are set to valid strings in the environment."],"exampleFix":"# before (api_key passed as SecretStr)\nfrom pydantic import SecretStr\nservice = OpenAIChatCompletion(\n    ai_model_id='gpt-4o',\n    api_key=SecretStr('sk-...'),\n)\n# after (plain string)\nservice = OpenAIChatCompletion(\n    ai_model_id='gpt-4o',\n    api_key='sk-...',\n)","handlingStrategy":"try-catch","validationCode":"import os\n\napi_key = os.environ.get('OPENAI_API_KEY')\nif not api_key or not isinstance(api_key, str):\n    raise ValueError(\n        'OPENAI_API_KEY must be set to a non-empty string in the environment or .env file.'\n    )","typeGuard":null,"tryCatchPattern":"from semantic_kernel.exceptions.service_exceptions import ServiceInitializationError\n\ntry:\n    service = OpenAIChatCompletion(\n        ai_model_id='gpt-4o',\n        api_key=os.environ.get('OPENAI_API_KEY'),\n    )\nexcept ServiceInitializationError as e:\n    cause = e.__cause__\n    if cause:\n        print(f'Settings validation failed: {cause}')\n    raise","preventionTips":["Pass api_key as a plain string, not a SecretStr or bytes.","Verify .env file syntax and encoding (default utf-8).","Read the chained ValidationError (__cause__) for the specific field that failed.","Ensure OPENAI_API_KEY and OPENAI_ORG_ID are valid non-empty strings."],"tags":["openai","chat-completion","pydantic","settings-validation"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}