From 404b31db4c42874cd62f4be8df69419e68ed96f2 Mon Sep 17 00:00:00 2001 From: liangming Date: Sun, 23 Aug 2026 13:13:00 +0800 Subject: [PATCH] Retry Google Auth transport failures --- google/genai/_api_client.py | 2 +- google/genai/tests/client/test_retries.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/google/genai/_api_client.py b/google/genai/_api_client.py index 3c4cbc247..93699ae6d 100644 --- a/google/genai/_api_client.py +++ b/google/genai/_api_client.py @@ -577,7 +577,7 @@ def retry_args(options: Optional[HttpRetryOptions]) -> _common.StringDict: retriable_codes = options.http_status_codes or _RETRY_HTTP_STATUS_CODES retry = tenacity.retry_if_exception( lambda e: (isinstance(e, errors.APIError) and e.code in retriable_codes) - or isinstance(e, _HTTPX_TRANSIENT_EXC), + or isinstance(e, _HTTPX_TRANSIENT_EXC + (auth_exceptions.TransportError,)), ) wait = tenacity.wait_exponential_jitter( initial=options.initial_delay or _RETRY_INITIAL_DELAY, diff --git a/google/genai/tests/client/test_retries.py b/google/genai/tests/client/test_retries.py index d02711313..e92cfe822 100644 --- a/google/genai/tests/client/test_retries.py +++ b/google/genai/tests/client/test_retries.py @@ -19,6 +19,8 @@ from collections.abc import Sequence import datetime from unittest import mock + +from google.auth import exceptions as auth_exceptions import pytest try: @@ -204,6 +206,12 @@ def test_retry_args_retries_httpx_transport_errors(): assert not retry.predicate(ValueError('not a transport error')) +def test_retry_args_retries_google_auth_transport_errors(): + args = api_client.retry_args(types.HttpRetryOptions()) + assert args['retry'].predicate(auth_exceptions.TransportError('refresh failed')) + assert not args['retry'].predicate(auth_exceptions.RefreshError('invalid credentials')) + + def _patch_auth_default(): return mock.patch( 'google.auth.default',