Skip to content

fix(retry): retry on httpx.TimeoutException with HttpRetryOptions#2345

Merged
yinghsienwu merged 3 commits intogoogleapis:mainfrom
MukundaKatta:fix/retry-httpx-timeout
Apr 27, 2026
Merged

fix(retry): retry on httpx.TimeoutException with HttpRetryOptions#2345
yinghsienwu merged 3 commits intogoogleapis:mainfrom
MukundaKatta:fix/retry-httpx-timeout

Conversation

@MukundaKatta
Copy link
Copy Markdown
Contributor

Closes #2337.

httpx.TimeoutException was not in the retryable-exception tuple, so requests timed out and surfaced the error even when HttpRetryOptions was configured. Added the exception (along with httpx.ConnectError) so transient transport failures retry like other recoverable errors.

Test added in google/genai/tests/client/test_retries.py::test_retry_args_retries_httpx_transport_errors.

The retry predicate in `retry_args` only matched `errors.APIError` subclasses,
so lower-level httpx transport exceptions (`httpx.TimeoutException`,
`httpx.ConnectError`, and their subclasses such as `ReadTimeout` /
`ConnectTimeout`) were silently dropped and never retried, even when
`HttpRetryOptions` was explicitly configured.

Long-running LLM inference calls regularly hit transient transport errors
from load balancers, NAT gateways, and idle TCP timeouts. Vertex AI's
retry strategy guidance lists socket timeouts and TCP disconnects as
retryable, so honoring those here matches user expectations.

Fixes googleapis#2337.
@Venkaiahbabuneelam Venkaiahbabuneelam self-assigned this Apr 27, 2026
@Venkaiahbabuneelam Venkaiahbabuneelam added the size:M Code changes between 10-40 lines label Apr 27, 2026
copybara-service Bot pushed a commit that referenced this pull request Apr 27, 2026
--
b5c7090 by Mukunda Rao Katta <mukunda.vjcs6@gmail.com>:

fix(retry): retry on httpx.TimeoutException with HttpRetryOptions

The retry predicate in `retry_args` only matched `errors.APIError` subclasses,
so lower-level httpx transport exceptions (`httpx.TimeoutException`,
`httpx.ConnectError`, and their subclasses such as `ReadTimeout` /
`ConnectTimeout`) were silently dropped and never retried, even when
`HttpRetryOptions` was explicitly configured.

Long-running LLM inference calls regularly hit transient transport errors
from load balancers, NAT gateways, and idle TCP timeouts. Vertex AI's
retry strategy guidance lists socket timeouts and TCP disconnects as
retryable, so honoring those here matches user expectations.

Fixes #2337.

FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 906620787
@yinghsienwu yinghsienwu merged commit 0598bab into googleapis:main Apr 27, 2026
13 checks passed
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
…ion Usage.

FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 904057715
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 905174939
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
…ion Usage.

FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 904057715
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
…breakdown to Interaction Usage.

FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 906115416
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
`import google.genai` no longer eagerly imports `mcp`. The public
symbols `McpClientSession`, `McpCallToolResult`, and `mcp_types`
resolve lazily on first attribute access (PEP 562 `__getattr__`).

FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 905291907
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 905174939
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 905174939
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 906585802
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
…ion Usage.

FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 904057715
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 906585802
copybara-service Bot pushed a commit that referenced this pull request Apr 28, 2026
FUTURE_COPYBARA_INTEGRATE_REVIEW=#2345 from MukundaKatta:fix/retry-httpx-timeout 9b2d886
PiperOrigin-RevId: 907092948
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready to pull size:M Code changes between 10-40 lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

httpx.TimeoutException is not retried despite HttpRetryOptions being configured

4 participants