Skip to content

fix(examples): reject unsuccessful background responses - #2600

Merged
HAYDEN-OAI merged 1 commit into
mainfrom
codex/background-response-failures
Sep 4, 2026
Merged

HAYDEN-OAI merged 1 commit into
mainfrom
codex/background-response-failures

Conversation

@HAYDEN-OAI

Copy link
Copy Markdown
Contributor

Summary

The background streaming example treats an initial response.failed or response.incomplete event as an interruption, unnecessarily retrieves the response again, and can finish with exit code 0. An unsuccessful resumed response is also printed as a successful result.

Add six lines to the example:

  • Reject failed/incomplete events in the initial stream before the demonstration's sequence-10 cutoff can trigger a resume.
  • Require the resumed finalResponse() status to be completed before printing its result.

The final-status check is necessary because starting_after: 10 can filter an early terminal event from iteration while the accumulated response still records its failed/incomplete status. No cursor, replay, SDK, parsing, retry, or timeout behavior changes.

Only the handwritten example and its existing test harness change; both are absent from the pinned Castiron generated snapshot. Open PRs were checked and none covers this issue.

Regression coverage and validation

  • Reused the existing real-CLI/public-SDK subprocess and loopback-HTTP harness. Its four original completion/resumption scenarios now also cover failed and incomplete responses: before and at the initial cutoff, after explicit resumption, and after early EOF with a filtered terminal event.
  • 8 new regressions failed before the fix; all 4 original success controls passed.
  • 49 focused tests passed on Node 22.22.2 and Node 24.19.0 via ./scripts/test tests/lib/background-streaming-example.test.ts tests/lib/ResponseStream.test.ts.
  • 36 independent actual CLI cases passed—12 each on Node 22.0.0, 24.19.0, and 26.7.0. Verified exit codes, one POST versus POST+GET, resumption behavior, and successful output. No live API calls or real credentials were used.
  • tsc --noEmit, pinned Oxfmt 0.62.0, available Oxlint 1.76.0, and git diff --check passed.

Local focused tests used cached Vitest 4.1.10/Oxlint 1.76.0 rather than the repository's 4.1.11/1.79.0 pins. Fresh frozen installation remains blocked by missing publication-time metadata for qs@6.16.0 in the configured registry; no safeguards, dependencies, lockfiles, or configuration were changed. CI will verify the pinned toolchain.

Adversarial self-review

Reviewed cutoff ordering, filtered replay events, terminal status, existing iterator abort/cleanup, API/transport error precedence, minimum-runtime compatibility, and missing regressions. Independent review of the actual diff found no actionable issue. New thrown errors contain only event type/status, and tests exclude synthetic private server details from stderr; the example's existing explicit event logging is unchanged.

@HAYDEN-OAI
HAYDEN-OAI requested a review from a team as a code owner September 4, 2026 03:29
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 4, 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-09-04T03:31:34.831573Z a631a43 PR opened
🔒 Security Review ✅ Completed 2026-09-04T03:32:59.300104Z a631a43 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.

@openai-sdks

openai-sdks Bot commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

OkTest Summary

✅ 237/237 SDK tests passed in 10.655s for Node SDK PR #2600.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 164ms
tests/chat-completions-create.test.ts ✅ Passed 284ms
tests/chat-completions-stream.test.ts ✅ Passed 204ms
tests/files-content-binary.test.ts ✅ Passed 151ms
tests/files-create-multipart.test.ts ✅ Passed 151ms
tests/files-list-pagination.test.ts ✅ Passed 149ms
tests/initialize-config.test.ts ✅ Passed 263ms
tests/instance-isolation.test.ts ✅ Passed 126ms
tests/models-list.test.ts ✅ Passed 158ms
tests/responses-background-lifecycle.test.ts ✅ Passed 260ms
tests/responses-body-method-errors.test.ts ✅ Passed 328ms
tests/responses-cancel-timeout.test.ts ✅ Passed 221ms
tests/responses-cancel.test.ts ✅ Passed 205ms
tests/responses-compact-retries.test.ts ✅ Passed 268ms
tests/responses-compact.test.ts ✅ Passed 205ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 171ms
tests/responses-create-advanced.test.ts ✅ Passed 185ms
tests/responses-create-disconnect.test.ts ✅ Passed 1.142s
tests/responses-create-errors.test.ts ✅ Passed 291ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 138ms
tests/responses-create-retries.test.ts ✅ Passed 237ms
tests/responses-create-stream-failures.test.ts ✅ Passed 195ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 2.154s
tests/responses-create-stream-wire.test.ts ✅ Passed 2.593s
tests/responses-create-stream.test.ts ✅ Passed 73ms
tests/responses-create-terminal-states.test.ts ✅ Passed 232ms
tests/responses-create-timeout.test.ts ✅ Passed 212ms
tests/responses-create.test.ts ✅ Passed 208ms
tests/responses-delete.test.ts ✅ Passed 195ms
tests/responses-input-items-errors.test.ts ✅ Passed 261ms
tests/responses-input-items-list.test.ts ✅ Passed 181ms
tests/responses-input-items-options.test.ts ✅ Passed 99ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 240ms
tests/responses-input-tokens-count.test.ts ✅ Passed 266ms
tests/responses-malformed-inputs.test.ts ✅ Passed 2.163s
tests/responses-not-found-errors.test.ts ✅ Passed 261ms
tests/responses-parse.test.ts ✅ Passed 201ms
tests/responses-retrieve-retries.test.ts ✅ Passed 233ms
tests/responses-retrieve.test.ts ✅ Passed 244ms
tests/responses-stored-method-errors.test.ts ✅ Passed 584ms
tests/retry-behavior.test.ts ✅ Passed 3.029s
tests/sdk-error-shape.test.ts ✅ Passed 346ms

View OkTest run #33833402848

SDK merge (23cd8b54579d) · head (a631a435d17e) · base (135ac7ef85ce) · OkTest (2b1bdfd25e98)

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Castiron custom code

✅ No new custom-code files detected.

32 mixed files remain; 0 existing customizations changed.

Compared 135ac7ef85ce → a631a435d17e. Generated baselines verified.

32 existing customizations unchanged
  • api.md
  • scripts/castiron/README.md
  • scripts/castiron/custom_code_report.py
  • scripts/castiron/test_custom_code_report.py
  • src/client.ts
  • src/resources/audio/transcriptions.ts
  • src/resources/audio/translations.ts
  • src/resources/beta/assistants.ts
  • src/resources/beta/beta.ts
  • src/resources/beta/index.ts
  • src/resources/beta/responses/internal-base.ts
  • src/resources/beta/responses/responses.ts
  • src/resources/beta/threads/index.ts
  • src/resources/beta/threads/runs/index.ts
  • src/resources/beta/threads/runs/runs.ts
  • src/resources/beta/threads/threads.ts
  • src/resources/chat/completions/completions.ts
  • src/resources/chat/completions/index.ts
  • src/resources/conversations/index.ts
  • src/resources/embeddings.ts
  • src/resources/files.ts
  • src/resources/fine-tuning/checkpoints/permissions.ts
  • src/resources/images.ts
  • src/resources/responses/internal-base.ts
  • src/resources/responses/responses.ts
  • src/resources/skills/skills.ts
  • src/resources/skills/versions/versions.ts
  • src/resources/vector-stores/file-batches.ts
  • src/resources/vector-stores/files.ts
  • src/resources/webhooks/index.ts
  • src/resources/webhooks/webhooks.ts
  • tests/lib/data-residency.test.ts

A changed generated baseline means this report cannot reliably identify which handwritten lines changed.

Inspect the custom-code diff

Download the exact patch produced by this run (requires repository access):

gh run download 33833429119 --repo openai/openai-node \
  --name castiron-custom-code-33833429119-1 --dir /tmp/castiron-custom-code-33833429119-1
git apply --stat /tmp/castiron-custom-code-33833429119-1/custom-code.patch
cat /tmp/castiron-custom-code-33833429119-1/custom-code.patch

Or reproduce it from an SDK checkout containing the vendored reporter:

git fetch --no-tags origin 135ac7ef85cebeadf7ba600b59b42f937af44c3d a631a435d17e98c877dcca73e2aa0512aba3bc46
python3 scripts/castiron/custom_code_report.py report \
  --base 135ac7ef85cebeadf7ba600b59b42f937af44c3d \
  --head a631a435d17e98c877dcca73e2aa0512aba3bc46 --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-a631a435d17e
cat /tmp/castiron-custom-code-a631a435d17e/custom-code.patch

This is the current full custom patch for mixed files, not an attribution of only the handwritten lines changed by this PR.

Full report and patch

@jbeckwith-oai jbeckwith-oai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Validated the exact-head background-response fix. Failed and incomplete terminal events now reject before the demonstration cutoff can trigger an unnecessary resume, and resumed final responses are required to be completed before output is treated as successful. The focused cases cover all four cutoff and EOF paths for completed, failed, and incomplete outcomes. CI is green.

@HAYDEN-OAI
HAYDEN-OAI added this pull request to the merge queue Sep 4, 2026
Merged via the queue into main with commit 902a931 Sep 4, 2026
38 checks passed
@HAYDEN-OAI
HAYDEN-OAI deleted the codex/background-response-failures branch September 4, 2026 04:09
@openai-sdks openai-sdks Bot mentioned this pull request Sep 4, 2026
gh-actions-shared Bot pushed a commit to xf-qubit/openai-node that referenced this pull request Sep 5, 2026
## Summary

Fix the background-resume snippet in the streaming guide so unsuccessful
responses are not treated as successful output.

- Stop on initial `response.failed` or `response.incomplete` events
before attempting a resume.
- Require a completed final snapshot before printing its final output,
including when a resumed stream ends cleanly while still queued or in
progress.
- Use fixed diagnostics that do not include private response error
details.

This brings the guide in line with the executable example fixed in
openai#2600. It does not change SDK behavior: `finalResponse()` intentionally
returns the accumulated snapshot. Only the handwritten guide and its
existing regression test change.

## Verification

- Extended the existing HTTP/subprocess suite to execute the guide's
exact TypeScript code block through the public SDK, alongside the
executable example; no replacement snippet or mock helper is used.
- Ten new guide failure cases failed before the fix; 16
existing/completed controls passed. All 26 scenarios now pass.
- Verified the suite on exact Node 22.0.0, 24.19.0, and 26.7.0. Final
queued-response fixture tightening was rechecked on the minimum/forward
runtimes and with the full suite on Node 24.
- Covered initial and resumed completion/failure, completion at the
interruption cutoff, clean EOF, queued/in-progress final snapshots,
expected POST/GET counts, and diagnostic privacy.
- Full TypeScript check, pinned Oxfmt 0.62.0, cached Oxlint 1.76.0, and
whitespace checks pass. Local Vitest/Oxlint are 4.1.10/1.76.0 rather
than pinned 4.1.11/1.79.0; pinned CI remains authoritative.

## Adversarial review

Independent reviews checked terminal-event ordering, resume/cursor
compatibility, clean EOF, diagnostic privacy, exact-snippet execution,
child-process isolation, and cleanup. The queued fixture was tightened
to emit only `response.created` and preserve its ID through both
requests. Final review found no blocking issues. No SDK, generated code,
dependency, or public API changes.
gh-actions-shared Bot pushed a commit to xf-qubit/openai-node that referenced this pull request Sep 7, 2026
## Summary

- Resume the background-streaming example after the last event actually
observed, matching the existing streaming guide, instead of always using
`starting_after: 10`.
- Keep the deliberate interruption at event 10, completion handling,
failure exit codes, request counts, and final response behavior
unchanged.
- Strengthen the existing test fixture to check complete, ordered,
duplicate-free event output. No SDK, generated code, parser, model,
dependency, or documentation changes.

## Reproduction

When the first connection ends cleanly after event 3 and the replay
contains events 0–12, the current example prints events `0, 1, 2, 3, 11,
12`. Its hard-coded cursor suppresses unseen text deltas 4–10. An
interruption immediately after `response.created` similarly skips events
1–10.

The SDK still replays all events internally and produces a complete
final response. This is an example-level event-continuity bug, not lost
final-response data or a problem with the SDK accumulator. Tracking the
last observed sequence uses the same small pattern already documented in
`docs/streaming.md`.

## Validation

- Before the source change, three early-EOF example regressions fail
while 31 existing controls pass. All 34 cases pass afterward on exact
Node 22.0.0, Node 24.19.0, and Node 26.7.0.
- The first response now ends before both its final text delta and
terminal event, so a complete final snapshot alone cannot make the
regression pass. The test also checks exact event order and absence of
duplicates.
- Execute the actual example against the built public SDK in nine
loopback scenarios on each runtime: 27 checks pass. Early interruption,
the intentional cutoff, completion before/at the cutoff, and
initial/resumed failure cases retain their expected requests, exit
codes, and complete successful final snapshots.
- Independent adversarial review verifies empty-stream/missing-ID
behavior and finds no remaining issues. Its forced-color test exposed a
fixture assumption; clearing inherited `FORCE_COLOR` in the child makes
all 34 cases pass with a forced-color parent without adding an ANSI
parser.
- Full canonical handwritten suite: **7,884 tests pass across 208
files**. CJS/ESM build and imports, formatting/lint, pinned TypeScript
6, and whitespace checks pass.

The generated suite and remaining ecosystem/packaging checks run in CI.
This is separate from the completion-reuse and final-status fixes in
openai#2557 and openai#2600.
gh-actions-shared Bot pushed a commit to xf-qubit/openai-node that referenced this pull request Sep 8, 2026
Automated Release PR
---


##
[7.11.0](openai/openai-node@v7.10.0...v7.11.0)
(2026-09-08)


### Features

* **api:** Add prompt cache diagnostics
([openai#2608](openai#2608))
([f83de8f](openai@f83de8f))
* **api:** add service-account API key expiration fields
([openai#2618](openai#2618))
([eecbebe](openai@eecbebe))
* **api:** correct function argument completion event fields
(openapi-545)
([openai#2611](openai#2611))
([31bf7e7](openai@31bf7e7))
* **api:** recognize incomplete web search call status
([openai#2576](openai#2576))
([c093c44](openai@c093c44))


### Bug Fixes

* **assistants:** retain terminal message snapshots
([openai#2650](openai#2650))
([414677e](openai@414677e))
* **audio:** only signal started recording processes
([openai#2665](openai#2665))
([cebdf7c](openai@cebdf7c))
* **audio:** prefer readable inputs over body metadata
([openai#2548](openai#2548))
([86ff7d5](openai@86ff7d5))
* **audio:** use ALSA card identifiers when recording
([openai#2564](openai#2564))
([67da19c](openai@67da19c))
* **audio:** wait for input cleanup before reporting success
([openai#2624](openai#2624))
([5ed87fe](openai@5ed87fe))
* **auth:** account for token exchange elapsed time
([openai#2609](openai#2609))
([b0f6f20](openai@b0f6f20))
* **auth:** validate Azure metadata access token values
([openai#2523](openai#2523))
([32b4d35](openai@32b4d35))
* **azure:** carry declared options through withOptions and fix
deployment paths
([openai#2514](openai#2514))
([f8f29fb](openai@f8f29fb))
* **bedrock:** cancel requests awaiting AWS credentials
([openai#2610](openai#2610))
([97c94e4](openai@97c94e4))
* bound partial number recovery to its token
([openai#2692](openai#2692))
([0d306ca](openai@0d306ca))
* **build:** fail on reported transpile errors
([openai#2638](openai#2638))
([833e3e8](openai@833e3e8))
* **build:** fail when a compiler worker is signaled
([openai#2633](openai#2633))
([cd79cd1](openai@cd79cd1))
* **build:** honor configured compiler worker limits
([openai#2635](openai#2635))
([aa08b44](openai@aa08b44))
* **build:** narrow Git-install staging detection
([openai#2621](openai#2621))
([a6170d3](openai@a6170d3))
* **build:** postprocess the selected package manifest
([openai#2620](openai#2620))
([1850d58](openai@1850d58))
* **build:** preserve CommonJS source-map positions
([openai#2623](openai#2623))
([df0034d](openai@df0034d))
* **build:** preserve config-relative compiler project paths
([openai#2637](openai#2637))
([3acb064](openai@3acb064))
* **build:** preserve declaration file import specifiers
([openai#2659](openai#2659))
([0098c2e](openai@0098c2e))
* **ci:** propagate Node matrix check failures
([openai#2569](openai#2569))
([bff92c9](openai@bff92c9))
* **ci:** serialize release-please branch updates
([openai#2631](openai#2631))
([bb0e400](openai@bb0e400))
* clean up failed mock-server startups
([openai#2558](openai#2558))
([83c92f0](openai@83c92f0))
* **deps:** bump qs to 6.16.0 for security fixes
([openai#2588](openai#2588))
([4e5c6e3](openai@4e5c6e3))
* **docs:** await headers in Next.js webhook examples
([openai#2595](openai#2595))
([7e48f05](openai@7e48f05))
* **docs:** correct the chat streaming helper contract
([openai#2596](openai#2596))
([135ac7e](openai@135ac7e))
* **docs:** include image detail in the Vision example
([openai#2598](openai#2598))
([e76bb16](openai@e76bb16))
* **docs:** omit absent Bedrock provider session tokens
([openai#2597](openai#2597))
([41f85bd](openai@41f85bd))
* **ecosystem:** preserve retry delays in parallel workers
([openai#2673](openai#2673))
([6164745](openai@6164745))
* **ecosystem:** reject invalid retry counts
([openai#2642](openai#2642))
([d0e2bcf](openai@d0e2bcf))
* **ecosystem:** restore explicit web type-test module markers
([openai#2584](openai#2584))
([3c189f4](openai@3c189f4))
* **embeddings:** preserve numeric output with body overrides
([openai#2549](openai#2549))
([97d1ae7](openai@97d1ae7))
* **embeddings:** preserve numeric responses after request hooks
([openai#2590](openai#2590))
([5202b13](openai@5202b13))
* **embeddings:** reject incomplete float32 vectors
([openai#2615](openai#2615))
([3940a20](openai@3940a20))
* **embeddings:** validate response collection before decoding
([openai#2686](openai#2686))
([888811f](openai@888811f))
* **events:** preserve unbound listener receivers
([openai#2644](openai#2644))
([c8238e7](openai@c8238e7))
* **examples:** annotate Responses WebSocket turn result
([openai#2585](openai#2585))
([dde19c5](openai@dde19c5))
* **examples:** avoid extra requests for empty tool calls
([openai#2672](openai#2672))
([be292d3](openai@be292d3))
* **examples:** avoid unhandled WebSocket rejections
([openai#2669](openai#2669))
([744b0ad](openai@744b0ad))
* **examples:** cancel Edge streams when requests abort
([openai#2530](openai#2530))
([18100a1](openai@18100a1))
* **examples:** close failed streaming responses
([openai#2531](openai#2531))
([eb9b468](openai@eb9b468))
* **examples:** close multi-agent WebSockets on terminal responses
([openai#2533](openai#2533))
([51ec453](openai@51ec453))
* **examples:** drain manual conversation error output
([openai#2629](openai#2629))
([e488b53](openai@e488b53))
* **examples:** find structured-output tool calls
([openai#2572](openai#2572))
([84870a8](openai@84870a8))
* **examples:** keep tracking fine-tuning file validation
([openai#2528](openai#2528))
([63312f2](openai@63312f2))
* **examples:** preserve background stream resume cursors
([openai#2671](openai#2671))
([b7398e3](openai@b7398e3))
* **examples:** reject early multi-agent WebSocket closure
([openai#2599](openai#2599))
([c6320f0](openai@c6320f0))
* **examples:** reject early Realtime socket closure
([openai#2639](openai#2639))
([7db48ec](openai@7db48ec))
* **examples:** reject incomplete image streams
([openai#2617](openai#2617))
([ef39397](openai@ef39397))
* **examples:** reject incomplete multi-agent streams
([openai#2666](openai#2666))
([152b98d](openai@152b98d))
* **examples:** reject unsuccessful background responses
([openai#2600](openai#2600))
([902a931](openai@902a931))
* **examples:** reject unsuccessful Responses streams
([openai#2645](openai#2645))
([86acb95](openai@86acb95))
* **examples:** reject unsuccessful structured-tool responses
([openai#2668](openai#2668))
([99aa303](openai@99aa303))
* **examples:** report audio demo failures
([openai#2570](openai#2570))
([29c0572](openai@29c0572))
* **examples:** report image-streaming failures
([openai#2563](openai#2563))
([947c555](openai@947c555))
* **examples:** report multi-agent streaming failures
([openai#2550](openai#2550))
([19d9151](openai@19d9151))
* **examples:** report nonstreaming request failures
([openai#2603](openai#2603))
([384dc26](openai@384dc26))
* **examples:** report premature WebSocket closure
([openai#2544](openai#2544))
([7eb5f7e](openai@7eb5f7e))
* **examples:** report unsuccessful Azure Realtime responses
([openai#2612](openai#2612))
([2b62209](openai@2b62209))
* **examples:** report unsuccessful fine-tuning jobs
([openai#2616](openai#2616))
([e761c16](openai@e761c16))
* **examples:** report unsuccessful Realtime responses
([openai#2559](openai#2559))
([5d3e584](openai@5d3e584))
* **examples:** respect raw streaming proxy backpressure
([openai#2663](openai#2663))
([a11bb1b](openai@a11bb1b))
* **examples:** reuse completed background responses
([openai#2557](openai#2557))
([8e1977b](openai@8e1977b))
* **examples:** serialize missing book lookup results
([openai#2573](openai#2573))
([db7e371](openai@db7e371))
* **examples:** stop polling failed training files
([openai#2592](openai#2592))
([1d67945](openai@1d67945))
* **examples:** support redirected streaming output
([openai#2546](openai#2546))
([8df2e3a](openai@8df2e3a))
* **examples:** use the default audio recording input
([openai#2593](openai#2593))
([6153484](openai@6153484))
* **format:** ignore missing literal file-list paths
([openai#2670](openai#2670))
([516a849](openai@516a849))
* **format:** preserve file-list scope
([openai#2568](openai#2568))
([7faff0e](openai@7faff0e))
* identify modern Edge browser runtime headers
([openai#2628](openai#2628))
([9cdf6f0](openai@9cdf6f0))
* isolate monthly node review publication
([openai#2691](openai#2691))
([3970dae](openai@3970dae))
* isolate realtime connection credentials
([openai#2690](openai#2690))
([e9db491](openai@e9db491))
* keep formatter inputs on LF across Git checkouts
([openai#2515](openai#2515))
([074618f](openai@074618f))
* **lint:** preserve leading-dash generated file paths
([openai#2640](openai#2640))
([3b91a83](openai@3b91a83))
* **pagination:** follow next cursors through empty pages
([openai#2561](openai#2561))
([9ea39ce](openai@9ea39ce))
* parse JSON media types case-insensitively
([openai#2551](openai#2551))
([7ea7926](openai@7ea7926))
* **polling:** honor zero custom polling intervals
([openai#2518](openai#2518))
([0cd94bb](openai@0cd94bb))
* **polling:** treat a cancelled vector store file as terminal
([openai#2506](openai#2506))
([43c1007](openai@43c1007))
* preserve alternate Headers inputs
([openai#2560](openai#2560))
([5d36ff4](openai@5d36ff4))
* preserve CommonJS constructor inheritance
([openai#2547](openai#2547))
([aafb64e](openai@aafb64e))
* preserve cross-realm error causes
([openai#2555](openai#2555))
([bfec504](openai@bfec504))
* preserve own Zod schema definition names
([openai#2695](openai#2695))
([f65d190](openai@f65d190))
* preserve package selection in parallel ecosystem tests
([openai#2516](openai#2516))
([fa0ce41](openai@fa0ce41))
* preserve streamed API error classification
([openai#2694](openai#2694))
([8e2c6ee](openai@8e2c6ee))
* **realtime:** preserve base URL routing components
([openai#2567](openai#2567))
([0f2e22d](openai@0f2e22d))
* **responses:** omit parsed values from replayed history
([openai#2634](openai#2634))
([124b652](openai@124b652))
* **responses:** parse namespaced function tools
([openai#2574](openai#2574))
([4d86684](openai@4d86684))
* **responses:** validate indexed response collections
([openai#2687](openai#2687))
([1ecbf52](openai@1ecbf52))
* **runners:** observe cancellation after completion callbacks
([openai#2591](openai#2591))
([27f5c6a](openai@27f5c6a))
* **runners:** preserve frozen input history
([openai#2525](openai#2525))
([1211038](openai@1211038))
* **runners:** reuse caller abort listeners across tool turns
([openai#2594](openai#2594))
([57d0da4](openai@57d0da4))
* **runners:** suppress content events for input history
([openai#2520](openai#2520))
([37d6fc2](openai@37d6fc2))
* serialize tool-call IDs once per completion
([openai#2688](openai#2688))
([8afb23e](openai@8afb23e))
* **streaming:** abort before early-exit cleanup
([openai#2613](openai#2613))
([03acf94](openai@03acf94))
* **streaming:** avoid duplicate terminal tool argument events
([openai#2658](openai#2658))
([12e5db6](openai@12e5db6))
* **streaming:** interrupt pending reads on cancellation
([openai#2556](openai#2556))
([2d7a767](openai@2d7a767))
* **streaming:** surface server error frames and settle streams past
throwing listeners
([openai#2502](openai#2502))
([17a661e](openai@17a661e))
* support Edge Runtime without Node process
([openai#2552](openai#2552))
([5dc4deb](openai@5dc4deb))
* **test:** cancel Steady commands waiting for cache locks
([openai#2636](openai#2636))
([8896395](openai@8896395))
* **test:** preserve unrelated processes on mock startup failure
([openai#2622](openai#2622))
([6896e66](openai@6896e66))
* **test:** reap Steady commands when lease creation fails
([openai#2664](openai#2664))
([518756a](openai@518756a))
* **test:** reject HTTP errors in mock health checks
([openai#2667](openai#2667))
([7b9e0b0](openai@7b9e0b0))
* **test:** reject unknown ecosystem project names
([openai#2626](openai#2626))
([fcd12bb](openai@fcd12bb))
* **test:** run Bun validation with --from-npm
([openai#2625](openai#2625))
([74f58a9](openai@74f58a9))
* **test:** use a monotonic Steady lock timeout
([openai#2661](openai#2661))
([7b5d120](openai@7b5d120))
* **types:** account for optional event arguments
([openai#2527](openai#2527))
([548a651](openai@548a651))
* **types:** include missing parsed response stream events
([openai#2521](openai#2521))
([6a9db07](openai@6a9db07))
* **types:** preserve custom tool factory metadata
([openai#2526](openai#2526))
([13dca7b](openai@13dca7b))
* **types:** preserve runnable function tuple positions
([openai#2524](openai#2524))
([e345d0f](openai@e345d0f))
* **uploads:** accept cross-realm ArrayBuffers
([openai#2529](openai#2529))
([69d7bda](openai@69d7bda))
* **uploads:** preserve explicit empty filenames
([openai#2532](openai#2532))
([eabb487](openai@eabb487))
* **uploads:** reject zero batch upload concurrency
([openai#2519](openai#2519))
([8b9405a](openai@8b9405a))
* validate partial image indices in streaming example
([openai#2693](openai#2693))
([a9a4440](openai@a9a4440))
* **zod:** preserve strict schema compatibility with Zod 4.5.4
([openai#2677](openai#2677))
([c11870e](openai@c11870e))
* **zod:** retain the original tool parameter schema
([openai#2662](openai#2662))
([fdb038e](openai@fdb038e))


### Performance Improvements

* **bedrock:** avoid copying repeated query values
([openai#2545](openai#2545))
([80ab919](openai@80ab919))


### Chores

* **api:** document throttling and model overload responses — SDK-235
([openai#2632](openai#2632))
([9dd0524](openai@9dd0524))
* clarify Response types and remove unused handwritten code
([openai#2660](openai#2660))
([86152ab](openai@86152ab))
* **deps-dev:** bump @aws-sdk/credential-provider-node from 3.972.78 to
3.972.81 ([openai#2681](openai#2681))
([48629a3](openai@48629a3))
* **deps-dev:** bump @cloudflare/workers-types from 5.20260816.1 to
5.20260823.1 in /ecosystem-tests/cloudflare-worker
([openai#2535](openai#2535))
([dc14bf5](openai@dc14bf5))
* **deps-dev:** bump @cloudflare/workers-types from 5.20260823.1 to
5.20260830.1 in /ecosystem-tests/cloudflare-worker
([openai#2676](openai#2676))
([ae04066](openai@ae04066))
* **deps-dev:** bump @smithy/signature-v4 from 5.7.2 to 5.7.3
([openai#2679](openai#2679))
([41ca20d](openai@41ca20d))
* **deps-dev:** bump @swc/core from 1.15.47 to 1.16.1
([openai#2538](openai#2538))
([5c04dc4](openai@5c04dc4))
* **deps-dev:** bump fast-uri from 3.1.5 to 3.1.7 in
/ecosystem-tests/ts-browser-webpack
([openai#2579](openai#2579))
([34380bf](openai@34380bf))
* **deps-dev:** bump fast-uri from 3.1.5 to 3.1.7 in
/ecosystem-tests/vercel-edge
([openai#2577](openai#2577))
([511d1e4](openai@511d1e4))
* **deps-dev:** bump oxlint from 1.76.0 to 1.79.0
([openai#2542](openai#2542))
([2683c3a](openai@2683c3a))
* **deps-dev:** bump oxlint from 1.79.0 to 1.80.0
([openai#2683](openai#2683))
([02d5fb0](openai@02d5fb0))
* **deps-dev:** bump puppeteer from 25.7.0 to 25.8.0 in
/ecosystem-tests/browser-direct-import
([openai#2534](openai#2534))
([f039c09](openai@f039c09))
* **deps-dev:** bump puppeteer from 25.7.0 to 25.8.0 in
/ecosystem-tests/ts-browser-webpack
([openai#2539](openai#2539))
([5828818](openai@5828818))
* **deps-dev:** bump puppeteer from 25.8.0 to 25.9.0 in
/ecosystem-tests/browser-direct-import
([openai#2675](openai#2675))
([bebd72f](openai@bebd72f))
* **deps-dev:** bump puppeteer from 25.8.0 to 25.9.0 in
/ecosystem-tests/ts-browser-webpack
([openai#2680](openai#2680))
([fe3770f](openai@fe3770f))
* **deps-dev:** bump ultracite from 7.10.0 to 7.10.5
([openai#2537](openai#2537))
([6d37b30](openai@6d37b30))
* **deps-dev:** bump vitest from 4.1.10 to 4.1.11
([openai#2541](openai#2541))
([6ea24b3](openai@6ea24b3))
* **deps-dev:** bump webpack from 5.109.2 to 5.110.2 in
/ecosystem-tests/ts-browser-webpack
([openai#2682](openai#2682))
([73405d1](openai@73405d1))
* **deps-dev:** bump wrangler from 4.125.0 to 4.127.1 in
/ecosystem-tests/cloudflare-worker
([openai#2678](openai#2678))
([0d92742](openai@0d92742))
* **deps:** bump @azure/identity from 4.13.1 to 4.13.2
([openai#2540](openai#2540))
([0318287](openai@0318287))
* **deps:** bump express and @types/express
([openai#2684](openai#2684))
([c581c17](openai@c581c17))
* **ecosystem:** remove unused proxy stub
([openai#2641](openai#2641))
([ce1713a](openai@ce1713a))
* migrate to forked steady
([openai#2587](openai#2587))
([67ce45d](openai@67ce45d))


### Documentation

* correct Bun ecosystem test instructions
([openai#2627](openai#2627))
([3434b42](openai@3434b42))
* correct error handling diagnostics
([openai#2630](openai#2630))
([d334d8c](openai@d334d8c))
* **helpers:** remove undefined main call from parsing example
([openai#2648](openai#2648))
([d8f6be9](openai@d8f6be9))
* **realtime:** report unsuccessful responses in the guide
([openai#2647](openai#2647))
([f58b1fd](openai@f58b1fd))
* **streaming:** reject unsuccessful background responses
([openai#2614](openai#2614))
([1025f7a](openai@1025f7a))
* **tools:** support TypeScript 4.9 in the function loop
([openai#2649](openai#2649))
([42e852b](openai@42e852b))

---
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants