Skip to content

chore(api): declare SSE response contracts for streaming endpoints - #4089

Closed
jbeckwith-oai wants to merge 1 commit into
mainfrom
castiron/promotions/pr-271
Closed

jbeckwith-oai wants to merge 1 commit into
mainfrom
castiron/promotions/pr-271

Conversation

@jbeckwith-oai

@jbeckwith-oai jbeckwith-oai commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Declare text/event-stream responses for Completions, stable/beta Responses retrieval, and the three Assistants run operations in the API reference. Existing JSON responses, runtime code, response types, and compact schemas remain unchanged.

Validation

Pre-promotion checks passed for Python 3.10/3.14, HTTPX2, lint, build, type checks, CodeQL, and generated-baseline/custom-code verification. This public PR runs its own CI before merge.

Castiron-Internal-PR: openai/openai-python-internal#271
Castiron-Source-SHA: 54527f1c3ffce8594964193c16571a36ba9db26c
Castiron-Public-Base-SHA: 230a923
@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Castiron custom code

Evaluated main: 230a923faba5574ebdc5b45a505a26b6bad79f61.

Trusted main policy: 230a923faba5574ebdc5b45a505a26b6bad79f61.

✅ No new custom-code files detected.

36 mixed files remain; 0 existing customizations changed.

Compared 230a923faba5 → fcd06ae329e5. Generated baselines verified.

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

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

git fetch --no-tags origin 230a923faba5574ebdc5b45a505a26b6bad79f61 fcd06ae329e584738795166c797c98d58a40b3a6
python3 scripts/castiron/custom_code_report.py report \
  --base 230a923faba5574ebdc5b45a505a26b6bad79f61 \
  --head fcd06ae329e584738795166c797c98d58a40b3a6 --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-fcd06ae329e5
cat /tmp/castiron-custom-code-fcd06ae329e5/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 marked this pull request as ready for review October 16, 2026 15:33
@jbeckwith-oai
jbeckwith-oai requested a review from a team as a code owner October 16, 2026 15:33
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 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-16T15:37:04.899643Z fcd06ae Draft marked ready
🔒 Security Review ✅ Completed 2026-10-16T15:36:49.647761Z fcd06ae 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 16, 2026 •

Copy link
Copy Markdown
Contributor

OkTest Summary

✅ 236/236 SDK tests passed in 9.388s for Python SDK PR #4089.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 442ms
tests/chat-completions-create.test.ts ✅ Passed 205ms
tests/chat-completions-stream.test.ts ✅ Passed 289ms
tests/files-content-binary.test.ts ✅ Passed 239ms
tests/files-create-multipart.test.ts ✅ Passed 263ms
tests/files-list-pagination.test.ts ✅ Passed 181ms
tests/initialize-config.test.ts ✅ Passed 161ms
tests/instance-isolation.test.ts ✅ Passed 167ms
tests/models-list.test.ts ✅ Passed 188ms
tests/responses-background-lifecycle.test.ts ✅ Passed 153ms
tests/responses-body-method-errors.test.ts ✅ Passed 477ms
tests/responses-cancel-timeout.test.ts ✅ Passed 193ms
tests/responses-cancel.test.ts ✅ Passed 152ms
tests/responses-compact-retries.test.ts ✅ Passed 304ms
tests/responses-compact.test.ts ✅ Passed 262ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 211ms
tests/responses-create-advanced.test.ts ✅ Passed 176ms
tests/responses-create-disconnect.test.ts ✅ Passed 1.202s
tests/responses-create-errors.test.ts ✅ Passed 186ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 419ms
tests/responses-create-retries.test.ts ✅ Passed 215ms
tests/responses-create-stream-failures.test.ts ✅ Passed 205ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 367ms
tests/responses-create-stream-wire.test.ts ✅ Passed 1.848s
tests/responses-create-stream.test.ts ✅ Passed 283ms
tests/responses-create-terminal-states.test.ts ✅ Passed 515ms
tests/responses-create-timeout.test.ts ✅ Passed 355ms
tests/responses-create.test.ts ✅ Passed 229ms
tests/responses-delete.test.ts ✅ Passed 165ms
tests/responses-input-items-errors.test.ts ✅ Passed 348ms
tests/responses-input-items-list.test.ts ✅ Passed 254ms
tests/responses-input-items-options.test.ts ✅ Passed 355ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 331ms
tests/responses-input-tokens-count.test.ts ✅ Passed 171ms
tests/responses-malformed-inputs.test.ts ✅ Passed 947ms
tests/responses-not-found-errors.test.ts ✅ Passed 394ms
tests/responses-parse.test.ts ✅ Passed 201ms
tests/responses-retrieve-retries.test.ts ✅ Passed 192ms
tests/responses-retrieve.test.ts ✅ Passed 185ms
tests/responses-stored-method-errors.test.ts ✅ Passed 1.187s
tests/retry-behavior.test.ts ✅ Passed 3.126s
tests/sdk-error-shape.test.ts ✅ Passed 291ms

View OkTest run #38924964039

SDK merge (3c1885f104b1) · head (fcd06ae329e5) · base (230a923faba5) · OkTest (34e505148f02)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fcd06ae329

ℹ️ 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".

Comment on lines +3576 to +3578
text/event-stream:
schema:
$ref: '#/components/schemas/CreateCompletionResponse'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Allow null finish reasons in streamed completion chunks

When stream: true, intermediate completion chunks contain "finish_reason": null, as the endpoint's own streaming example demonstrates at lines 3728-3734. CreateCompletionResponse instead requires finish_reason to be one of three non-null strings at lines 42119-42134, so assigning that schema to text/event-stream makes valid chunks fail OpenAPI validation and misleads clients generated from this contract. Use a streaming schema that permits null, or make the shared choice field nullable.

Useful? React with 👍 / 👎.

@jbeckwith-oai
jbeckwith-oai marked this pull request as draft October 16, 2026 15:43
@jbeckwith-oai

Copy link
Copy Markdown
Contributor Author

Closing this scope expansion. The Java-only handwritten test extraction is already merged in openai/openai-java#1190.

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.

1 participant