Add union wrappers to azure-ai-agents types - #50480
Merged
Merged
Conversation
Kaylie (kaylieee)
requested review from
a team,
Darren Cohen (dargilco),
Gerardo Lecaros (glecaros),
Glenn Harper (glharper),
Jose Alvarez (jpalvarezl) and
Ryan Hurey (rhurey)
as code owners
September 16, 2026 06:41
|
Azure Pipelines: Successfully started running 1 pipeline(s). 35 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved duplicate-method generation, ambiguous nullable setters, and string-enum storage issues require fixes before approval.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
This PR adds typed union wrappers, immutable constructors, and serialization support for Azure AI Agents voice and realtime models.
Changes:
- Expands union accessors for enum, model, list, and OpenAI variants.
- Adds immutable union constructors and serialization helpers.
- Adds comprehensive voice and realtime serialization tests.
File summaries
| File | Reviewed changes |
|---|---|
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceResponseSerializationTests.java |
Tests voice response serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceResponseBaseSerializationTests.java |
Tests base voice response serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceAgentSessionUpdateConfigSerializationTests.java |
Tests session update configuration serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceAgentSessionResponseConfigSerializationTests.java |
Tests session response configuration serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceAgentResponseCreateParamsSerializationTests.java |
Tests response creation parameters. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceAgentRealtimeResponseSerializationTests.java |
Tests realtime response serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceAgentRealtimeResponseBaseSerializationTests.java |
Tests base realtime response serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceAgentMcpToolSerializationTests.java |
Tests MCP tool union serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceAgentLlmGeneratedGreetingConfigSerializationTests.java |
Tests greeting configuration serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/VoiceAgentDefinitionSerializationTests.java |
Tests agent definition unions. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/UnionTypeSerializationTestUtils.java |
Provides shared serialization test utilities. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/RealtimeSessionCreateRequestGASerializationTests.java |
Tests realtime session request unions. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/RealtimeSessionCreateRequestGAAudioOutputSerializationTests.java |
Tests audio output variants. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/RealtimeServerEventSessionUpdatedSerializationTests.java |
Tests updated-session event serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/RealtimeServerEventSessionCreatedSerializationTests.java |
Tests created-session event serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/RealtimeServerEventConversationItemInputAudioTranscriptionCompletedSerializationTests.java |
Tests transcription usage serialization. |
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/RealtimeClientEventSessionUpdateSerializationTests.java |
Tests client session update serialization. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceResponseBase.java |
Adds typed base response accessors. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceResponse.java |
Adds typed response accessors. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentSessionUpdateConfig.java |
Adds session update union wrappers. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentSessionResponseConfig.java |
Adds session response union wrappers. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentResponseCreateParams.java |
Adds response parameter wrappers. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentRealtimeResponseBase.java |
Adds base realtime response accessors. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentRealtimeResponse.java |
Adds realtime response accessors. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentMcpTool.java |
Adds MCP tool union wrappers. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentLlmGeneratedGreetingConfig.java |
Adds greeting tool-choice wrappers. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentDefinition.java |
Adds definition union wrappers. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeSessionCreateRequestGAAudioOutput.java |
Adds audio output union wrappers. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeSessionCreateRequestGA.java |
Adds realtime request union wrappers. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeServerEventSessionUpdated.java |
Adds typed session constructors and accessors. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeServerEventSessionCreated.java |
Adds typed session constructors and accessors. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeServerEventConversationItemInputAudioTranscriptionCompleted.java |
Adds typed usage constructors and accessors. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeClientEventSessionUpdate.java |
Adds typed session constructors and accessors. |
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/OpenAIJsonHelper.java |
Adds OpenAI union serialization helpers. |
sdk/ai/azure-ai-agents/customizations/src/main/java/AgentsCustomizations.java |
Generates typed union accessors and constructors. |
Review details
Suppressed comments (2)
sdk/ai/azure-ai-agents/customizations/src/main/java/AgentsCustomizations.java:278
- Using the shared
setterNamefor each nullable union variant creates ambiguous calls such assetVoice(null)andsetToolChoice(null)because multiple reference-typed overloads match; callers are forced to add casts, as the new tests do. The package's union guidance documents this exact problem and recommends distinct variant-specific setter names (the OpenAI branch uses the same pattern).
"public " + className + " " + setterName + "(" + variant[V_SETTER_TYPE] + " " + property
sdk/ai/azure-ai-agents/customizations/src/main/java/AgentsCustomizations.java:380
- The immutable customization has the same rerun problem for constructors: it clones the retained raw
BinaryDataconstructor and unconditionally appends each typed overload. On a partial update, the existing public union constructors remain in the class, so a second customization run introduces duplicate constructors and the generated source no longer compiles. Remove or replace union-marked typed constructors, or check the constructor signature before adding it.
clazz.addMember(typedConstructor);
- Files reviewed: 35/35 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
Jose Alvarez (jpalvarezl)
approved these changes
Sep 16, 2026
Jose Alvarez (jpalvarezl)
left a comment
Member
There was a problem hiding this comment.
Looks good. Just a couple of nits.
Darren Cohen (dargilco)
approved these changes
Sep 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request makes significant enhancements to the customization logic for union-type properties in the Azure AI Agents Java SDK. The main improvements include supporting string-enum union variants, adding support for immutable union properties with typed constructors, and cleaning up obsolete or redundant code. These changes improve the generated API's type safety, clarity, and maintainability.
Union Type Customization Improvements:
Immutable Model Enhancements:
customizeImmutableUnionPropertyto generate public constructor overloads for each union variant on immutable models, improving type safety and usability for required union properties. [1] [2]API and Code Cleanup:
VoiceAgentDefinition,VoiceAgentSessionResponseConfig, and others, ensuring consistent API coverage. [1] [2]Internal Utility Improvements:
binaryDataExpressionandhasUnionMarkerto streamline code generation and variant management.These changes collectively modernize and extend the code generation for union properties, making the SDK easier and safer to use for developers.