Skip to content

chore: merge main into next preserving next CI coverage - #4183

Merged
dpiet-oai merged 388 commits into
nextfrom
codex/nightly-next-catchup-20261026
Oct 26, 2026
Merged

dpiet-oai merged 388 commits into
nextfrom
codex/nightly-next-catchup-20261026

Conversation

@dpiet-oai

@dpiet-oai dpiet-oai commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Merge current public main into next, preserving both histories and next-specific CI coverage. Resolve the obsolete Rye/bootstrap and lockfile conflicts using main’s reviewed uv setup. Retain next’s existing budget policy unchanged.

Validation: Python support-policy check passes; workflow YAML parses; generated files match main exactly; the canonical public next checkpoint/budget check passes with zero custom generated lines. Hosted CI and required review remain pending. This PR requires a merge commit to preserve main ancestry.

Prerequisite: #4184 initializes the missing next policy pin. The trusted checker also requires a next merge queue. These policy/configuration requirements remain blocked; no checks have been bypassed.

The compatibility check reports removed/restructured symbols already present in current main relative to the older next baseline. The sync adds no SDK code beyond main; the existing next CI coverage is retained. This requires review as part of the next catch-up; the check has not been disabled.

simpleqt and others added 30 commits September 15, 2026 16:25
Change the shebangs in `examples/async_demo.py`, `examples/demo.py`,
`examples/streaming.py`, and `examples/video.py` from `poetry run
python` to `uv run python`, matching the repository's contributor setup
and example instructions.

Co-authored-by: Marcus Wood <marcuswood@openai.com>
Correct `re-using` to `reusing` in the synchronous and asynchronous
Azure client `copy()` docstrings. Validation: syntax-tree comparison
confirmed executable code is unchanged; whitespace and custom-code
budget checks passed. Focused security review found no issues.

Signed-off-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Marcus Wood <marcuswood@openai.com>
Update the README’s Responses API link to the current [API
reference](https://developers.openai.com/api/reference/resources/responses).
Validation: the destination was verified, and whitespace and custom-code
budget checks passed. Focused security review found no issues.

Co-authored-by: Chris Sims <chrissims@Chriss-MBP-16M3.charter.com>
Co-authored-by: Marcus Wood <marcuswood@openai.com>
In-memory uploads without a meaningful multipart filename can lose the
extension needed for format detection. Document the explicit filename
tuple and `.name` alternative, with an audio transcription example.
Related to #2315. Validation: snippet syntax and six offline sync/async
multipart checks passed; no live API testing. Focused security review
found no issues.

Co-authored-by: Marcus Wood <marcuswood@openai.com>
Update the existing module-client streaming example from GPT-4 to the
documented `gpt-5.6` alias for GPT-5.6 Sol. The [official model
documentation](https://developers.openai.com/api/docs/models/gpt-5.6-sol)
confirms the alias. Validation: Ruff, compilation, and offline mocked
streaming execution passed; no live API testing. Focused security review
found no issues.

---------

Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
Co-authored-by: Marcus Wood <marcuswood@openai.com>
five executable examples use an env shebang without `-S`:

```
examples/audio.py
examples/speech_to_text.py
examples/text_to_speech.py
examples/realtime/realtime.py
examples/realtime/push_to_talk_app.py
```

added `push_to_talk_app.py` per your review. i checked every mode-100755
file under `examples/` and those five are the only ones missing `-S`.
(`azure.py`, `azure_ad.py` and `module_client.py` are 755 with no
shebang at all — different issue, left alone.)

also correcting myself: i said linux env splits the args so this only
broke on older BSD. that's wrong, it fails there too — on coreutils 9.4
`./examples/audio.py` gives `env: 'rye run python': No such file or
directory`.

only shebang lines change. modes unchanged, ruff check + format clean on
all five.

---------

Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
Co-authored-by: Marcus Wood <marcuswood@openai.com>
## Summary

Several example scripts still reference `poetry` in their shebangs and
use the legacy Completions API, which is no longer documented in the
README. This PR brings them up to date:

- **Shebangs**: `demo.py`, `async_demo.py`, `streaming.py`, and
`video.py` all used `#!/usr/bin/env -S poetry run python`. The project
migrated to [Rye](https://rye.astral.sh/) and other examples (e.g.
`audio.py`, `speech_to_text.py`) already use `rye run python`. Updated
the four remaining files for consistency.

- **Deprecated API**: `async_demo.py` and `streaming.py` used the legacy
Completions endpoint (`client.completions.create` with
`gpt-3.5-turbo-instruct`). This endpoint isn't referenced in the README
and `gpt-3.5-turbo-instruct` is one of the last models supporting it.
Migrated both to the Chat Completions API
(`client.chat.completions.create`).

- **Model name**: `demo.py` referenced `gpt-4`. Updated to `gpt-4o` to
reflect current recommended usage.

## Changes

| File | Change |
|------|--------|
| `examples/demo.py` | shebang `poetry` → `rye`, model `gpt-4` →
`gpt-4o` |
| `examples/async_demo.py` | shebang `poetry` → `rye`,
`completions.create` → `chat.completions.create` |
| `examples/streaming.py` | shebang `poetry` → `rye`,
`completions.create` → `chat.completions.create` |
| `examples/video.py` | shebang `poetry` → `rye` |

## Test plan

- [x] `ruff check` passes on all modified files
- [x] `ruff format --check` passes on all modified files
- [x] Existing streaming tests (`tests/test_streaming.py`) pass
- [x] `import openai` works correctly

Co-authored-by: Marcus Wood <marcuswood@openai.com>
<!-- Thank you for contributing to this project! -->
<!-- The code in this repository is all auto-generated, and is not meant
to be edited manually. -->
<!-- We recommend opening an Issue instead, but you are still welcome to
open a PR to share for -->
<!-- an improvement if you wish, just note that we are unlikely to merge
it as-is. -->

- [x] I understand that this repository is auto-generated and my pull
request may not be merged

## Changes being requested

When using multiple AsyncOpenAI clients to send records to a local vLLM
server, we ran into an issue with garbage collection after switching
from the sync client to the async client. We started seeing a bunch of
errors like:

```
Traceback (most recent call last):\n  File \"/usr/local/lib/python3.9/dist-packages/httpx/_client.py\", line 1985, in aclose\n    await self._transport.aclose()\n  File \"/usr/local/lib/python3.9/dist-packages/httpx/_transports/default.py\", line 406, in aclose\n    await self._pool.aclose()\n  File \"/usr/local/lib/python3.9/dist-packages/httpcore/_async/connection_pool.py\", line 353, in aclose\n    await self._close_connections(closing_connections)\n  File \"/usr/local/lib/python3.9/dist-packages/httpcore/_async/connection_pool.py\", line 345, in _close_connections\n    await connection.aclose()\n  File \"/usr/local/lib/python3.9/dist-packages/httpcore/_async/connection.py\", line 173, in aclose\n    await self._connection.aclose()\n  File \"/usr/local/lib/python3.9/dist-packages/httpcore/_async/http11.py\", line 258, in aclose\n    await self._network_stream.aclose()\n  File \"/usr/local/lib/python3.9/dist-packages/httpcore/_backends/anyio.py\", line 53, in aclose\n    await self._stream.aclose()\n  File \"/usr/local/lib/python3.9/dist-packages/anyio/_backends/_asyncio.py\", line 1314, in aclose\n    self._transport.close()\n  File \"/usr/lib/python3.9/asyncio/selector_events.py\", line 698, in close\n    self._loop.call_soon(self._call_connection_lost, None)\n  File \"/usr/lib/python3.9/asyncio/base_events.py\", line 751, in call_soon\n    self._check_closed()\n  File \"/usr/lib/python3.9/asyncio/base_events.py\", line 515, in _check_closed\n    raise RuntimeError('Event loop is closed')\nRuntimeError: Event loop is closed\n
```

which indicated that the event loop was being closed before we could
close the client. Concurrently, we saw degraded performance. When we
switched to `with` blocks for resource management, the problem went away
(PR - https://github.com/apache/beam/pull/35053/files). I seems like
relying on normal garbage collection calling
https://github.com/openai/openai-python/blob/f588695f77aad9279a355f5f483d8debf92b46ed/src/openai/_base_client.py#L1318C21-L1318C37
can cause a meaningful performance issue because the event loop can be
destroyed before the client cleanup finishes.

Its not clear to me if the slowness was caused by:
1) Overhead associated with trying to call a closed event loop
2) Actually failing to close the connections

Regardless, it would be nice to doc this since switching clients did not
work without some minor changes.

---------

Co-authored-by: Marcus Wood <marcuswood@openai.com>
Non-functional changes only:
- Fixed minor spelling mistakes in comments
- Corrected typos in user-facing strings
- No variables, logic, or functional code was modified.

<!-- Thank you for contributing to this project! -->
<!-- The code in this repository is all auto-generated, and is not meant
to be edited manually. -->
<!-- We recommend opening an Issue instead, but you are still welcome to
open a PR to share for -->
<!-- an improvement if you wish, just note that we are unlikely to merge
it as-is. -->

- [x] I understand that this repository is auto-generated and my pull
request may not be merged

## Changes being requested
Integrate the typo-fixes.

## Additional context & links
None.

Signed-off-by: Marcel Petrick <mail@marcelpetrick.it>
Co-authored-by: Marcus Wood <marcuswood@openai.com>
Removes the unused fine-tuning data validators left behind when the
legacy CLI was removed. Deletes 809 lines; there are no remaining
callers or associated tests.

Validation: 217 tests passed, 2 skipped; all 13,122 tests collect. Ruff
lint, mypy, SDK imports, and wheel/sdist builds pass using the existing
frozen dependencies. The format check flags two unchanged files.
Aligns Live, forks, and sideband WebSocket diagnostics with the existing
SDK logging pattern: message sizes and generic connection and
queue-warning messages. Extends sync and async logging coverage.

Validation: 460 related tests passed, plus 84 logging tests with
Pydantic v1. Ruff, mypy, changed-file formatting, and wheel/sdist builds
pass.
- [x] I understand that this repository is auto-generated and my pull
request may not be merged

## Changes being requested

Fixes a routing regression in `AzureOpenAI` / `AsyncAzureOpenAI` after
`.copy()` / `.with_options()`.

This change is in **hand-maintained** code — `src/openai/lib/azure.py`
has no `File generated from our OpenAPI spec by Stainless` header, and
`copy()`/`with_options()` there is custom Azure logic, so it is not
affected by codegen.

### Problem

`AzureOpenAI.copy()` (aliased as `with_options()`) delegates to the base
`OpenAI.copy()`, which reconstructs the client from `base_url` and does
**not** pass `azure_endpoint` / `azure_deployment` back to
`AzureOpenAI.__init__`. Because `_azure_endpoint` and
`_azure_deployment` are only set from those constructor arguments, they
get reset to `None` on the copied client.

`_prepare_url()` uses those attributes to bypass the deployment path for
**non-deployment** endpoints:

```python
if self._azure_deployment and self._azure_endpoint and url not in _deployments_endpoints:
    # -> {endpoint}/openai/{url}   (no /deployments/<name>/)
```

Once they are `None`, that bypass no longer runs, so a client configured
with `azure_deployment` starts routing non-deployment endpoints (e.g.
`/models`) under the deployment path, which 404s.

### Reproduction (no network / key required)

```python
from openai import AzureOpenAI

c = AzureOpenAI(
    azure_endpoint="https://example.openai.azure.com",
    azure_deployment="my-deploy",
    api_version="2024-06-01",
    azure_ad_token="fake-token",
)
print(c._prepare_url("/models"))
# https://example.openai.azure.com/openai/models        ✅

c2 = c.with_options(timeout=30)
print(c2._azure_endpoint, c2._azure_deployment)          # None None
print(c2._prepare_url("/models"))
# https://example.openai.azure.com/openai/deployments/my-deploy/models   ❌ (404)
```

### Fix

Preserve `_azure_endpoint` / `_azure_deployment` on the copied client,
unless the caller overrides `base_url` in the copy (in which case the
old endpoint context is intentionally not carried over). Applied
symmetrically to the sync and async clients.

### Why minimal

- Only `copy()` in each of the two Azure clients changes; two guarded
lines each.
- Public API, credential handling, and the mutually-exclusive `base_url`
/ `azure_endpoint` constructor contract are untouched (the fix
deliberately avoids passing `azure_endpoint` alongside `base_url`).
- Deployment endpoints (e.g. `/chat/completions`) are unaffected —
`base_url` already encodes the deployment and `_build_request` continues
to guard on `"/deployments" in base_url.path`.

### Tests

Added `test_copy_preserves_deployment_routing` in
`tests/lib/test_azure.py` (sync + async × `copy` / `with_options`),
asserting that after a copy:
- `/models` → `{endpoint}/openai/models` (not nested under
`/deployments/<name>/`), and
- `/chat/completions` still keeps the deployment path.

Fails on `main` (wrong `/models` URL), passes with this change.

### Validation

- `rye run pytest tests/lib/test_azure.py` → 63 passed
- `rye run pytest tests/lib/` → all pass except a pre-existing,
unrelated failure
(`test_bedrock_auth_conformance.py::test_retry_signing_fixture`, which
fails identically on clean `main` in this environment)
- `ruff check` / `ruff format` clean on both files
- `pyright` and `mypy` clean on `src/openai/lib/azure.py`

### Compatibility

No public API change; behavior only changes for the previously-broken
post-copy case. Copies that override `base_url` keep their current
behavior.

## Additional context & links

Discovered by auditing sibling copy/state-preservation logic; no
existing issue or PR covers this. `.with_options()` is a common pattern
(per-request timeouts/headers), so Azure users combining it with
`azure_deployment` are likely to hit this.

---------

Co-authored-by: Marcus Wood <marcuswood@openai.com>
- [x] I understand that this repository is auto-generated and my pull
request may not be merged

## Changes being requested

Parse structured output only for messages with `phase="final_answer"` or
a missing/null phase. Commentary and other explicit phases retain their
text and metadata with `parsed=None`.

Currently, a response containing prose commentary followed by a valid
final JSON message raises a Pydantic validation error while parsing the
commentary. If the commentary happens to be schema-valid JSON instead,
`output_parsed` returns that intermediate value rather than the final
answer.

The phase policy is centralized in `parse_text()` in handwritten `lib/`
code. Both `parse_response()` and the streaming
`response.output_text.done` handler pass the message phase to it; stream
completion already uses `parse_response()`. `helpers.md` documents the
behavior, including forward compatibility for unknown explicit phases.

With commentary unparsed, the existing `output_parsed` accessor reaches
the final result without modification. Messages with
`phase="final_answer"`, `phase=None`, or an omitted phase retain
existing behavior, including validation errors for invalid final JSON.
Commentary text remains available through normal text fields and events.
The request's strict JSON Schema, refusals, and tool-call handling are
unchanged.

## Additional context & links

Fixes #3859.

Requesting SDK CODEOWNER review for this structured-parsing behavior
change.

### Validation

At current head `9594078438efabc943a1d0da79e46f209ea3c106`, after the
maintainer update:

- Responses tests: **229 passed with Pydantic v1** (Python 3.13.5) and
**229 passed with Pydantic v2** (Python 3.10.20).
- Added coverage includes unknown explicit phases, legacy streaming
phases, multiple text parts, and intermediate messages before/after
final output.

The following baseline reproduction and full-suite results were obtained
at the original PR head `f3cb72e3de1e4f1753002e362dcb2d45603d2762`:

Based on `main` at `d421d7ab8c0a5e4e00147407ef9941c7f2bc9c09`.

The regression tests use synthetic JSON responses and SSE through
`httpx2.MockTransport` and the public synchronous/asynchronous
`responses.parse()` and `responses.stream()` entry points. They require
no API credentials or live model calls. Every structured request also
checks that the strict JSON Schema is still sent.

Coverage includes prose and schema-valid commentary, absent/null phases,
commentary without a final result, final refusals, invalid final
JSON/schema, streamed text-done and completion parsing, interleaved tool
calls, and null/missing/empty completion output.

- New regression tests: **34 failed / 24 passed on unchanged main → 58
passed with this fix**, using identical fixtures.
- Full SDK suite on Python 3.13.5 (`./scripts/test -n 4`): **13,018
passed / 162 skipped with Pydantic v2**, and **13,004 passed / 176
skipped with Pydantic v1**.
- Responses tests: **165 passed with Pydantic v1**; **165 passed on
Python 3.10.20 with Pydantic v2**.
- `./scripts/lint` on Python 3.10.20: Ruff, Pyright, Mypy, and import
check passed.
- Ruff formatting for changed files and `git diff --check` passed.
- The custom-code budget check using main's unchanged checker passed; no
budget or generation metadata changes.

---------

Co-authored-by: naotaka1128 <5688448+naotaka1128@users.noreply.github.com>
Co-authored-by: Marcus Wood <marcuswood@openai.com>
…3867)

Validates non-negative integer retry limits, replaces infinity guidance
with a large-integer recommendation, and propagates application
exceptions without retrying. Retry logs now include attempt counts.
Default retry counts and backoff behavior are unchanged.

Closes #2737. Closes #2404.

Related proposals: #2739, #2956, #3804, #2460, #2491, and #3072. Also
relates to #3002 and #2962.

Validation: 1,147 tests passed (87 skipped); 144 focused Pydantic v1
tests passed. Ruff, Pyright, mypy, builds, and custom-code budget checks
passed. CI is pending on the updated commit. The previously observed
streaming error-message assertion failures reproduce on the base commit.
Automated Release PR
---


##
[3.14.1](v3.14.0...v3.14.1)
(2026-09-15)


### Bug Fixes

* **client:** validate retry limits and preserve application errors
([#3867](#3867))
([f86c721](f86c721))
* correct typo "th" to "the" in StreamAlreadyConsumed error message
([#3022](#3022))
([7186203](7186203))
* **examples:** correct Azure endpoint hostname
([#3298](#3298))
([543516c](543516c))
* **examples:** refresh chat streaming examples
([#2974](#2974))
([54f460e](54f460e))
* **examples:** split push-to-talk shebang arguments
([#3210](#3210))
([d241ed6](d241ed6))
* **examples:** use uv in remaining Python launchers
([#3821](#3821))
([8c76c4f](8c76c4f))
* log only metadata for Live WebSocket diagnostics
([#3865](#3865))
([ccc10f5](ccc10f5))
* **responses:** skip structured parsing for commentary
([#3861](#3861))
([6520df1](6520df1))


### Chores

* **examples:** bump module_client.py to gpt-5.6
([#3211](#3211))
([1493321](1493321))
* remove unused fine-tuning data validators
([#3863](#3863))
([9640f29](9640f29))


### Documentation

* clarify async client cleanup
([#2388](#2388))
([a3d83b5](a3d83b5))
* clarify filenames for in-memory file uploads
([#3729](#3729))
([cb27380](cb27380))
* **client:** correct retry jitter comment
([#2252](#2252))
([bdbbc16](bdbbc16))
* fix Realtime docstring wording
([#3535](#3535))
([8cb9ded](8cb9ded))
* fix reusing wording in Azure client docstrings
([#3061](#3061))
([dc625f9](dc625f9))
* fix streaming comment typo
([#3005](#3005))
([d421d7a](d421d7a))
* fix vector store polling helper paths
([#3101](#3101))
([2ef2de6](2ef2de6))
* **readme:** correct SSE terminology
([#2837](#2837))
([caaa9b4](caaa9b4))
* update Responses API reference link
([#3279](#3279))
([557bd06](557bd06))
* **utils:** correct query component RFC reference
([#3300](#3300))
([929a8a5](929a8a5))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
Removes 20 nonexistent types from the Realtime API reference import
example.

Verified that all 99 remaining imports execute successfully.
Documentation only; the custom-code budget check passes.
## Summary

Adds typed compaction progress notifications to Responses streams and
WebSocket connections.

## Changes

- Expose response.compaction.compacting with its item ID, output index,
and sequence number
- Pass progress notifications through response stream helpers without
changing the accumulated response
- Recognize credit_balance_exhausted errors from managed agent turns

Co-authored-by: markstuart-oai <323302876+markstuart-oai@users.noreply.github.com>
Preserves moderation results in chat stream snapshots and final
completions, including reports delivered after content. Later omitted or
null fields retain the last report; unmoderated streams remain
unchanged.

Validation: 324 tests passed (14 skipped), plus 19 focused tests with
Pydantic v1. Ruff, mypy, changed-file formatting, and wheel/sdist builds
pass.
## Summary

Adds optional model, reasoning, and service-tier settings to agent
session updates.

## Changes

- Allow session updates to select an agent model.
- Support reasoning effort and service-tier overrides, including
explicit reset values.
## Summary

Clarifies how to use incoming SIP call identifiers with the Realtime and
Live APIs. This update changes documentation only.

## Changes

- Document that incoming call IDs should be passed unchanged to Realtime
accept and reject requests.
- Direct Live API callers to the separate session ID from the incoming
transport event.

Co-authored-by: jbeckwith-oai <269036200+jbeckwith-oai@users.noreply.github.com>
## Summary

Adds typed model names for gpt-audio-mini and gpt-audio-mini-2025-12-15.

## Changes

- Add both audio-mini model names to shared and Responses model choices
- Preserve all existing accepted model names for compatibility

Co-authored-by: jbeckwith-oai <269036200+jbeckwith-oai@users.noreply.github.com>
## Summary

Adds an optional prewarm parameter to stable and beta Responses
prompt-cache options.

## Changes

- Expose the prewarm boolean option for Responses prompt caching
- Preserve omission and explicit false values without changing other
request options

Co-authored-by: jbeckwith-oai <269036200+jbeckwith-oai@users.noreply.github.com>
## Summary

Updates Images API request examples to use gpt-image-2.5-flare.

## Changes

- Use gpt-image-2.5-flare in standard and streaming image request
examples
- Preserve existing request parameters, model choices, and defaults

Co-authored-by: jbeckwith-oai <269036200+jbeckwith-oai@users.noreply.github.com>
## Summary

Adds managed Responses WebSocket sessions with custom request headers,
independent lanes and final-response collection.

## Changes

- Preserve client headers and per-connection overrides during WebSocket
handshakes
- Route independent response lanes and collect final responses
- Reconnect explicitly with application restoration and no automatic
request replay

## Validation

Local WebSocket regressions cover custom request headers, independent
response lanes, connection lifecycle and final-response collection.
Current-head hosted checks pass. Authenticated synchronous and
asynchronous WebSocket tests verified custom headers and two-response
continuation.

Co-authored-by: markstuart-oai <323302876+markstuart-oai@users.noreply.github.com>
The reconnect shutdown regression could fail during cleanup because the
replacement client handshake completed and closed before the server
application handler recorded it. Wait for explicit server acceptance
before returning the replacement socket to the shutdown path.

The test retains both close-deadline variants, the two-connection
assertion, and reader/ownership cleanup checks. No SDK runtime,
dependency, or release metadata changes.

Validation: 156 session tests, both targeted variants, Ruff and Pyright
pass. The local mypy run reports two identical errors on the unchanged
baseline and candidate.

Co-authored-by: markstuart-oai <323302876+markstuart-oai@users.noreply.github.com>
Automated Release PR
---


##
[3.15.0](v3.14.1...v3.15.0)
(2026-09-18)


### Features

* **api:** add agent session model settings
([#3882](#3882))
([4b15817](4b15817))
* **api:** add audio-mini model choices
([#3886](#3886))
([a6eeb3f](a6eeb3f))
* **api:** add compaction progress events
([#3866](#3866))
([98e1d24](98e1d24))
* **api:** add managed Responses WebSocket sessions
([#3887](#3887))
([3b865af](3b865af))
* **api:** add prompt-cache prewarming
([#3888](#3888))
([8f7cdb8](8f7cdb8))


### Bug Fixes

* preserve chat stream moderation results
([#3864](#3864))
([b77076d](b77076d))


### Chores

* **api:** clarify incoming SIP call ID usage
([#3885](#3885))
([f0457ab](f0457ab))
* **api:** update image request examples
([#3889](#3889))
([bb79676](bb79676))


### Documentation

* **realtime:** remove nonexistent type imports
([#3869](#3869))
([2971aaf](2971aaf))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
## Summary

Adds webhook endpoint management and event-type discovery through the
webhooks resource.

## Changes

- Create, list, retrieve, update, and delete webhook endpoints
- Rotate signing secrets and send sample events
- List the webhook event types available to the project
## Summary

Updates MCP tool documentation with deprecation guidance for models
released after September 1, 2026.

## Changes

- Document the connector_id deprecation in Responses, beta Responses,
and Realtime MCP tool types.
- Recommend server_url for remote MCP servers or tunnel_id for Secure
MCP Tunnels.
- Keep the existing connector field, supported values, and
request/response behavior available.
Automated Release PR
---


##
[3.16.0](v3.15.0...v3.16.0)
(2026-09-18)


### Features

* **api:** add webhook endpoint management
([#3892](#3892))
([9a11f6e](9a11f6e))


### Chores

* **api:** deprecate MCP connector_id
([#3894](#3894))
([1ccaf07](1ccaf07))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
Importing the SDK or accessing one API resource currently loads
unrelated resources, including Assistants. Load resource exports and
streaming helpers when first accessed to reduce startup work.

Existing import paths, class identity, static typing, wildcard imports,
and discovery are preserved. Code that inspects module dictionaries
directly may observe exports appearing later; import work and import
errors move to first access.

Regression tests cover import isolation, public exports, runtime
annotations, pickling, reloads, sync/async requests and streams, and
concurrent first access. Endpoint methods, models, dependencies, and
webhook behavior are unchanged.

Validation: 682 focused tests passed (14 skipped), along with Mypy,
Pyright, and Ruff. Python 3.10/3.14, HTTPX2, build, lint, and baseline
checks passed on the final revision. End-to-end testing also passed.

Co-authored-by: marcuswood-oai <323319819+marcuswood-oai@users.noreply.github.com>
dpiet-oai and others added 23 commits October 22, 2026 19:13
## Summary

Expand typed Decisions inputs and question instructions.

## Changes

- Support additional message roles, tool history, and JSON input
- Use shared Decisions text, image, and JSON types for structured
question instructions
- Add `DecisionInputMessageUnionParam` for all four message roles while
keeping `DecisionInputMessageParam` compatible with existing
user-message callers
- Export the configured Chat Completions request-message union

Co-authored-by: dpiet-oai <326640584+dpiet-oai@users.noreply.github.com>
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from
10.2.0 to 10.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/setup-uv/releases">astral-sh/setup-uv's
releases</a>.</em></p>
<blockquote>
<h2>v10.3.0 🌈 Add Python architecture selection</h2>
<h2>Changes</h2>
<p>This release adds the <code>python-arch</code> input to select a
Python architecture independently of the Python version. With
<code>uv</code> 0.13.0 or later, set <code>python-arch: x86_64</code> to
use x64 Python on Windows ARM64 runners.</p>
<p>It also includes embedded checksums for <code>uv</code> releases
through 0.13.0.</p>
<ul>
<li>Use macOS 15 runners for tests <a
href="https://github.com/charliermarsh"><code>@​charliermarsh</code></a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1081">#1081</a>)</li>
</ul>
<h2>🚀 Enhancements</h2>
<ul>
<li>Add <code>python-arch</code> support <a
href="https://github.com/zanieb"><code>@​zanieb</code></a> (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1079">#1079</a>)</li>
</ul>
<h2>🧰 Maintenance</h2>
<ul>
<li>chore: update known checksums for 0.13.0 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1089">#1089</a>)</li>
<li>chore: update known checksums for 0.12.24 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1084">#1084</a>)</li>
<li>chore: update known checksums for 0.12.23 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1082">#1082</a>)</li>
<li>chore: update known checksums for 0.12.22 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1080">#1080</a>)</li>
<li>chore: update known checksums for 0.12.21 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1078">#1078</a>)</li>
<li>chore: update known checksums for 0.12.20 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1076">#1076</a>)</li>
<li>chore: update known checksums for 0.12.19 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1068">#1068</a>)</li>
<li>chore: update known checksums for 0.12.18 @<a
href="https://github.com/apps/github-actions">github-actions[bot]</a>
(<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1065">#1065</a>)</li>
</ul>
<h2>⬆️ Dependency updates</h2>
<ul>
<li>chore(deps): bump zizmorcore/zizmor-action from 0.6.2 to 0.6.3 @<a
href="https://github.com/apps/dependabot">dependabot[bot]</a> (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1077">#1077</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/1c37ad07a6a961277cf70c0d37d6f313000f5884"><code>1c37ad0</code></a>
chore: update known checksums for 0.13.0 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1089">#1089</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/b3c9b5fc56ebc90760c43b1ac9552c0d1705d3ca"><code>b3c9b5f</code></a>
chore: update known checksums for 0.12.24 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1084">#1084</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/b06acff4b6a41bdd9cdac56507ead0bd7734e757"><code>b06acff</code></a>
Add <code>python-arch</code> support (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1079">#1079</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/c84232ca4fde9b022e20a930bfbbecd386b56fdf"><code>c84232c</code></a>
chore: update known checksums for 0.12.23 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1082">#1082</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/51fdd265d38a27ffcbca0da885510bc6fcc0ff55"><code>51fdd26</code></a>
Use macOS 15 runners for tests (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1081">#1081</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/a96208bed1fb5efb8da349c9bcc6cc58af9e7d74"><code>a96208b</code></a>
chore: update known checksums for 0.12.22 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1080">#1080</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/0e3884b860e20d3f4d5daa2347130beb51ccde47"><code>0e3884b</code></a>
chore: update known checksums for 0.12.21 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1078">#1078</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/bcf05803b55ef01a5ec6368521ee1b42f97bc438"><code>bcf0580</code></a>
chore: update known checksums for 0.12.20 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1076">#1076</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/b92a892142bde7280cd163c2abff341413314f9f"><code>b92a892</code></a>
chore(deps): bump zizmorcore/zizmor-action from 0.6.2 to 0.6.3 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1077">#1077</a>)</li>
<li><a
href="https://github.com/astral-sh/setup-uv/commit/227a0f6bea25cde3444f52decccf4a18de6635f4"><code>227a0f6</code></a>
chore: update known checksums for 0.12.19 (<a
href="https://redirect.github.com/astral-sh/setup-uv/issues/1068">#1068</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/setup-uv/compare/c18668ad3cf93ea998bef934396af7bb5c839dc7...1c37ad07a6a961277cf70c0d37d6f313000f5884">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=astral-sh/setup-uv&package-manager=github_actions&previous-version=10.2.0&new-version=10.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Automated Release PR
---


##
[3.37.0](v3.36.1...v3.37.0)
(2026-10-22)


### ⚠ BREAKING CHANGES

* **api:** This minor release includes a breaking change to Decisions
types. In Live response models, question `instructions` can now be a
string or a list of structured text, image, or JSON parts; check
`isinstance(question.instructions, str)` before using string operations
and handle the structured form. Decisions request input types also
include additional message roles and tool-history items, so update
exhaustive type checks accordingly. Existing string instructions and
`DecisionInputMessageParam` user-message inputs remain supported.


### Features

* **api:** expand Decisions input and question types
([#4158](#4158))
([1e45ad1](1e45ad1))


### Chores

* **api:** preserve file and video polling helpers
([#4155](#4155))
([7db9d88](7db9d88))
* **api:** preserve upload helpers and Live connection defaults
([#4152](#4152))
([a29dc39](a29dc39))
* **deps:** bump astral-sh/setup-uv from 10.2.0 to 10.3.0
([#4109](#4109))
([fa9a161](fa9a161))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
Co-authored-by: Daniel Piet <dp@openai.com>
On Python 3.10–3.13, parsing an unexpected response value into a model
with a PEP 604 union such as `int | str` raises `TypeError` from the
discriminator cache instead of continuing permissive parsing. Treat
unsupported weak keys as uncached for both lookup and insertion,
preserving discriminator selection and caching for supported keys.

Add four mocked request regressions: ordinary and discriminated PEP 604
union fallback, each through sync and async clients. Existing model
tests cover valid input, `typing.Union`, and cache reuse.

Validation on Python 3.12:
- Model, client, and regression suites: 362 passed / 2 skipped with
Pydantic 2.12.5; 349 passed / 15 skipped with Pydantic 1.10.26.
- Ruff lint/format and changed-file type checks passed. Pyright was
invoked directly with the SDK virtual environment; the repository
wrapper requires a newer Node version than was locally available.
Use the designated JSON error message in API status exception text,
falling back to the HTTP status when no string message is available.
Keep the full response and structured error attributes available for
explicit inspection. The server message itself remains unchanged.

Four sync/async regression cases cover JSON and non-JSON responses,
checking ordinary exception logging and preservation of the original
response. Client and regression suites pass with Pydantic v1 and v2 (299
passed, 2 skipped each); changed-file lint, formatting, and type checks
pass.
Malformed completed agent messages now produce an ordinary warning
identifying the affected field and expected type, for example
`Unexpected response type at content[0].text: expected a string.` Other
schema mismatches retain Pydantic's validation error code. Response
values remain available in the result and are omitted from warnings.

One regression test uses the existing sync/async and creation/follow-up
cases to check malformed and valid messages, including warnings treated
as errors.

Validation: result-collection suite passed on Pydantic 1 and 2 (100
passed, 2 skipped each); Ruff, mypy, pinned Pyright, and the custom-code
budget check passed.
## Summary

Preserves existing client configuration, request handling, response
parsing, and import paths.

## Changes

- Keep existing resource signatures, defaults, return types, and
imports.

Co-authored-by: jbeckwith-oai <269036200+jbeckwith-oai@users.noreply.github.com>
)

Namespaced function calls currently leave `parsed_arguments` empty or
parse against a same-named top-level tool's model. Resolve the function
inside the matching namespace. If the namespace or nested function is
unknown, leave arguments unparsed rather than selecting an unrelated
top-level tool. Preserve top-level lookup for calls without a namespace
and the deferred-tool convention where the namespace equals the function
name.

Materialize nested tool iterables before request serialization so
generators remain available for parsing, preserving Pydantic model
wrappers without modifying the caller's namespace dictionary. Both
changes now live in handwritten helpers (`_parsing/_responses.py` and
`_response_resources.py`); generated resource files are unchanged from
main.

Fixes #4064.

Validation after merging main `56f33a125`:
- Responses suite: 974 passed, 2 skipped on each of Pydantic 1 and 2.
- Five focused namespace cases cover nested-only tools, name collisions,
missing functions, unknown namespaces, and one-shot iterables.
- Existing sync/async parsing and streaming tests preserve deferred
top-level behavior. Additional MockTransport checks verify both review
cases across all four paths; no live API calls.
- Ruff/formatting, strict Pyright on all three changed files, and mypy
on both changed source files (`--python-version 3.10`) pass.
- Custom-code budget passes with zero generated-file customizations; no
budget change.
Following #4166, a function call with a registered name but an unrelated
namespace can leave arguments unparsed while the Responses tool runner
still dispatches the callback. Reject namespace mismatches before
dispatch and require parsed arguments for typed callbacks before caching
them.

Preserves namespace-aware parsing from #4166, ordinary calls without a
namespace, and deferred calls whose namespace equals the function name.
Extends existing runner tests to cover malformed JSON, schema-invalid
arguments, missing parsed arguments, and namespace mismatches across
sync/async and streaming/non-streaming execution. Rejected calls must
invoke no callback and submit no tool result.

Validation:
- Responses and runner suites: 2,728 passed, 2 skipped on each of
Pydantic 1 and 2.
- New regression cases fail before the fix and pass afterward.
- Standalone 44-case transport reproduction rejects unrelated namespaces
and preserves supported namespace behavior.
- Ruff, strict repository Pyright, and mypy pass locally.

Only handwritten runner code and existing tests change; generated files
and the namespace parser are unchanged.
## Changes being requested

Python's generated-file custom patch is now empty after #4157, but the
policy still allows 10,000 custom lines. Set `.castiron-ratchet.json` to
schema v2 strict mode with `max_custom_patch_lines: 0`, leaving zero
headroom for new customizations of generated files.

This policy-only PR activates the existing verifier: generated paths,
bytes, and Git modes must match the verified ownership manifest. The
cleanup is already generated and merged, so no further generator change
is needed to lower the ceiling.

## Additional context & links

The trusted checker from main `56a55f243960e05e6268bb48ba6bf45299b8f90b`
passes against candidate `1a9bb74cd036ce5a7fe920572263998f0f950fce`:

- Existing Castiron suite: `python3 -m unittest discover -s
scripts/castiron -p 'test_custom_code*.py'` — 221 tests, OK (1 skipped).
- Policy isolation passes; only `.castiron-ratchet.json` changes.
- 0 additions + 0 deletions = 0 custom lines; checked limit 0; 0 mixed
files.
- Strict verification passes with no violations against snapshot
`b045ae7e94f055f952b812dfc4ddee314a691df7`.

The report's base-policy headroom remains 10,000 until this policy
lands; the proposed zero limit is already enforced when checking this
PR. This activates strict policy on `main`; `next` has its own reviewed
policy pin protocol.
## Summary

Adds agent scheduling APIs, Live delegation controls, and prompt cache
lifetimes.

## Changes

- Add acknowledgement_delay_ms to Live delegation parameters.
- Add optional 30m and 12h TTLs to prompt cache breakpoints, including
Responses message inputs.
- Add the automations agent tool variant.
- Add audio voice deletion.
- Add beta agent scheduling APIs to create, list, retrieve, update,
delete, pause, and resume scheduled tasks, and to create, list, and
retrieve their invocations.
## Summary
- Read Bedrock JSON/JSONL fixture files with `encoding="utf-8"` instead
of the platform default encoding.
- Keep the opt-in Bedrock live env-file reader deterministic across
developer machines.

## Problem
These test fixtures and optional live-test env files are text inputs
with repo-controlled formats, but `Path.read_text()` defaults to the
host locale. On Windows or other non-UTF-8 locales, that can make the
Bedrock tests less portable than they need to be.

## Before / After
Before: Bedrock fixture loading depended on the platform default text
encoding.

After: the fixture and env-file readers explicitly decode as UTF-8.

## Verification
- `python -m py_compile tests/lib/test_bedrock_auth_conformance.py
tests/lib/bedrock_live.py`
- `uv run --with pytest --with pytest-asyncio --with pytest-xdist --with
jsonschema --with respx --with botocore python -m pytest -q
tests/lib/test_bedrock_auth_conformance.py` (`20 passed`)

Co-authored-by: Marcus Wood <marcuswood@openai.com>
## Summary

Support more message, tool call, and question input types in Live
Decisions.

## Changes

- Accept user, developer, system, and assistant messages in Live
Decision items.
- Add function and custom tool call and output types.
- Allow strings or structured instruction parts in Live Decision
questions.

Co-authored-by: dpiet-oai <326640584+dpiet-oai@users.noreply.github.com>
Automated Release PR
---


##
[3.38.0](v3.37.0...v3.38.0)
(2026-10-25)


### Features

* **api:** add delegation controls and prompt cache lifetimes
([#4169](#4169))
([43045fc](43045fc))
* **api:** expand Live Decision item and question types
([#4175](#4175))
([5d72315](5d72315))


### Bug Fixes

* **agents:** clarify result schema warnings
([#4165](#4165))
([cfa0a79](cfa0a79))
* format API status errors using the server message
([#4161](#4161))
([6ce5f05](6ce5f05))
* preserve fallback parsing for PEP 604 unions
([#4160](#4160))
([05dfea0](05dfea0))
* **responses:** resolve function arguments within their namespace
([#4166](#4166))
([81792ff](81792ff))
* **responses:** validate tool namespaces before runner dispatch
([#4167](#4167))
([56a55f2](56a55f2))


### Chores

* **api:** preserve client and resource compatibility
([#4157](#4157))
([56f33a1](56f33a1))
* enforce zero custom code in generated Python files
([#4168](#4168))
([d622f28](d622f28))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
## Changes being requested

Run the three fractional source-deadline regressions in one child
interpreter per sync/async mode, reducing interpreter launches from six
to two. Each scenario gets a fresh transcript and event loop; scenario
labels and tracebacks remain visible, and the parent retains a
five-second timeout.

## Additional context & links

- Preserves all three scenarios and their segment and closure
assertions. Pytest collects two nodes instead of six; an ordinary
failure does not skip later scenarios, but a hung child cannot reach
later scenarios in that mode.
- Local Python 3.10.16 / Pydantic 2.12.5, `DEFER_PYDANTIC_BUILD=false`,
serial pytest, three runs per revision: median process wall 10.72s →
6.62s; median summed test-call time 8.63s → 3.89s. Local cache
conditions do not measure CI gate latency or billed runner time.
- Validation: full file 104 passed on Python 3.10 with Pydantic v1 and
v2 and on Python 3.14 with Pydantic v2; Ruff/format passed. Python 3.14
required an explicit repository `PYTHONPATH` because this host sets
`PYTHONSAFEPATH=1`. Injected failure continued through later scenarios;
injected hang reported the scenario and stopped after 5.02s.
The long agent-session stream test delivered every one of 5,000 distinct
deltas twice. Keep all 5,000 distinct deltas and 3,978 cache evictions
before tool replay, while repeating only the last delta to verify
duplicate suppression after sustained eviction. Both client modes assert
that the evicted tool event is delivered twice and its handler runs
once.

Validation: `tests/lib/streaming/agents/test_streams.py` (90 passed, 4
skipped); Ruff lint and format checks passed. Three serial local trials
per revision on Python 3.10.16 / Pydantic 1.10.26
(`DEFER_PYDANTIC_BUILD=false`, `pytest -n 0`): median test-call times
2.64s → 1.42s sync and 2.35s → 1.20s async. Whole-gate savings have not
been established.
## Changes being requested

Remove three tests in `TestAsyncOpenAI` that use the synchronous
`OpenAI` fixture and repeat the corresponding `TestOpenAI` assertions
for extra JSON, headers, and query parameters. Correct the standard and
custom HTTP client inputs in both no-trailing-slash tests so they
actually exercise base URLs without a trailing slash.

## Additional context & links

- Full changed file: `292 passed, 2 skipped`; Ruff lint and format
checks passed.
- Focused selection: 14 cases before, 11 after. Three sequential local
runs per revision on Python 3.10 with one pytest process had median wall
time of 2.96 s before and 3.05 s after; the timing does not demonstrate
a speedup.
## Summary

Adds gpt-6.1-terra to known model type hints for Chat Completions and
Responses.

## Changes

- Accept gpt-6.1-terra as a named model value while retaining custom
model strings.

Co-authored-by: marcuswood-oai <323319819+marcuswood-oai@users.noreply.github.com>
Automated Release PR
---


##
[3.39.0](v3.38.0...v3.39.0)
(2026-10-26)


### Features

* **api:** add gpt-6.1-terra model identifier
([#4180](#4180))
([e8beb1a](e8beb1a))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
Bumps
[actions/upload-artifact](https://github.com/actions/upload-artifact)
from 7.0.1 to 7.0.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/upload-artifact/releases">actions/upload-artifact's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Improves artifact download retries when the service returns HTTP 429
(rate limiting), including honoring valid Retry-After headers.</li>
<li>Updates <code>@​actions/artifact</code> to v6.3.1.</li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/tunc-d"><code>@​tunc-d</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/upload-artifact/pull/821">actions/upload-artifact#821</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/upload-artifact/compare/v7.0.1...v7.0.2">https://github.com/actions/upload-artifact/compare/v7.0.1...v7.0.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/upload-artifact/commit/cf430e030ddbb5b0abf93d22962f4752f3646cd9"><code>cf430e0</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/822">#822</a>
from actions/tunc-d-prepare-upload-v7-0-2</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/c2acdedd35a8824a1552c7137f8c18288c3ea469"><code>c2acded</code></a>
chore: prepare v7.0.2 release</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/4687c1bbaa0a58abb517d90b4bbade6754c80c1a"><code>4687c1b</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/821">#821</a>
from actions/tunc-d-upload-artifact-package-bump</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/8cbe1bebdb858105d8fdd88f81404d4de4595719"><code>8cbe1be</code></a>
Bump <code>@​actions/artifact</code> to 6.3.1</li>
<li>See full diff in <a
href="https://github.com/actions/upload-artifact/compare/v7.0.1...cf430e030ddbb5b0abf93d22962f4752f3646cd9">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps
[actions/download-artifact](https://github.com/actions/download-artifact)
from 8.0.1 to 8.0.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/download-artifact/releases">actions/download-artifact's
releases</a>.</em></p>
<blockquote>
<h2>v8.0.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Update the readme by <a
href="https://github.com/danwkennedy"><code>@​danwkennedy</code></a> in
<a
href="https://redirect.github.com/actions/download-artifact/pull/473">actions/download-artifact#473</a></li>
<li>Improves artifact download retries when the service returns HTTP 429
(rate limiting), including honoring valid Retry-After headers.</li>
<li>Update <code>@​actions/artifact</code> to 6.3.1 by <a
href="https://github.com/tunc-d"><code>@​tunc-d</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/492">actions/download-artifact#492</a></li>
<li>Prepare download-artifact v8.0.2 by <a
href="https://github.com/tunc-d"><code>@​tunc-d</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/493">actions/download-artifact#493</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/tunc-d"><code>@​tunc-d</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/download-artifact/pull/492">actions/download-artifact#492</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/download-artifact/compare/v8.0.1...v8.0.2">https://github.com/actions/download-artifact/compare/v8.0.1...v8.0.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/download-artifact/commit/9000827ccba6bdab643e8b6fd33ac0654aef8333"><code>9000827</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/493">#493</a>
from actions/tunc-d-prepare-download-v8-0-2</li>
<li><a
href="https://github.com/actions/download-artifact/commit/e455989ae00f5bdd4054f05d3e972c6bf8a62dc5"><code>e455989</code></a>
Prepare download-artifact v8.0.2</li>
<li><a
href="https://github.com/actions/download-artifact/commit/a00b90c4a2f01d73a8c89552caabca6ea3b43137"><code>a00b90c</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/492">#492</a>
from actions/tunc-d-download-artifact-package-bump</li>
<li><a
href="https://github.com/actions/download-artifact/commit/29bb7ce6af5345aeab5bb4774ce7249ee3ccc27f"><code>29bb7ce</code></a>
Update <code>@​actions/artifact</code> to 6.3.1</li>
<li><a
href="https://github.com/actions/download-artifact/commit/484a0b528fb4d7bd804637ccb632e47a0e638317"><code>484a0b5</code></a>
Update the readme (<a
href="https://redirect.github.com/actions/download-artifact/issues/473">#473</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/download-artifact/compare/v8.0.1...9000827ccba6bdab643e8b6fd33ac0654aef8333">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [openai/codex-action](https://github.com/openai/codex-action) from
1.12 to 1.13.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/openai/codex-action/blob/main/CHANGELOG.md">openai/codex-action's
changelog</a>.</em></p>
<blockquote>
<h1>codex-action Changelog</h1>
<h2><a
href="https://github.com/openai/codex-action/tree/v1.13">v1.13</a>
(2026-10-05)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/183">#183</a>
preserve system service access when restricting runner sockets under
Linux <code>drop-sudo</code>.</li>
<li>Bound output draining to five seconds after Codex exits so
descendants retaining log streams cannot keep the action open.</li>
<li>Linux <code>drop-sudo</code> now requires <code>setfacl</code> (the
<code>acl</code> package) and ACL support on <code>/run</code>.</li>
</ul>
<h2><a
href="https://github.com/openai/codex-action/tree/v1.12">v1.12</a>
(2026-08-20)</h2>
<ul>
<li>Strengthen Linux runner privilege isolation and Responses API proxy
credential handling.</li>
<li>Reject Codex arguments and configuration overrides that conflict
with protected execution settings.</li>
<li>Require unprivileged user namespaces for Linux
<code>drop-sudo</code>; run the action after steps that need
<code>sudo</code>, Docker, or privileged service sockets.</li>
<li>Document runner requirements, permission-profile behavior, and
trusted configuration boundaries.</li>
</ul>
<h2><a
href="https://github.com/openai/codex-action/tree/v1.11">v1.11</a>
(2026-07-04)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/116">#116</a>
keep the permission profile helper backward compatible</li>
</ul>
<h2><a
href="https://github.com/openai/codex-action/tree/v1.10">v1.10</a>
(2026-07-02)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/113">#113</a>
add Codex permission profile support</li>
</ul>
<h2><a href="https://github.com/openai/codex-action/tree/v1.9">v1.9</a>
(2026-06-22)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/85">#85</a>
update the internal <code>setup-node</code> pin to
<code>v6.3.0</code></li>
</ul>
<h2><a href="https://github.com/openai/codex-action/tree/v1.8">v1.8</a>
(2026-04-29)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/91">#91</a>
tighten what bots are allowed</li>
</ul>
<h2><a href="https://github.com/openai/codex-action/tree/v1.7">v1.7</a>
(2026-04-24)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/89">#89</a>
restrict bot permission bypass</li>
</ul>
<h2><a href="https://github.com/openai/codex-action/tree/v1.6">v1.6</a>
(2026-03-16)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/77">#77</a>
enable GitHub-hosted Linux bubblewrap support</li>
</ul>
<h2><a href="https://github.com/openai/codex-action/tree/v1.5">v1.5</a>
(2026-03-16)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/74">#74</a>
harden shell interpolation in action workflows</li>
</ul>
<h2><a href="https://github.com/openai/codex-action/tree/v1.4">v1.4</a>
(2025-11-19)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/58">#58</a>
revert <a
href="https://redirect.github.com/openai/codex-action/issues/56">#56</a>
and use the latest stable version of Codex CLI again</li>
</ul>
<h2><a href="https://github.com/openai/codex-action/tree/v1.3">v1.3</a>
(2025-11-19)</h2>
<ul>
<li><a
href="https://redirect.github.com/openai/codex-action/pull/56">#56</a>
temporarily set the default version of Codex CLI to
<code>0.58.0</code></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/openai/codex-action/commit/bdf19a4a223ec2549a3e2274a0cf61556bc07675"><code>bdf19a4</code></a>
docs: update changelog for v1.13 (<a
href="https://redirect.github.com/openai/codex-action/issues/185">#185</a>)</li>
<li><a
href="https://github.com/openai/codex-action/commit/66a81490a2326ee818531f7021d77e6398ae7062"><code>66a8149</code></a>
fix: preserve service access and bound log draining (<a
href="https://redirect.github.com/openai/codex-action/issues/183">#183</a>)</li>
<li>See full diff in <a
href="https://github.com/openai/codex-action/compare/86365089eb2b84e0a8fb0717b304f8bdcb13b20e...bdf19a4a223ec2549a3e2274a0cf61556bc07675">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=openai/codex-action&package-manager=github_actions&previous-version=1.12&new-version=1.13)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Dan Piet <dp@openai.com>
@dpiet-oai
dpiet-oai requested a review from a team as a code owner October 26, 2026 20:57
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-26T21:01:53.212348Z 9218a5a PR opened
🔒 Security Review ✅ Completed 2026-10-26T21:02:00.457318Z 9218a5a PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Castiron custom code

⚠️ Report unavailable for a29464e71965.

The report setup or validation failed. Inspect the workflow run.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9218a5a34e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/ci.yml
Comment on lines +409 to 413
uv run --locked --all-extras python -c 'import openai; from openai import AsyncOpenAI, OpenAI'
uv run --locked --all-extras pytest -o addopts= --quiet \
tests/test_client.py \
tests/test_streaming.py \
tests/lib/test_pydantic.py

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore the required next CI aggregate

For next pull requests and merge groups, this merge removes the workflow's only producer of the ci-required (next) status. The preceding next-track CI change introduced that single aggregate specifically for branch protection and made it fail when any required lint, build, test, or policy job failed; once the branch requires that context, every next change now remains blocked because the status is never reported. Restore an aggregate compatible with the new matrix jobs, or update branch protection atomically.

Useful? React with 👍 / 👎.

Comment on lines 3 to 4
pull_request:
types: [opened, synchronize, reopened, edited]
branches:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Retrigger breaking-change checks after PR retargeting

When a pull request's base is changed between main and next, GitHub emits the edited action, but the default pull_request activity set used here does not include it. Because this job's check name and BASE_SHA depend on the selected base, a retargeted PR retains the result for the old target and never produces the newly required detect-breaking-changes or detect-breaking-changes (next) context. Preserve the explicit edited trigger that existed before this merge.

Useful? React with 👍 / 👎.

@dpiet-oai
dpiet-oai merged commit ca5b39d into next Oct 26, 2026
46 of 49 checks passed
@dpiet-oai
dpiet-oai deleted the codex/nightly-next-catchup-20261026 branch October 26, 2026 22:44
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.