Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
24 changes: 24 additions & 0 deletions .vscode/cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,8 @@
"uninstrument",
"uninstrumented",
"uninstrumenting",
"unmute",
"unmuted",
"unpad",
"unpadder",
"unpartial",
Expand Down Expand Up @@ -2176,6 +2178,28 @@
"Hundredkm"
]
},
{
"filename": "sdk/ai/azure-ai-projects/**",
"words": [
"azcopy",
"brise",
"csdl",
"dedup",
"flitz",
"genai",
"harema",
"inpainting",
"juni",
"nira",
"noeul",
"nuri",
"shida",
"simpleqna",
"upia",
"webrtc",
"xhigh"
]
},
{
"filename": "sdk/ai/azure-ai-voicelive/**",
"words": ["viseme","VISEME","ulaw","ULAW","logprobs","pyaudio","PyAudio","libasound","webrtc","WEBRTC"]
Expand Down
8 changes: 4 additions & 4 deletions eng/emitter-package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion eng/emitter-package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@
"@azure-tools/typespec-client-generator-core": "~0.73.0",
"@azure-tools/typespec-azure-portal-core": "~0.73.0",
"@azure-tools/typespec-liftr-base": "0.13.0",
"@azure-tools/openai-typespec": "1.28.0"
"@azure-tools/openai-typespec": "1.32.0"
}
}
10 changes: 9 additions & 1 deletion sdk/ai/azure-ai-projects/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,15 @@
* Added `VoiceAgentNoiseReductionType.AZURE_DEEP_NOISE_SUPPRESSION_HEADSET` and `VoiceAgentNoiseReductionType.AZURE_PERSONAL_NOISE_SUPPRESSION` for local voice activity detection without changing recognition audio.
* Added `AgentEndpointProtocol.VOICE_CONVERSATION_ENGINE` for hosted text agents used as Voice Agent conversation engines. Hosted agents must declare this protocol with version `1.0.0`; `invocations_ws` does not substitute for it.
* Added optional `HostedAgentDefinition.enable_memory_snapshot` to start hosted-agent sessions from a snapshot of the initialized process instead of starting the process from its image.
* Added known `ImageGenTool.model` values `gpt-image-2.5-sunburst`, `gpt-image-2.5-sunburst-2026-09-08`, `gpt-image-2.5-flare`, and `gpt-image-2.5-flare-2026-09-08`, with `xhigh` and `max` quality options for these models.
* Added image-generation model options `gpt-image-2.5-sunburst`, `gpt-image-2.5-sunburst-2026-09-08`, `gpt-image-2.5-flare`, and `gpt-image-2.5-flare-2026-09-08`, with `xhigh` and `max` quality options for these models.
* Added generated GPT Live configuration and event models from OpenAI TypeSpec 1.32, including Decisions, expanded Responses tools, and audio fixtures.
* Added `VoiceAgentLiveSessionResource` and `VoiceAgentLiveDelegationItem` so Live lifecycle and delegation events preserve effective Foundry-managed ownership and resolved agent versions.
* Added persisted Live conversation, item, and audio REST operations under `beta.voice_agents.live_conversations`.

### Breaking Changes

* Renamed preview Live transport event models from `LiveTransportAnswered`, `LiveTransportFailed`, and `LiveTransportRinging` to `LiveServerEventLiveTransportAnswered`, `LiveServerEventLiveTransportFailed`, and `LiveServerEventLiveTransportRinging`. Their wire event types are unchanged.
* OpenAI TypeSpec 1.32 generates `Tool`-prefixed names for several existing tool classes. Use `ToolMcpTool` and `ToolCustomToolParam` where a `Tool` subtype is required; `MCPTool` and `CustomToolParam` are now standalone models.

### Bugs Fixed

Expand Down
33 changes: 33 additions & 0 deletions sdk/ai/azure-ai-projects/PostEmitter.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,39 @@ git restore pyproject.toml
# recursive-include samples *.py *.md
git restore MANIFEST.in

# The optional OpenAPI-only voice selector cannot use a required TypeSpec discriminator.
# Mirror the emitter's per-member override exceptions without widening the public Literal types.
# Upstream follow-up: report optional-selector handling in http-client-python; remove after regeneration passes unpatched.
$f = 'azure\ai\projects\models\_models.py'
$c = Get-Content $f -Raw
$newline = if ($c.Contains("`r`n")) { "`r`n" } else { "`n" }
$voiceSelectorFixes = @(
@{
Class = 'VoiceAgentDefinition'
Pattern = '(?m)^( sub_protocol: Optional\[Literal\["realtime"\]\] = rest_field\()([^\r\n]+)\)(\r?)$'
Patched = '(?m)^ sub_protocol: Optional\[Literal\["realtime"\]\] = rest_field\( # pyright: ignore\[reportIncompatibleVariableOverride\]\r?$'
Replacement = '$1 # pyright: ignore[reportIncompatibleVariableOverride]' + $newline + ' $2' + $newline + ' )$3'
},
@{
Class = 'VoiceAgentLiveDefinition'
Pattern = '(?m)^( self\.sub_protocol: Literal\["live"\] = "live")(\r?)$'
Patched = '(?m)^ self\.sub_protocol: Literal\["live"\] = "live" # pyright: ignore\[reportIncompatibleVariableOverride\]\r?$'
Replacement = '$1 # pyright: ignore[reportIncompatibleVariableOverride]$2'
}
)
foreach ($fix in $voiceSelectorFixes) {
$classes = [regex]::Matches($c, '(?ms)^class ' + $fix.Class + '\b.*?(?=^class |\z)')
if ($classes.Count -ne 1) { throw "Expected one generated $($fix.Class) class." }
$class = $classes[0]
if ([regex]::IsMatch($class.Value, $fix.Patched)) { continue }
if ([regex]::Matches($class.Value, $fix.Pattern).Count -ne 1) {
throw "Generated $($fix.Class).sub_protocol changed; review the optional-selector typing fix."
}
$updated = [regex]::Replace($class.Value, $fix.Pattern, $fix.Replacement)
$c = $c.Remove($class.Index, $class.Length).Insert($class.Index, $updated)
}
Set-Content $f $c -NoNewline

# Force streaming in get_session_log_stream for both sync and async operations.
$files = 'azure\ai\projects\operations\_operations.py', 'azure\ai\projects\aio\operations\_operations.py'
foreach ($f in $files) {
Expand Down
Loading
Loading