{"record":{"id":"be000c9dfa95c86d","repo":"Fosowl/agenticSeek","slug":"api-key-api-key-var-not-found-in-env-file-plea","errorCode":null,"errorMessage":"API key {api_key_var} not found in .env file. Please add it to your .env file and restart the server.","messagePattern":"API key (.+?) not found in \\.env file\\. Please add it to your \\.env file and restart the server\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sources/llm_provider.py","lineNumber":63,"sourceCode":"        self.internal_url, self.in_docker = self.get_internal_url()\n        self.unsafe_providers = [\"openai\", \"deepseek\", \"dsk_deepseek\", \"together\", \"google\", \"openrouter\", \"anthropic\", \"minimax\"]\n        if self.provider_name not in self.available_providers:\n            raise ValueError(f\"Unknown provider: {provider_name}\")\n        if self.provider_name in self.unsafe_providers and self.is_local == False:\n            pretty_print(\"Warning: you are using an API provider. You data will be sent to the cloud.\", color=\"warning\")\n            self.api_key = self.get_api_key(self.provider_name)\n        elif self.provider_name != \"ollama\":\n            pretty_print(f\"Provider: {provider_name} initialized at {self.server_ip}\", color=\"success\")\n\n    def get_model_name(self) -> str:\n        return self.model\n\n    def get_api_key(self, provider):\n        load_dotenv()\n        api_key_var = f\"{provider.upper()}_API_KEY\"\n        api_key = os.getenv(api_key_var)\n        if not api_key:\n            raise ValueError(\n                f\"API key {api_key_var} not found in .env file. \"\n                \"Please add it to your .env file and restart the server.\"\n            )\n        return api_key\n\n    def get_internal_url(self):\n        load_dotenv()\n        url = os.getenv(\"DOCKER_INTERNAL_URL\")\n        if not url: # running on host\n            return \"http://localhost\", False\n        return url, True\n\n    def respond(self, history, verbose=True):\n        \"\"\"\n        Use the choosen provider to generate text.\n        \"\"\"\n        llm = self.available_providers[self.provider_name]\n        self.logger.info(f\"Using provider: {self.provider_name} at {self.server_ip}\")","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/Fosowl/agenticSeek/blob/ae57a2357745a9706cb12d0fd76d954c84d166fa/sources/llm_provider.py#L45-L81","documentation":"get_api_key loads a .env file via python-dotenv, builds the variable name as f\"{provider.upper()}_API_KEY\" (e.g. OPENAI_API_KEY), and raises this ValueError when that environment variable is unset or empty. The library requires an API key for cloud providers before any request is made.","triggerScenarios":"Using a provider in unsafe_providers ('openai', 'deepseek', 'dsk_deepseek', 'together', 'google', 'openrouter', 'anthropic', 'minimax') while the corresponding {PROVIDER}_API_KEY is missing from .env or the process environment; an empty API_KEY line in .env (load_dotenv sets empty string -> falsy); calling get_api_key with a provider whose variable naming differs from the convention; also triggered via huggingface_fn which calls get_api_key.","commonSituations":"Cloning a repo without the .env (it's gitignored); .env present but not in the working directory so load_dotenv finds nothing; wrong variable name (e.g. OPEN_AI_API_KEY instead of OPENAI_API_KEY); forgetting to restart the server/shell after adding the key; dsk_deepseek expecting DSK_DEEPSEEK_API_KEY while the user set DEEPSEEK_API_KEY.","solutions":["Add the correctly named key to your .env (e.g. OPENAI_API_KEY=sk-...) and restart the server.","Verify the exact expected variable name: f\"{provider.upper()}_API_KEY\" for your provider string.","Ensure the .env file is in the current working directory where the server is launched, or pass an explicit path to load_dotenv().","Check the value is non-empty (an empty OPENAI_API_KEY= line still fails)."],"exampleFix":"// before (.env)\nOPEN_AI_KEY=sk-...\n// after (.env)\nOPENAI_API_KEY=sk-...","handlingStrategy":"validation","validationCode":"import os\nfrom dotenv import load_dotenv\n\nload_dotenv()\nrequired = f\"{provider_name.upper()}_API_KEY\"\nif not os.getenv(required):\n    raise SystemExit(f\"Set {required} in your .env before starting the server.\")","typeGuard":"def has_api_key(provider: str) -> bool:\n    return bool(os.getenv(f\"{provider.upper()}_API_KEY\"))","tryCatchPattern":"try:\n    provider = LLMProvider(\"openai\")\nexcept ValueError as e:\n    # message names the missing {PROVIDER}_API_KEY variable\n    print(e)\n    sys.exit(1)","preventionTips":["Keep a committed .env.example listing every {PROVIDER}_API_KEY the app may need.","Pre-flight check all required env vars at server startup, before any provider is constructed.","Remember the naming convention: provider.upper() + '_API_KEY' (e.g. dsk_deepseek -> DSK_DEEPSEEK_API_KEY).","Restart the server/shell after editing .env; ensure load_dotenv's CWD contains the file."],"tags":["env","configuration","api-key","python"],"backgroundTag":"missing-env-var","analyzedSha":"ae57a2357745a9706cb12d0fd76d954c84d166fa","analyzedAt":"2026-08-30T02:49:05.834Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}