{"record":{"id":"e6fbb4efb5e6e394","repo":"chroma-core/chroma","slug":"the-api-key-env-var-environment-variable-is-not-e6fbb4","errorCode":null,"errorMessage":"The {api_key_env_var} environment variable is not set.","messagePattern":"The (.+?) environment variable is not set\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"chromadb/utils/embedding_functions/morph_embedding_function.py","lineNumber":51,"sourceCode":"        try:\n            import openai\n        except ImportError:\n            raise ValueError(\n                \"The openai python package is not installed. Please install it with `pip install openai`. \"\n                \"Note: Morph uses the OpenAI client library for API communication.\"\n            )\n\n        if api_key is not None:\n            warnings.warn(\n                \"Direct api_key configuration will not be persisted. \"\n                \"Please use environment variables via api_key_env_var for persistent storage.\",\n                DeprecationWarning,\n            )\n\n        self.api_key_env_var = api_key_env_var\n        self.api_key = api_key or os.getenv(api_key_env_var)\n        if not self.api_key:\n            raise ValueError(f\"The {api_key_env_var} environment variable is not set.\")\n\n        self.model_name = model_name\n        self.api_base = api_base\n        self.encoding_format = encoding_format\n\n        # Initialize the OpenAI client with Morph's base URL\n        self.client = openai.OpenAI(\n            api_key=self.api_key,\n            base_url=self.api_base,\n        )\n\n    def __call__(self, input: Documents) -> Embeddings:\n        \"\"\"\n        Generate embeddings for the given documents.\n\n        Args:\n            input: Documents to generate embeddings for.\n","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/chroma-core/chroma/blob/aecdd12c8a891610db8653630b066b32ceb678b5/chromadb/utils/embedding_functions/morph_embedding_function.py#L33-L69","documentation":"MorphEmbeddingFunction resolves its key as api_key or os.getenv(api_key_env_var) (default 'MORPH_API_KEY') in __init__ and raises this ValueError when neither is available. The Morph API requires authentication for the embeddings endpoint, so construction aborts. Passing api_key directly is deprecated (warned) in favor of the env var.","triggerScenarios":"MorphEmbeddingFunction() with MORPH_API_KEY unset; deployments (docker/k8s/CI) where the secret env var was not injected; typos like MORPH_APIKEY; .env loaded after EF construction.","commonSituations":"Containerized apps missing secret env passthrough; team members with keys in personal shells but launching via IDE/daemon; rotating to a custom var name without updating api_key_env_var.","solutions":["export MORPH_API_KEY=... before constructing the EF","Or use a custom variable: MorphEmbeddingFunction(api_key_env_var='MY_MORPH_KEY') with that var set","load_dotenv() before EF construction when the key lives in .env","Preflight check: python -c \"import os; print(bool(os.getenv('MORPH_API_KEY')))\""],"exampleFix":"# before\nfrom chromadb.utils.embedding_functions import MorphEmbeddingFunction\nef = MorphEmbeddingFunction()  # ValueError: MORPH_API_KEY not set\n\n# after\nimport os\nfrom dotenv import load_dotenv\nload_dotenv()\nassert os.getenv(\"MORPH_API_KEY\"), \"MORPH_API_KEY missing\"\nef = MorphEmbeddingFunction()","handlingStrategy":"validation","validationCode":"import os\n\nif not os.getenv(\"MORPH_API_KEY\"):\n    raise SystemExit(\"MORPH_API_KEY is required for MorphEmbeddingFunction\")\n\nfrom chromadb.utils.embedding_functions import MorphEmbeddingFunction\nef = MorphEmbeddingFunction()","typeGuard":null,"tryCatchPattern":"try:\n    ef = MorphEmbeddingFunction()\nexcept ValueError as e:\n    if \"environment variable is not set\" in str(e):\n        raise RuntimeError(\"Set MORPH_API_KEY in the deployment environment\") from e\n    raise","preventionTips":["load_dotenv() before constructing the EF","Inject MORPH_API_KEY via the platform's secret mechanism (k8s secret, CI masked var)","Avoid the deprecated api_key= argument in anything persisted — it will not round-trip"],"tags":["python","authentication","environment-variables","morph","api-key"],"backgroundTag":"missing-env-var","analyzedSha":"aecdd12c8a891610db8653630b066b32ceb678b5","analyzedAt":"2026-08-16T21:53:27.228Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}