{"record":{"id":"7a83c764f9d439a1","repo":"tirth8205/code-review-graph","slug":"google-api-key-environment-variable-is-required-fo","errorCode":null,"errorMessage":"GOOGLE_API_KEY environment variable is required for the Google embedding provider.","messagePattern":"GOOGLE_API_KEY environment variable is required for the Google embedding provider\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"code_review_graph/embeddings.py","lineNumber":1003,"sourceCode":"        batch_size = int(batch_env) if batch_env else None\n        min_interval_env = os.environ.get(\"CRG_VOYAGE_MIN_INTERVAL_SEC\")\n        min_interval_sec = float(min_interval_env) if min_interval_env else 0.0\n        if not _is_localhost_url(base_url):\n            _warn_cloud_egress(\"voyage\")\n        return VoyageEmbeddingProvider(\n            api_key=api_key,\n            base_url=base_url,\n            model=resolved_model,\n            output_dimension=output_dimension,\n            output_dtype=output_dtype,\n            batch_size=batch_size,\n            min_interval_sec=min_interval_sec,\n        )\n\n    if name == \"google\":\n        api_key = os.environ.get(\"GOOGLE_API_KEY\")\n        if not api_key:\n            raise ValueError(\n                \"GOOGLE_API_KEY environment variable is required for \"\n                \"the Google embedding provider.\"\n            )\n        _warn_cloud_egress(\"google\")\n        try:\n            return GoogleEmbeddingProvider(\n                api_key=api_key,\n                **({\"model\": model} if model else {}),\n            )\n        except ImportError:\n            return None\n\n    # Default: local\n    if not _check_available():\n        return None\n    try:\n        return LocalEmbeddingProvider(model_name=model)\n    except ImportError:","sourceCodeStart":985,"sourceCodeEnd":1021,"githubUrl":"https://github.com/tirth8205/code-review-graph/blob/b58668751ab0c7670c078cf7cbd4d1f5b8e54f81/code_review_graph/embeddings.py#L985-L1021","documentation":"The google provider requires GOOGLE_API_KEY before it will construct GoogleEmbeddingProvider. The raise happens before any client init, so no API quota is touched.","triggerScenarios":"Passing provider='google' to get_provider() without GOOGLE_API_KEY in the environment.","commonSituations":"Confusing this var with GCLOUD_* or GOOGLE_APPLICATION_CREDENTIALS (neither is read here), missing secret in deployment, or unset var in cron/agent contexts.","solutions":["export GOOGLE_API_KEY=<your key> from Google AI Studio","Note GOOGLE_APPLICATION_CREDENTIALS is NOT sufficient — set GOOGLE_API_KEY explicitly","Verify with printenv GOOGLE_API_KEY"],"exampleFix":"# before\nexport GOOGLE_APPLICATION_CREDENTIALS=/path/sa.json\n# after\nexport GOOGLE_API_KEY=AIza...","handlingStrategy":"validation","validationCode":"if not os.environ.get(\"GOOGLE_API_KEY\"):\n    raise RuntimeError(\"GOOGLE_API_KEY not set; cannot use google provider\")","typeGuard":null,"tryCatchPattern":"try:\n    provider = get_provider(\"google\")\nexcept ValueError as e:\n    if \"GOOGLE_API_KEY\" in str(e):\n        provider = get_provider(\"local\")\n    else:\n        raise","preventionTips":["Set GOOGLE_API_KEY explicitly — GOOGLE_APPLICATION_CREDENTIALS is not read here","Preflight env checks per provider in deployment scripts","Store keys in the secret manager, not .env committed to git"],"tags":["google","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"}