Skip to content

feat(agents): [1/n] return typed answers from session streams - #4007

Merged
apcha-oai merged 12 commits into
mainfrom
apcha/agents-typed-results
Oct 1, 2026
Merged

apcha-oai merged 12 commits into
mainfrom
apcha/agents-typed-results

Conversation

@apcha-oai

@apcha-oai apcha-oai commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Bind a Pydantic output model to the Agents request and its completed result, so applications can use a typed answer without maintaining separate schema and parsing code.

Before:

with client.beta.agents.sessions.create(
    agent={"model": MODEL, "text": {"format": {
        "type": "json_schema", "schema": schema,
    }}},
    environment={"type": "none"}, input=QUESTION, stream=True,
) as stream:
    result = stream.get_final_result()
report = Report.model_validate_json(result.output_text)

After:

with client.beta.agents.sessions.create(
    agent={"model": MODEL}, environment={"type": "none"},
    input=QUESTION, stream=True, output_type=Report,
) as stream:
    result = stream.get_final_result()
report = result.output_parsed

The same output_type works on follow-up streams as a local parser for an already-configured session. output_parsed returns the first parsed final text part; all final text parts are validated. Raw output remains available; parsing failures expose the completed result through AgentOutputParseError.result. Sync and async helpers share the existing Pydantic schema normalization and result collection.

Schema conversion follows the existing Responses helper; API errors report unsupported schema features. Typed tools and outputs can reuse the same model without output normalization changing its tool argument schema.

Stack

@apcha-oai
apcha-oai requested a review from a team as a code owner October 1, 2026 00:30
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 1, 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-01T15:35:03.634258Z e8c9c54 New commits
🔒 Security Review ✅ Completed 2026-10-01T15:33:56.463452Z e8c9c54 New commits
ℹ️ 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 Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Castiron custom code

✅ No new custom-code files detected.

49 mixed files remain; 1 existing customization changed.

Compared f219c5581661 → e8c9c5490afa. Generated baselines verified.

File Result Current custom patch
src/openai/resources/beta/agents/sessions/sessions.py Existing customization changed +81 / −11
48 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/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/beta/agent_session_message.py
  • src/openai/types/beta/session_turn_error.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

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

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

git fetch --no-tags origin f219c5581661408688195659ab0137927ba9a033 e8c9c5490afad52ec1c060d028c65217c98a5d8a
python3 scripts/castiron/custom_code_report.py report \
  --base f219c5581661408688195659ab0137927ba9a033 \
  --head e8c9c5490afad52ec1c060d028c65217c98a5d8a --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-e8c9c5490afa
cat /tmp/castiron-custom-code-e8c9c5490afa/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 Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

OkTest Summary

✅ 236/236 SDK tests passed in 10.167s for Python SDK PR #4007.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 123ms
tests/chat-completions-create.test.ts ✅ Passed 267ms
tests/chat-completions-stream.test.ts ✅ Passed 247ms
tests/files-content-binary.test.ts ✅ Passed 182ms
tests/files-create-multipart.test.ts ✅ Passed 189ms
tests/files-list-pagination.test.ts ✅ Passed 174ms
tests/initialize-config.test.ts ✅ Passed 146ms
tests/instance-isolation.test.ts ✅ Passed 154ms
tests/models-list.test.ts ✅ Passed 210ms
tests/responses-background-lifecycle.test.ts ✅ Passed 142ms
tests/responses-body-method-errors.test.ts ✅ Passed 398ms
tests/responses-cancel-timeout.test.ts ✅ Passed 214ms
tests/responses-cancel.test.ts ✅ Passed 178ms
tests/responses-compact-retries.test.ts ✅ Passed 271ms
tests/responses-compact.test.ts ✅ Passed 253ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 131ms
tests/responses-create-advanced.test.ts ✅ Passed 183ms
tests/responses-create-disconnect.test.ts ✅ Passed 1.27s
tests/responses-create-errors.test.ts ✅ Passed 174ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 177ms
tests/responses-create-retries.test.ts ✅ Passed 203ms
tests/responses-create-stream-failures.test.ts ✅ Passed 156ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 232ms
tests/responses-create-stream-wire.test.ts ✅ Passed 3.075s
tests/responses-create-stream.test.ts ✅ Passed 337ms
tests/responses-create-terminal-states.test.ts ✅ Passed 212ms
tests/responses-create-timeout.test.ts ✅ Passed 191ms
tests/responses-create.test.ts ✅ Passed 169ms
tests/responses-delete.test.ts ✅ Passed 163ms
tests/responses-input-items-errors.test.ts ✅ Passed 546ms
tests/responses-input-items-list.test.ts ✅ Passed 333ms
tests/responses-input-items-options.test.ts ✅ Passed 280ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 226ms
tests/responses-input-tokens-count.test.ts ✅ Passed 144ms
tests/responses-malformed-inputs.test.ts ✅ Passed 2.119s
tests/responses-not-found-errors.test.ts ✅ Passed 298ms
tests/responses-parse.test.ts ✅ Passed 221ms
tests/responses-retrieve-retries.test.ts ✅ Passed 451ms
tests/responses-retrieve.test.ts ✅ Passed 154ms
tests/responses-stored-method-errors.test.ts ✅ Passed 559ms
tests/retry-behavior.test.ts ✅ Passed 3.024s
tests/sdk-error-shape.test.ts ✅ Passed 274ms

View OkTest run #36884942420

SDK merge (3275be484008) · head (e8c9c5490afa) · base (f219c5581661) · OkTest (e7cf6535e0ca)

@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: bf09b00004

ℹ️ 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 thread src/openai/lib/beta/agents/_result.py Outdated
@apcha-oai

Copy link
Copy Markdown
Contributor Author

@codex review pls

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: c2cff1c431

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: c2cff1c431

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

@apcha-oai apcha-oai changed the title [1/n] feat(agents): return typed answers from session streams feat(agents): [1/n] return typed answers from session streams Oct 1, 2026

@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: ab9c333705

ℹ️ 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 thread src/openai/lib/beta/agents/_result.py Outdated
@apcha-oai

Copy link
Copy Markdown
Contributor Author

@codex review pls

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 36c00973e5

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@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: 36c00973e5

ℹ️ 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 thread src/openai/lib/beta/agents/_output.py Outdated
@apcha-oai

Copy link
Copy Markdown
Contributor Author

@codex review pls

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: 3a8ec49513

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

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 3a8ec49513

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@apcha-oai

Copy link
Copy Markdown
Contributor Author

@codex review pls

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 5dbb92aee7

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@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: 5dbb92aee7

ℹ️ 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 thread src/openai/lib/beta/agents/_output.py Outdated
@apcha-oai

Copy link
Copy Markdown
Contributor Author

@codex review pls

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 8984cd6a67

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

Reviewed commit: 8984cd6a67

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

@apcha-oai
apcha-oai force-pushed the apcha/agents-typed-results branch from 8984cd6 to eea0329 Compare October 1, 2026 14:45

@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 eea0329cc8a922349695a88cbbcb2c6047e189fb against f219c5581661408688195659ab0137927ba9a033. No actionable findings in the current diff.

Reviewed all ten changed files and traced creation/follow-up streams through result collection and the shared Pydantic parsing/schema helpers. The creation-only schema normalization, parser-only follow-up behavior, copied model schemas, Pydantic v1 nullability handling, sync/async binding, raw-result recovery, and sanitized parse errors are consistent. The current tests cover the previously reported schema and error-handling cases, repeated result access, recursive/nullable models, and using the same model for tools and output without mutating its input schema.

Hosted lint, build, Python 3.10/3.14 and HTTPX2 tests, compatibility detection, and CodeQL passed; the linked OkTest report shows 236/236 passing at this head. I reviewed the test source but did not execute contributor code or live API calls locally.

@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: a97921a67f

ℹ️ 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 thread src/openai/lib/beta/agents/_result.py Outdated
@apcha-oai

Copy link
Copy Markdown
Contributor Author

@codex review pls

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Chef's kiss.

Reviewed commit: a97921a67f

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

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: a97921a67f

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

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

One verified Medium correctness finding is inline.

"""Beta: build the Agents JSON-schema format for a Pydantic model."""
validate_output_type(output_type)
if is_basemodel_type(output_type):
schema = model_schema(output_type, strict=True)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[Medium] Preserve Pydantic v1 nullable fields in the output schema

Under Pydantic v1, BaseModel.schema() omits null from Optional field schemas because optionality is represented by the field not being required. The strict-schema pass then marks every property required, so after removing the v1 restoration a model such as reason: str | None = None is sent as a required string. In a real typed Agents request, a legitimate null answer is therefore excluded even though the bound model accepts it, forcing a different value or an API-generation failure.

Suggested fix: Restore the Pydantic v1 nullability pass after model_schema(...), or move that correction into the shared strict-schema helper, and keep a v1 regression assertion that nested/list/union optional fields include a null branch.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Agreed, this looks like a real Pydantic v1 nullability gap. I reproduced reason: str | None = None: the model accepts None, but both the existing Responses helper and this Agents helper emit a required string without a null branch. Pydantic v2 includes the null branch in both paths.

For now we're keeping the Agents helper aligned with existing Responses behavior, rather than restoring an Agents-only correction. A shared, model-aware Pydantic v1 conversion fix would be a better follow-up; the API cannot recover nullability that the submitted schema omits. Leaving this thread unresolved to track the gap.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Tracking the shared Pydantic v1 nullability gap in SDK-1129, with the reproduction and this discussion linked there. Agents continues matching existing Responses behavior for now; leaving this thread unresolved.

@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 e8c9c5490afad52ec1c060d028c65217c98a5d8a. The per-text-part parsing, raw-result preservation, schema isolation and synchronous/asynchronous stream lifecycle look sound. Reusing the existing strict-schema normalizer keeps this API consistent with Responses. The existing Pydantic v1 nullability finding is a shared-helper limitation worth addressing there, rather than introducing a separate Agents schema policy.

Hosted checks passed on this head. No local SDK tests or live API calls were run.

@apcha-oai
apcha-oai added this pull request to the merge queue Oct 1, 2026
Merged via the queue into main with commit 10f8816 Oct 1, 2026
28 checks passed
@apcha-oai
apcha-oai deleted the apcha/agents-typed-results branch October 1, 2026 16:18
@openai-sdks openai-sdks Bot mentioned this pull request Oct 1, 2026
gh-actions-shared Bot pushed a commit to xf-qubit/openai-python that referenced this pull request Oct 1, 2026
## Summary

Stage selected local files and read an artifact from the exact completed
turn, either in memory or streamed to a local path. The helpers keep
upload IDs available for explicit cleanup and stream downloads to a
caller-chosen path.

Before:

```python
uploaded = client.files.create(file=Path("source.pdf"), purpose="user_data")
inputs = [{"type": "file_id", "file_id": uploaded.id, "path": "/workspace/source.pdf"}]
# Pass inputs when creating the hosted environment, then run the session.
artifact = next(a for a in client.beta.agents.sessions.artifacts.list(result.session_id)
                if a.turn_id == result.turn_id and a.path == "/workspace/outputs/report.md")
with client.beta.agents.sessions.artifacts.with_streaming_response.content(
    artifact.id, session_id=result.session_id,
) as content:
    content.stream_to_file("report.md")
```

After:

```python
prepared = client.beta.agents.environments.files.prepare({
    "/workspace/source.pdf": Path("source.pdf"),
})
# Pass prepared.files when creating the hosted environment, then run the session.
artifacts = client.beta.agents.sessions.artifacts.for_result(result)
report_bytes = artifacts.content("/workspace/outputs/report.md").content
# Or stream to an application-owned path:
artifact = artifacts.download("/workspace/outputs/report.md", to=Path("report.md"))
```

`prepare_directory(..., include=[...])` selects a directory snapshot;
`files.upload(...)` uploads and stages one file in an existing
environment. Sync and async helpers live under the beta Agents
namespace. They preflight selected files before uploading, preserve
partial upload ownership on errors, and detect missing or ambiguous
artifacts across all pages.

Local path selection is intended for static application-owned files and
stable directories; it is not a filesystem sandbox for untrusted paths
or hostile local writers.

This PR now targets `main` directly. Reattachment/result recovery is
deferred: a silent attachment cannot reliably distinguish pending work
from an already-completed turn, so these helpers do not depend on
SDK-side recovery heuristics.

### Stack

- openai#4004 (merged
prerequisite)
- openai#4007 (merged
prerequisite)
- openai#4008 (closed/deferred;
not a dependency)
- openai#4009 👈 this PR
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.

4 participants