BerriAI/litellm · error · ValueError

Google Secret Manager requires a project ID, please set 'GOO

Error message

Google Secret Manager requires a project ID, please set 'GOOGLE_SECRET_MANAGER_PROJECT_ID' in your .env

What it means

Configuration check in GoogleSecretManager.__init__ after the enterprise-license gate: no project ID could be resolved. Google Secret Manager is project-scoped, so the manager requires GOOGLE_SECRET_MANAGER_PROJECT_ID (typically in .env) to know which project to read secrets from.

Source

Thrown at litellm/secret_managers/google_secret_manager.py:34

        self,
        refresh_interval: int | None = SECRET_MANAGER_REFRESH_INTERVAL,
        always_read_secret_manager: bool | None = False,
    ) -> None:
        """
        Args:
            refresh_interval (int, optional): The refresh interval in seconds. Defaults to 86400. (24 hours)
            always_read_secret_manager (bool, optional): Whether to always read from the secret manager. Defaults to False. Since we do want to cache values
        """
        from litellm.proxy.proxy_server import premium_user

        if premium_user is not True:
            raise ValueError(
                f"Google Secret Manager requires an Enterprise License {CommonProxyErrors.not_premium_user.value}"
            )
        super().__init__()
        self.PROJECT_ID = os.environ.get("GOOGLE_SECRET_MANAGER_PROJECT_ID", None)
        if self.PROJECT_ID is None:
            raise ValueError(
                "Google Secret Manager requires a project ID, please set 'GOOGLE_SECRET_MANAGER_PROJECT_ID' in your .env"
            )
        self.sync_httpx_client = _get_httpx_client()
        litellm.secret_manager_client = self
        litellm._key_management_system = KeyManagementSystem.GOOGLE_SECRET_MANAGER
        _refresh_interval = os.environ.get("GOOGLE_SECRET_MANAGER_REFRESH_INTERVAL", refresh_interval)
        _refresh_interval = int(_refresh_interval) if _refresh_interval else refresh_interval
        self.cache = InMemoryCache(default_ttl=_refresh_interval)  # store in memory for 1 day

        _always_read_secret_manager: Final = os.environ.get(
            "GOOGLE_SECRET_MANAGER_ALWAYS_READ_SECRET_MANAGER",
        )
        if _always_read_secret_manager and _always_read_secret_manager.lower() == "true":
            self.always_read_secret_manager = True
        else:
            # by default this should be False, we want to use in memory caching for this. It's a bad idea to fetch from secret manager for all requests
            self.always_read_secret_manager = always_read_secret_manager or False

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Set GOOGLE_SECRET_MANAGER_PROJECT_ID in the environment or .env to your GCP project id.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/secret_managers/google_secret_manager.py:34 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/170ce6aaa1536d1d. Report an issue: GitHub.