{"record":{"id":"2d08b7bddc320af6","repo":"BerriAI/litellm","slug":"gemini-api-key-or-google-api-key-is-required-for-g","errorCode":null,"errorMessage":"GEMINI_API_KEY or GOOGLE_API_KEY is required for Gemini File Search","messagePattern":"GEMINI_API_KEY or GOOGLE_API_KEY is required for Gemini File Search","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/rag/ingestion/gemini_ingestion.py","lineNumber":93,"sourceCode":"            filename: Name of the file\n            content_type: MIME type\n            chunks: Ignored - Gemini handles chunking\n            embeddings: Ignored - Gemini handles embedding\n            existing_file_id: Existing provider file ID, unsupported for Gemini\n\n        Returns:\n            Tuple of (vector_store_id, file_id)\n        \"\"\"\n        vector_store_id = self.vector_store_config.get(\"vector_store_id\")\n\n        vector_store_config: Final = cast(dict[str, Any], self.vector_store_config)\n\n        # Get API credentials\n        api_key: Final = cast(str | None, vector_store_config.get(\"api_key\")) or GeminiModelInfo.get_api_key()\n        api_base: Final = cast(str | None, vector_store_config.get(\"api_base\")) or GeminiModelInfo.get_api_base()\n\n        if not api_key:\n            raise ValueError(\"GEMINI_API_KEY or GOOGLE_API_KEY is required for Gemini File Search\")\n\n        if not api_base:\n            raise ValueError(\"GEMINI_API_BASE is required\")\n\n        api_version: Final = \"v1beta\"\n        base_url: Final = f\"{api_base}/{api_version}\"\n\n        # Create File Search store if not provided\n        if not vector_store_id:\n            vector_store_id = await self._create_file_search_store(\n                api_key=api_key,\n                base_url=base_url,\n                display_name=self.ingest_name or \"litellm-rag-ingest\",\n            )\n\n        # Upload file to File Search store\n        result_file_id = None\n        if file_content and filename and vector_store_id:","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/rag/ingestion/gemini_ingestion.py#L75-L111","documentation":"Credential guard in the Gemini File Search ingestion flow: neither vector_store_config['api_key'] nor the GEMINI_API_KEY/GOOGLE_API_KEY environment variables yielded an API key, so requests to the Gemini File API cannot be authenticated. Set one of those environment variables or pass api_key in the vector store credentials.","triggerScenarios":"Thrown at litellm/rag/ingestion/gemini_ingestion.py:93 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set GEMINI_API_KEY or GOOGLE_API_KEY in your environment."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}