Skip to content

.NET: fix: preserve Responses logprobs field#5860

Open
he-yufeng wants to merge 2 commits into
microsoft:mainfrom
he-yufeng:fix/openai-hosting-logprobs
Open

.NET: fix: preserve Responses logprobs field#5860
he-yufeng wants to merge 2 commits into
microsoft:mainfrom
he-yufeng:fix/openai-hosting-logprobs

Conversation

@he-yufeng

Copy link
Copy Markdown
Contributor

Summary

  • add the missing logprobs field to the Responses CreateResponse and Response models
  • keep logprobs alongside top_logprobs during JSON deserialize / reserialize round trips
  • cover request and response payloads in OpenAI hosting serialization tests

Fixes #5854.

To verify

  • dotnet test --project tests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.csproj -f net10.0 --no-restore --filter-class Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.OpenAIResponsesSerializationTests
  • dotnet build src\Microsoft.Agents.AI.Hosting.OpenAI\Microsoft.Agents.AI.Hosting.OpenAI.csproj -f net10.0 --no-restore --tl:off
  • dotnet build tests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.csproj -f net10.0 --no-restore --tl:off
  • dotnet format src\Microsoft.Agents.AI.Hosting.OpenAI\Microsoft.Agents.AI.Hosting.OpenAI.csproj --verify-no-changes --no-restore
  • dotnet format tests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.csproj --verify-no-changes --no-restore

Copilot AI review requested due to automatic review settings May 14, 2026 19:07
@moonbox3 moonbox3 added the .NET label May 14, 2026

Copilot AI 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.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR fixes loss of the logprobs field during .NET Responses request/response JSON serialization round-trips by adding the missing model properties and extending serialization tests to cover the behavior.

Changes:

  • Add nullable logprobs to CreateResponse and Response models.
  • Add unit tests to validate logprobs + top_logprobs deserialize/reserialize round trips.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.

File Description
dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/OpenAIResponsesSerializationTests.cs Adds round-trip serialization tests for logprobs and top_logprobs in request/response payloads.
dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/Models/Response.cs Adds Logprobs JSON-mapped property to preserve response payload field.
dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/Models/CreateResponse.cs Adds Logprobs JSON-mapped property to preserve request payload field.

Comment on lines +212 to +214
Assert.NotNull(request);
Assert.True(request.Logprobs);
Assert.Equal(3, request.TopLogprobs);
Comment on lines +591 to +593
Assert.NotNull(response);
Assert.True(response.Logprobs);
Assert.Equal(3, response.TopLogprobs);
}

[Fact]
public void Deserialize_CreateRequestWithLogprobs_RoundTripsFields()
}
""";

CreateResponse? request = JsonSerializer.Deserialize(Json, OpenAIHostingJsonContext.Default.CreateResponse);
@justinyoo

Copy link
Copy Markdown

Hi, Team. Just follow up for the catch up on the current status of this.

/// Whether log probabilities were requested for the output tokens.
/// </summary>
[JsonPropertyName("logprobs")]
public bool? Logprobs { get; init; }

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.

Should this also be propagated wherever a Response is synthesized from CreateResponse? The model now round-trips direct JSON, but the hosted response builders copy TopLogprobs without the matching Logprobs flag, so a /responses request with "logprobs": true can still return response metadata that omits the field. That leaves the OpenAI-compatible endpoint behavior this PR is fixing incomplete.

@he-yufeng

Copy link
Copy Markdown
Contributor Author

Addressed the remaining propagation gap in 5ead97d. Logprobs is now copied alongside TopLogprobs in all three CreateResponse -> Response synthesis paths: non-streaming agent responses, streaming response snapshots, and the in-memory response service.

Validation on Windows: project restore/build succeeded, OpenAIResponsesSerializationTests passed, all 38 OpenAIResponsesIntegrationTests passed, targeted dotnet format verification passed with the existing workspace-load warning, and git diff --check passed.

@he-yufeng he-yufeng force-pushed the fix/openai-hosting-logprobs branch from 5ead97d to f82bad6 Compare June 9, 2026 10:37
@he-yufeng

Copy link
Copy Markdown
Contributor Author

Rebased the logprobs propagation fix onto current main. The final six-file behavior diff is unchanged, the hosting project builds with zero warnings/errors, and the earlier focused serialization/integration test results remain applicable.

@he-yufeng he-yufeng force-pushed the fix/openai-hosting-logprobs branch from f82bad6 to 2172407 Compare June 11, 2026 22:25
@he-yufeng

Copy link
Copy Markdown
Contributor Author

Updated and rebased the branch onto current main.

This addresses the remaining review threads:

  • renamed the create-side logprobs test/variable to match the CreateResponse model being deserialized
  • changed the nullable bool assertions to check HasValue and then Value
  • kept the earlier Logprobs propagation fix across all three CreateResponse -> Response synthesis paths

Validation:

  • dotnet build .\dotnet\tests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.csproj -f net10.0 --tl:off (0 warnings, 0 errors)
  • dotnet .\dotnet\tests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests\bin\Debug\net10.0\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.dll --filter-class Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.OpenAIResponsesSerializationTests --no-progress (53 passed)
  • dotnet format dotnet\agent-framework-dotnet.slnx --verify-no-changes --no-restore --include ... (passed; existing workspace-load warning only)
  • git diff --check upstream/main..HEAD

@he-yufeng he-yufeng force-pushed the fix/openai-hosting-logprobs branch from 2172407 to facab90 Compare June 12, 2026 03:33
@he-yufeng

Copy link
Copy Markdown
Contributor Author

Rebased this branch onto current main and pushed the updated head facab905.

Validation run locally from dotnet/:

  • dotnet build .\src\Microsoft.Agents.AI.Hosting.OpenAI\Microsoft.Agents.AI.Hosting.OpenAI.csproj -f net10.0 --tl:off -> passed, 0 warnings/errors
  • dotnet run --project .\tests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.csproj -f net10.0 -> passed, 390 tests
  • git diff --check upstream/main..HEAD -> passed

Note: I used dotnet run --project for the test project because the local .NET 10 dotnet test runner rejected this project under the repository's MTP global runner setting before executing tests.

@he-yufeng he-yufeng force-pushed the fix/openai-hosting-logprobs branch from facab90 to c2e48bd Compare June 12, 2026 11:15
@he-yufeng

Copy link
Copy Markdown
Contributor Author

Rebased this branch onto current main and pushed the updated head c2e48bd.

Validation run locally from dotnet/:

  • dotnet build .\src\Microsoft.Agents.AI.Hosting.OpenAI\Microsoft.Agents.AI.Hosting.OpenAI.csproj -f net10.0 --tl:off -> passed, 0 warnings/errors
  • dotnet run --project .\tests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.csproj -f net10.0 -> passed, 390 tests
  • git diff --check upstream/main..HEAD -> passed

The PR diff remains scoped to the six .NET OpenAI hosting/logprobs files after the rebase.

@he-yufeng he-yufeng force-pushed the fix/openai-hosting-logprobs branch from c2e48bd to 766e32e Compare June 12, 2026 15:13
@he-yufeng

Copy link
Copy Markdown
Contributor Author

Rebased this branch onto current main and pushed head 766e32e67.

Validation run locally from dotnet/:

  • git diff --check upstream/main..HEAD -> passed
  • dotnet build .\src\Microsoft.Agents.AI.Hosting.OpenAI\Microsoft.Agents.AI.Hosting.OpenAI.csproj -f net10.0 --tl:off -> passed, 0 warnings/errors
  • dotnet run --project .\tests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests\Microsoft.Agents.AI.Hosting.OpenAI.UnitTests.csproj -f net10.0 -- --no-progress -> passed, 390 tests

@he-yufeng he-yufeng force-pushed the fix/openai-hosting-logprobs branch from 766e32e to c80b6a3 Compare June 12, 2026 16:56
@he-yufeng he-yufeng force-pushed the fix/openai-hosting-logprobs branch from c80b6a3 to 8ed968b Compare June 12, 2026 20:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

.NET: [Bug]: Azure.AI.AgentServer.Responses.PayloadValidationException: Required property 'logprobs' is missing

4 participants