Skip to content

fix(responses): respect send queue limits during reconnect - #4000

Merged
markstuart-oai merged 1 commit into
mainfrom
castiron/promotions/pr-184
Sep 30, 2026
Merged

markstuart-oai merged 1 commit into
mainfrom
castiron/promotions/pr-184

Conversation

@markstuart-oai

Copy link
Copy Markdown
Contributor

Summary

Responses WebSocket connections now honor max_queue_size during reconnect even when no messages were queued before connecting.

Changes

  • Keep the caller's configured send queue for synchronous and asynchronous Responses connections, including beta Responses.
  • Continue raising WebSocketQueueFullError at the configured byte limit and flush admitted messages after reconnect.

Castiron-Internal-PR: openai/openai-python-internal#184
Castiron-Source-SHA: 33dd40311689b7d1af0fb5b75d6b13b7fa378439
Castiron-Public-Base-SHA: 58aca1d
@markstuart-oai
markstuart-oai marked this pull request as ready for review September 30, 2026 06:24
@markstuart-oai
markstuart-oai requested a review from a team as a code owner September 30, 2026 06:24
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 30, 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-30T06:25:48.567470Z e42366a Draft marked ready
🔒 Security Review ✅ Completed 2026-09-30T06:26:30.121592Z e42366a Draft marked ready
ℹ️ About Codex in GitHub

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

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

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

@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Castiron custom code

✅ No new custom-code files detected.

48 mixed files remain; 2 existing customizations changed.

Compared 58aca1dcfd8d → e42366a32176. Generated baselines verified.

File Result Current custom patch
src/openai/resources/beta/responses/responses.py Existing customization changed +122 / −83
src/openai/resources/responses/responses.py Existing customization changed +1008 / −113
46 existing customizations unchanged
  • api.md
  • scripts/castiron/README.md
  • scripts/castiron/custom_code_report.py
  • scripts/castiron/test_custom_code_report.py
  • src/openai/init.py
  • src/openai/_client.py
  • src/openai/resources/audio/transcriptions.py
  • src/openai/resources/audio/translations.py
  • src/openai/resources/beta/agents/sessions/sessions.py
  • src/openai/resources/beta/beta.py
  • src/openai/resources/beta/threads/runs/runs.py
  • src/openai/resources/beta/threads/threads.py
  • src/openai/resources/chat/completions/completions.py
  • src/openai/resources/embeddings.py
  • src/openai/resources/files.py
  • src/openai/resources/live/forks.py
  • src/openai/resources/live/live.py
  • src/openai/resources/live/sideband.py
  • src/openai/resources/realtime/api.md
  • src/openai/resources/realtime/realtime.py
  • src/openai/resources/uploads/uploads.py
  • src/openai/resources/vector_stores/file_batches.py
  • src/openai/resources/vector_stores/files.py
  • src/openai/resources/videos.py
  • src/openai/resources/webhooks/init.py
  • src/openai/resources/webhooks/webhooks.py
  • src/openai/types/beta/agent_session_message.py
  • src/openai/types/chat/init.py
  • src/openai/types/chat/chat_completion_message_tool_call.py
  • src/openai/types/fine_tuning/fine_tuning_job_integration.py
  • src/openai/types/realtime/conversation_item_input_audio_transcription_delta_event.py
  • src/openai/types/realtime/realtime_error_event.py
  • src/openai/types/responses/init.py
  • src/openai/types/responses/response.py
  • src/openai/types/responses/response_function_web_search.py
  • src/openai/types/responses/response_function_web_search_param.py
  • src/openai/types/responses/responses_client_event.py
  • src/openai/types/responses/responses_client_event_param.py
  • src/openai/types/responses/tool.py
  • src/openai/types/responses/tool_param.py

6 more in the full report.

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 36678095668 --repo openai/openai-python \
  --name castiron-custom-code-36678095668-1 --dir /tmp/castiron-custom-code-36678095668-1
git apply --stat /tmp/castiron-custom-code-36678095668-1/custom-code.patch
cat /tmp/castiron-custom-code-36678095668-1/custom-code.patch

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

git fetch --no-tags origin 58aca1dcfd8d04a3c6352fa2c34b3035ea850f57 e42366a32176c6667eb3ac33c9493b039a88607c
python3 scripts/castiron/custom_code_report.py report \
  --base 58aca1dcfd8d04a3c6352fa2c34b3035ea850f57 \
  --head e42366a32176c6667eb3ac33c9493b039a88607c --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-e42366a32176
cat /tmp/castiron-custom-code-e42366a32176/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

@openai-sdks

openai-sdks Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

OkTest Summary

✅ 236/236 SDK tests passed in 11.042s for Python SDK PR #4000.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 217ms
tests/chat-completions-create.test.ts ✅ Passed 288ms
tests/chat-completions-stream.test.ts ✅ Passed 316ms
tests/files-content-binary.test.ts ✅ Passed 191ms
tests/files-create-multipart.test.ts ✅ Passed 204ms
tests/files-list-pagination.test.ts ✅ Passed 165ms
tests/initialize-config.test.ts ✅ Passed 130ms
tests/instance-isolation.test.ts ✅ Passed 161ms
tests/models-list.test.ts ✅ Passed 217ms
tests/responses-background-lifecycle.test.ts ✅ Passed 178ms
tests/responses-body-method-errors.test.ts ✅ Passed 444ms
tests/responses-cancel-timeout.test.ts ✅ Passed 249ms
tests/responses-cancel.test.ts ✅ Passed 184ms
tests/responses-compact-retries.test.ts ✅ Passed 319ms
tests/responses-compact.test.ts ✅ Passed 292ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 401ms
tests/responses-create-advanced.test.ts ✅ Passed 188ms
tests/responses-create-disconnect.test.ts ✅ Passed 1.154s
tests/responses-create-errors.test.ts ✅ Passed 231ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 456ms
tests/responses-create-retries.test.ts ✅ Passed 241ms
tests/responses-create-stream-failures.test.ts ✅ Passed 201ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 229ms
tests/responses-create-stream-wire.test.ts ✅ Passed 3.232s
tests/responses-create-stream.test.ts ✅ Passed 137ms
tests/responses-create-terminal-states.test.ts ✅ Passed 265ms
tests/responses-create-timeout.test.ts ✅ Passed 276ms
tests/responses-create.test.ts ✅ Passed 212ms
tests/responses-delete.test.ts ✅ Passed 178ms
tests/responses-input-items-errors.test.ts ✅ Passed 647ms
tests/responses-input-items-list.test.ts ✅ Passed 323ms
tests/responses-input-items-options.test.ts ✅ Passed 373ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 328ms
tests/responses-input-tokens-count.test.ts ✅ Passed 157ms
tests/responses-malformed-inputs.test.ts ✅ Passed 2.25s
tests/responses-not-found-errors.test.ts ✅ Passed 244ms
tests/responses-parse.test.ts ✅ Passed 229ms
tests/responses-retrieve-retries.test.ts ✅ Passed 316ms
tests/responses-retrieve.test.ts ✅ Passed 174ms
tests/responses-stored-method-errors.test.ts ✅ Passed 608ms
tests/retry-behavior.test.ts ✅ Passed 3.086s
tests/sdk-error-shape.test.ts ✅ Passed 361ms

View OkTest run #36678068417

SDK merge (22799432ebb1) · head (e42366a32176) · base (58aca1dcfd8d) · OkTest (8728ddef7fc7)

@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.

Reviewed e42366a32176c6667eb3ac33c9493b039a88607c: no actionable findings. The four explicit is not None checks preserve the manager's configured SendQueue even when empty, while keeping the existing default for omitted queues. The new sync/async manager-entry and reconnect coverage exercises both empty and prequeued paths and verifies byte-limit enforcement and flushing.

Reviewed all three changed files, queue implementation, manager-to-connection handoffs, reconnect/flush methods and test helpers. 28 exact-source, AST-isolated lifecycle cases passed on Python 3.12.12, covering stable/beta sync/async paths, zero/small limits, UTF-8 byte accounting, prequeued messages, reconnect flushes and default construction; four pre-fix-expression controls reproduced the queue replacement. Transport, resource/event-handler and transformation/reconnect-metadata collaborators were mocked, so this was not a full local SDK suite or network test. No temporary files created.

Exact-head hosted lint/build, Python 3.10/3.14 and HTTPX2 tests, CodeQL, breaking-change and Castiron checks passed. The matching-head OkTest report also records 236/236 passing.

@markstuart-oai
markstuart-oai added this pull request to the merge queue Sep 30, 2026
Merged via the queue into main with commit 50f95ac Sep 30, 2026
28 checks passed
@markstuart-oai
markstuart-oai deleted the castiron/promotions/pr-184 branch September 30, 2026 06:41
@openai-sdks openai-sdks Bot mentioned this pull request Sep 30, 2026
gh-actions-shared Bot pushed a commit to xf-qubit/openai-python that referenced this pull request Oct 1, 2026
Automated Release PR
---


##
[3.23.0](openai/openai-python@v3.22.1...v3.23.0)
(2026-10-01)


### Features

* **agents:** [1/n] return typed answers from session streams
([openai#4007](openai#4007))
([10f8816](openai@10f8816))
* **agents:** stage files and download turn artifacts
([openai#4009](openai#4009))
([4fc2438](openai@4fc2438))
* **api:** Add session traces and Realtime translations
([openai#4001](openai#4001))
([138e3d1](openai@138e3d1))
* **beta:** expose typed application actions as agent tools
([openai#4006](openai#4006))
([f219c55](openai@f219c55))
* collect final output from beta Agents streams
([157ac4c](openai@157ac4c))


### Bug Fixes

* **api:** allow original image detail in Chat Completions
([openai#4005](openai#4005))
([8a136c2](openai@8a136c2))
* **api:** correct the eval run cancellation endpoint
([openai#4003](openai#4003))
([28c5c9a](openai@28c5c9a))
* **api:** retain WebSocket endpoint paths and query parameters
([openai#3999](openai#3999))
([7f203fd](openai@7f203fd))
* keep Castiron budget results valid when main advances
([openai#4012](openai#4012))
([73f189b](openai@73f189b))
* **responses:** avoid replaying uncertain typed sends on reconnect
([openai#4011](openai#4011))
([1dbbf61](openai@1dbbf61))
* **responses:** respect send queue limits during reconnect
([openai#4000](openai#4000))
([50f95ac](openai@50f95ac))
* use monotonic clock for file processing timeout
([openai#3748](openai#3748))
([58aca1d](openai@58aca1d))


### Chores

* **api:** retain WebRTC Live session transport types
([openai#4002](openai#4002))
([5c9ace9](openai@5c9ace9))
* **deps-dev:** bump pyright from 1.1.413 to 1.1.414
([openai#3902](openai#3902))
([a91d779](openai@a91d779))
* **deps:** bump astral-sh/setup-uv from 10.0.1 to 10.1.0
([openai#3976](openai#3976))
([f15f43c](openai@f15f43c))
* **deps:** bump CodeQL actions to 4.38.1
([openai#3974](openai#3974))
([fb70d66](openai@fb70d66))

---
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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants