{"record":{"id":"6bdb270f93c5adea","repo":"tirth8205/code-review-graph","slug":"missing-required-environment-variable-s-for-the-o","errorCode":null,"errorMessage":"Missing required environment variable(s) for the OpenAI embedding provider: {', '.join(missing)}.","messagePattern":"Missing required environment variable\\(s\\) for the OpenAI embedding provider: (.+?)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"code_review_graph/embeddings.py","lineNumber":934,"sourceCode":"        provider is None\n        and os.environ.get(\"CRG_OPENAI_API_KEY\")\n        and os.environ.get(\"CRG_OPENAI_BASE_URL\")\n    ):\n        name = \"openai\"\n\n    if name == \"openai\":\n        api_key = os.environ.get(\"CRG_OPENAI_API_KEY\")\n        base_url = os.environ.get(\"CRG_OPENAI_BASE_URL\")\n        resolved_model = model or os.environ.get(\"CRG_OPENAI_MODEL\")\n        if not api_key or not base_url or not resolved_model:\n            missing = [\n                name for name, val in [\n                    (\"CRG_OPENAI_API_KEY\", api_key),\n                    (\"CRG_OPENAI_BASE_URL\", base_url),\n                    (\"CRG_OPENAI_MODEL\", resolved_model),\n                ] if not val\n            ]\n            raise ValueError(\n                \"Missing required environment variable(s) for the OpenAI \"\n                f\"embedding provider: {', '.join(missing)}.\"\n            )\n        dim_env = os.environ.get(\"CRG_OPENAI_DIMENSION\")\n        dimension = int(dim_env) if dim_env else None\n        batch_env = os.environ.get(\"CRG_OPENAI_BATCH_SIZE\")\n        batch_size = int(batch_env) if batch_env else None\n        if not _is_localhost_url(base_url):\n            _warn_cloud_egress(\"openai\")\n        return OpenAIEmbeddingProvider(\n            api_key=api_key,\n            base_url=base_url,\n            model=resolved_model,\n            dimension=dimension,\n            batch_size=batch_size,\n        )\n\n    if name == \"minimax\":","sourceCodeStart":916,"sourceCodeEnd":952,"githubUrl":"https://github.com/tirth8205/code-review-graph/blob/b58668751ab0c7670c078cf7cbd4d1f5b8e54f81/code_review_graph/embeddings.py#L916-L952","documentation":"The openai provider requires CRG_OPENAI_API_KEY, CRG_OPENAI_BASE_URL, and CRG_OPENAI_MODEL to all be set. get_provider() collects which are missing and raises listing them by name.","triggerScenarios":"Selecting provider='openai' (explicitly or via OpenAI-compatible env detection) while one or more of the three CRG_OPENAI_* variables is unset or empty.","commonSituations":"Setting only the API key and assuming defaults exist, CI shells that drop exported vars, or .env files not loaded into the process environment.","solutions":["Export all three: CRG_OPENAI_API_KEY, CRG_OPENAI_BASE_URL, CRG_OPENAI_MODEL","The message names exactly which are missing — set those first","Verify with: env | grep CRG_OPENAI","Use a different provider (e.g. local) if you didn't intend OpenAI mode"],"exampleFix":"# before\nexport CRG_OPENAI_API_KEY=sk-...\n# after\nexport CRG_OPENAI_API_KEY=sk-...\nexport CRG_OPENAI_BASE_URL=https://api.openai.com/v1\nexport CRG_OPENAI_MODEL=text-embedding-3-small","handlingStrategy":"validation","validationCode":"missing = [v for v in (\"CRG_OPENAI_API_KEY\", \"CRG_OPENAI_BASE_URL\", \"CRG_OPENAI_MODEL\") if not os.environ.get(v)]\nif missing:\n    raise RuntimeError(f\"missing env: {missing}\")","typeGuard":null,"tryCatchPattern":"try:\n    provider = get_provider(\"openai\")\nexcept ValueError as e:\n    if \"Missing required environment variable\" in str(e):\n        provider = get_provider(\"local\")  # fallback\n    else:\n        raise","preventionTips":["Assert all three CRG_OPENAI_* vars at startup, not lazily at embed time","Load .env explicitly in scripts/agents","Use a startup preflight check for embedding config"],"tags":["openai","embeddings","env-var","config"],"backgroundTag":"missing-env-var","analyzedSha":"b58668751ab0c7670c078cf7cbd4d1f5b8e54f81","analyzedAt":"2026-08-28T13:19:08.966Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}