Repository navigation
chore: merge main into next preserving next CI coverage - #4183
Conversation
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>
## 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 /> [](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 /> [](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>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Castiron custom code
The report setup or validation failed. Inspect the workflow run. |
There was a problem hiding this comment.
💡 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".
| 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 |
There was a problem hiding this comment.
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 👍 / 👎.
| pull_request: | ||
| types: [opened, synchronize, reopened, edited] | ||
| branches: |
There was a problem hiding this comment.
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 👍 / 👎.
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.