Skip to content

Add voice agent WebSocket transport, tests, samples, and AI Projects parity - #50408

Open
Mike Guo (guotuofeng) wants to merge 45 commits into
myguo/voice-agents-generatedfrom
myguo/voice-agents-core
Open

Mike Guo (guotuofeng) wants to merge 45 commits into
myguo/voice-agents-generatedfrom
myguo/voice-agents-core

Conversation

@guotuofeng

@guotuofeng Mike Guo (guotuofeng) commented Sep 11, 2026

Copy link
Copy Markdown
Member

Description

Top of the active three-PR stack, based on the Agents generated foundation #50412. Combines the handwritten voice-agent WebSocket implementation, tests, samples, documentation, and AI Projects parity improvements. Generated Projects and Agents foundations remain separate PRs.

Changes

  • Synchronous and asynchronous authenticated voice-agent WebSocket clients with typed/raw events, bounded buffering, close handling, and handshake error mapping.
  • Realtime options for session IDs, structured inputs, credential scopes, API versions, headers/query parameters, and same-host secure connection URL overrides.
  • OpenAI factory option callbacks, agent-scoped preview defaults, overridable API versions, and credential/user-agent preservation in Agents and Projects.
  • Synchronous and asynchronous telemetry clients. The synchronous client uses ConnectionsClient directly, without blocking an async client.
  • Opt-in HTTP logging with bounded incremental UTF-8 decoding for consumed SSE bodies.
  • Preview error guidance, streamed upload hashing, upload-path validation, and memory-store polling fallback behavior.
  • Local WS/WSS protocol tests, serialization tests, conversation diagnostics, and voice-agent lifecycle/live samples. No recordings were changed or re-recorded.

Latest Updates

  • 7043d03f576: Simplifies Projects builder customization after repeated partial-update regeneration checks. The customization now retains only the generated no-argument createHttpPipeline() delegation to createHttpPipeline(true) and appends handwritten TelemetryClient/TelemetryAsyncClient registrations to @ServiceClientBuilder.
  • 8e65f4e6f82: Removes redundant Projects generation customizations. Partial update preserves the handwritten pipeline overload, authentication guard, logging resolver, custom logging policy, transitive Blob module requirement, telemetry factory methods, and other handwritten builder code.
  • Regeneration with Java emitter 0.47.0 confirmed that telemetry factory methods survive partial update but telemetry classes disappear from generated @ServiceClientBuilder metadata unless explicitly appended by customization. Regeneration with the minimal customization restores both registrations.
  • 3f6fc0c266a: Propagates Projects TypeSpec pin c12a439255c265d647357b4762e095656dda91c0 through the stack.
  • 14d246c723b: Adds successful agent-deletion console output to lifecycle samples, distinguishing normal completion from error cleanup in the async sample.
  • 2bbbb4f06b9: Makes outer WebSocket factories private and migrates callers to the public .beta() factories.

Stack

  1. Regenerate Azure AI Projects client #50407: Projects generated foundation, based on main, at e5d355f25e3.
  2. Regenerate Azure AI Agents client #50412: Agents generated foundation, based on Regenerate Azure AI Projects client #50407, at 78dba160c31.
  3. This PR: Handwritten transport, parity improvements, tests, samples, and documentation, based on Regenerate Azure AI Agents client #50412, at 7043d03f576.

The stack was previously rebased onto main at d269069710b7ca939c95dc880e0044e537fa9b97 with explicit authorization. Original merge topology and merge resolutions were preserved. Subsequent updates, including the c12a439... Projects regeneration and customization cleanup, were normal merges and pushes.

The work previously split into #50409 and #50410 is included here; those PRs are no longer separate active layers.

Latest Local Validation

Projects minimal-customization validation at 7043d03f576:

  • Clean Projects package: 148 total, 124 passed, 24 skipped, zero failures or errors.
  • Checkstyle passed with zero violations.
  • Strict RevApi passed against the checksum-verified official Projects 2.5.0 artifact.
  • Main, test, and sample sources compiled.
  • Repeated regeneration preserved createHttpPipeline(true), handwritten pipeline/logging methods, telemetry factory methods, and requires transitive com.azure.storage.blob.
  • The minimal customization regenerated TelemetryClient.class and TelemetryAsyncClient.class in the outer @ServiceClientBuilder annotation.

Stack propagation validation at 3f6fc0c266a:

  • Agents package: 463 total, 437 passed, 26 skipped, zero failures or errors.
  • Agents Checkstyle passed with zero violations and strict RevApi passed against 2.5.0.
  • Projects validation on the Agents layer passed 103 total, 79 passed, 24 skipped, Checkstyle, and strict RevApi.

The official Projects 2.5.0 Maven Central artifact was verified with SHA-1 7b3cdadba896d429186f2a78b2aaf28e770c3aee. An earlier mismatched local baseline was replaced; compatibility conclusions above use the official artifact.

No live Azure, enabled SpotBugs, or Javadoc run was performed for the latest customization cleanup. TypeSpec generation reported four npm dependency vulnerabilities (three moderate and one high); no dependency-audit fixes were applied. These are local results, not a claim that current CI or merge requirements are complete.

Earlier Validation and Known Limits

  • Post-rebase validation passed Projects with 124 tests passed and 24 skipped, and Agents with 437 passed and 26 skipped; both passed Checkstyle and strict RevApi.
  • Repeated Agents regeneration with emitter 0.47.0 preserved the private WebSocket factories and .beta() caller migration; remaining output differences were whitespace-only.
  • Earlier enabled SpotBugs runs reported generated-model findings; no SpotBugs rules were suppressed.
  • An intermittent conversation-item decoding failure seen after an earlier test merge did not recur in subsequent full-suite and repeated focused runs. Diagnostics were improved, but its root cause is not confirmed fixed.

All SDK Contribution checklist

  • CHANGELOG and relevant documentation updated.
  • Contribution guidelines reviewed.
  • Behavioral tests included; latest full-suite and historical validation results are distinguished above.

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.

🟡 Changes recommended

Unresolved critical and moderate findings remain in WebSocket behavior and model serialization.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds generated voice/realtime agent models and authenticated synchronous/asynchronous WS/WSS sessions to azure-ai-agents.

Changes:

  • Regenerates voice, realtime, telephony, and agent model surfaces.
  • Adds WebSocket authentication, proxying, typed events, audio, tools, cancellation, and close handling.
  • Updates TypeSpec metadata, module dependencies, vocabulary, and release metadata.

Unresolved findings remain in connection validation and cancellation, bounded close buffering, handshake error preservation, and PromptAgentDefinition serialization.

File summaries
File Summary
sdk/ai/cspell.yml Adds domain vocabulary.
sdk/ai/azure-ai-agents/tsp-location.yaml Updates TypeSpec source metadata.
sdk/ai/azure-ai-agents/src/main/java/module-info.java Updates module dependencies.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceType.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceResponseBaseStatus.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceResponseBaseOutputModality.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceResponseBaseObject1.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceResponseBaseObject.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceResponseAudio.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceOutputModality.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceModelType.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceConversationStatus.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAudioRole.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAudioContainerFormat.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAudioCodec.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentTurnDetectionType.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentTransport.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentToolResponseScheduling.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentSystemToolName.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentSubagentAbortReason.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentSessionIncludeOption.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentSemanticVadTurnDetectionEagerness.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentResponseCreateParamsConversation.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentNoiseReductionType.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentInterimResponseTrigger.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentFunctionToolType.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentEndOfUtteranceThresholdLevel.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentEchoCancellationReferenceSource.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentAvatarType.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentAvatarOutputProtocol.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentAudioTimestampType.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentAudioInputConfigTranscriptionDelay.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/VoiceAgentAnimationOutputType.java Generated voice model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TranscriptionLanguage.java Generated transcription model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/ToolType.java Generated tool model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/ToolConfig.java Generated tool model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/ToolChoiceOptions.java Generated tool model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/ToolboxVersions.java Generated toolbox model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/ToolboxToolType.java Generated toolbox model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/ToolboxTool.java Generated toolbox model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/Tool.java Generated tool model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyTransferDestinationKind.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyProvider.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyOutboundRetryPolicyType.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyOutboundDestinationType.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyOperationStatus.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCampaignScheduleType.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCampaignRecipientImportStatus.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCampaignRecipientImportFormat.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCampaignDuplicateHandling.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCampaignConfigurationStatus.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCallTraceStatus.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCallTraceMode.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCallTimestampSource.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCallStatus.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCallLifecycleEventSource.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCallLifecycleEventOutcome.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyCallDurationBasis.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/TelephonyBindingStatus.java Generated telephony model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/SessionAffinitySource.java Generated session-affinity model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/SessionAffinityRequestMode.java Generated session-affinity model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/SessionAffinityMode.java Generated session-affinity model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/SessionAffinityDecision.java Generated session-affinity model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeTurnDetectionType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeSessionCreateRequestUnionType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeServerEventResponseContentPartDonePartType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeServerEventResponseContentPartAddedPartType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeServerEventRateLimitsUpdatedRateLimitsName.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeServerEventConversationCreatedConversationObject.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeResponseStatusDetailsType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeResponseStatusDetailsReason.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeReasoningEffort.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeMcpErrorType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemObject.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemMessageUserStatus.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemMessageUserContentType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemMessageUserContentDetail.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemMessageType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemMessageSystemStatus.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemMessageSystemContentType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemMessageAssistantStatus.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemMessageAssistantContentType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemFunctionCallStatus.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeConversationItemFunctionCallOutputStatus.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeClientEventSessionUpdateSessionTruncation.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeClientEventSessionUpdateSessionOutputModality.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeAudioFormatsType.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RealtimeAudioFormatsAudioPcmRate.java Generated realtime model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RaiInvocationMode.java Generated responsible-AI model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/RaiInvocationContentType.java Generated responsible-AI model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/PublishTelephonyCampaignRequest.java Generated telephony request model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/PromptCacheBreakpointConfig.java Generated prompt model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/PromptAgentDefinition.java Prompt agent model; serialization finding remains.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/NoiseReductionType.java Generated audio model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/ModelRouterDetails.java Generated agent model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/McpListToolsToolInputSchema.java Generated MCP model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/McpListToolsToolAnnotations.java Generated MCP model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/ImageDetail.java Generated content model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/GitHubCopilotHarness.java Generated GitHub Copilot model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/GitHubCopilotBuiltInTool.java Generated GitHub Copilot model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/FileInputDetail.java Generated content model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/CreateTranscriptionResponseJsonUsageType.java Generated transcription model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/AzureCreateResponseOptions.java Generated agent model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/AgentOptimizationJobProgress.java Generated agent model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/AgentKind.java Generated agent model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/AgentEndpointProtocol.java Generated agent model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/AgentDetails.java Generated agent model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/AgentDefinition.java Generated agent model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/SyncOperationLocationPollingStrategy.java Polling customization.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/realtime/VoiceAgentWebSocketHandshakeHandler.java WebSocket handshake handling.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/OperationLocationPollingStrategy.java Polling customization.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/models/TransferTelephonyCallRequest.java Generated implementation model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/models/AgentDefinitionOptInKeys.java Generated implementation model.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/JsonMergePatchHelper.java JSON merge-patch helper.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/AgentsClientImpl.java Generated client implementation.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/BetaVoiceAgentWebSocketClient.java Synchronous WebSocket entry point; validation finding remains.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/BetaVoiceAgentWebSocketAsyncClient.java Asynchronous WebSocket entry point.
sdk/ai/azure-ai-agents/CHANGELOG.md Documents the feature.
sdk/ai/azure-ai-agents/assets.json Updates package metadata.
Review details

Suppressed comments (4)

sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/VoiceAgentWebSocketSessionAsyncClient.java:404

  • Disabling automatic ping handling leaves ping frames to the receive path, but handleFrame only processes text and binary frames and never sends a Pong. A server keepalive ping can therefore go unanswered and cause the session to be closed. Keep automatic ping handling enabled or explicitly process PingWebSocketFrame messages.
    sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/VoiceAgentWebSocketSessionClient.java:412
  • The OkHttp transport configures a fixed proxy but ignores ProxyOptions.getNonProxyHosts(), whereas the Reactor Netty path honors that setting. Synchronous sessions therefore route hosts configured to bypass the proxy through it, which can break internal endpoints and makes the two clients behave differently. Configure the OkHttp proxy selector to honor the bypass pattern.
    sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/VoiceAgentWebSocketSessionClient.java:92
  • The synchronous constructor accepts an empty agent name and builds /agents//endpoint/protocols/voice, whereas the async constructor rejects empty names. connect("") should fail before issuing this malformed service request so both public clients have the same validation.
    sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/realtime/VoiceAgentWebSocketHttpResponse.java:37
  • Netty can expose multiple header entries with the same name, but HttpHeaders.set overwrites the previous value on each iteration. A rejected handshake with repeated headers (for example, authentication challenges) is therefore reported with only its last value, unlike the OkHttp adapter. Append each entry instead of replacing the header.
  • Files reviewed: 74/418 changed files
  • Comments generated: 5
  • Review effort level: Lite

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

@guotuofeng
Mike Guo (guotuofeng) removed this pull request from stack #50411 September 11, 2026 01:13
@guotuofeng
Mike Guo (guotuofeng) changed the base branch from myguo/voice-projects-generated to myguo/voice-agents-generated September 11, 2026 01:13
@guotuofeng
Mike Guo (guotuofeng) added this pull request to stack #50413 September 11, 2026 01:13
@guotuofeng Mike Guo (guotuofeng) changed the title Add realtime voice agent WebSocket support Add realtime voice agent WebSocket transport Sep 11, 2026
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 278 pipeline(s).
36 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

1 similar comment
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 278 pipeline(s).
36 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@guotuofeng

Copy link
Copy Markdown
Member Author

Synchronized Core with the lower PRs at a73c130afc2 on 2026-09-15.

This merge incorporates #50412 at 2ca57f2b56f, which includes #50407 at 92ccfe2307e. It adds the Agents and Projects Revapi filter configurations and removes both SDK-local Revapi suppression files. Core already contained the Memory Stores hyphenated test names, so those tests did not change in this merge.

Published together with Agents using a normal atomic push, preserving existing history and PR bases.

Validation on this combined Core tree:

  • Agents and Projects package builds passed.
  • Both packages passed Checkstyle, SpotBugs, Revapi, and Javadoc.
  • Agents playback: 463 tests, 437 passed, 26 skipped, 0 failures/errors.
  • Projects playback: 148 tests, 124 passed, 24 skipped, 0 failures/errors.
  • Stack ancestry and Git whitespace checks passed; working tree was clean.

An initial Windows target-directory lock was resolved by retrying the Agents clean build. Live-service tests were not run. These local results do not replace CI checks.

# Conflicts:
#	sdk/ai/azure-ai-projects/customizations/src/main/java/ProjectsCustomizations.java
# Conflicts:
#	sdk/ai/azure-ai-agents/CHANGELOG.md
#	sdk/ai/azure-ai-agents/customizations/src/main/java/AgentsCustomizations.java
#	sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/AgentsClientBuilder.java
#	sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/AgentsServicePollUtils.java
#	sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/FoundryFeaturesHeaderVerificationTest.java
#	sdk/ai/azure-ai-projects/customizations/src/main/java/ProjectsCustomizations.java
# Conflicts:
#	sdk/ai/azure-ai-agents/CHANGELOG.md
#	sdk/ai/azure-ai-agents/customizations/src/main/java/AgentsCustomizations.java
#	sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/AgentsClientBuilder.java
#	sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/AgentsServicePollUtils.java
#	sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/FoundryFeaturesHeaderVerificationTest.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants