{"record":{"id":"d8fa7233a57dd2fd","repo":"BerriAI/litellm","slug":"gemini-api-base-or-gemini-api-key-google-api-key-i","errorCode":null,"errorMessage":"GEMINI_API_BASE or GEMINI_API_KEY/GOOGLE_API_KEY is not set. Please set the environment variable, to query Gemini's `/models` endpoint.","messagePattern":"GEMINI_API_BASE or GEMINI_API_KEY/GOOGLE_API_KEY is not set\\. Please set the environment variable, to query Gemini's `/models` endpoint\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/gemini/common_utils.py","lineNumber":387,"sourceCode":"\n    @staticmethod\n    def get_base_model(model: str) -> str | None:\n        return model.replace(\"gemini/\", \"\")\n\n    def process_model_name(self, models: list[dict[str, str]]) -> list[str]:\n        litellm_model_names: Final = []\n        for model in models:\n            stripped_model_name = model[\"name\"].replace(\"models/\", \"\")\n            litellm_model_name = \"gemini/\" + stripped_model_name\n            litellm_model_names.append(litellm_model_name)\n        return litellm_model_names\n\n    def get_models(self, api_key: str | None = None, api_base: str | None = None) -> list[str]:\n        api_base = GeminiModelInfo.get_api_base(api_base)\n        api_key = GeminiModelInfo.get_api_key(api_key)\n        endpoint: Final = f\"/{self.api_version}/models\"\n        if api_base is None or api_key is None:\n            raise ValueError(\n                \"GEMINI_API_BASE or GEMINI_API_KEY/GOOGLE_API_KEY is not set. Please set the environment variable, to query Gemini's `/models` endpoint.\"\n            )\n\n        response: Final = litellm.module_level_client.get(\n            url=f\"{api_base}{endpoint}\",\n            headers={\"x-goog-api-key\": api_key},\n        )\n\n        if response.status_code != 200:\n            raise ValueError(\n                f\"Failed to fetch models from Gemini. Status code: {response.status_code}, Response: {response.json()}\"\n            )\n\n        models: Final = response.json()[\"models\"]\n\n        litellm_model_names: Final = self.process_model_name(models)\n        return litellm_model_names\n","sourceCodeStart":369,"sourceCodeEnd":405,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/llms/gemini/common_utils.py#L369-L405","documentation":"GeminiModelInfo.get_models() needs both an API base (GEMINI_API_BASE, defaulting to Google's generativelanguage.googleapis.com) and an API key (explicit, GOOGLE_API_KEY, or GEMINI_API_KEY) before it can call GET /{version}/models. If either resolves to None it raises this ValueError instead of making an unauthenticated request.","triggerScenarios":"litellm.get_model_list('gemini') (or another path into this get_models) with no Google/Gemini key in the environment and no key passed, or with GEMINI_API_BASE explicitly set to an empty value.","commonSituations":"Startup code that auto-discovers models before credentials are loaded; env vars defined in a .env that was never sourced in the deployed process; key present but empty string, which get_api_key treats as unset.","solutions":["Export GOOGLE_API_KEY or GEMINI_API_KEY (AI Studio key) before listing models.","Or pass the key programmatically: litellm.get_model_list('gemini', api_key='AIza...').","Ensure GEMINI_API_BASE, if set, is a non-empty valid URL (or unset it to use the default endpoint)."],"exampleFix":"# before\nmodels = litellm.get_model_list(\"gemini\")  # no key in env -> ValueError\n\n# after\nimport os\nos.environ[\"GOOGLE_API_KEY\"] = \"AIza...\"\nmodels = litellm.get_model_list(\"gemini\")","handlingStrategy":"validation","validationCode":"import os\n\ndef can_list_gemini_models() -> bool:\n    return bool(os.getenv(\"GOOGLE_API_KEY\") or os.getenv(\"GEMINI_API_KEY\")) and bool(\n        os.getenv(\"GEMINI_API_BASE\") or True\n    )","typeGuard":null,"tryCatchPattern":"try:\n    models = litellm.get_model_list(\"gemini\")\nexcept ValueError as e:\n    if \"GEMINI_API_KEY/GOOGLE_API_KEY is not set\" in str(e):\n        raise RuntimeError(\"Gemini credentials missing; cannot discover models\") from e\n    raise","preventionTips":["Load .env/secret manager before any model discovery runs (ordering bug is the #1 cause).","Pass api_key to get_model_list explicitly in scripts instead of depending on shell env.","Treat empty-string env vars as unset — clear them at bootstrap."],"tags":["gemini","authentication","model-listing","configuration"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}