{"record":{"id":"adadf83b40bb36ed","repo":"harry0703/MoneyPrinterTurbo","slug":"llm-provider-api-key-is-not-set-please-set-it","errorCode":null,"errorMessage":"{llm_provider}: api_key is not set, please set it in the config.toml file.","messagePattern":"(.+?): api_key is not set, please set it in the config\\.toml file\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"app/services/llm.py","lineNumber":197,"sourceCode":"            api_key = \"ollama\"\n            if not base_url:\n                base_url = config.get_default_ollama_base_url()\n\n        if adapter == \"azure\":\n            api_version = runtime_app_config.get(\n                provider.config_key(\"api_version\"), \"2024-02-15-preview\"\n            )\n\n        extra_values = {\n            field.config_suffix: (\n                runtime_app_config.get(provider.config_key(field.config_suffix), \"\")\n                or field.default_value\n            )\n            for field in provider.extra_fields\n        }\n\n        if provider.requires_api_key and not api_key:\n            raise ValueError(\n                f\"{llm_provider}: api_key is not set, please set it in the config.toml file.\"\n            )\n        if provider.requires_model_name and not model_name:\n            raise ValueError(\n                f\"{llm_provider}: model_name is not set, please set it in the config.toml file.\"\n            )\n        if provider.requires_base_url and not base_url:\n            raise ValueError(\n                f\"{llm_provider}: base_url is not set, please set it in the config.toml file.\"\n            )\n\n        for field in provider.extra_fields:\n            if field.required and not extra_values[field.config_suffix]:\n                raise ValueError(\n                    f\"{llm_provider}: {field.config_suffix} is not set, \"\n                    \"please set it in the config.toml file.\"\n                )\n","sourceCodeStart":179,"sourceCodeEnd":215,"githubUrl":"https://github.com/harry0703/MoneyPrinterTurbo/blob/1f9f19c2021a68d04df228f33e9099a0c947f6f8/app/services/llm.py#L179-L215","documentation":"Credential guard in _generate_response: the selected provider declares requires_api_key but the resolved api_key (from provider.config_key('api_key') in the runtime config snapshot) is empty. Raised before any network call so the failure is immediate and attributable.","triggerScenarios":"Any provider with requires_api_key=true (openai, qwen, gemini, etc.) whose <provider>.api_key config entry is missing, empty, or whitespace-only in the effective config snapshot.","commonSituations":"Fresh install where config.toml was copied from config.example.toml without filling keys, key set for a different provider than the selected llm_provider, env-var-based configs not loaded in service/docker contexts, or the WebUI config snapshot taken before the user saved their key.","solutions":["Set <provider>.api_key in config.toml (the exact key name is provider.config_key('api_key'), e.g. openai.api_key) or via the WebUI settings page","Confirm the key is under the section matching the active llm_provider — keys are per-provider","If using env-based config, verify the process environment actually contains it (docker-compose env, systemd Environment=)","Call the provider validation/test-connection feature in the WebUI after setting the key"],"exampleFix":"# config.toml before\nllm_provider = \"openai\"\n[openai]\nmodel_name = \"gpt-4o-mini\"  # api_key missing\n\n# config.toml after\nllm_provider = \"openai\"\n[openai]\napi_key = \"sk-...\"\nmodel_name = \"gpt-4o-mini\"","handlingStrategy":"validation","validationCode":"provider = get_llm_provider(cfg[\"llm_provider\"])\nif provider.requires_api_key and not cfg.get(provider.config_key(\"api_key\")):\n    raise ConfigError(f\"{provider.config_key('api_key')} is empty\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Add a config-completeness check on startup listing all missing required fields","Remember keys are per-provider sections; switching providers requires re-entering credentials"],"tags":["configuration","api-key","llm"],"backgroundTag":null,"analyzedSha":"1f9f19c2021a68d04df228f33e9099a0c947f6f8","analyzedAt":"2026-08-14T19:41:05.568Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}