Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
81e0bcc
Regenerate voice agents SDK and improve samples
Aug 6, 2026
d90ef44
Fix voice agents validation issues
Aug 6, 2026
ff732a1
Address voice agents PR review comments
Aug 6, 2026
8969093
Add voice agents recording and live coverage
Aug 6, 2026
adb3e80
Fix voice agents pipeline validation
Aug 7, 2026
df85f9f
Fix voice agents validation issues
Aug 7, 2026
895d247
Fix voice agents pipeline validation
Aug 7, 2026
cda1821
Update voice agents API surface metadata
Copilot Aug 7, 2026
728f7f5
Address review feedback on agentserver samples
Copilot Aug 7, 2026
61ce7a8
Address response sample review feedback
Copilot Aug 7, 2026
21acd8e
Align invocations dependency comment
Copilot Aug 7, 2026
682ac00
Merge remote-tracking branch 'origin/main' into xitzhang/voice-agent-…
Aug 7, 2026
1984182
Fix voice agents recording test failures
Aug 7, 2026
32fc2cd
Fix voiceagents recording decode and aio transport headers
Aug 10, 2026
e6fb74e
Avoid concrete transport import in aio patch
Aug 10, 2026
0e85bc8
Merge remote-tracking branch 'origin/main' into xitzhang/voice-agent-…
Aug 13, 2026
1e37d81
Emit azure-ai-projects voice agent SDK from TypeSpec, add realtime cl…
Aug 13, 2026
23b70a7
Remove remaining sdk/voiceagents CI config files
Aug 13, 2026
580eff9
Improve realtime client: closed property, repr, wrapped connect error…
Aug 13, 2026
2ede6f8
Fix mypy/pylint/cspell issues and revert VoiceAgents header addition
Aug 13, 2026
c70d024
Regenerate azure-ai-projects API consistency artifacts
Copilot Aug 13, 2026
1db7726
Update azure-ai-projects API snapshot
Copilot Aug 13, 2026
a1762c9
Fix mypy/pyright/cspell CI failures for voice agent PR
Aug 14, 2026
e368d99
Add sync Realtime client for voice agents; regenerate SDK from TypeSp…
Aug 15, 2026
294a250
fix pylint
Aug 17, 2026
0f70525
Update azure-ai-projects api.md and api.metadata.yml for sync Realtim…
Copilot Aug 17, 2026
1f7b0b5
Merge branch 'main' into xitzhang/voice-agent-pupr
xitzhang Aug 17, 2026
0b0ce93
Fix voice-agent async decode bug, CI failures, and PR review comments
Aug 17, 2026
343df7c
Merge branch 'xitzhang/voice-agent-pupr' of https://github.com/Azure/…
Aug 17, 2026
58b08d0
Guard generated-attribute access for mocked __init__ tests; export Cl…
Aug 17, 2026
1f4f7d5
Add optional 'realtime' extra for websockets dependency; fix missing …
Aug 18, 2026
a15b014
Fix pylint reimported warning: remove duplicate AgentKind import in t…
Aug 18, 2026
839ca91
Regenerate SDK from latest voice-agents TypeSpec, fix conversation_id…
Aug 19, 2026
104696d
Fix azure-ai-projects API consistency
Copilot Aug 19, 2026
d4fe284
Merge branch 'main' into xitzhang/voice-agent-pupr
xitzhang Aug 19, 2026
ddc8099
Fix sphinx docstring warnings, pyright httpx type errors, stale routi…
Aug 19, 2026
16b0bac
Merge branch 'xitzhang/voice-agent-pupr' of https://github.com/Azure/…
Aug 19, 2026
00f2dc4
Update azure-ai-projects API snapshot
Copilot Aug 19, 2026
80859bb
Regenerate voice agent SDK from TypeSpec PR #45357, fix samples and t…
Aug 20, 2026
5685670
Fix voice_agent_web_socket static/runtime mismatch, sphinx docstring …
Aug 20, 2026
b5847a8
Cap openai to <3.0.0 to avoid httpx2 transport incompatibility with c…
Aug 20, 2026
532ab7e
Fix get_session_log_stream duplicate stream kwarg and resolve mypy un…
Aug 20, 2026
c25d9a4
Merge remote-tracking branch 'origin/main' into xitzhang/voice-agent-…
Aug 20, 2026
7ff4a95
Regenerate SDK from TypeSpec (voice agents PR), fix generate_agent pr…
Aug 20, 2026
2b31ed1
Fix sphinx docs build and pyright/mypy/pylint errors
Aug 21, 2026
dbd5dd4
Regenerate SDK from TypeSpec commit 28f4aa2 (align realtime item hier…
Aug 21, 2026
dbfd60e
Regenerate SDK from TypeSpec commit 8692ffec (voice agents v1 preview…
Aug 23, 2026
c0795de
Merge remote-tracking branch 'origin/main' into xitzhang/voice-agent-…
Copilot Aug 23, 2026
b681c71
Regenerate azure-ai-projects from TypeSpec commit 2e1e4f1d, add agent…
Sep 1, 2026
1a03869
Merge remote-tracking branch 'origin/main' into xitzhang/voice-agent-…
Sep 1, 2026
40fe677
Regenerate azure-ai-projects from TypeSpec commit 3fe1059c, restore R…
Sep 1, 2026
5565656
Fix PR #48484 review comments, docs generation failure, and recording…
Sep 2, 2026
48bafa6
Regenerate azure-ai-projects from TypeSpec commit 1070c74a, add telep…
Sep 3, 2026
da740dd
Merge remote-tracking branch 'origin/main' into xitzhang/voice-agent-…
Sep 3, 2026
9ab2ddf
Fix stale api.md from cached apistub wheel build (no source changes)
Sep 3, 2026
3a36a74
Fix PR #48484 review comments: security hardening, protocol bugs, sam…
Sep 3, 2026
b9a2242
Add voice agent realtime/conversation tests, live-test infra, and SDK…
Sep 3, 2026
6af54a6
Merge remote-tracking branch 'origin/main' into xitzhang/voice-agent-…
Sep 3, 2026
d7c6a97
Regenerate api.md/api.metadata.yml/docs/public-methods.md after main …
Sep 3, 2026
c8ffb74
Fix Analyze-stage CI failures (cspell/mypy/pyright/pylint) and resolv…
Sep 4, 2026
5cafb4f
Fix UnicodeEncodeError crash risk in voice agent samples that print m…
Sep 4, 2026
954026d
Improve voice agent sample code quality
Sep 4, 2026
072d33d
Resolve PR review comments: pin live-test region, restore open-union …
Sep 4, 2026
634ba12
Part 1: Emit SDK from TypeSpec
Sep 4, 2026
87a4cac
Part 2: Apply post-emitter-fixes.cmd
Sep 4, 2026
56bf718
Part 3: Additional edits
Sep 4, 2026
f7b24c7
Merge remote-tracking branch 'origin/main' into xitzhang/voice-agent-…
Sep 4, 2026
7575f0e
Merge branch 'main' into xitzhang/voice-agent-pupr
yulin-li Sep 5, 2026
4ad1e6d
Regenerate azure-ai-projects voice agent SDK
Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .vscode/cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,8 @@
"sdk/ai/azure-ai-voicelive/samples/**"
],
"words": [
"PSTN",
"pstn",
"vally",
"regen",
"pylintrc",
Expand Down
16 changes: 16 additions & 0 deletions eng/tools/azure-sdk-tools/azpysdk/samples.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,22 @@
"hello_world_sample_entra_id_and_bleu.py",
],
"azure-ai-ml": ["ml_samples_authentication_sovereign_cloud.py"],
"azure-ai-projects": [
# These interactively read from stdin via input(), which raises EOFError when this
# runner executes the file non-interactively.
"sample_voice_agent_live_text_conversation.py",
"sample_voice_agent_live_text_conversation_async.py",
# Runs until Ctrl-C (continuous microphone capture/playback); would hang indefinitely
# under this non-interactive runner whenever PyAudio and live credentials are available.
"sample_voice_agent_live_audio_conversation_async.py",
# These read back a conversation transcript/audio from a *pre-existing*, already-persisted
# voice session via FOUNDRY_VOICE_CONVERSATION_ID, which no automation here provides (the
# package's own recorded sample suite skips them for the same reason -- see
# samples_to_skip in tests/samples/test_samples.py); running them raises a KeyError before
# exercising anything.
"sample_voice_agent_read_conversation.py",
"sample_voice_agent_read_conversation_audio.py",
],
"azure-eventgrid": [
"__init__.py",
"consume_cloud_events_from_eventhub.py",
Expand Down
16 changes: 16 additions & 0 deletions scripts/devops_tasks/test_run_samples.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,22 @@
"azure-ai-ml": [
"ml_samples_authentication_sovereign_cloud.py"
],
"azure-ai-projects": [
# These interactively read from stdin via input(), which raises EOFError when this
# runner executes the file non-interactively.
"sample_voice_agent_live_text_conversation.py",
"sample_voice_agent_live_text_conversation_async.py",
# Runs until Ctrl-C (continuous microphone capture/playback); would hang indefinitely
# under this non-interactive runner whenever PyAudio and live credentials are available.
"sample_voice_agent_live_audio_conversation_async.py",
# These read back a conversation transcript/audio from a *pre-existing*, already-persisted
# voice session via FOUNDRY_VOICE_CONVERSATION_ID, which no automation here provides (the
# package's own recorded sample suite skips them for the same reason -- see
# samples_to_skip in tests/samples/test_samples.py); running them raises a KeyError before
# exercising anything.
"sample_voice_agent_read_conversation.py",
"sample_voice_agent_read_conversation_audio.py",
],
"azure-eventgrid": [
"__init__.py",
"consume_cloud_events_from_eventhub.py",
Expand Down
8 changes: 8 additions & 0 deletions sdk/ai/azure-ai-projects/.env.template
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ AZURE_AI_PROJECTS_CONSOLE_LOGGING=
FOUNDRY_PROJECT_ENDPOINT=
FOUNDRY_PROJECT_API_KEY=
FOUNDRY_MODEL_NAME=
# Read by the recorded voice-agent CRUD tests only (tests/test_base.py), not by any sample.
FOUNDRY_VOICE_MODEL_NAME=
# Read by the samples under samples/agents/voice/ (model deployment name, agent name, model type,
# and a conversation ID for the read-conversation samples). Distinct from FOUNDRY_VOICE_MODEL_NAME above.
FOUNDRY_VOICE_MODEL=
FOUNDRY_VOICE_MODEL_TYPE=
FOUNDRY_VOICE_AGENT_NAME=
FOUNDRY_VOICE_CONVERSATION_ID=
FOUNDRY_AGENT_NAME=
FOUNDRY_AGENT_CONTAINER_IMAGE=
CONVERSATION_ID=
Expand Down
26 changes: 26 additions & 0 deletions sdk/ai/azure-ai-projects/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# Release History

## 2.7.0b1 (Unreleased)

### Features Added

* Added voice agents, unified with the rest of the Agents API as a new `kind="voice"` on `AgentDefinition`:
* Define a voice agent with `VoiceAgentDefinition`, configuring its model (`VoiceModelType`), audio input/output (`VoiceAgentAudioConfig`, `VoiceAgentAudioInputConfig`, `VoiceAgentAudioOutputConfig`), turn detection (`VoiceAgentTurnDetectionConfig` and its `VoiceAgentServerVadTurnDetection` / `VoiceAgentAzureSemanticVadTurnDetection` / `VoiceAgentAzureSemanticVadEnTurnDetection` / `VoiceAgentAzureSemanticVadMultilingualTurnDetection` variants), greeting (`VoiceAgentGreetingConfig` and its `VoiceAgentTemplateGreetingConfig` / `VoiceAgentLlmGeneratedGreetingConfig` variants), tools (`VoiceAgentTool`, `VoiceAgentFunctionTool`, `VoiceAgentMcpTool`, `VoiceAgentSystemTool`, `VoiceAgentToolboxTool`), and avatar (`VoiceAgentAvatarConfig`). Manage it like any other agent through `project_client.agents` (`create_version`, `get`, `list`, `disable`/`enable`, `delete`).
* Added guided authoring via `project_client.agents.generate_agent(GenerateVoiceAgentRequest(kind=AgentKind.VOICE, ...))`, which returns a service-generated starter definition that can be edited afterward through the standard `create_version`/`update` flow.
* Added a new `client.realtime` / `async_client.realtime` entry point for realtime speech-to-speech streaming. Use `with client.realtime.connect(agent_name=...) as connection:` to open a WebSocket connection, `connection.send(...)` to send strongly-typed client events (or use the `connection.response`, `connection.conversation.item`, and `connection.session` helpers), and iterate over `connection` to receive strongly-typed server events (`RealtimeServerEvent*`). Conversation items exchanged with `connection.conversation.item.create(...)` are `RealtimeConversationItemMessageSystem`, `RealtimeConversationItemMessageUser`, `RealtimeConversationItemMessageAssistant`, `RealtimeConversationItemFunctionCall`, `RealtimeConversationItemFunctionCallOutput`, `RealtimeMCPApprovalResponse`, or a raw `Mapping[str, Any]`. The new types `Realtime`, `RealtimeConnection`, and `RealtimeConnectionManager` (and their async equivalents `AsyncRealtime`, `AsyncRealtimeConnection`, `AsyncRealtimeConnectionManager`) are exported from `azure.ai.projects` / `azure.ai.projects.aio`. Requires the optional `websockets` package for the sync client, or `aiohttp` for the async client.
* Added the `agent_endpoint_conversations` operation group for reading back persisted voice-agent conversation transcripts and audio, for agents created with `store=True`.
* Added the underlying `RealtimeConversationItem*`, `RealtimeMCP*`, `RealtimeResponseUsage`, and related realtime event/session models used by the voice agent WebSocket protocol.
* Added 11 new samples under `samples/agents/voice/`, covering basic agent lifecycle, guided generation, live audio and text conversations (sync and async), function tools, versioning, and reading back conversation transcripts and audio.
* Extended voice agents with telephony, WebRTC, and sub-agent consultation:
* Added telephony bindings so a voice agent can receive calls through Teams Phone or Twilio. `project_client.agents.create_telephony_binding`/`get_telephony_binding`/`update_telephony_binding`/`delete_telephony_binding`/`list_telephony_bindings` manage the binding (`TelephonyBinding` and its `TeamsPhoneExtensionTelephonyBinding`/`TwilioTelephonyBinding` variants), and `list_telephony_calls`/`get_telephony_call`/`transfer_telephony_call`/`end_telephony_call`/`get_telephony_transfer_targets`/`replace_telephony_transfer_targets` manage in-progress and historical calls (`TelephonyCallRecord`, `TelephonyCallSummary`, `TelephonyCallTrace`, `TelephonyTransferTarget` and its `PSTNTelephonyTransferDestination`/`SipTelephonyTransferDestination`/`TeamsTelephonyTransferDestination` variants).
* Added an optional WebRTC transport for realtime voice sessions (`VoiceAgentTransport.WEBRTC`), where only SDP signaling travels over the WebSocket connection while media flows peer-to-peer. The new `VoiceAgentClientEventRtcCallSdpCreate`, `VoiceAgentServerEventRtcCallSdpCreated`, and `VoiceAgentServerEventRtcCallError` events carry the signaling exchange.
* Added the `agent_endpoint_conversations.get_agent_conversation_item_generated_audio`/`get_agent_conversation_item_generated_audio_content` methods for reading back a conversation item's *generated* audio, a subordinate artifact that can differ from what the listener heard when playback was interrupted, returning `VoiceGeneratedItemAudioResponse`.
* Added sub-agent consultation, letting a voice agent consult sibling Foundry text agents as background specialists mid-conversation, through the new `subagent_config` property on `VoiceAgentDefinition` (`VoiceAgentSubagentConfig`, `VoiceAgentSubagent`, `VoiceAgentSubagentResponsePolicy`), and the new `session.subagent.started`/`session.subagent.completed`/`session.subagent.aborted` realtime server events.
* Added an optional `conversation_engine` property on `VoiceAgentDefinition` (`VoiceConversationEngine`, `VoiceHostedAgentConversationEngine`) to delegate a voice agent's conversation handling to another hosted agent instead of configuring a model directly.

### Dependency update

* Added an optional dependency on `websockets` (sync `client.realtime`) and `aiohttp` (async `async_client.realtime`), required only when using the new voice agent realtime streaming APIs.

### Bugs Fixed

* The hand-written `client.realtime`/`async_client.realtime` WebSocket clients now identify themselves to the service the same way the generated HTTP surface already does: a standard Azure SDK `User-Agent` header (for example `azsdk-python-ai-projects/2.7.0b1 ...`) and an `x-ms-client-sdk` query parameter carrying the same value, for paths where the header isn't forwarded. Previously these connections fell back to the underlying `websockets`/`aiohttp` library's generic default, preventing service telemetry from attributing this traffic to the SDK. A caller-supplied `User-Agent` in `extra_headers` still takes precedence.

## 2.6.0 (2026-09-04)

### Features Added
Expand Down
Loading