{"record":{"id":"20353547807675ec","repo":"nexu-io/open-design","slug":"gemini-selected-but-no-google-api-key-is-configure","errorCode":null,"errorMessage":"Gemini selected but no Google API key is configured.","messagePattern":"Gemini selected but no Google API key is configured\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"design-templates/last30days/scripts/lib/providers.py","lineNumber":287,"sourceCode":"        elif openai_token and config.get(\"OPENAI_AUTH_STATUS\") == env.AUTH_STATUS_OK:\n            provider_name = \"openai\"\n        elif xai_key:\n            provider_name = \"xai\"\n        elif config.get(\"OPENROUTER_API_KEY\"):\n            provider_name = \"openrouter\"\n        else:\n            return schema.ProviderRuntime(\n                reasoning_provider=\"local\",\n                planner_model=\"deterministic\",\n                rerank_model=\"local-score\",\n                x_search_backend=_resolve_x_backend(config),\n            ), None\n\n    planner_model, rerank_model = _resolve_model_pins(config, depth, provider_name)\n\n    if provider_name == \"gemini\":\n        if not google_key:\n            raise RuntimeError(\"Gemini selected but no Google API key is configured.\")\n        runtime = schema.ProviderRuntime(\n            reasoning_provider=\"gemini\",\n            planner_model=planner_model,\n            rerank_model=rerank_model,\n\n            x_search_backend=_resolve_x_backend(config),\n        )\n        return runtime, GeminiClient(google_key)\n\n    if provider_name == \"openai\":\n        if not openai_token or config.get(\"OPENAI_AUTH_STATUS\") != env.AUTH_STATUS_OK:\n            raise RuntimeError(\"OpenAI selected but no valid OpenAI auth is configured.\")\n        runtime = schema.ProviderRuntime(\n            reasoning_provider=\"openai\",\n            planner_model=planner_model,\n            rerank_model=rerank_model,\n\n            x_search_backend=_resolve_x_backend(config),","sourceCodeStart":269,"sourceCodeEnd":305,"githubUrl":"https://github.com/nexu-io/open-design/blob/5be4028344c2eb4c667c5a97bda8f750c5597ef7/design-templates/last30days/scripts/lib/providers.py#L269-L305","documentation":"Raised in resolve_runtime when provider_name is 'gemini' but the resolved google_key (GOOGLE_API_KEY / GEMINI_API_KEY / GOOGLE_GENAI_API_KEY) is empty. The provider was selected (either explicitly or via auto-resolution) without a matching credential, so the pipeline refuses to construct a GeminiClient.","triggerScenarios":"LAST30DAYS_REASONING_PROVIDER=gemini while none of GOOGLE_API_KEY, GEMINI_API_KEY, GOOGLE_GENAI_API_KEY are set. Also reached via auto-resolution if a stale config pins gemini but the key env vars were cleared.","commonSituations":"Forgetting to copy GOOGLE_API_KEY into the deployment env. Renaming GEMINI_API_KEY to GOOGLE_GENAI_API_KEY in only some environments. CI running with provider=gemini but secrets not injected.","solutions":["Set one of GOOGLE_API_KEY, GEMINI_API_KEY, or GOOGLE_GENAI_API_KEY to a valid Google AI key.","If you intended to use another provider, change LAST30DAYS_REASONING_PROVIDER accordingly.","Switch provider to 'auto' so the runtime falls back to whichever credential is present (or local deterministic mode if none)."],"exampleFix":"# before\nLAST30DAYS_REASONING_PROVIDER=gemini\n# (no google key set)\n\n# after\nLAST30DAYS_REASONING_PROVIDER=gemini\nGOOGLE_API_KEY=AIzaSy...","handlingStrategy":"validation","validationCode":"def ensure_gemini_key(config):\n    key = (config.get(\"GOOGLE_API_KEY\")\n           or config.get(\"GEMINI_API_KEY\")\n           or config.get(\"GOOGLE_GENAI_API_KEY\"))\n    if not key:\n        raise RuntimeError(\n            \"Provider is gemini but no Google key found. \"\n            \"Set GOOGLE_API_KEY / GEMINI_API_KEY / GOOGLE_GENAI_API_KEY.\"\n        )\n    return key","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Run a pre-flight credential check that maps each provider to its required env vars.","Prefer 'auto' provider selection so a missing Google key falls through to the next available provider.","In CI, assert required secret names are present before invoking the pipeline."],"tags":["config","credentials","gemini","provider"],"backgroundTag":null,"analyzedSha":"5be4028344c2eb4c667c5a97bda8f750c5597ef7","analyzedAt":"2026-08-12T12:03:58.812Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}