Skip to content

fix(realtime): honor native options for legacy beta sockets - #4120

Merged
markstuart-oai merged 2 commits into
mainfrom
fix/beta-realtime-websocket-options
Oct 20, 2026
Merged

markstuart-oai merged 2 commits into
mainfrom
fix/beta-realtime-websocket-options

Conversation

@markstuart-oai

Copy link
Copy Markdown
Contributor

Legacy client.beta.realtime.connect() inherited a 1 MiB native receive limit, so a larger event closed the connection with code 1009 unless callers already supplied max_size=None. Its synchronous option type also advertised write_limit, which only native async connections support.

Default to no receive size limit when the beta connection opens, while keeping every caller value, including finite limits and zero. Use the existing synchronous options type for beta sync connections; the legacy async type and its supported write limit stay available. This changes only the SDK-owned beta path.

Before the change, both default-large cases failed. Local native tests now pass on the minimum websockets==13.0 (15/15) and websockets==15.0.1 (46/46 including Realtime recovery controls). Tests compare the whole received payload, check code 1009 for caller limits, and verify that the beta sync type rejects the async-only literal while beta async still accepts it.

@markstuart-oai
markstuart-oai requested a review from a team as a code owner October 19, 2026 23:13
@chatgpt-codex-connector

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

Copy link
Copy Markdown

Codex Review Summary

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

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-19T23:14:40.718213Z b433797 PR opened
🔒 Security Review ✅ Completed 2026-10-19T23:16:06.731357Z b433797 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 Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

OkTest Summary

✅ 236/236 SDK tests passed in 9.4s for Python SDK PR #4120.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 220ms
tests/chat-completions-create.test.ts ✅ Passed 259ms
tests/chat-completions-stream.test.ts ✅ Passed 272ms
tests/files-content-binary.test.ts ✅ Passed 217ms
tests/files-create-multipart.test.ts ✅ Passed 208ms
tests/files-list-pagination.test.ts ✅ Passed 229ms
tests/initialize-config.test.ts ✅ Passed 173ms
tests/instance-isolation.test.ts ✅ Passed 160ms
tests/models-list.test.ts ✅ Passed 301ms
tests/responses-background-lifecycle.test.ts ✅ Passed 225ms
tests/responses-body-method-errors.test.ts ✅ Passed 329ms
tests/responses-cancel-timeout.test.ts ✅ Passed 207ms
tests/responses-cancel.test.ts ✅ Passed 286ms
tests/responses-compact-retries.test.ts ✅ Passed 306ms
tests/responses-compact.test.ts ✅ Passed 286ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 406ms
tests/responses-create-advanced.test.ts ✅ Passed 222ms
tests/responses-create-disconnect.test.ts ✅ Passed 1.27s
tests/responses-create-errors.test.ts ✅ Passed 254ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 519ms
tests/responses-create-retries.test.ts ✅ Passed 209ms
tests/responses-create-stream-failures.test.ts ✅ Passed 247ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 237ms
tests/responses-create-stream-wire.test.ts ✅ Passed 2.113s
tests/responses-create-stream.test.ts ✅ Passed 131ms
tests/responses-create-terminal-states.test.ts ✅ Passed 226ms
tests/responses-create-timeout.test.ts ✅ Passed 233ms
tests/responses-create.test.ts ✅ Passed 334ms
tests/responses-delete.test.ts ✅ Passed 214ms
tests/responses-input-items-errors.test.ts ✅ Passed 605ms
tests/responses-input-items-list.test.ts ✅ Passed 337ms
tests/responses-input-items-options.test.ts ✅ Passed 344ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 284ms
tests/responses-input-tokens-count.test.ts ✅ Passed 204ms
tests/responses-malformed-inputs.test.ts ✅ Passed 1.096s
tests/responses-not-found-errors.test.ts ✅ Passed 269ms
tests/responses-parse.test.ts ✅ Passed 275ms
tests/responses-retrieve-retries.test.ts ✅ Passed 256ms
tests/responses-retrieve.test.ts ✅ Passed 199ms
tests/responses-stored-method-errors.test.ts ✅ Passed 476ms
tests/retry-behavior.test.ts ✅ Passed 3.006s
tests/sdk-error-shape.test.ts ✅ Passed 276ms

View OkTest run #39340549574

SDK merge (0fe746f47de0) · head (0a5cb26619c2) · base (90c0bacc07dd) · OkTest (72fd4dca457e)

@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Castiron custom code

Evaluated main: 90c0bacc07ddd5662598db52b3c3011973011973.

Trusted main policy: 90c0bacc07ddd5662598db52b3c3011973011973.

✅ No new custom-code files detected.

39 mixed files remain; 0 existing customizations changed.

Compared 90c0bacc07dd → 0a5cb26619c2. Generated baselines verified.

39 existing customizations unchanged
  • api.md
  • 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/environments/files.py
  • src/openai/resources/beta/agents/sessions/artifacts.py
  • src/openai/resources/beta/agents/sessions/sessions.py
  • src/openai/resources/beta/beta.py
  • src/openai/resources/beta/responses/responses.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/realtime/translations/translations.py
  • src/openai/resources/responses/responses.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/decision_input_image_param.py
  • src/openai/types/decision_input_text_param.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/tool.py
  • src/openai/types/responses/tool_param.py
  • src/openai/types/webhooks/init.py
  • src/openai/types/webhooks/live_call_incoming_webhook_event.py
  • src/openai/types/webhooks/unwrap_webhook_event.py
  • tests/api_resources/test_videos.py

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

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

git fetch --no-tags origin 90c0bacc07ddd5662598db52b3c3011973011973 0a5cb26619c2cdaa605f10bba28cc4c0674cc46f
python3 scripts/castiron/custom_code_report.py report \
  --base 90c0bacc07ddd5662598db52b3c3011973011973 \
  --head 0a5cb26619c2cdaa605f10bba28cc4c0674cc46f --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-0a5cb26619c2
cat /tmp/castiron-custom-code-0a5cb26619c2/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

Comment thread tests/lib/test_beta_realtime_websocket_options.py Fixed

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

Approved at 0a5cb26. Two static reviews of the complete three-file diff and relevant connection managers, transport wrappers and option types found no actionable issues. Both Beta Realtime transports default max_size to None while preserving explicit caller values, including zero, without mutating the options dictionary. Sync signatures use the existing sync options type; async retains write_limit. Regressions cover oversized messages and explicit-limit rejection.

Hosted checks are successful/skipped; OkTest reports 236/236 passed. No candidate code or tests were executed.

@markstuart-oai
markstuart-oai added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 8968560 Oct 20, 2026
31 checks passed
@markstuart-oai
markstuart-oai deleted the fix/beta-realtime-websocket-options branch October 20, 2026 00:26
@openai-sdks openai-sdks Bot mentioned this pull request Oct 19, 2026
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.

3 participants