Skip to content

Add hosted voice agent deployment support - #1

Draft
v1212 wants to merge 6 commits into
users/wujia/prompt-voice-agent-advanced-settings-unifiedfrom
users/wujia/hosted-voice-agent-support
Draft

Add hosted voice agent deployment support#1
v1212 wants to merge 6 commits into
users/wujia/prompt-voice-agent-advanced-settings-unifiedfrom
users/wujia/hosted-voice-agent-support

Conversation

@v1212

@v1212 v1212 commented Aug 20, 2026

Copy link
Copy Markdown
Owner

Summary

  • add modelType: hosted_agent and targetAgent.service authoring for Voice wrappers
  • deploy Hosted targets through the existing code-agent path and wrappers through the unified Voice API
  • validate target project, status, protocol, and Voice Bridge metadata before wrapper deployment
  • support azd ai agent init -m agent.manifest.yaml directly from the Hosted Voice sample descriptor
  • support both new-project and existing-azd-project initialization
  • retain --kind hosted-voice --no-prompt for CI automation

Sample experience

From the Hosted Voice sample directory:

$env:AZD_AI_AGENT_ENABLE_PROMPT_VOICE = "true"
azd ai agent init -m agent.manifest.yaml

The sample descriptor provides agent name, source, runtime, entry point, bundled dependency mode, invocations_ws/1.0.0, and Voice Bridge metadata. The user only selects the subscription, Foundry project, and model deployment.

Init generates:

  • voice-hosted-agent-dotnet hosted target
  • voice-hosted-agent-dotnet-voice Voice wrapper
  • dependency ordering through the project service and target

Running the same command from a sample subfolder inside an existing azd project appends both services to the existing root azure.yaml and preserves unrelated services.

Validation

  • go test ./...
  • go vet ./...
  • real init -m from the original .NET sample descriptor into a new project
  • real init -m from a sample subfolder into an existing valid azd project
  • generated target/wrapper graph, source path, and existing service preservation verified
  • init-generated target + wrapper deployed in West US 2
  • typed /help through wrapper returned target-owned Commands: response
  • real audio STT -> target -> TTS
  • local Voice dashboard wrapper connection
  • repeat deploy, delete/recreate, and negative target validation

Follow-up

  • Ownership-aware composite azd down cleanup remains a follow-up.

@v1212

v1212 commented Aug 20, 2026

Copy link
Copy Markdown
Owner Author

Manual validation result (West US 2)

Result: PASS

  • Extension build: PASS (azd x build)
  • Unit/static: PASS (go test ./..., go vet ./..., go fix ./...)
  • Spell check: PASS
  • azd package --all: PASS — target produced code ZIP; wrapper correctly produced no artifact
  • azd publish --all: PASS — wrapper correctly remained a no-op
  • azd deploy --all: PASS — target deployed before wrapper
  • azd ai agent show: PASS for target and wrapper
  • azd ai agent doctor: 11 passed, 0 failed, 2 skipped
  • Repeat wrapper deploy: PASS through unified update path
  • Wrapper delete + single-service recreate: PASS; target remained active
  • Dashboard /config and /agents: PASS; Hosted mode, target, wrapper, and pinned relationship visible
  • Dashboard WebSocket proxy: PASS; target marker returned
  • Typed realtime E2E: PASS
  • Real audio E2E: PASS — STT Hello., target marker present, 14 output audio frames
  • Negative tests: PASS — incompatible API mode, stale target version, and cross-project marker rejected before wrapper mutation
  • Environment restoration after negative tests: PASS

golangci-lint was not available on the local machine; PR CI remains responsible for that check.

@v1212
v1212 force-pushed the users/wujia/prompt-voice-agent-advanced-settings-unified branch from ab7cd25 to 5d06206 Compare August 21, 2026 05:39
@v1212

v1212 commented Aug 21, 2026

Copy link
Copy Markdown
Owner Author

Private tester package

A Windows AMD64 private test share package is available locally:

D:\jwshare\adc-hosted-agent\ws-endpoint\hosted-voice-agent-private-test-share-win-amd64.zip

SHA256:

6541287f3af0bedf813a4ee3557d4b4dbf44b58763873dc7071e6dd210286ddd

Adjacent checksum file:

D:\jwshare\adc-hosted-agent\ws-endpoint\hosted-voice-agent-private-test-share-win-amd64.zip.sha256

The package contains:

  • prebuilt/installable azure.ai.agents private extension bundle for Windows AMD64
  • complete .NET Hosted Voice target sample and two-service azure.yaml
  • local Voice dashboard
  • Bridge, typed realtime, and real-audio smoke tools
  • tester-facing PowerShell guide and results template

Validation completed:

  • extracted package installs in a clean AZD_CONFIG_DIR after installing public azure.ai.inspector and azure.ai.projects dependencies
  • private azure.ai.agents 1.0.0-beta.10 is reported with source bundle
  • packaged sample succeeds with azd package --all: target creates a code ZIP and wrapper is a no-op
  • bundle registry contains only windows/amd64
  • final share ZIP checksum and required contents verified
  • package readiness review: READY

@v1212

v1212 commented Aug 21, 2026

Copy link
Copy Markdown
Owner Author

Updated private test package — includes interactive init

D:\jwshare\adc-hosted-agent\ws-endpoint\hosted-voice-agent-private-test-share-win-amd64.zip

SHA256:

a51c9c6c6bc2bad882bb3c90183ad2cfee29d4beb9303ad8aca0e38c52559c2a

Checksum file:

D:\jwshare\adc-hosted-agent\ws-endpoint\hosted-voice-agent-private-test-share-win-amd64.zip.sha256

This replaces the previous package/checksum. It is built from PR head 901bf2c45b00996c073e97cefe589b8c40c11033 and includes:

  • interactive azd ai agent init as the primary manual path
  • --kind hosted-voice --no-prompt as an additional CI path
  • original .NET sample source, expected manifest, local dashboard, runtime tools, and results template

Additional validation:

  • no-prompt init generated project + hosted target + wrapper
  • generated target uses invocations_ws/1.0.0, Voice Bridge metadata, 1 CPU / 2Gi, and sample model env mappings
  • azd deploy --all from init output succeeded in West US 2
  • typed /help through wrapper returned target-owned Commands: response
  • audio input completed STT and returned output audio
  • dashboard proxy /help returned Commands:
  • temporary init E2E wrapper/target were deleted after validation

@v1212

v1212 commented Aug 21, 2026

Copy link
Copy Markdown
Owner Author

Final private test package — two standard azd scenarios

D:\jwshare\adc-hosted-agent\ws-endpoint\hosted-voice-agent-private-test-share-win-amd64.zip

SHA256:

b33e9941d01190343907f36264a27da83652e597ebb27515b381775b5203f7c2

Built from PR head:

ae5f687037f9bd818f36a907b0e2c4aac9f75cb7

The test guide is intentionally reduced to the same two core scenarios used for Hosted Agent / invocations_ws support:

  1. azd ai agent init -m agent.manifest.yaml from the sample into a new project.
  2. The same command from a sample subfolder inside an existing azd project.

No TiP/ECS checks or manual project endpoint setup are required. Subscription, project, and model are selected in the normal init prompts. The package includes the original sample descriptor, source, runtime smoke tools, and results template.

@v1212

v1212 commented Aug 21, 2026

Copy link
Copy Markdown
Owner Author

Final package retest — PASS

Retested the final share package from a clean extraction and extension install.

Package:

D:\jwshare\adc-hosted-agent\ws-endpoint\hosted-voice-agent-private-test-share-win-amd64.zip

Final SHA256:

ddf98b2ca97b6242cef73137eaed3a854450ac40188289e223f3f209d8e85085

Private extension runtime:

  • version 1.0.0-beta.10
  • commit ae5f687037f9bd818f36a907b0e2c4aac9f75cb7
  • source bundle

Scenario 1 — Init from sample: PASS

  • final ZIP sample copied to a clean folder
  • azd ai agent init -m agent.manifest.yaml descriptor path validated
  • CI/no-prompt replay used --force plus existing project/model inputs
  • generated target + wrapper graph correct
  • target package and azd deploy --all passed
  • target and wrapper show returned active version 1
  • doctor: 10 passed, 0 failed, 3 skipped
  • wrapper /help returned target-owned Commands: response
  • real audio: STT Hello., non-empty target response, 5 audio frames
  • wrapper and target deleted in reverse order

Scenario 2 — Init into existing azd project: PASS

  • valid existing azure.yaml contained an unrelated service and existing azure.ai.project
  • sample copied under agents/voice
  • init updated only the root azure.yaml
  • unrelated service remained unchanged
  • generated target project: agents/voice
  • wrapper uses existing project service and target
  • service-specific target package/deploy and wrapper deploy passed
  • unrelated service was not deployed
  • target and wrapper show returned active version 1
  • wrapper /help returned Commands:
  • real audio: STT Hello., non-empty response, 6 audio frames
  • wrapper and target deleted in reverse order

Notes:

  • In non-interactive replay, --force is required because the sample folder is non-empty; the guide now includes it.
  • Hosted doctor probes were skipped when they exceeded the probe timeout or isolated azd auth was unavailable, but both remote show calls and realtime runtime checks succeeded.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants