Skip to content

Fix OpenAI responses streaming to preserve encrypted reasoning content#7266

Merged
stephentoub merged 2 commits intodotnet:mainfrom
stephentoub:fixreasoning
Feb 6, 2026
Merged

Fix OpenAI responses streaming to preserve encrypted reasoning content#7266
stephentoub merged 2 commits intodotnet:mainfrom
stephentoub:fixreasoning

Conversation

@stephentoub
Copy link
Member

@stephentoub stephentoub commented Feb 5, 2026

Microsoft Reviewers: Open in CodeFlow

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This pull request fixes a bug in OpenAI streaming responses where encrypted reasoning content was being lost during the streaming process. The fix ensures that when a ReasoningResponseItem contains encrypted content in the output_item.done event, that encrypted content is properly preserved and coalesced with the streamed text deltas, enabling correct roundtripping of encrypted reasoning data.

Changes:

  • Added streaming support for encrypted reasoning content by yielding a TextReasoningContent with only ProtectedData when encrypted content is present
  • Added comprehensive unit test for streaming encrypted content preservation
  • Added integration tests for roundtripping encrypted content in both streaming and non-streaming scenarios

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
src/Libraries/Microsoft.Extensions.AI.OpenAI/OpenAIResponsesChatClient.cs Added new case in streaming handler to yield encrypted content from ReasoningResponseItem when present, ensuring it gets coalesced with text deltas
test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientTests.cs Added unit test verifying that encrypted content is preserved through streaming and coalescing
test/Libraries/Microsoft.Extensions.AI.OpenAI.Tests/OpenAIResponseClientIntegrationTests.cs Added integration tests for both streaming and non-streaming roundtrip scenarios with encrypted content

@stephentoub stephentoub merged commit 013d9fd into dotnet:main Feb 6, 2026
6 checks passed
@stephentoub stephentoub deleted the fixreasoning branch February 6, 2026 22:01
joperezr added a commit that referenced this pull request Feb 11, 2026
* Merged PR 57712: Getting ready for 10.3 release

Getting ready for 10.3 release

----
#### AI description  (iteration 1)
#### PR Classification
This pull request implements release preparation changes for the 10.3 release.

#### PR Summary
The PR bumps dependency versions and adjusts configuration settings to ready the repository for the upcoming release while streamlining build pipeline tasks.
- **`eng/Version.Details.xml` & `eng/Versions.props`**: Update dependency versions from 9.0.12 to 9.0.13 (including net10 and LTS versions) and set release stabilization flags (`StabilizePackageVersion=true`, `DotNetFinalVersionKind=release`).
- **`azure-pipelines.yml`**: Remove the entire code coverage stage and its related dependency from the post-build steps.
- **`.github/skills/prepare-release/SKILL.md`**: Add documentation with instructions for preparing an internal release branch.
- **`Directory.Build.props` & `NuGet.config`**: Add NU1507 warning suppression and remove the package source mapping section to align with internal feed usage.
<!-- GitOpsUserAgent=GitOps.Apps.Server.pullrequestcopilot -->

* Fix OpenAI responses streaming to preserve encrypted reasoning content (#7266)

Co-authored-by: Copilot <[email protected]>

* Update OpenAIResponsesChatClient to handle streaming code interpreter content (#7267)

* Update OpenAIResponsesChatClient to handle streaming code interpreter content

Right now it outputs it but in a bulk fashion only at the end of the response item. This makes it yield the deltas instead.

* Dedup code block

* Update OpenTelemetry semantic convention version references from 1.38 to 1.39 (#7274)

* Initial plan

* Update OpenTelemetry semantic convention version comments from 1.38 to 1.39

Co-authored-by: stephentoub <[email protected]>

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: stephentoub <[email protected]>

* MEAI: Update Experimental / Preview Features (#7235)

* Remove [Experimental] attribute from IChatReducer

* Annotate APIs that use experimental OpenAI APIs. Remove prerelease label.

* Fix typo

Co-authored-by: Copilot <[email protected]>

* Remove project-wide OpenAI experimental suppressions. Finish annotating.

* Use granular constants for openai experimental diagnostics

* Update API baselines

* Remove unused const

* Remove redundant [Experimental] attributes for OpenAI Responses members

* Update ApiChief baselines for MEAI

---------

Co-authored-by: Copilot <[email protected]>

* Add ImageGenerationToolCallContent and ImageGenerationToolResultContent to JSON serialization infrastructure (#7275)

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: stephentoub <[email protected]>

* Mark all of MicrosoftExtensionsAIChatExtensions as experimental

---------

Co-authored-by: Stephen Toub <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: stephentoub <[email protected]>
Co-authored-by: Jeff Handley <[email protected]>
Co-authored-by: Jeff Handley <[email protected]>
@github-actions github-actions bot locked and limited conversation to collaborators Mar 9, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-ai Microsoft.Extensions.AI libraries

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants