{"record":{"id":"c9cbcf12656b57dc","repo":"chroma-core/chroma","slug":"api-key-not-provided-and-self-api-key-env-var-en","errorCode":null,"errorMessage":"API key not provided and {self.api_key_env_var} environment variable is not set.","messagePattern":"API key not provided and (.+?) environment variable is not set\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"chromadb/utils/embedding_functions/baseten_embedding_function.py","lineNumber":47,"sourceCode":"                \"The openai python package is not installed. Please install it with `pip install openai`\"\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        if os.getenv(\"BASETEN_API_KEY\") is not None:\n            self.api_key_env_var = \"BASETEN_API_KEY\"\n        else:\n            self.api_key_env_var = api_key_env_var\n\n        # Prioritize api_key argument, then environment variable\n        resolved_api_key = api_key or os.getenv(self.api_key_env_var)\n        if not resolved_api_key:\n            raise ValueError(\n                f\"API key not provided and {self.api_key_env_var} environment variable is not set.\"\n            )\n        self.api_key = resolved_api_key\n        if not api_base:\n            raise ValueError(\"The api_base argument must be provided.\")\n        self.api_base = api_base\n        self.model_name = \"baseten-embedding-model\"\n        self.dimensions = None\n\n        self.client = openai.OpenAI(api_key=self.api_key, base_url=self.api_base)\n\n    @staticmethod\n    def name() -> str:\n        return \"baseten\"\n\n    def default_space(self) -> Space:\n        return \"cosine\"\n","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/chroma-core/chroma/blob/aecdd12c8a891610db8653630b066b32ceb678b5/chromadb/utils/embedding_functions/baseten_embedding_function.py#L29-L65","documentation":"BasetenEmbeddingFunction resolves its API key from the api_key argument first (deprecated for persistence — it is never stored in get_config()), then from an environment variable. The env-var name is BASETEN_API_KEY if that is set, otherwise the api_key_env_var argument (default CHROMA_BASETEN_API_KEY). If neither the argument nor the resolved env var yields a key, this ValueError fires, naming the exact variable it checked. This is the expected path when a persisted config is rehydrated on a machine without credentials.","triggerScenarios":"BasetenEmbeddingFunction(api_key=None, api_base=...) — the exact call build_from_config makes — while neither BASETEN_API_KEY nor CHROMA_BASETEN_API_KEY (or your custom api_key_env_var) is set in the process environment.","commonSituations":"Server/worker containers missing the secret; .env file not loaded before chromadb imports; typo'd variable name; moving a persisted collection config to a new machine (api_key is deliberately not persisted, only the env-var name is).","solutions":["Export the env var in every runtime that constructs the function: export CHROMA_BASETEN_API_KEY=... (or BASETEN_API_KEY, which takes precedence if set).","For quick local experiments pass api_key=\"...\" explicitly, accepting the DeprecationWarning that it will not persist.","If you pass a custom api_key_env_var, make sure the exported name matches it character-for-character."],"exampleFix":"# before: ValueError \"API key not provided and CHROMA_BASETEN_API_KEY environment variable is not set.\"\nef = BasetenEmbeddingFunction(api_key=None, api_base=\"https://app.baseten.co/...\")\n\n# after (shell): export CHROMA_BASETEN_API_KEY=\"bs-...\"\n# after (python, ephemeral):\nef = BasetenEmbeddingFunction(api_key=\"bs-...\", api_base=\"https://app.baseten.co/...\")","handlingStrategy":"validation","validationCode":"import os\n\nAPI_KEY_ENV = \"CHROMA_BASETEN_API_KEY\"  # or \"BASETEN_API_KEY\", which takes precedence\nif not (os.getenv(API_KEY_ENV) or os.getenv(\"BASETEN_API_KEY\")):\n    raise RuntimeError(f\"Set {API_KEY_ENV} before constructing BasetenEmbeddingFunction\")\n\nfrom chromadb.utils.embedding_functions import BasetenEmbeddingFunction\nef = BasetenEmbeddingFunction(api_base=api_base, api_key_env_var=API_KEY_ENV)","typeGuard":"import os\n\ndef has_baseten_credentials() -> bool:\n    return bool(os.getenv(\"BASETEN_API_KEY\") or os.getenv(\"CHROMA_BASETEN_API_KEY\"))","tryCatchPattern":"try:\n    ef = BasetenEmbeddingFunction(api_base=api_base, api_key_env_var=\"CHROMA_BASETEN_API_KEY\")\nexcept ValueError as e:\n    if \"API key not provided\" in str(e):\n        raise RuntimeError(\"Missing Baseten credentials: export CHROMA_BASETEN_API_KEY\") from e\n    raise","preventionTips":["Set CHROMA_BASETEN_API_KEY (or BASETEN_API_KEY) in the process environment via your secret manager, not in code.","Load .env files before importing/constructing embedding functions.","Remember api_key= is ephemeral (not persisted) — env vars are the durable mechanism."],"tags":["python","baseten","api-key","environment-variables","credentials","chromadb"],"backgroundTag":"missing-api-key","analyzedSha":"aecdd12c8a891610db8653630b066b32ceb678b5","analyzedAt":"2026-08-16T21:53:27.228Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}