Skip to content

feat(api)!: migrate to HTTPX2 - #3594

Draft
apcha-oai wants to merge 1 commit into
mainfrom
castiron/promotions/pr-19-4e6fde5c2ff2
Draft

feat(api)!: migrate to HTTPX2#3594
apcha-oai wants to merge 1 commit into
mainfrom
castiron/promotions/pr-19-4e6fde5c2ff2

Conversation

@apcha-oai

@apcha-oai apcha-oai commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Makes HTTPX2 the default HTTP client for the next major Python SDK release. See the HTTPX Migration Guide for complete customer-facing migration instructions.

Customer migration

  • Default clients: OpenAI() and AsyncOpenAI() use HTTPX2 automatically; API calls, parsed responses, streaming, retries, authentication, and numeric timeouts retain their existing interfaces.
  • Dependencies: pip install openai installs HTTPX2 instead of HTTPX. Applications importing httpx through the SDK's former transitive dependency must migrate to httpx2 or install httpx explicitly.
  • TLS trust store: HTTPX2 uses the operating-system trust store instead of certifi. This can break certificate verification even with the default client; configure the system trust store, SSL_CERT_FILE, SSL_CERT_DIR, or a custom ssl.SSLContext as needed.
  • Custom HTTP integrations: Migrate custom clients, transports, timeout objects, authentication handlers, hooks, request mocks, and instrumentation to their HTTPX2 equivalents. Raw requests, responses, and transport exceptions are now HTTPX2 objects.
  • aiohttp: openai[aiohttp] and DefaultAioHttpClient() remain supported through an HTTPX2-native transport without installing HTTPX or httpx-aiohttp.
  • Legacy escape hatch: Explicitly installed httpx.Client, httpx.AsyncClient, and httpx-aiohttp clients remain supported when passed through http_client. This compatibility is runtime-only; legacy clients are not supported by static type checkers such as mypy or Pyright. Legacy HTTPX support is provided as a migration aid and may be discontinued.

See httpx2.md for examples and detailed migration cases.

Implementation notes

  • Replace the SDK’s default clients and HTTP-facing types with HTTPX2.
  • Test legacy HTTPX and aiohttp compatibility separately, including a real request through the legacy aiohttp adapter.

Vendored dependencies
We've vendored a few dependencies in so that we can avoid installing httpx by default for both normal dependencies and dev dependencies. This was the fastest path to unblock migration; we are happy to upstream
these changes if it makes sense for those package's dependencies.

  • Fork RESPX under tests/respx2 so existing request-mocking tests work without HTTPX.
    • This is for convenience so we can mechanically rewrite tests.
  • Vendor the upstream HTTPX2 aiohttp adapter, including its original license and attribution.
    • This is to avoid aiohttp bringing in httpx by default for now.

Issues

Castiron-Internal-PR: openai/openai-python-internal#19
Castiron-Source-SHA: 4e6fde5c2ff2e0ddcf7a6421317ad8af3f20f46c
Castiron-Public-Base-SHA: ea17fda
Comment thread src/openai/lib/azure.py
Comment thread src/openai/lib/azure.py Dismissed
Comment thread tests/respx2/patterns.py
Comment thread tests/respx2/patterns.py
Comment thread tests/respx2/patterns.py
Comment thread tests/respx2/patterns.py
Comment thread tests/respx2/api.py
Comment thread tests/respx2/api.py
Comment thread tests/respx2/router.py
Comment thread tests/respx2/router.py
@apcha-oai apcha-oai linked an issue Aug 10, 2026 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant