Enable voice agents for public preview - #9890
Conversation
|
Azure Pipelines: Successfully started running 2 pipeline(s). 20 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
ff97768 to
475ff0d
Compare
|
/azp run azure-dev - live - ext - azure.ai.agents |
|
Azure Pipelines: Successfully started running 1 pipeline(s). |
31884ae to
c84ef3b
Compare
|
Azure Pipelines: Successfully started running 2 pipeline(s). 20 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
📋 Prioritization NoteThanks for the contribution! The linked issue isn't in the current milestone yet. |
There was a problem hiding this comment.
🟡 Changes recommended
The help promises unsupported standalone voice deployment, interactive scenarios are stale, and several added lines violate enforced lint limits.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Enables Voice Agents for public preview by removing the prompt-voice gate and improving CLI discoverability and endpoint guidance.
Changes:
- Exposes prompt-voice initialization flags and picker flow.
- Updates command help and extension metadata for voice agents.
- Recognizes Voice Live WebSocket endpoints and returns targeted guidance.
File summaries
| File | Description |
|---|---|
internal/pkg/agents/agent_api/models.go |
Adds the voice protocol constant. |
internal/cmd/show.go |
Updates show help text. |
internal/cmd/root.go |
Updates root command messaging. |
internal/cmd/root_test.go |
Tests public command visibility. |
internal/cmd/invoke.go |
Adds Voice Live invocation guidance. |
internal/cmd/invoke_test.go |
Tests voice invocation rejection. |
internal/cmd/init.go |
Publicizes prompt-voice initialization. |
internal/cmd/init_test.go |
Tests public voice flags. |
internal/cmd/init_from_templates_helpers.go |
Exposes the voice picker option. |
internal/cmd/init_from_templates_helpers_test.go |
Tests the public picker behavior. |
internal/cmd/deploy.go |
Updates deployment help text. |
internal/cmd/delete.go |
Updates deletion help text. |
internal/cmd/agent_endpoint.go |
Parses and validates voice endpoints. |
internal/cmd/agent_endpoint_test.go |
Tests voice endpoint parsing. |
extension.yaml |
Advertises voice support and initialization. |
Review details
- Files reviewed: 15/15 changed files
- Comments generated: 6
- Review effort level: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
🔵 Needs a closer look
Public-preview scope confirmation remains unresolved, and the exposed initializer conflicts with the documented preferred authoring kind.
Review details
Suppressed comments (1)
cli/azd/extensions/azure.ai.agents/internal/cmd/init.go:1247
--kind prompt-voiceis now the only public init selector and still generateskind: prompt-voice, but the current schema and README identifykind: voiceas the preferred authoring kind and reserveprompt-voicefor compatibility (schemas/azure.ai.agent.json:47-50,README.md:243-246). New public-preview projects therefore start on the compatibility alias. Please accept/exposevoice(while retaining the old alias if needed) and synthesize the canonical kind, or explicitly reconcile the public documentation before launch.
Use --kind prompt-voice to initialize a managed prompt voice agent without
source code or container scaffolding.
- Files reviewed: 17/17 changed files
- Comments generated: 0 new
- Review effort level: Balanced
There was a problem hiding this comment.
🟡 Changes recommended
Prompt-voice help claims --model-deployment takes precedence even though that input is silently ignored.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 13/13 changed files
- Comments generated: 1
- Review effort level: Balanced
There was a problem hiding this comment.
🟡 Changes recommended
Explicit-protocol invocation can bypass voice guidance, while schema and validation paths still expose contradictory legacy authoring guidance.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (1)
cli/azd/extensions/azure.ai.agents/internal/cmd/invoke.go:1241
- Deployed-name matching is still enabled only when
--protocolis omitted. If a voice service's deployed name differs from its azure.yaml key,invoke --protocol responses <deployed-name> ...misses the service, takes the direct-name fallback, and bypasses the new portal guidance; the added deployed-name test does not exercise this production branch. Perform voice-aware deployed-name matching for explicit remote protocols too, while preserving fallback for genuinely unmatched direct names.
if a.flags.protocol == "" {
resolutionOptions = append(
resolutionOptions,
withDeployedProtocolEndpoints(),
withDeployedAgentNameLookup(),
- Files reviewed: 27/27 changed files
- Comments generated: 2
- Review effort level: Balanced
|
Rebase completed at a7c610e onto main 57ca1f6, including #9948 71ab929. Local full tests/vet/build/spelling passed; GitHub tests/lint/coverage passed. Hosted authoring guidance now reflects #9948 requiring conversationEngine; kind aliases and scaffold kind are unchanged. ADO builds 6823270 (extension) and 6823271 (live) were requested and are queued for merge SHA 2f400e5, whose parents match these exact revisions; no pass is claimed yet. Two new Copilot findings concern the dependency implementation (target_agent-only migration diagnostic and schema legacy property descriptions/enums); they remain unresolved for dependency review, not silently changed in this exposure PR. The #9948 branch was not modified. |
There was a problem hiding this comment.
🔵 Needs a closer look
Explicit-protocol invocation can bypass voice guidance when the deployed agent name differs from its service name.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
cli/azd/extensions/azure.ai.agents/internal/cmd/invoke.go:1235
- When
--protocolis explicit, the deployed-name lookup below is omitted. A positional deployed voice name therefore misses the service-name lookup and is treated as an unmatched direct target, soazd ai agent invoke --protocol responses <deployed-voice-name> ...bypasses this voice guard and attempts HTTP invocation. Keep deployed-name matching enabled independently of protocol endpoint auto-detection, while preserving fallback for truly unmatched direct names, and add a command-level regression for this case.
- Files reviewed: 28/28 changed files
- Comments generated: 0 new
- Review effort level: Balanced
|
Addressed both approved review findings in ba9b880: target_agent-only configurations now receive conversation_engine migration guidance; schema modelType options and removed targetAgent annotations match the existing rejection contract. Added parser/schema regressions; full local Windows tests, vet, build, go-fix diff, documentation schema checks and spelling passed. Both review threads resolved. GitHub tests/lint/coverage passed. ADO 6823861/6823862 remain queued: timeline shows actual build/live jobs pending with no startTime (only agentless tagging completed). No current ADO/live success is claimed; merge still requires CI completion, #9948 merge/cleanup and maintainer approval. |
ba9b880 to
ec760bf
Compare
There was a problem hiding this comment.
🟡 Changes recommended
A new line violates the enforced Go line-length limit, and the updated model help omits supported prompt-agent behavior.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (1)
cli/azd/extensions/azure.ai.agents/internal/cmd/root.go:19
- This line is 131 columns after tab expansion, exceeding the repository's 125-column
llllimit (cli/azd/AGENTS.md:118-130) and will fail lint. Split the format string across lines.
"Ship prompt, hosted, and voice agents with Microsoft Foundry from your terminal. %s", color.YellowString("(Preview)"),
- Files reviewed: 28/28 changed files
- Comments generated: 1
- Review effort level: Balanced
There was a problem hiding this comment.
🔵 Needs a closer look
Explicit-protocol invocation can bypass voice guidance, and one added Go line violates the enforced line-length limit.
Review details
Suppressed comments (2)
Previously missed (1) — in code that hasn't changed since the last review.
cli/azd/extensions/azure.ai.agents/internal/cmd/invoke.go:1276
- When
--protocolis explicit,withDeployedAgentNameLookupis skipped below. A positional deployed name (AGENT_<SERVICE>_NAME) then misses the service-key lookup, the direct-name fallback swallows that miss, and this voice guard never sees the known voice service. The command consequently attempts an HTTP invocation instead of returning portal guidance. Please perform a best-effort deployed-name match for this path while retaining fallback for names that truly do not map to the project, and cover--protocol ... <deployed-voice-name>in the regression test.
cli/azd/extensions/azure.ai.agents/internal/cmd/root.go:19
- This newly added line is 131 columns wide after tab expansion, exceeding the repository's enforced 125-column
llllimit (cli/azd/AGENTS.md:118-129). Split the message into concatenated string literals.
"Ship prompt, hosted, and voice agents with Microsoft Foundry from your terminal. %s", color.YellowString("(Preview)"),
- Files reviewed: 28/28 changed files
- Comments generated: 0 new
- Review effort level: Balanced
Real cloud bug bash results — ae6e8e4 (2026-09-11)Tested the rebuilt Windows PR bundle with no voice CLI opt-in, in an isolated azd config and the existing West US 2 test project. No source changes made.
Coverage gaps: reused existing project with --project-id, so fresh-project provision/RBAC was NOT tested. Portal/Dashboard manual UI, microphone listening quality, interactive picker and actual phone calls were NOT executed (no interactive/dialer tools available). Overall plan is therefore not fully passed. Updated internal bug bash ZIP includes SCENARIO-RESULTS.md and build provenance for ae6e8e4, without auth/project state or raw resource logs. Detailed evidence retained locally for service-team diagnosis. No blanket merge-readiness claim is made from these results. |
Follow-up bug bash validation — ae6e8e4
The internal ZIP and SCENARIO-RESULTS.md have been updated (same ae6e8e4 binary). Overall bug bash is not a complete pass: upstream Realtime stability and human/UI/phone validation remain open. PR source remains unchanged. |
Summary
AZD_AI_AGENT_ENABLE_PROMPT_VOICEgate; expose existing voice options, help and CLI discovery.Dependency / merge order
Merge #9948 first. This branch was rebuilt on main
a1243a2c845793868ff91bc30691514e2a965db6plus #99489b54f68fa8ee423a55fc2e7f5d60a5492fc4df3d, then only the public-preview commits were replayed. Both SHAs are ancestors. No writes to #9948's branch.After #9948 merges, remove dependency history and revalidate the public-preview delta on main. #9697 and #9804 are merged. Closes #9889.
Scope and conflict resolution
Validation — ec760bf integration, ae6e8e4 help follow-up
go test ./... -count=1,go vet ./...,go fix -diff ./...,go build, Go spelling and whitespace checks passed.Requires new CI results, #9948 merge/cleanup, and maintainer approval before merge.
Help-only follow-up ae6e8e4 addresses Copilot: --model applies to hosted and prompt agents, with managed prompt voice described separately. Rendered help tests passed three runs; full cmd tests, cmd vet and build passed. New CI is pending. The previously delivered bug bash ZIP remains pinned to ec760bf and has not been silently replaced.