Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
bb593b2
Release
howieleung Sep 15, 2026
9027877
Merge remote-tracking branch 'origin/feature/azure-ai-projects/vnext'…
howieleung Sep 16, 2026
f7d64f6
Merge branch 'feature/azure-ai-projects/vnext' into howie/release-2.7.0
howieleung Sep 17, 2026
c93a47d
Update CHANGELOG for release 2.7.0, adding new features, breaking cha…
howieleung Sep 17, 2026
0099e6e
Refactor sample_voice_agent_generate.py documentation for clarity and…
howieleung Sep 17, 2026
2709faa
Fix date format in CHANGELOG and update sample_voice_agent_basic.py d…
howieleung Sep 17, 2026
a0985ef
Refactor constructors in BetaRealtime and AsyncBetaRealtime to accept…
howieleung Sep 17, 2026
a8942e0
Address Copilot review feedback on voice-agent samples/tests
Sep 17, 2026
f81b04c
Use delete_version instead of delete for temp agent cleanup
Sep 17, 2026
805ef88
Support agent-name-only mode in read-conversation samples
Sep 17, 2026
3f5ba45
Revert "Support agent-name-only mode in read-conversation samples"
Sep 17, 2026
2742ddb
Revert "Use delete_version instead of delete for temp agent cleanup"
Sep 17, 2026
d556c13
Revert "Address Copilot review feedback on voice-agent samples/tests"
Sep 17, 2026
2715afc
Update CrossLanguageVersion and fix import statement in _operations.p…
howieleung Sep 17, 2026
39b087f
Address Copilot review feedback on voice-agent samples/tests (#49065)
xitzhang Sep 17, 2026
26b5948
Merge branch 'howie/release-2.7.0' of https://github.com/Azure/azure-…
howieleung Sep 17, 2026
1f2235b
Update documentation to reflect synchronous AIProjectClient
howieleung Sep 17, 2026
dda8f6c
Merge branch 'howie/release-2.7.0' of https://github.com/Azure/azure-…
howieleung Sep 17, 2026
26a6d74
Refactor voice agent sample scripts to track and delete specific agen…
howieleung Sep 17, 2026
6cc7623
Add GitHub Copilot and Skills preview features to agent operation hea…
howieleung Sep 17, 2026
09a03e2
Fix read-conversation samples deleting user's real agent in agent-onl…
xitzhang Sep 17, 2026
1743fc4
Refactor match_condition parameter to be required in telephony operat…
howieleung Sep 17, 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
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ For each new sample, provide a one-line description of what it demonstrates. Rea
Organize detected changes into these categories:

### Features Added
- New sub-clients (e.g., "New `.beta.routines` sub-client with routine operations: `create_or_update`, `get`, `enable`, ...")
- New sub-clients (e.g., "New `.beta.routines` sub-client for creating, scheduling, and managing routines.")
- New methods on existing sub-clients (e.g., "New methods on `.beta.agents` for optimization jobs: `create_optimization_job`, `get_optimization_job`, ...")
- New model classes that represent significant features (e.g., "Support integration of external Agents. See new `ExternalAgentDefinition` class.")
- New properties on existing classes (e.g., "New optional `force` parameter on `agents.delete` method.")
Expand Down Expand Up @@ -201,7 +201,7 @@ Breaking changes in beta classes:

**Guidelines for writing entries:**
- For new methods: mention the sub-client and method name, briefly describe what it does. Only report the sync version — do not list both sync and async versions separately.
- For new sub-clients: list all the methods it provides (sync versions only)
- For new sub-clients: summarize the capability the sub-client provides; do not enumerate all of its methods.
- For new tools: just mention the class name
- For property changes: mention the class name and the affected property
- For renames: show "X renamed to Y" format
Expand Down Expand Up @@ -282,9 +282,9 @@ Here's an example of a well-formatted changelog entry:
* Optimization jobs: `create_optimization_job`, `get_optimization_job`, `list_optimization_jobs`, `cancel_optimization_job`, `list_optimization_candidates`.
* Optimization candidate management: `list_optimization_candidates`, `get_optimization_candidate`, `get_optimization_candidate_config`, `get_optimization_candidate_results`, `get_candidate_file`, `promote_candidate`.
* `stop_session` to stop a running agent session.
* New `.beta.datasets` sub-client with data generation job operations: `create_generation_job`, `get_generation_job`, `list_generation_jobs`, `cancel_generation_job`, `delete_generation_job`.
* New `.beta.models` sub-client to handle AI model weights: `create`, `list_versions`, `list`, `get`, `delete`, `update`, `pending_create_version`, `pending_upload`, `get_credentials`.
* New `.beta.routines` sub-client with routine operations: `create_or_update`, `get`, `enable`, `disable`, `list`, `delete`, `list_runs`, `dispatch`.
* New `.beta.datasets` sub-client for creating, monitoring, and managing data generation jobs.
* New `.beta.models` sub-client for registering, versioning, and managing AI model weights.
* New `.beta.routines` sub-client for creating, scheduling, and managing routines and their runs.
* New methods on `.beta.evaluators` for evaluator generation jobs: `create_generation_job`, `get_generation_job`, `list_generation_jobs`, `cancel_generation_job`, `delete_generation_job`.
* New methods on `.beta.memory_stores` to handle individual memory items: `create_memory`, `update_memory`, `list_memories`, `get_memory`, `delete_memory`.
* New methods on `.beta.skills` for versioned skill management: `create`, `list_versions`, `get_version`, `download_version`, `delete_version`.
Expand Down
61 changes: 35 additions & 26 deletions sdk/ai/azure-ai-projects/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,49 @@
# Release History

## 2.6.1 (2026-09-14)
## 2.7.0 (2026-09-18)

### Features Added

* Added Voice Agents, a new agent kind for real-time, speech-to-speech conversational AI unified with the rest of the Agents API. Define a voice agent's model, audio, turn detection, greeting, and tools; manage it like any other agent; hold a live conversation with it over a WebSocket with barge-in and persisted conversation history/audio; and reach it through telephony (inbound bindings or outbound calls).
* The core voice agent definition, 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` and its `VoiceAgentEndConversationSystemTool` variant, `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.beta.agents.create_from_prompt(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.beta.voice_agents.realtime` / `async_client.beta.voice_agents.realtime` entry point for realtime speech-to-speech streaming. Use `with client.beta.voice_agents.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 `BetaRealtime`, `BetaRealtimeConnection`, and `BetaRealtimeConnectionManager` (and their async equivalents `AsyncBetaRealtime`, `AsyncBetaRealtimeConnection`, `AsyncBetaRealtimeConnectionManager`) are exported from `azure.ai.projects.operations` / `azure.ai.projects.aio.operations`. These WebSocket clients identify themselves to the service the same way the generated HTTP surface does, via a standard Azure SDK `User-Agent` header and an `x-ms-client-sdk` query parameter for paths where the header isn't forwarded, so service telemetry can attribute this traffic to the SDK; a caller-supplied `User-Agent` in `extra_headers` still takes precedence. Requires the optional `websockets` package for the sync client, or `aiohttp` for the async client.
* Added the `.beta.voice_agents.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.
* Telephony, WebRTC, and sub-agent consultation:
* Added telephony bindings so a voice agent can receive calls through Teams Phone or Twilio, through the new `.beta.voice_agents.telephony` operation group. `create_binding`/`get_binding`/`update_binding`/`delete_binding`/`list_bindings` manage the binding (`TelephonyBinding` and its `TeamsPhoneExtensionTelephonyBinding`/`TwilioTelephonyBinding` variants), and `list_calls`/`get_call`/`transfer_call`/`end_call`/`get_transfer_targets`/`replace_transfer_targets` manage in-progress and historical calls (`TelephonyCallRecord`, `TelephonyCallSummary`, `TelephonyCallTrace`, `TelephonyTransferTarget` and its `PSTNTelephonyTransferDestination`/`SipTelephonyTransferDestination`/`TeamsTelephonyTransferDestination` variants).
* Added outbound telephony call jobs on the same `.beta.voice_agents.telephony` operation group. `create_call_job`/`get_call_job`/`cancel_call_job` place and manage a single durable outbound call against a `TelephonyOutboundDestination` (`TelephonyCallJob`), originating directly from a `connection_name` (the Foundry connection to place the call from) and a `source` caller identity, with no pre-existing telephony binding required.
* 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 `.beta.voice_agents.conversations.get_generated_audio_item`/`download_generated_audio_item` 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.
* Added preview Voice Agent support, including voice agent definitions, realtime sessions and events, conversations, audio, and telephony models.
* Added `.beta.agents.create_from_prompt()` to generate and create a Voice Agent from high-level inputs.
* Added the `.beta.voice_agents.conversations` sub-client for managing voice conversations and retrieving their responses, conversation items, and audio.
* Added `.beta.voice_agents.realtime.connect()` for sync and async realtime Voice Agent sessions with typed client and server events.
* Added the `.beta.voice_agents.telephony` sub-client for managing calls, bindings, transfer targets, and durable outbound call jobs.
* Added optional `harness` and `skills` properties to `PromptAgentDefinition`, with new GitHub Copilot harness, toolset, and skill-reference models.
* Added invocation moderation through `RaiConfig.invocations_moderation` and `RaiInvocationModeration`.
* Added `ToolboxesOperations.invoke_latest_toolbox_mcp()` and toolbox version metadata through `ToolboxObject.updated_at` and `ToolboxObject.versions`.
* Added `DataGenerationJobOutputOptions.write_mode` for controlling dataset output writes and `TracesDataGenerationJobSource.trace_ids` for selecting explicit traces.
* Made `TracesDataGenerationJobOptions.max_samples` optional.
* Added read-only agent lifecycle properties `AgentDetails.configuration_state` and `AgentSessionResource.stopped_at`.

### Breaking Changes

Breaking changes in beta classes:

* Removed the `max_samples` constructor argument and property from `DataGenerationJobOptions` and `SimulationSeedDataGenerationJobOptions`.
* The `ToolboxObject` constructor now requires `updated_at` and `versions`.

### Dependency update

* Added an optional dependency on `websockets` (sync `client.beta.voice_agents.realtime`) and `aiohttp` (async `async_client.beta.voice_agents.realtime`), required only when using the new voice agent realtime streaming APIs.
* Added the optional `voice` dependency group, which installs `websockets` for sync realtime Voice Agent sessions and `aiohttp` for async sessions.

### Sample updates

* Added `sample_voice_agent_basic.py` under `samples/agents/voice/`, demonstrating the Voice Agent management lifecycle.
* Added `sample_voice_agent_generate.py`, demonstrating guided Voice Agent authoring with `.beta.agents.create_from_prompt()`.
* Added `sample_voice_agent_live_text_conversation.py`, demonstrating a persisted, typed realtime Voice Agent conversation.
* Added `sample_voice_agent_live_audio_conversation_async.py`, demonstrating a hands-free realtime audio conversation with barge-in.
* Added `sample_voice_agent_live_function_tool.py`, demonstrating client-side function execution during a realtime Voice Agent session.
* Added `sample_voice_agent_read_conversation.py`, demonstrating how to read a persisted Voice Agent conversation and transcript.
* Added `sample_voice_agent_read_conversation_audio.py`, demonstrating how to retrieve merged conversation audio and individual audio segments.
* Added `sample_voice_agent_versions.py`, demonstrating Voice Agent version and draft management.
* Added `sample_voice_agent_with_tools.py`, demonstrating audio configuration, tools, and self-deployed models.
* Updated `sample_synthetic_multiturn_evaluation.py` to set the service-required simulation seed `max_samples` field through the model's mapping interface because `SimulationSeedDataGenerationJobOptions` no longer exposes it as a constructor argument.

## 2.6.1 (2026-09-14)

### Sample updates

* Added voice agent samples under `samples/agents/voice/`:
* `sample_voice_agent_basic.py` / `sample_voice_agent_basic_async.py` demonstrating the voice-agent management lifecycle: create, get, list, and delete.
* `sample_voice_agent_generate.py` demonstrating guided authoring of a voice agent via `.beta.agents.create_from_prompt` with `kind="voice"`.
* `sample_voice_agent_with_tools.py` demonstrating a richer voice agent definition: audio configuration, turn detection, greeting, and tools.
* `sample_voice_agent_versions.py` demonstrating voice-agent versioning: creating, drafting, listing, and publishing versions.
* `sample_voice_agent_live_text_conversation.py` / `sample_voice_agent_live_text_conversation_async.py` demonstrating a live, typed conversation with a voice agent over `client.beta.voice_agents.realtime`/`async_client.beta.voice_agents.realtime`.
* `sample_voice_agent_live_audio_conversation_async.py` demonstrating a hands-free, bidirectional live audio conversation over `async_client.beta.voice_agents.realtime`.
* `sample_voice_agent_live_function_tool.py` demonstrating handling a client-executed function tool during a live voice-agent session.
* `sample_voice_agent_read_conversation.py` demonstrating reading a persisted voice conversation's transcript back via `.beta.voice_agents.conversations`.
* `sample_voice_agent_read_conversation_audio.py` demonstrating reading a persisted voice conversation's audio, both the merged whole-call recording and a single turn's segment, via `.beta.voice_agents.conversations`.
* Added `sample_agent_insights_on_demand.py` and `sample_agent_insights_scheduled.py` under `samples/agent_insights/` to demonstrate on-demand analysis, insight lifecycle updates, and scheduled monitor setup with temporary external agents, fictional traces, and owned-resource cleanup.
* Added `sample_agent_web_iq.py` under `samples/agents/tools/`, demonstrating a Prompt Agent using the `WebIQPreviewTool`.

Expand Down
Loading