From 46eea13a9f4fde9c133cf7da651c7879b58fd667 Mon Sep 17 00:00:00 2001 From: Oz Ben-Ami Date: Tue, 29 Jul 2025 11:14:17 -0400 Subject: [PATCH] fix: Clear cached GCP creds on reauthentication error Co-authored-by: aider (vertex_ai/gemini-2.5-pro) --- litellm/llms/vertex_ai/vertex_llm_base.py | 30 +++++++++++++++++------ 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/litellm/llms/vertex_ai/vertex_llm_base.py b/litellm/llms/vertex_ai/vertex_llm_base.py index ae43e1fd16..c24f26fffa 100644 --- a/litellm/llms/vertex_ai/vertex_llm_base.py +++ b/litellm/llms/vertex_ai/vertex_llm_base.py @@ -469,14 +469,28 @@ class VertexBase: raise ValueError("Credentials are None after loading") if _credentials.expired: - verbose_logger.debug( - f"Credentials expired, refreshing for project_id: {project_id}" - ) - self.refresh_auth(_credentials) - self._credentials_project_mapping[credential_cache_key] = ( - _credentials, - credential_project_id, - ) + try: + verbose_logger.debug( + f"Credentials expired, refreshing for project_id: {project_id}" + ) + self.refresh_auth(_credentials) + self._credentials_project_mapping[credential_cache_key] = ( + _credentials, + credential_project_id, + ) + except Exception as e: + # if refresh fails, it's possible the user has re-authenticated via `gcloud auth application-default login` + # in this case, we should try to reload the credentials by clearing the cache and retrying + if "Reauthentication is needed" in str(e): + verbose_logger.debug( + f"Credential refresh failed for project_id: {project_id}. Deleting from cache and retrying." + ) + del self._credentials_project_mapping[credential_cache_key] + return self.get_access_token( + credentials=credentials, + project_id=project_id, + ) + raise e ## VALIDATION STEP if _credentials.token is None or not isinstance(_credentials.token, str):