{"record":{"id":"ed202192c2d4b071","repo":"microsoft/semantic-kernel","slug":"the-nvidia-api-key-is-required","errorCode":null,"errorMessage":"The NVIDIA API key is required.","messagePattern":"The NVIDIA API key is required\\.","errorType":"exception","errorClass":"ServiceInitializationError","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/connectors/ai/nvidia/services/nvidia_chat_completion.py","lineNumber":99,"sourceCode":"            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 (Literal[\"system\", \"user\", \"assistant\", \"developer\"] | None): The role to use for\n                'instruction' messages. Defaults to \"system\". (Optional)\n        \"\"\"\n        try:\n            nvidia_settings = NvidiaSettings(\n                api_key=api_key,\n                base_url=base_url,\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 NVIDIA settings.\", ex) from ex\n\n        if not client and not nvidia_settings.api_key:\n            raise ServiceInitializationError(\"The NVIDIA API key is required.\")\n        if not nvidia_settings.chat_model_id:\n            # Default fallback model\n            nvidia_settings.chat_model_id = DEFAULT_NVIDIA_CHAT_MODEL\n            logger.warning(f\"Default chat model set as: {nvidia_settings.chat_model_id}\")\n\n        # Create client if not provided\n        if not client:\n            client = AsyncOpenAI(\n                api_key=nvidia_settings.api_key.get_secret_value() if nvidia_settings.api_key else None,\n                base_url=nvidia_settings.base_url,\n            )\n\n        super().__init__(\n            ai_model_id=nvidia_settings.chat_model_id,\n            api_key=nvidia_settings.api_key.get_secret_value() if nvidia_settings.api_key else None,\n            base_url=nvidia_settings.base_url,\n            service_id=service_id or \"\",\n            ai_model_type=NvidiaModelTypes.CHAT,","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/ai/nvidia/services/nvidia_chat_completion.py#L81-L117","documentation":"Raised as ServiceInitializationError when neither a pre-built `client` nor a usable api_key was supplied: `if not client and not nvidia_settings.api_key`. NVIDIA requires authentication for its hosted endpoint, and the connector refuses to build a client with no credentials. Note NvidiaSettings may allow a None api_key (it is optional), so this guard is the real enforcement.","triggerScenarios":"Constructing `NvidiaChatCompletion(...)` with no `client=` argument AND no NVIDIA_API_KEY in env/.env AND no `api_key=` arg. Also when api_key is present but empty/fails SecretStr and is dropped to None.","commonSituations":"Forgetting to export NVIDIA_API_KEY in the shell running the app, .env not loaded, key set in a different env name (e.g. NGC_API_KEY or NVAPI_KEY), CI runner missing the secret.","solutions":["Pass api_key explicitly: NvidiaChatCompletion(api_key=os.environ['NVIDIA_API_KEY']).","Set NVIDIA_API_KEY in env or .env at the project root.","If using a custom endpoint, pass client=AsyncOpenAI(api_key=..., base_url=...) instead of relying on env.","Double-check the exact env var name spelling against NvidiaSettings."],"exampleFix":"# before\nsvc = NvidiaChatCompletion(ai_model_id='meta/llama3-8b-instruct')\n\n# after\nsvc = NvidiaChatCompletion(\n    ai_model_id='meta/llama3-8b-instruct',\n    api_key=os.environ['NVIDIA_API_KEY'],\n)","handlingStrategy":"validation","validationCode":"api_key = os.environ.get('NVIDIA_API_KEY')\nassert api_key, 'NVIDIA_API_KEY is required for NvidiaChatCompletion'\nsvc = NvidiaChatCompletion(api_key=api_key, ai_model_id='meta/llama3-8b-instruct')","typeGuard":"def has_nvidia_credentials(client=None, **kw) -> bool:\n    return bool(client or kw.get('api_key') or os.environ.get('NVIDIA_API_KEY'))","tryCatchPattern":"from semantic_kernel.exceptions import ServiceInitializationError\ntry:\n    svc = NvidiaChatCompletion(ai_model_id='meta/llama3-8b-instruct')\nexcept ServiceInitializationError as e:\n    if 'API key is required' in str(e):\n        svc = NvidiaChatCompletion(api_key=os.environ['NVIDIA_API_KEY'], ai_model_id='meta/llama3-8b-instruct')\n    else:\n        raise","preventionTips":["Always supply NVIDIA_API_KEY (env/.env) or a prebuilt client for chat completion.","Verify the exact env var name in CI secrets.","Use a prebuilt AsyncOpenAI client when integrating with a custom endpoint."],"tags":["nvidia","chat-completion","api-key","configuration","service-initialization-error"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}