Skip to content

fix: preserve beta Realtime byte reads on websockets 13 - #4102

Merged
markstuart-oai merged 2 commits into
mainfrom
markstuart/websocket-wire-tests
Oct 18, 2026
Merged

markstuart-oai merged 2 commits into
mainfrom
markstuart/websocket-wire-tests

Conversation

@markstuart-oai

@markstuart-oai markstuart-oai commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Why

Synchronous beta Realtime calls recv(decode=False), but the supported websockets 13.x sync API has no decode argument. Receiving a message therefore raises TypeError.

High-level description

Use the existing SDK byte-receive helper, as the other synchronous APIs already do. Extend the real-socket text/binary regression to beta Realtime, including the legacy dependency signature. Add wire-level tests across all eight connection entrypoints for sync/async redirects, fresh credentials, explicit header precedence, events, and cleanup. Preserve current redirect and connection behavior.

Validation

All 191 tests in the two focused modules pass with both websockets 13.1 and 15.0.1. The unpatched published SDK 3.35.0 reproduces the beta receive failure on 13.1 (two failing wire cases); with 15.0.1 it passes all 64 new wire cases and 263 existing functional cases. Ruff checks pass. All servers are local and credentials synthetic; no hosted tests.

Release note

Fix synchronous beta Realtime message reception when using websockets 13.x. Public signatures and returned bytes remain unchanged.

A locally built wheel containing this fix also passes all 64 new connection cases with websockets 13.1 when installed outside the source tree. Focused Pyright checks pass.

Current CI checks

@github-actions

github-actions Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Castiron custom code

Evaluated main: ab914006a2f520c5d63a69a60b40725ca5c72459.

Trusted main policy: ab914006a2f520c5d63a69a60b40725ca5c72459.

✅ No new custom-code files detected.

41 mixed files remain; 0 existing customizations changed.

Compared ab914006a2f5 → f6ca372f5d51. Generated baselines verified.

41 existing customizations unchanged
  • api.md
  • scripts/castiron/custom_code_budget.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/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

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

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

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

@markstuart-oai
markstuart-oai marked this pull request as ready for review October 18, 2026 00:09
@markstuart-oai
markstuart-oai requested a review from a team as a code owner October 18, 2026 00:09
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 18, 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-18T00:10:46.408178Z f6ca372 Draft marked ready
🔒 Security Review ✅ Completed 2026-10-18T00:11:36.677248Z f6ca372 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.

@openai-sdks

openai-sdks Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

OkTest Summary

✅ 236/236 SDK tests passed in 10.273s for Python SDK PR #4102.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 202ms
tests/chat-completions-create.test.ts ✅ Passed 397ms
tests/chat-completions-stream.test.ts ✅ Passed 292ms
tests/files-content-binary.test.ts ✅ Passed 218ms
tests/files-create-multipart.test.ts ✅ Passed 224ms
tests/files-list-pagination.test.ts ✅ Passed 390ms
tests/initialize-config.test.ts ✅ Passed 188ms
tests/instance-isolation.test.ts ✅ Passed 196ms
tests/models-list.test.ts ✅ Passed 292ms
tests/responses-background-lifecycle.test.ts ✅ Passed 185ms
tests/responses-body-method-errors.test.ts ✅ Passed 329ms
tests/responses-cancel-timeout.test.ts ✅ Passed 249ms
tests/responses-cancel.test.ts ✅ Passed 240ms
tests/responses-compact-retries.test.ts ✅ Passed 332ms
tests/responses-compact.test.ts ✅ Passed 303ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 212ms
tests/responses-create-advanced.test.ts ✅ Passed 232ms
tests/responses-create-disconnect.test.ts ✅ Passed 1.264s
tests/responses-create-errors.test.ts ✅ Passed 204ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 227ms
tests/responses-create-retries.test.ts ✅ Passed 257ms
tests/responses-create-stream-failures.test.ts ✅ Passed 929ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 252ms
tests/responses-create-stream-wire.test.ts ✅ Passed 2.23s
tests/responses-create-stream.test.ts ✅ Passed 270ms
tests/responses-create-terminal-states.test.ts ✅ Passed 283ms
tests/responses-create-timeout.test.ts ✅ Passed 248ms
tests/responses-create.test.ts ✅ Passed 653ms
tests/responses-delete.test.ts ✅ Passed 320ms
tests/responses-input-items-errors.test.ts ✅ Passed 695ms
tests/responses-input-items-list.test.ts ✅ Passed 374ms
tests/responses-input-items-options.test.ts ✅ Passed 279ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 288ms
tests/responses-input-tokens-count.test.ts ✅ Passed 237ms
tests/responses-malformed-inputs.test.ts ✅ Passed 1.242s
tests/responses-not-found-errors.test.ts ✅ Passed 266ms
tests/responses-parse.test.ts ✅ Passed 253ms
tests/responses-retrieve-retries.test.ts ✅ Passed 261ms
tests/responses-retrieve.test.ts ✅ Passed 224ms
tests/responses-stored-method-errors.test.ts ✅ Passed 537ms
tests/retry-behavior.test.ts ✅ Passed 2.928s
tests/sdk-error-shape.test.ts ✅ Passed 346ms

View OkTest run #39081715244

SDK merge (9807b6325fea) · head (f6ca372f5d51) · base (ab914006a2f5) · OkTest (63939cf2128e)

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

The legacy beta recv_bytes wrapper correctly uses the existing websockets 13 compatibility helper, preserving text and binary results. Reviewed wire tests for redirects, credential refresh/override, and cleanup. No findings. Hosted checks passed, with conditional jobs skipped. Static source review only; no candidate code or tests executed.

@markstuart-oai
markstuart-oai added this pull request to the merge queue Oct 18, 2026
Merged via the queue into main with commit 5766349 Oct 18, 2026
35 checks passed
@markstuart-oai
markstuart-oai deleted the markstuart/websocket-wire-tests branch October 18, 2026 00:32
@openai-sdks openai-sdks Bot mentioned this pull request Oct 18, 2026
opensource-fork-sync Bot pushed a commit to cla7aye15I4nd/opensource-openai__openai-python that referenced this pull request Oct 18, 2026
Automated Release PR
---


##
[3.35.1](openai/openai-python@v3.35.0...v3.35.1)
(2026-10-18)


### Bug Fixes

* preserve beta Realtime byte reads on websockets 13
([openai#4102](openai#4102))
([5766349](openai@5766349))

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