Skip to content

fix(api): accept canonical batch responses in strict mode - #4106

Merged
jbeckwith-oai merged 1 commit into
mainfrom
castiron/promotions/pr-285
Oct 19, 2026
Merged

jbeckwith-oai merged 1 commit into
mainfrom
castiron/promotions/pr-285

Conversation

@jbeckwith-oai

Copy link
Copy Markdown
Contributor

Summary

Accept valid vector-store file-batch responses when strict response validation is enabled.

Changes

  • Preserve the returned object discriminator and validation of other response fields.

Castiron-Internal-PR: openai/openai-python-internal#285
Castiron-Source-SHA: 2e477ef802566a77f8bcbf9e66809ad52c0f82c2
Castiron-Public-Base-SHA: 553703e
@jbeckwith-oai
jbeckwith-oai marked this pull request as ready for review October 19, 2026 02:00
@jbeckwith-oai
jbeckwith-oai requested a review from a team as a code owner October 19, 2026 02:00
@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-19T02:03:35.240288Z d593033 Draft marked ready
🔒 Security Review ✅ Completed 2026-10-19T02:04:15.609025Z d593033 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 19, 2026 •

Copy link
Copy Markdown
Contributor

OkTest Summary

✅ 236/236 SDK tests passed in 9.785s for Python SDK PR #4106.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 224ms
tests/chat-completions-create.test.ts ✅ Passed 233ms
tests/chat-completions-stream.test.ts ✅ Passed 288ms
tests/files-content-binary.test.ts ✅ Passed 213ms
tests/files-create-multipart.test.ts ✅ Passed 227ms
tests/files-list-pagination.test.ts ✅ Passed 263ms
tests/initialize-config.test.ts ✅ Passed 176ms
tests/instance-isolation.test.ts ✅ Passed 155ms
tests/models-list.test.ts ✅ Passed 225ms
tests/responses-background-lifecycle.test.ts ✅ Passed 182ms
tests/responses-body-method-errors.test.ts ✅ Passed 300ms
tests/responses-cancel-timeout.test.ts ✅ Passed 239ms
tests/responses-cancel.test.ts ✅ Passed 192ms
tests/responses-compact-retries.test.ts ✅ Passed 333ms
tests/responses-compact.test.ts ✅ Passed 324ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 304ms
tests/responses-create-advanced.test.ts ✅ Passed 221ms
tests/responses-create-disconnect.test.ts ✅ Passed 1.275s
tests/responses-create-errors.test.ts ✅ Passed 207ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 225ms
tests/responses-create-retries.test.ts ✅ Passed 257ms
tests/responses-create-stream-failures.test.ts ✅ Passed 906ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 245ms
tests/responses-create-stream-wire.test.ts ✅ Passed 2.144s
tests/responses-create-stream.test.ts ✅ Passed 146ms
tests/responses-create-terminal-states.test.ts ✅ Passed 275ms
tests/responses-create-timeout.test.ts ✅ Passed 235ms
tests/responses-create.test.ts ✅ Passed 244ms
tests/responses-delete.test.ts ✅ Passed 211ms
tests/responses-input-items-errors.test.ts ✅ Passed 560ms
tests/responses-input-items-list.test.ts ✅ Passed 352ms
tests/responses-input-items-options.test.ts ✅ Passed 288ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 278ms
tests/responses-input-tokens-count.test.ts ✅ Passed 197ms
tests/responses-malformed-inputs.test.ts ✅ Passed 1.148s
tests/responses-not-found-errors.test.ts ✅ Passed 280ms
tests/responses-parse.test.ts ✅ Passed 265ms
tests/responses-retrieve-retries.test.ts ✅ Passed 607ms
tests/responses-retrieve.test.ts ✅ Passed 218ms
tests/responses-stored-method-errors.test.ts ✅ Passed 490ms
tests/retry-behavior.test.ts ✅ Passed 3.085s
tests/sdk-error-shape.test.ts ✅ Passed 320ms

View OkTest run #39187941546

SDK merge (795e165a5827) · head (d593033557c1) · base (553703e2d3db) · OkTest (ebbcfaca8a5e)

@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Castiron custom code

Evaluated main: 553703e2d3db379a83e3ead9e40436b7a66f639e.

Trusted main policy: 553703e2d3db379a83e3ead9e40436b7a66f639e.

✅ No new custom-code files detected.

41 mixed files remain; 0 existing customizations changed.

Compared 553703e2d3db → d593033557c1. 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 39187980848 --repo openai/openai-python \
  --name castiron-custom-code-39187980848-1 --dir /tmp/castiron-custom-code-39187980848-1
git apply --stat /tmp/castiron-custom-code-39187980848-1/custom-code.patch
cat /tmp/castiron-custom-code-39187980848-1/custom-code.patch

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

git fetch --no-tags origin 553703e2d3db379a83e3ead9e40436b7a66f639e d593033557c1a3dccea7eeb7ab65b3287acda237
python3 scripts/castiron/custom_code_report.py report \
  --base 553703e2d3db379a83e3ead9e40436b7a66f639e \
  --head d593033557c1a3dccea7eeb7ab65b3287acda237 --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-d593033557c1
cat /tmp/castiron-custom-code-d593033557c1/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 added this pull request to the merge queue Oct 19, 2026

@markstuart-oai markstuart-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 d593033557c1a3dccea7eeb7ab65b3287acda237. The strict HTTP response path accepts both file-batch discriminator spellings while preserving the public Literal, raw response value, request IDs, and validation of other fields. The change remains scoped to the concrete response type; direct model validation and subclasses retain their existing behavior. The new tests cover sync and async create, retrieve, cancel and poll, plus malformed responses and input immutability. No actionable findings.

Current hosted checks report 21 successes and 12 skips. I reviewed source and tests without executing candidate code.

Merged via the queue into main with commit 6eaa90e Oct 19, 2026
33 checks passed
@jbeckwith-oai
jbeckwith-oai deleted the castiron/promotions/pr-285 branch October 19, 2026 02: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