diff --git a/sdk/voicelive/azure-ai-voicelive/CHANGELOG.md b/sdk/voicelive/azure-ai-voicelive/CHANGELOG.md index 4bc0a844d528..c84ddb474ffc 100644 --- a/sdk/voicelive/azure-ai-voicelive/CHANGELOG.md +++ b/sdk/voicelive/azure-ai-voicelive/CHANGELOG.md @@ -1,9 +1,38 @@ # Release History -## 1.0.0 (Unreleased) +## 1.0.0 (2026-05-25) This is the first General Availability (GA) release of the Azure VoiceLive client library for Java. +### Breaking Changes + +- Narrowed `VoiceLiveAsyncClient` session startup to three overloads: + - `startSession()` + - `startSession(String, VoiceLiveRequestOptions)` + - `startSession(AgentSessionConfig, VoiceLiveRequestOptions)` +- Renamed token-count accessors on token statistic models (JSON wire format unchanged): + - `CachedTokenDetails.getTextTokens()` / `getAudioTokens()` / `getImageTokens()` → `getTextTokenCount()` / `getAudioTokenCount()` / `getImageTokenCount()` + - `InputTokenDetails.getCachedTokens()` / `getTextTokens()` / `getAudioTokens()` / `getImageTokens()` → `getCachedTokenCount()` / `getTextTokenCount()` / `getAudioTokenCount()` / `getImageTokenCount()` + - `OutputTokenDetails.getTextTokens()` / `getAudioTokens()` / `getReasoningTokens()` → `getTextTokenCount()` / `getAudioTokenCount()` / `getReasoningTokenCount()` + - `ResponseTokenStatistics.getTotalTokens()` / `getInputTokens()` / `getOutputTokens()` → `getTotalTokenCount()` / `getInputTokenCount()` / `getOutputTokenCount()` +- `RequestImageContentPart` URL accessor renamed and JSON field changed: + - `getUrl()` / `setUrl(String)` → `getImageUrl()` / `setImageUrl(String)` + - JSON property `url` → `image_url` +- Renamed base event types for client↔server symmetry: + - `ClientEvent` (base for outbound events) → `SessionClientEvent` + - `SessionUpdate` (base for inbound events) → `SessionServerEvent` + - `VoiceLiveSessionAsyncClient.receiveEvents()` now returns `Flux` + - `VoiceLiveSessionAsyncClient.sendEvent(...)` now accepts `SessionClientEvent` +- Renamed MCP-related model types to Pascal case (`MCP*` → `Mcp*`): `McpApprovalType`, `McpServer`, `McpTool`, `McpApprovalResponseRequestItem`, `ResponseMcpApprovalRequestItem`, `ResponseMcpApprovalResponseItem`, `ResponseMcpCallItem`, `ResponseMcpListToolItem`. +- `VoiceLiveSessionAsyncClient.truncateConversation(String, int, int)` now accepts a `java.time.Duration` for the audio-end position instead of raw milliseconds. The two-argument overload (`itemId`, `contentIndex`) is preserved and defaults to `Duration.ZERO`. +- Removed `sendInputAudio(byte[])`; use `sendInputAudio(BinaryData)` (wrap raw bytes with `BinaryData.fromBytes(...)`). +- `AgentSessionConfig.toQueryParameters()` is no longer part of the public API; the conversion is handled internally by `VoiceLiveAsyncClient`. +- `VoiceLiveSessionOptions.setAnimation(...)` renamed to `setAnimationOptions(...)`. +- `AnimationOptions.setOutputs(...)` / `getOutputs()` renamed to `setOutputTypes(...)` / `getOutputTypes()`. +- `LogProbProperties.getLogprob()` renamed to `getLogProb()`. +- `SessionUpdateConversationItemInputAudioTranscriptionCompleted.getLogprobs()` renamed to `getLogProbs()`. +- Removed preview service versions from `VoiceLiveServiceVersion`; only GA versions remain (`V2025_10_01`, `V2026_04_10`). The latest version is now `V2026_04_10`. + ### Features Added - **Avatar voice synchronization** for video avatars: @@ -18,19 +47,20 @@ This is the first General Availability (GA) release of the Azure VoiceLive clien - **Transcription enhancements**: - New transcription models on `AudioInputTranscriptionOptionsModel`: `GPT_4O_TRANSCRIBE_DIARIZE`, `MAI_TRANSCRIBE_1` - New `TranscriptionPhrase` and `TranscriptionWord` types with timing/confidence information - - `SessionUpdateConversationItemInputAudioTranscriptionCompleted` now exposes `getLogprobs()` and `getPhrases()` + - `SessionUpdateConversationItemInputAudioTranscriptionCompleted` now exposes `getLogProbs()` and `getPhrases()` - New `ServerEventResponseAudioTranscriptAnnotationAdded` event - **Session include options and metadata**: - New `SessionIncludeOption` expandable enum for opting into additional response payloads (e.g. logprobs, phrases, file-search results) - `VoiceLiveSessionOptions` and `VoiceLiveSessionResponse` now expose `include` (`List`) and `metadata` (`Map`, up to 16 entries) - **Personal voice models**: added `PersonalVoiceModels.DRAGON_HDOMNI_LATEST_NEURAL` and `MAI_VOICE_1` -- **Reasoning token usage**: `OutputTokenDetails.getReasoningTokens()` exposes reasoning token counts +- **Reasoning token usage**: `OutputTokenDetails.getReasoningTokenCount()` exposes reasoning token counts - **Interim response on response.create**: `ResponseCreateParams.setInterimResponse(BinaryData)` lets callers attach interim response config to a single response request +- Restored no-arg `VoiceLiveAsyncClient.startSession()` overload (uses the deployment's default model). - Significantly improved Javadoc for `ServerVadTurnDetection`, `AzureCustomVoice`, `AzurePersonalVoice`, `AzureStandardVoice`, `AzureSemanticVadTurnDetection*`, and other model types ### Other Changes -- Updated default service API version to track the latest TypeSpec spec. +- Updated default service API version to `2026-04-10` (GA). ## 1.0.0-beta.6 (2026-05-01) diff --git a/sdk/voicelive/azure-ai-voicelive/README.md b/sdk/voicelive/azure-ai-voicelive/README.md index 99ace0c12523..97d440ad9504 100644 --- a/sdk/voicelive/azure-ai-voicelive/README.md +++ b/sdk/voicelive/azure-ai-voicelive/README.md @@ -193,13 +193,23 @@ For easier learning, explore these focused samples in order: > ``` > These samples use `javax.sound.sampled` for audio I/O. +### Session startup overloads + +`VoiceLiveAsyncClient` exposes three session-start overloads: + +- `startSession()` +- `startSession(String model, VoiceLiveRequestOptions options)` +- `startSession(AgentSessionConfig agentConfig, VoiceLiveRequestOptions options)` + +Pass `null` for `VoiceLiveRequestOptions` in the samples below when you do not need to provide one. + ### Simple voice assistant Create a basic voice assistant session: ```java com.azure.ai.voicelive.simple.session -// Start session with default options -client.startSession("gpt-realtime") +// Start session with a specific model; pass null when no VoiceLiveRequestOptions value is needed +client.startSession("gpt-realtime", null) .flatMap(session -> { System.out.println("Session started"); @@ -243,8 +253,8 @@ VoiceLiveSessionOptions options = new VoiceLiveSessionOptions() .setInputAudioTranscription(transcription) .setTurnDetection(turnDetection); -// Start session with options -client.startSession("gpt-realtime") +// Start session and then send session configuration +client.startSession("gpt-realtime", null) .flatMap(session -> { // Send session configuration ClientEventSessionUpdate updateEvent = new ClientEventSessionUpdate(options); @@ -370,7 +380,7 @@ VoiceLiveSessionOptions options = new VoiceLiveSessionOptions() .setInstructions("You have access to weather information. Use get_current_weather when asked about weather."); // 3. Handle function call events -client.startSession("gpt-realtime") +client.startSession("gpt-realtime", null) .flatMap(session -> { return session.receiveEvents() .doOnNext(event -> { @@ -422,8 +432,8 @@ Use [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) servers to ```java com.azure.ai.voicelive.mcp // Configure MCP servers as tools -MCPServer mcpServer = new MCPServer("deepwiki", "https://mcp.deepwiki.com/mcp") - .setRequireApproval(BinaryData.fromObject(MCPApprovalType.ALWAYS)); +McpServer mcpServer = new McpServer("deepwiki", "https://mcp.deepwiki.com/mcp") + .setRequireApproval(BinaryData.fromObject(McpApprovalType.ALWAYS)); VoiceLiveSessionOptions options = new VoiceLiveSessionOptions() .setTools(Arrays.asList(mcpServer)) @@ -436,10 +446,10 @@ session.receiveEvents() SessionUpdateResponseOutputItemDone itemDone = (SessionUpdateResponseOutputItemDone) event; SessionResponseItem item = itemDone.getItem(); - if (item instanceof ResponseMCPApprovalRequestItem) { + if (item instanceof ResponseMcpApprovalRequestItem) { // Approve the tool call - ResponseMCPApprovalRequestItem approvalRequest = (ResponseMCPApprovalRequestItem) item; - MCPApprovalResponseRequestItem approval = new MCPApprovalResponseRequestItem( + ResponseMcpApprovalRequestItem approvalRequest = (ResponseMcpApprovalRequestItem) item; + McpApprovalResponseRequestItem approval = new McpApprovalResponseRequestItem( approvalRequest.getId(), true); ClientEventConversationItemCreate createItem = new ClientEventConversationItemCreate() .setItem(approval); @@ -464,13 +474,13 @@ Connect directly to an Azure AI Foundry agent using `AgentSessionConfig`. The ag AgentSessionConfig agentConfig = new AgentSessionConfig("my-agent", "my-project") .setAgentVersion("1.0"); -// Start session with agent config (uses DefaultAzureCredential) +// Start session with agent config; pass null when no VoiceLiveRequestOptions value is needed VoiceLiveAsyncClient client = new VoiceLiveClientBuilder() .endpoint(endpoint) .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); -client.startSession(agentConfig) +client.startSession(agentConfig, null) .flatMap(session -> { return session.receiveEvents() .doOnNext(event -> handleEvent(event)) @@ -596,8 +606,8 @@ VoiceLiveSessionOptions sessionOptions = new VoiceLiveSessionOptions() .setInputAudioTranscription(transcriptionOptions) .setTurnDetection(turnDetection); -// Start session and handle events -client.startSession("gpt-4o-realtime-preview") +// Start session (null VoiceLiveRequestOptions), then handle events +client.startSession("gpt-4o-realtime-preview", null) .flatMap(session -> { // Subscribe to receive server events session.receiveEvents() diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveAsyncClient.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveAsyncClient.java index 332886626312..f48584f88806 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveAsyncClient.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveAsyncClient.java @@ -54,75 +54,27 @@ public final class VoiceLiveAsyncClient { } /** - * Starts a new VoiceLiveSessionAsyncClient for real-time voice communication. - * - * @param model The model to use for the session. - * @return A Mono containing the connected VoiceLiveSessionAsyncClient. - * @throws NullPointerException if {@code model} is null. - */ - public Mono startSession(String model) { - Objects.requireNonNull(model, "'model' cannot be null"); - - return Mono.fromCallable(() -> convertToWebSocketEndpoint(endpoint, model)).flatMap(wsEndpoint -> { - VoiceLiveSessionAsyncClient session = createSessionClient(wsEndpoint, model, null); - return session.connect(additionalHeaders).thenReturn(session); - }); - } - - /** - * Starts a new VoiceLiveSessionAsyncClient for real-time voice communication without specifying a model. - * The model can be provided via custom query parameters or through the endpoint URL if required by the service. + * Starts a new VoiceLiveSessionAsyncClient for real-time voice communication using the default + * service-side model configuration. * * @return A Mono containing the connected VoiceLiveSessionAsyncClient. */ public Mono startSession() { - return Mono.fromCallable(() -> convertToWebSocketEndpoint(endpoint, null)).flatMap(wsEndpoint -> { - VoiceLiveSessionAsyncClient session = createSessionClient(wsEndpoint, null, null); - return session.connect(additionalHeaders).thenReturn(session); - }); + return startSessionInternal(null, null, null); } /** * Starts a new VoiceLiveSessionAsyncClient for real-time voice communication with custom request options. * * @param model The model to use for the session. - * @param requestOptions Custom query parameters and headers for the request. + * @param requestOptions Custom query parameters and headers for the request. May be null. * @return A Mono containing the connected VoiceLiveSessionAsyncClient. - * @throws NullPointerException if {@code model} or {@code requestOptions} is null. + * @throws NullPointerException if {@code model} is null. */ public Mono startSession(String model, VoiceLiveRequestOptions requestOptions) { Objects.requireNonNull(model, "'model' cannot be null"); - Objects.requireNonNull(requestOptions, "'requestOptions' cannot be null"); - - return Mono - .fromCallable(() -> convertToWebSocketEndpoint(endpoint, model, requestOptions.getCustomQueryParameters())) - .flatMap(wsEndpoint -> { - VoiceLiveSessionAsyncClient session = createSessionClient(wsEndpoint, model, null); - // Merge additional headers with custom headers from requestOptions - HttpHeaders mergedHeaders = mergeHeaders(additionalHeaders, requestOptions.getCustomHeaders()); - return session.connect(mergedHeaders).thenReturn(session); - }); - } - /** - * Starts a new VoiceLiveSessionAsyncClient for real-time voice communication with custom request options. - * The model can be provided via custom query parameters. - * - * @param requestOptions Custom query parameters and headers for the request. - * @return A Mono containing the connected VoiceLiveSessionAsyncClient. - * @throws NullPointerException if {@code requestOptions} is null. - */ - public Mono startSession(VoiceLiveRequestOptions requestOptions) { - Objects.requireNonNull(requestOptions, "'requestOptions' cannot be null"); - - return Mono - .fromCallable(() -> convertToWebSocketEndpoint(endpoint, null, requestOptions.getCustomQueryParameters())) - .flatMap(wsEndpoint -> { - VoiceLiveSessionAsyncClient session = createSessionClient(wsEndpoint, null, null); - // Merge additional headers with custom headers from requestOptions - HttpHeaders mergedHeaders = mergeHeaders(additionalHeaders, requestOptions.getCustomHeaders()); - return session.connect(mergedHeaders).thenReturn(session); - }); + return startSessionInternal(model, null, requestOptions); } /** @@ -133,49 +85,46 @@ public Mono startSession(VoiceLiveRequestOptions re * * @param agentConfig The agent session configuration containing the agent name, project name, * and optional parameters. + * @param requestOptions Custom query parameters and headers for the request. May be null. * @return A Mono containing the connected VoiceLiveSessionAsyncClient. * @throws NullPointerException if {@code agentConfig} is null. */ - public Mono startSession(AgentSessionConfig agentConfig) { + public Mono startSession(AgentSessionConfig agentConfig, + VoiceLiveRequestOptions requestOptions) { Objects.requireNonNull(agentConfig, "'agentConfig' cannot be null"); - return Mono.fromCallable(() -> convertToWebSocketEndpoint(endpoint, null, agentConfig.toQueryParameters())) - .flatMap(wsEndpoint -> { - VoiceLiveSessionAsyncClient session = createSessionClient(wsEndpoint, null, agentConfig); - return session.connect(additionalHeaders).thenReturn(session); - }); + return startSessionInternal(null, agentConfig, requestOptions); } /** - * Starts a new VoiceLiveSessionAsyncClient for real-time voice communication with an Azure AI Foundry agent - * and custom request options. - * - *

This method configures the session to connect directly to an Azure AI Foundry agent, - * combining the agent configuration with additional custom options.

+ * Starts a new VoiceLiveSessionAsyncClient for real-time voice communication. * - * @param agentConfig The agent session configuration containing the agent name, project name, - * and optional parameters. - * @param requestOptions Custom query parameters and headers for the request. + * @param model The model name to use for the session, or null. + * @param agentConfig The agent session configuration to use for the session, or null. + * @param requestOptions Custom query parameters and headers for the request, or null. * @return A Mono containing the connected VoiceLiveSessionAsyncClient. - * @throws NullPointerException if {@code agentConfig} or {@code requestOptions} is null. */ - public Mono startSession(AgentSessionConfig agentConfig, + private Mono startSessionInternal(String model, AgentSessionConfig agentConfig, VoiceLiveRequestOptions requestOptions) { - Objects.requireNonNull(agentConfig, "'agentConfig' cannot be null"); - Objects.requireNonNull(requestOptions, "'requestOptions' cannot be null"); + Map queryParameters + = agentConfig == null ? new LinkedHashMap<>() : new LinkedHashMap<>(toQueryParameters(agentConfig)); + HttpHeaders mergedHeaders = additionalHeaders; - // Merge agent config params with custom query params (custom params take precedence) - Map mergedParams = new LinkedHashMap<>(agentConfig.toQueryParameters()); - if (requestOptions.getCustomQueryParameters() != null) { - mergedParams.putAll(requestOptions.getCustomQueryParameters()); + if (requestOptions != null) { + if (requestOptions.getCustomQueryParameters() != null) { + queryParameters.putAll(requestOptions.getCustomQueryParameters()); + } + mergedHeaders = mergeHeaders(additionalHeaders, requestOptions.getCustomHeaders()); } - return Mono.fromCallable(() -> convertToWebSocketEndpoint(endpoint, null, mergedParams)).flatMap(wsEndpoint -> { - VoiceLiveSessionAsyncClient session = createSessionClient(wsEndpoint, null, agentConfig); - // Merge additional headers with custom headers from requestOptions - HttpHeaders mergedHeaders = mergeHeaders(additionalHeaders, requestOptions.getCustomHeaders()); - return session.connect(mergedHeaders).thenReturn(session); - }); + final Map finalQueryParameters = queryParameters.isEmpty() ? null : queryParameters; + final HttpHeaders connectionHeaders = mergedHeaders; + final String sessionModel = model; + final AgentSessionConfig sessionAgentConfig = agentConfig; + + URI wsEndpoint = convertToWebSocketEndpoint(endpoint, sessionModel, finalQueryParameters); + VoiceLiveSessionAsyncClient session = createSessionClient(wsEndpoint, sessionModel, sessionAgentConfig); + return session.connect(connectionHeaders).thenReturn(session); } /** @@ -196,6 +145,29 @@ private VoiceLiveSessionAsyncClient createSessionClient(URI wsEndpoint, String m } } + /** + * Converts an {@link AgentSessionConfig} to a map of WebSocket query parameters. + */ + static Map toQueryParameters(AgentSessionConfig agentConfig) { + Map params = new LinkedHashMap<>(); + params.put("agent-name", agentConfig.getAgentName()); + params.put("agent-project-name", agentConfig.getProjectName()); + if (agentConfig.getAgentVersion() != null && !agentConfig.getAgentVersion().isEmpty()) { + params.put("agent-version", agentConfig.getAgentVersion()); + } + if (agentConfig.getConversationId() != null && !agentConfig.getConversationId().isEmpty()) { + params.put("conversation-id", agentConfig.getConversationId()); + } + if (agentConfig.getAuthenticationIdentityClientId() != null + && !agentConfig.getAuthenticationIdentityClientId().isEmpty()) { + params.put("agent-authentication-identity-client-id", agentConfig.getAuthenticationIdentityClientId()); + } + if (agentConfig.getFoundryResourceOverride() != null && !agentConfig.getFoundryResourceOverride().isEmpty()) { + params.put("foundry-resource-override", agentConfig.getFoundryResourceOverride()); + } + return params; + } + /** * Merges two HttpHeaders objects, with custom headers taking precedence. * @@ -218,81 +190,6 @@ private HttpHeaders mergeHeaders(HttpHeaders baseHeaders, HttpHeaders customHead return merged; } - /** - * Converts an HTTP endpoint to a WebSocket endpoint. - * - * @param httpEndpoint The HTTP endpoint to convert. - * @param model The model name to include in the query string. - * @return The WebSocket endpoint URI. - */ - private URI convertToWebSocketEndpoint(URI httpEndpoint, String model) { - try { - String scheme; - switch (httpEndpoint.getScheme().toLowerCase()) { - case "wss": - case "ws": - scheme = httpEndpoint.getScheme(); - break; - - case "https": - scheme = "wss"; - break; - - case "http": - scheme = "ws"; - break; - - default: - throw LOGGER.logExceptionAsError( - new IllegalArgumentException("Scheme " + httpEndpoint.getScheme() + " is not supported")); - } - - String path = httpEndpoint.getPath(); - if (!path.endsWith("/realtime")) { - path = path.replaceAll("/$", "") + "/voice-live/realtime"; - } - - // Build query parameter map to avoid duplicates - Map queryParams = new LinkedHashMap<>(); - - // Start with existing query parameters from the endpoint URL - if (httpEndpoint.getQuery() != null && !httpEndpoint.getQuery().isEmpty()) { - String[] pairs = httpEndpoint.getQuery().split("&"); - for (String pair : pairs) { - int idx = pair.indexOf("="); - if (idx > 0) { - String key = pair.substring(0, idx); - String value = pair.substring(idx + 1); - queryParams.put(key, value); - } - } - } - - // Ensure api-version is set (SDK's version takes precedence) - queryParams.put("api-version", apiVersion); - - // Add model if provided (function parameter takes precedence) - if (model != null && !model.isEmpty()) { - queryParams.put("model", model); - } - - // Build final query string - StringBuilder queryBuilder = new StringBuilder(); - for (Map.Entry entry : queryParams.entrySet()) { - if (queryBuilder.length() > 0) { - queryBuilder.append("&"); - } - queryBuilder.append(entry.getKey()).append("=").append(entry.getValue()); - } - - return new URI(scheme, httpEndpoint.getUserInfo(), httpEndpoint.getHost(), httpEndpoint.getPort(), path, - queryBuilder.length() > 0 ? queryBuilder.toString() : null, httpEndpoint.getFragment()); - } catch (URISyntaxException e) { - throw LOGGER - .logExceptionAsError(new IllegalArgumentException("Failed to convert endpoint to WebSocket URI", e)); - } - } - /** * Converts an HTTP endpoint to a WebSocket endpoint with additional custom query parameters. * diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveServiceVersion.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveServiceVersion.java index 97d8379cf214..2dcaa3476257 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveServiceVersion.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveServiceVersion.java @@ -9,20 +9,15 @@ * Service version of VoiceLive. */ public enum VoiceLiveServiceVersion implements ServiceVersion { - /** - * Service version {@code 2025-05-01-preview}. - */ - V2025_05_01_PREVIEW("2025-05-01-preview"), - /** * Service version {@code 2025-10-01}. */ V2025_10_01("2025-10-01"), /** - * Service version {@code 2026-01-01-preview}. + * Service version {@code 2026-04-10}. */ - V2026_01_01_PREVIEW("2026-01-01-preview"); + V2026_04_10("2026-04-10"); private final String version; @@ -44,6 +39,6 @@ public String getVersion() { * @return The latest {@link VoiceLiveServiceVersion}. */ public static VoiceLiveServiceVersion getLatest() { - return V2026_01_01_PREVIEW; + return V2026_04_10; } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveSessionAsyncClient.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveSessionAsyncClient.java index 4d920b97b219..03b857abfca1 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveSessionAsyncClient.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/VoiceLiveSessionAsyncClient.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.net.URI; +import java.time.Duration; import java.util.Base64; import java.util.Locale; import java.util.Objects; @@ -13,7 +14,7 @@ import com.azure.ai.voicelive.implementation.VoiceLiveTracer; import com.azure.ai.voicelive.models.AgentSessionConfig; -import com.azure.ai.voicelive.models.ClientEvent; +import com.azure.ai.voicelive.models.SessionClientEvent; import com.azure.ai.voicelive.models.ClientEventConversationItemCreate; import com.azure.ai.voicelive.models.ClientEventConversationItemDelete; import com.azure.ai.voicelive.models.ClientEventConversationItemRetrieve; @@ -31,7 +32,7 @@ import com.azure.ai.voicelive.models.ClientEventSessionAvatarConnect; import com.azure.ai.voicelive.models.ClientEventSessionUpdate; import com.azure.ai.voicelive.models.ConversationRequestItem; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import com.azure.ai.voicelive.models.VoiceLiveSessionOptions; import com.azure.core.credential.KeyCredential; import com.azure.core.credential.TokenCredential; @@ -67,7 +68,10 @@ * simultaneously sending and receiving WebSocket messages. *

*

- * Users can obtain a VoiceLiveSessionAsyncClient instance from {@link VoiceLiveAsyncClient#startSession(String)} and work directly with it for optimal performance. + * Users can obtain a VoiceLiveSessionAsyncClient instance from {@link VoiceLiveAsyncClient#startSession()}, + * {@link VoiceLiveAsyncClient#startSession(String, com.azure.ai.voicelive.models.VoiceLiveRequestOptions)}, or + * {@link VoiceLiveAsyncClient#startSession(com.azure.ai.voicelive.models.AgentSessionConfig, + * com.azure.ai.voicelive.models.VoiceLiveRequestOptions)} and work directly with it for optimal performance. * Alternatively, users can use the convenience methods on {@link VoiceLiveAsyncClient} which delegate to * the internal session. *

@@ -110,7 +114,7 @@ public final class VoiceLiveSessionAsyncClient implements AsyncCloseable, AutoCl private final Sinks.Many sendSink = Sinks.many().multicast().onBackpressureBuffer(); // Cached shared events flux — ensures tracing fires only once per event regardless of subscriber count - private volatile Flux sharedEventsFlux; + private volatile Flux sharedEventsFlux; // WebSocket connection state management private final AtomicReference inboundRef = new AtomicReference<>(); @@ -363,7 +367,7 @@ public boolean isConnected() { * @param event The client event to send. * @return A Mono that completes when the command is sent. */ - public Mono sendEvent(ClientEvent event) { + public Mono sendEvent(SessionClientEvent event) { Objects.requireNonNull(event, "'event' cannot be null"); throwIfNotConnected(); @@ -407,10 +411,10 @@ public Mono send(BinaryData data) { } /** - * Receives parsed events from the service as strongly-typed SessionUpdate objects. + * Receives parsed events from the service as strongly-typed SessionServerEvent objects. *

* This method provides a higher-level alternative to {@link #receive()} by automatically - * parsing the raw BinaryData into the appropriate SessionUpdate subclass based on the + * parsing the raw BinaryData into the appropriate SessionServerEvent subclass based on the * event type. This enables type-safe event handling and better developer experience. *

*

@@ -418,11 +422,11 @@ public Mono send(BinaryData data) { * to operate even if unknown event types are received. *

* - * @return A Flux of SessionUpdate objects representing parsed server events. + * @return A Flux of SessionServerEvent objects representing parsed server events. */ - public Flux receiveEvents() { + public Flux receiveEvents() { throwIfNotConnected(); - Flux result = sharedEventsFlux; + Flux result = sharedEventsFlux; if (result == null) { synchronized (this) { result = sharedEventsFlux; @@ -468,21 +472,21 @@ private Flux receive() { } /** - * Parses raw BinaryData into a SessionUpdate object. + * Parses raw BinaryData into a SessionServerEvent object. *

* The generated code now uses JsonReaderHelper to avoid bufferObject() issues. - * This method simply delegates to SessionUpdate.fromJson() for polymorphic deserialization. + * This method simply delegates to SessionServerEvent.fromJson() for polymorphic deserialization. *

* * @param data The raw binary data from the service. - * @return A Mono containing the parsed SessionUpdate, or empty if parsing fails. + * @return A Mono containing the parsed SessionServerEvent, or empty if parsing fails. */ - private Mono parseToSessionUpdate(BinaryData data) { + private Mono parseToSessionUpdate(BinaryData data) { return Mono.fromCallable(() -> { try { - return SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(data.toString())); + return SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(data.toString())); } catch (IOException e) { - LOGGER.atError().addKeyValue("error", e.getMessage()).log("Failed to parse SessionUpdate"); + LOGGER.atError().addKeyValue("error", e.getMessage()).log("Failed to parse SessionServerEvent"); return null; } }).filter(Objects::nonNull); @@ -493,14 +497,18 @@ private Mono parseToSessionUpdate(BinaryData data) { // ============================================================================ /** - * Transmits audio data from a byte array. + * Transmits audio data from BinaryData. * * @param audio The audio data to transmit. * @return A Mono that completes when the audio is sent. * @throws IllegalStateException if another audio stream is already being sent. */ - public Mono sendInputAudio(byte[] audio) { + public Mono sendInputAudio(BinaryData audio) { Objects.requireNonNull(audio, "'audio' cannot be null"); + return sendInputAudioInternal(audio.toBytes()); + } + + private Mono sendInputAudioInternal(byte[] audio) { throwIfNotConnected(); if (!isSendingAudioStream.compareAndSet(false, true)) { @@ -514,18 +522,6 @@ public Mono sendInputAudio(byte[] audio) { return sendEvent(appendCommand).doFinally(signal -> isSendingAudioStream.set(false)); } - /** - * Transmits audio data from BinaryData. - * - * @param audio The audio data to transmit. - * @return A Mono that completes when the audio is sent. - * @throws IllegalStateException if another audio stream is already being sent. - */ - public Mono sendInputAudio(BinaryData audio) { - Objects.requireNonNull(audio, "'audio' cannot be null"); - return sendInputAudio(audio.toBytes()); - } - /** * Clears the input audio buffer. * @@ -582,37 +578,27 @@ public Mono startAudioTurn(String turnId) { /** * Appends audio data to an ongoing input turn. + *

+ * To append a raw byte array, wrap it with {@link BinaryData#fromBytes(byte[])}. + *

* * @param turnId The ID of the turn this audio is part of. * @param audio The audio data to append. * @return A Mono that completes when the audio is appended. * @throws IllegalArgumentException if turnId is null or empty, or audio is null. */ - public Mono appendAudioToTurn(String turnId, byte[] audio) { + public Mono appendAudioToTurn(String turnId, BinaryData audio) { if (turnId == null || turnId.isEmpty()) { return Mono.error(new IllegalArgumentException("'turnId' cannot be null or empty")); } Objects.requireNonNull(audio, "'audio' cannot be null"); throwIfNotConnected(); - String base64Audio = Base64.getEncoder().encodeToString(audio); + String base64Audio = Base64.getEncoder().encodeToString(audio.toBytes()); ClientEventInputAudioTurnAppend appendCommand = new ClientEventInputAudioTurnAppend(turnId, base64Audio); return sendEvent(appendCommand); } - /** - * Appends audio data to an ongoing input turn. - * - * @param turnId The ID of the turn this audio is part of. - * @param audio The audio data to append. - * @return A Mono that completes when the audio is appended. - * @throws IllegalArgumentException if turnId is null or empty, or audio is null. - */ - public Mono appendAudioToTurn(String turnId, BinaryData audio) { - Objects.requireNonNull(audio, "'audio' cannot be null"); - return appendAudioToTurn(turnId, audio.toBytes()); - } - /** * Marks the end of an audio input turn. * @@ -696,7 +682,12 @@ public Mono addItem(ConversationRequestItem item, String previousItemId) { } /** - * Retrieves an item from the conversation. + * Sends a request to retrieve an item from the conversation. + *

+ * This method only sends the retrieval request; the requested item is delivered + * asynchronously by the service as a server event on the {@link #receiveEvents()} stream. + * Subscribe to {@link #receiveEvents()} to observe the response. + *

* * @param itemId The ID of the item to retrieve. * @return A Mono that completes when the retrieval request is sent. @@ -734,18 +725,26 @@ public Mono deleteItem(String itemId) { * * @param itemId The ID of the item up to which to truncate the conversation. * @param contentIndex The content index within the item to truncate to. - * @param audioEndMilliseconds Inclusive duration up to which audio is truncated (in milliseconds). + * @param audioEnd Inclusive duration up to which audio is truncated. May be {@code null} or + * {@link Duration#ZERO} to indicate no audio truncation. * @return A Mono that completes when the conversation is truncated. - * @throws IllegalArgumentException if itemId is null or empty. + * @throws IllegalArgumentException if itemId is null or empty, or audioEnd is negative. */ - public Mono truncateConversation(String itemId, int contentIndex, int audioEndMilliseconds) { + public Mono truncateConversation(String itemId, int contentIndex, Duration audioEnd) { if (itemId == null || itemId.isEmpty()) { return Mono.error(new IllegalArgumentException("'itemId' cannot be null or empty")); } + if (audioEnd != null && audioEnd.isNegative()) { + return Mono.error(new IllegalArgumentException("'audioEnd' cannot be negative")); + } throwIfNotConnected(); + long millis = audioEnd == null ? 0L : audioEnd.toMillis(); + if (millis > Integer.MAX_VALUE) { + return Mono.error(new IllegalArgumentException("'audioEnd' exceeds the maximum supported value")); + } ClientEventConversationItemTruncate truncateEvent - = new ClientEventConversationItemTruncate(itemId, contentIndex, audioEndMilliseconds); + = new ClientEventConversationItemTruncate(itemId, contentIndex, (int) millis); return sendEvent(truncateEvent); } @@ -758,7 +757,7 @@ public Mono truncateConversation(String itemId, int contentIndex, int audi * @throws IllegalArgumentException if itemId is null or empty. */ public Mono truncateConversation(String itemId, int contentIndex) { - return truncateConversation(itemId, contentIndex, 0); + return truncateConversation(itemId, contentIndex, Duration.ZERO); } // ============================================================================ diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/implementation/VoiceLiveTracer.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/implementation/VoiceLiveTracer.java index ce7479195476..74ce04cf3f9c 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/implementation/VoiceLiveTracer.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/implementation/VoiceLiveTracer.java @@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; -import com.azure.ai.voicelive.models.ClientEvent; +import com.azure.ai.voicelive.models.SessionClientEvent; import com.azure.ai.voicelive.models.ClientEventInputAudioBufferAppend; import com.azure.ai.voicelive.models.ClientEventResponseCancel; import com.azure.ai.voicelive.models.ClientEventResponseCreate; @@ -16,7 +16,7 @@ import com.azure.ai.voicelive.models.ClientEventType; import com.azure.ai.voicelive.models.ResponseTokenStatistics; import com.azure.ai.voicelive.models.SessionResponse; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import com.azure.ai.voicelive.models.SessionUpdateConversationItemCreated; import com.azure.ai.voicelive.models.SessionUpdateError; import com.azure.ai.voicelive.models.SessionUpdateErrorDetails; @@ -454,7 +454,7 @@ private SpanBuilder childSpanBuilder(String spanName, String operationName) { * @param event The client event being sent. * @param jsonPayload The serialized JSON payload. */ - public void traceSend(ClientEvent event, String jsonPayload) { + public void traceSend(SessionClientEvent event, String jsonPayload) { Context parentCtx = connectContext.get(); if (parentCtx == null) { return; @@ -516,7 +516,7 @@ public void traceSend(ClientEvent event, String jsonPayload) { * @param update The parsed session update event. * @param rawPayload The raw JSON payload string (for message size and content recording). */ - public void traceRecv(SessionUpdate update, String rawPayload) { + public void traceRecv(SessionServerEvent update, String rawPayload) { Context parentCtx = connectContext.get(); if (parentCtx == null) { return; @@ -691,7 +691,7 @@ private static String extractRateLimits(String rawPayload) { // Counter Tracking // ============================================================================ - private void trackSendCounters(ClientEvent event, String jsonPayload) { + private void trackSendCounters(SessionClientEvent event, String jsonPayload) { // Track audio bytes sent from input_audio_buffer.append if (event instanceof ClientEventInputAudioBufferAppend) { ClientEventInputAudioBufferAppend appendEvent = (ClientEventInputAudioBufferAppend) event; @@ -863,7 +863,7 @@ private static String extractJsonNumberField(String json, String fieldName) { return null; } - private void trackRecvCounters(SessionUpdate update) { + private void trackRecvCounters(SessionServerEvent update) { // Track session ID from session.created / session.updated if (update instanceof SessionUpdateSessionCreated) { VoiceLiveSessionResponse session = ((SessionUpdateSessionCreated) update).getSession(); @@ -935,7 +935,7 @@ private void trackRecvCounters(SessionUpdate update) { /** * Tracks response metadata (id, conversation_id, finish_reasons) on the recv span. */ - private void trackResponseMetadata(SessionUpdate update, Span span) { + private void trackResponseMetadata(SessionServerEvent update, Span span) { if (update instanceof SessionUpdateResponseDone) { SessionResponse response = ((SessionUpdateResponseDone) update).getResponse(); if (response != null) { @@ -972,7 +972,7 @@ private void trackResponseMetadata(SessionUpdate update, Span span) { * conversation.item.created, response.output_item.added/done, * and response.function_call_arguments.delta/done events. */ - private void trackRecvItemAttributes(SessionUpdate update, Span span) { + private void trackRecvItemAttributes(SessionServerEvent update, Span span) { // conversation.item.created -> item_id if (update instanceof SessionUpdateConversationItemCreated) { SessionUpdateConversationItemCreated itemCreated = (SessionUpdateConversationItemCreated) update; @@ -1034,20 +1034,20 @@ private void trackRecvItemAttributes(SessionUpdate update, Span span) { } } - private void trackRecvTokenUsage(SessionUpdate update, Span span) { + private void trackRecvTokenUsage(SessionServerEvent update, Span span) { if (update instanceof SessionUpdateResponseDone) { SessionResponse response = ((SessionUpdateResponseDone) update).getResponse(); if (response != null) { ResponseTokenStatistics usage = response.getUsage(); if (usage != null) { - span.setAttribute(GEN_AI_USAGE_INPUT_TOKENS, (long) usage.getInputTokens()); - span.setAttribute(GEN_AI_USAGE_OUTPUT_TOKENS, (long) usage.getOutputTokens()); + span.setAttribute(GEN_AI_USAGE_INPUT_TOKENS, usage.getInputTokenCount()); + span.setAttribute(GEN_AI_USAGE_OUTPUT_TOKENS, usage.getOutputTokenCount()); } } } } - private void trackErrorEvents(SessionUpdate update, Span span) { + private void trackErrorEvents(SessionServerEvent update, Span span) { if (update instanceof SessionUpdateError) { SessionUpdateError errorUpdate = (SessionUpdateError) update; SessionUpdateErrorDetails errorDetails = errorUpdate.getError(); diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AgentSessionConfig.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AgentSessionConfig.java index 038967c363b4..1ef05da09443 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AgentSessionConfig.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AgentSessionConfig.java @@ -5,8 +5,6 @@ import com.azure.core.annotation.Fluent; -import java.util.LinkedHashMap; -import java.util.Map; import java.util.Objects; /** @@ -22,7 +20,7 @@ * .setAgentVersion("1.0") * .setConversationId("conv-123"); * - * client.startSession(config).subscribe(session -> { + * client.startSession(config, null).subscribe(session -> { * // Use the session * }); * } @@ -169,33 +167,4 @@ public AgentSessionConfig setFoundryResourceOverride(String foundryResourceOverr this.foundryResourceOverride = foundryResourceOverride; return this; } - - /** - * Converts this configuration to query parameters for the WebSocket connection. - * - * @return A map of query parameter names to values. - */ - public Map toQueryParameters() { - Map params = new LinkedHashMap<>(); - - // Required parameters - params.put("agent-name", agentName); - params.put("agent-project-name", projectName); - - // Optional parameters - if (agentVersion != null && !agentVersion.isEmpty()) { - params.put("agent-version", agentVersion); - } - if (conversationId != null && !conversationId.isEmpty()) { - params.put("conversation-id", conversationId); - } - if (authenticationIdentityClientId != null && !authenticationIdentityClientId.isEmpty()) { - params.put("agent-authentication-identity-client-id", authenticationIdentityClientId); - } - if (foundryResourceOverride != null && !foundryResourceOverride.isEmpty()) { - params.put("foundry-resource-override", foundryResourceOverride); - } - - return params; - } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AnimationOptions.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AnimationOptions.java index 56fc7f133048..f64d94c80463 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AnimationOptions.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AnimationOptions.java @@ -24,12 +24,6 @@ public final class AnimationOptions implements JsonSerializable outputs; - /** * Creates an instance of AnimationOptions class. */ @@ -59,28 +53,6 @@ public AnimationOptions setModelName(String modelName) { return this; } - /** - * Get the outputs property: Set of output data types requested from the animation system. - * - * @return the outputs value. - */ - @Generated - public List getOutputs() { - return this.outputs; - } - - /** - * Set the outputs property: Set of output data types requested from the animation system. - * - * @param outputs the outputs value to set. - * @return the AnimationOptions object itself. - */ - @Generated - public AnimationOptions setOutputs(List outputs) { - this.outputs = outputs; - return this; - } - /** * {@inheritDoc} */ @@ -89,7 +61,7 @@ public AnimationOptions setOutputs(List outputs) { public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); jsonWriter.writeStringField("model_name", this.modelName); - jsonWriter.writeArrayField("outputs", this.outputs, + jsonWriter.writeArrayField("outputs", this.outputTypes, (writer, element) -> writer.writeString(element == null ? null : element.toString())); return jsonWriter.writeEndObject(); } @@ -112,9 +84,9 @@ public static AnimationOptions fromJson(JsonReader jsonReader) throws IOExceptio if ("model_name".equals(fieldName)) { deserializedAnimationOptions.modelName = reader.getString(); } else if ("outputs".equals(fieldName)) { - List outputs + List outputTypes = reader.readArray(reader1 -> AnimationOutputType.fromString(reader1.getString())); - deserializedAnimationOptions.outputs = outputs; + deserializedAnimationOptions.outputTypes = outputTypes; } else { reader.skipChildren(); } @@ -122,4 +94,32 @@ public static AnimationOptions fromJson(JsonReader jsonReader) throws IOExceptio return deserializedAnimationOptions; }); } + + /* + * Set of output data types requested from the animation system. + */ + @Generated + private List outputTypes; + + /** + * Get the outputTypes property: Set of output data types requested from the animation system. + * + * @return the outputTypes value. + */ + @Generated + public List getOutputTypes() { + return this.outputTypes; + } + + /** + * Set the outputTypes property: Set of output data types requested from the animation system. + * + * @param outputTypes the outputTypes value to set. + * @return the AnimationOptions object itself. + */ + @Generated + public AnimationOptions setOutputTypes(List outputTypes) { + this.outputTypes = outputTypes; + return this; + } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AvatarConfiguration.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AvatarOptions.java similarity index 82% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AvatarConfiguration.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AvatarOptions.java index 5478b3a2d59c..d15ddce964b9 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AvatarConfiguration.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/AvatarOptions.java @@ -16,7 +16,13 @@ * Configuration for avatar streaming and behavior during the session. */ @Fluent -public final class AvatarConfiguration implements JsonSerializable { +public final class AvatarOptions implements JsonSerializable { + + /* + * Type of avatar to use. + */ + @Generated + private AvatarConfigTypes type; /* * Optional list of ICE servers to use for WebRTC connection establishment. @@ -36,6 +42,12 @@ public final class AvatarConfiguration implements JsonSerializable getIceServers() { * Set the iceServers property: Optional list of ICE servers to use for WebRTC connection establishment. * * @param iceServers the iceServers value to set. - * @return the AvatarConfiguration object itself. + * @return the AvatarOptions object itself. */ @Generated - public AvatarConfiguration setIceServers(List iceServers) { + public AvatarOptions setIceServers(List iceServers) { this.iceServers = iceServers; return this; } @@ -106,14 +159,36 @@ public String getStyle() { * Set the style property: Optional avatar style, such as emotional tone or speaking style. * * @param style the style value to set. - * @return the AvatarConfiguration object itself. + * @return the AvatarOptions object itself. */ @Generated - public AvatarConfiguration setStyle(String style) { + public AvatarOptions setStyle(String style) { this.style = style; return this; } + /** + * Get the model property: Base model to use for the avatar. Required for photo avatar. + * + * @return the model value. + */ + @Generated + public PhotoAvatarBaseModes getModel() { + return this.model; + } + + /** + * Set the model property: Base model to use for the avatar. Required for photo avatar. + * + * @param model the model value to set. + * @return the AvatarOptions object itself. + */ + @Generated + public AvatarOptions setModel(PhotoAvatarBaseModes model) { + this.model = model; + return this; + } + /** * Get the customized property: Indicates whether the avatar is customized or not. * @@ -138,14 +213,84 @@ public VideoParams getVideo() { * Set the video property: Optional video configuration including resolution, bitrate, and codec. * * @param video the video value to set. - * @return the AvatarConfiguration object itself. + * @return the AvatarOptions object itself. */ @Generated - public AvatarConfiguration setVideo(VideoParams video) { + public AvatarOptions setVideo(VideoParams video) { this.video = video; return this; } + /** + * Get the scene property: Configuration for the avatar's zoom level, position, rotation and movement amplitude in + * the video frame. + * + * @return the scene value. + */ + @Generated + public Scene getScene() { + return this.scene; + } + + /** + * Set the scene property: Configuration for the avatar's zoom level, position, rotation and movement amplitude in + * the video frame. + * + * @param scene the scene value to set. + * @return the AvatarOptions object itself. + */ + @Generated + public AvatarOptions setScene(Scene scene) { + this.scene = scene; + return this; + } + + /** + * Get the outputProtocol property: Output protocol for avatar streaming. Default is 'webrtc'. + * + * @return the outputProtocol value. + */ + @Generated + public AvatarOutputProtocol getOutputProtocol() { + return this.outputProtocol; + } + + /** + * Set the outputProtocol property: Output protocol for avatar streaming. Default is 'webrtc'. + * + * @param outputProtocol the outputProtocol value to set. + * @return the AvatarOptions object itself. + */ + @Generated + public AvatarOptions setOutputProtocol(AvatarOutputProtocol outputProtocol) { + this.outputProtocol = outputProtocol; + return this; + } + + /** + * Get the outputAuditAudio property: When enabled, forwards audit audio via WebSocket for review/debugging + * purposes, even when avatar output is delivered via WebRTC. + * + * @return the outputAuditAudio value. + */ + @Generated + public Boolean isOutputAuditAudio() { + return this.outputAuditAudio; + } + + /** + * Set the outputAuditAudio property: When enabled, forwards audit audio via WebSocket for review/debugging + * purposes, even when avatar output is delivered via WebRTC. + * + * @param outputAuditAudio the outputAuditAudio value to set. + * @return the AvatarOptions object itself. + */ + @Generated + public AvatarOptions setOutputAuditAudio(Boolean outputAuditAudio) { + this.outputAuditAudio = outputAuditAudio; + return this; + } + /** * {@inheritDoc} */ @@ -168,16 +313,16 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of AvatarConfiguration from the JsonReader. + * Reads an instance of AvatarOptions from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of AvatarConfiguration if the JsonReader was pointing to an instance of it, or null if it was + * @return An instance of AvatarOptions if the JsonReader was pointing to an instance of it, or null if it was * pointing to JSON null. * @throws IllegalStateException If the deserialized JSON object was missing any required properties. - * @throws IOException If an error occurs while reading the AvatarConfiguration. + * @throws IOException If an error occurs while reading the AvatarOptions. */ @Generated - public static AvatarConfiguration fromJson(JsonReader jsonReader) throws IOException { + public static AvatarOptions fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String character = null; boolean customized = false; @@ -216,161 +361,16 @@ public static AvatarConfiguration fromJson(JsonReader jsonReader) throws IOExcep reader.skipChildren(); } } - AvatarConfiguration deserializedAvatarConfiguration = new AvatarConfiguration(character, customized); - deserializedAvatarConfiguration.type = type; - deserializedAvatarConfiguration.iceServers = iceServers; - deserializedAvatarConfiguration.style = style; - deserializedAvatarConfiguration.model = model; - deserializedAvatarConfiguration.video = video; - deserializedAvatarConfiguration.scene = scene; - deserializedAvatarConfiguration.outputProtocol = outputProtocol; - deserializedAvatarConfiguration.outputAuditAudio = outputAuditAudio; - return deserializedAvatarConfiguration; + AvatarOptions deserializedAvatarOptions = new AvatarOptions(character, customized); + deserializedAvatarOptions.type = type; + deserializedAvatarOptions.iceServers = iceServers; + deserializedAvatarOptions.style = style; + deserializedAvatarOptions.model = model; + deserializedAvatarOptions.video = video; + deserializedAvatarOptions.scene = scene; + deserializedAvatarOptions.outputProtocol = outputProtocol; + deserializedAvatarOptions.outputAuditAudio = outputAuditAudio; + return deserializedAvatarOptions; }); } - - /* - * Type of avatar to use. - */ - @Generated - private AvatarConfigTypes type; - - /* - * Base model to use for the avatar. Required for photo avatar. - */ - @Generated - private PhotoAvatarBaseModes model; - - /* - * Output protocol for avatar streaming. Default is 'webrtc'. - */ - @Generated - private AvatarOutputProtocol outputProtocol; - - /** - * Get the type property: Type of avatar to use. - * - * @return the type value. - */ - @Generated - public AvatarConfigTypes getType() { - return this.type; - } - - /** - * Set the type property: Type of avatar to use. - * - * @param type the type value to set. - * @return the AvatarConfiguration object itself. - */ - @Generated - public AvatarConfiguration setType(AvatarConfigTypes type) { - this.type = type; - return this; - } - - /** - * Get the model property: Base model to use for the avatar. Required for photo avatar. - * - * @return the model value. - */ - @Generated - public PhotoAvatarBaseModes getModel() { - return this.model; - } - - /** - * Set the model property: Base model to use for the avatar. Required for photo avatar. - * - * @param model the model value to set. - * @return the AvatarConfiguration object itself. - */ - @Generated - public AvatarConfiguration setModel(PhotoAvatarBaseModes model) { - this.model = model; - return this; - } - - /** - * Get the outputProtocol property: Output protocol for avatar streaming. Default is 'webrtc'. - * - * @return the outputProtocol value. - */ - @Generated - public AvatarOutputProtocol getOutputProtocol() { - return this.outputProtocol; - } - - /** - * Set the outputProtocol property: Output protocol for avatar streaming. Default is 'webrtc'. - * - * @param outputProtocol the outputProtocol value to set. - * @return the AvatarConfiguration object itself. - */ - @Generated - public AvatarConfiguration setOutputProtocol(AvatarOutputProtocol outputProtocol) { - this.outputProtocol = outputProtocol; - return this; - } - - /* - * Configuration for the avatar's zoom level, position, rotation and movement amplitude in the video frame. - */ - @Generated - private Scene scene; - - /* - * When enabled, forwards audit audio via WebSocket for review/debugging purposes, even when avatar output is - * delivered via WebRTC. - */ - @Generated - private Boolean outputAuditAudio; - - /** - * Get the scene property: Configuration for the avatar's zoom level, position, rotation and movement amplitude in - * the video frame. - * - * @return the scene value. - */ - @Generated - public Scene getScene() { - return this.scene; - } - - /** - * Set the scene property: Configuration for the avatar's zoom level, position, rotation and movement amplitude in - * the video frame. - * - * @param scene the scene value to set. - * @return the AvatarConfiguration object itself. - */ - @Generated - public AvatarConfiguration setScene(Scene scene) { - this.scene = scene; - return this; - } - - /** - * Get the outputAuditAudio property: When enabled, forwards audit audio via WebSocket for review/debugging - * purposes, even when avatar output is delivered via WebRTC. - * - * @return the outputAuditAudio value. - */ - @Generated - public Boolean isOutputAuditAudio() { - return this.outputAuditAudio; - } - - /** - * Set the outputAuditAudio property: When enabled, forwards audit audio via WebSocket for review/debugging - * purposes, even when avatar output is delivered via WebRTC. - * - * @param outputAuditAudio the outputAuditAudio value to set. - * @return the AvatarConfiguration object itself. - */ - @Generated - public AvatarConfiguration setOutputAuditAudio(Boolean outputAuditAudio) { - this.outputAuditAudio = outputAuditAudio; - return this; - } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/CachedTokenDetails.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/CachedTokenDetails.java index f0fdc5121d97..3afcc2097ecb 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/CachedTokenDetails.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/CachedTokenDetails.java @@ -17,38 +17,6 @@ @Immutable public final class CachedTokenDetails implements JsonSerializable { - /* - * Number of cached text tokens. - */ - @Generated - private final int textTokens; - - /* - * Number of cached audio tokens. - */ - @Generated - private final int audioTokens; - - /** - * Get the textTokens property: Number of cached text tokens. - * - * @return the textTokens value. - */ - @Generated - public int getTextTokens() { - return this.textTokens; - } - - /** - * Get the audioTokens property: Number of cached audio tokens. - * - * @return the audioTokens value. - */ - @Generated - public int getAudioTokens() { - return this.audioTokens; - } - /** * {@inheritDoc} */ @@ -56,9 +24,9 @@ public int getAudioTokens() { @Override public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); - jsonWriter.writeIntField("text_tokens", this.textTokens); - jsonWriter.writeIntField("audio_tokens", this.audioTokens); - jsonWriter.writeIntField("image_tokens", this.imageTokens); + jsonWriter.writeIntField("text_tokens", this.textTokenCount); + jsonWriter.writeIntField("audio_tokens", this.audioTokenCount); + jsonWriter.writeIntField("image_tokens", this.imageTokenCount); return jsonWriter.writeEndObject(); } @@ -74,53 +42,85 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { @Generated public static CachedTokenDetails fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { - int textTokens = 0; - int audioTokens = 0; - int imageTokens = 0; + int textTokenCount = 0; + int audioTokenCount = 0; + int imageTokenCount = 0; while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); reader.nextToken(); if ("text_tokens".equals(fieldName)) { - textTokens = reader.getInt(); + textTokenCount = reader.getInt(); } else if ("audio_tokens".equals(fieldName)) { - audioTokens = reader.getInt(); + audioTokenCount = reader.getInt(); } else if ("image_tokens".equals(fieldName)) { - imageTokens = reader.getInt(); + imageTokenCount = reader.getInt(); } else { reader.skipChildren(); } } - return new CachedTokenDetails(textTokens, audioTokens, imageTokens); + return new CachedTokenDetails(textTokenCount, audioTokenCount, imageTokenCount); }); } + /** + * Creates an instance of CachedTokenDetails class. + * + * @param textTokenCount the textTokenCount value to set. + * @param audioTokenCount the audioTokenCount value to set. + * @param imageTokenCount the imageTokenCount value to set. + */ + @Generated + private CachedTokenDetails(int textTokenCount, int audioTokenCount, int imageTokenCount) { + this.textTokenCount = textTokenCount; + this.audioTokenCount = audioTokenCount; + this.imageTokenCount = imageTokenCount; + } + + /* + * Number of cached text tokens. + */ + @Generated + private final int textTokenCount; + + /* + * Number of cached audio tokens. + */ + @Generated + private final int audioTokenCount; + /* * Number of cached image tokens. */ @Generated - private final int imageTokens; + private final int imageTokenCount; /** - * Creates an instance of CachedTokenDetails class. + * Get the textTokenCount property: Number of cached text tokens. + * + * @return the textTokenCount value. + */ + @Generated + public int getTextTokenCount() { + return this.textTokenCount; + } + + /** + * Get the audioTokenCount property: Number of cached audio tokens. * - * @param textTokens the textTokens value to set. - * @param audioTokens the audioTokens value to set. - * @param imageTokens the imageTokens value to set. + * @return the audioTokenCount value. */ @Generated - private CachedTokenDetails(int textTokens, int audioTokens, int imageTokens) { - this.textTokens = textTokens; - this.audioTokens = audioTokens; - this.imageTokens = imageTokens; + public int getAudioTokenCount() { + return this.audioTokenCount; } /** - * Get the imageTokens property: Number of cached image tokens. + * Get the imageTokenCount property: Number of cached image tokens. * - * @return the imageTokens value. + * @return the imageTokenCount value. */ @Generated - public int getImageTokens() { - return this.imageTokens; + public int getImageTokenCount() { + return this.imageTokenCount; } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemCreate.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemCreate.java index 4fd89eb7e709..7f031c6c3b67 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemCreate.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemCreate.java @@ -19,7 +19,7 @@ * event, otherwise an `error` event will be sent. */ @Fluent -public final class ClientEventConversationItemCreate extends ClientEvent { +public final class ClientEventConversationItemCreate extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemDelete.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemDelete.java index 41d0223b0c53..bc55a806e09d 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemDelete.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemDelete.java @@ -17,7 +17,7 @@ * server will respond with an error. */ @Fluent -public final class ClientEventConversationItemDelete extends ClientEvent { +public final class ClientEventConversationItemDelete extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemRetrieve.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemRetrieve.java index 67341273c269..646e68d00649 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemRetrieve.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemRetrieve.java @@ -18,7 +18,7 @@ * server will respond with an error. */ @Fluent -public final class ClientEventConversationItemRetrieve extends ClientEvent { +public final class ClientEventConversationItemRetrieve extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemTruncate.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemTruncate.java index 10802422da88..f67e36a29d65 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemTruncate.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemTruncate.java @@ -22,7 +22,7 @@ * event. */ @Fluent -public final class ClientEventConversationItemTruncate extends ClientEvent { +public final class ClientEventConversationItemTruncate extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferAppend.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferAppend.java index 66516fead685..4b6e47285e44 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferAppend.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferAppend.java @@ -23,7 +23,7 @@ * not send a confirmation response to this event. */ @Fluent -public final class ClientEventInputAudioBufferAppend extends ClientEvent { +public final class ClientEventInputAudioBufferAppend extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferClear.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferClear.java index 7366a58ef2d5..1696b386b199 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferClear.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferClear.java @@ -15,7 +15,7 @@ * respond with an `input_audio_buffer.cleared` event. */ @Fluent -public final class ClientEventInputAudioBufferClear extends ClientEvent { +public final class ClientEventInputAudioBufferClear extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferCommit.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferCommit.java index 6471bd636ac7..9354c387d1da 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferCommit.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferCommit.java @@ -22,7 +22,7 @@ * event. */ @Fluent -public final class ClientEventInputAudioBufferCommit extends ClientEvent { +public final class ClientEventInputAudioBufferCommit extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioClear.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioClear.java index 53e88d82ec0f..77dfd07d63e7 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioClear.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioClear.java @@ -14,7 +14,7 @@ * Clears all input audio currently being streamed. */ @Fluent -public final class ClientEventInputAudioClear extends ClientEvent { +public final class ClientEventInputAudioClear extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnAppend.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnAppend.java index 79ae2b5ed554..d0244ca3b576 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnAppend.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnAppend.java @@ -14,7 +14,7 @@ * Appends audio data to an ongoing input turn. */ @Fluent -public final class ClientEventInputAudioTurnAppend extends ClientEvent { +public final class ClientEventInputAudioTurnAppend extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnCancel.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnCancel.java index 21bd2113ef90..e8731cf1e75e 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnCancel.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnCancel.java @@ -14,7 +14,7 @@ * Cancels an in-progress input audio turn. */ @Fluent -public final class ClientEventInputAudioTurnCancel extends ClientEvent { +public final class ClientEventInputAudioTurnCancel extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnEnd.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnEnd.java index 027e16db3e2f..96c42bc8f0c5 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnEnd.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnEnd.java @@ -14,7 +14,7 @@ * Marks the end of an audio input turn. */ @Fluent -public final class ClientEventInputAudioTurnEnd extends ClientEvent { +public final class ClientEventInputAudioTurnEnd extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnStart.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnStart.java index a8de0c0d6f95..39d229becf3c 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnStart.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnStart.java @@ -14,7 +14,7 @@ * Indicates the start of a new audio input turn. */ @Fluent -public final class ClientEventInputAudioTurnStart extends ClientEvent { +public final class ClientEventInputAudioTurnStart extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventOutputAudioBufferClear.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventOutputAudioBufferClear.java index ef91bf12ec76..6229e0f2b387 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventOutputAudioBufferClear.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventOutputAudioBufferClear.java @@ -14,7 +14,7 @@ * Client request to clear the avatar output buffer. */ @Fluent -public final class ClientEventOutputAudioBufferClear extends ClientEvent { +public final class ClientEventOutputAudioBufferClear extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCancel.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCancel.java index adb41290c79f..c0b9b53f53ff 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCancel.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCancel.java @@ -16,7 +16,7 @@ * cancel. */ @Fluent -public final class ClientEventResponseCancel extends ClientEvent { +public final class ClientEventResponseCancel extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCreate.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCreate.java index 0959de47b434..06be330a98fe 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCreate.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCreate.java @@ -25,7 +25,7 @@ * configuration for this Response only. */ @Fluent -public final class ClientEventResponseCreate extends ClientEvent { +public final class ClientEventResponseCreate extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventSessionAvatarConnect.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventSessionAvatarConnect.java index 126de48d3e9a..ae056802556f 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventSessionAvatarConnect.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventSessionAvatarConnect.java @@ -16,7 +16,7 @@ * for avatar-related media negotiation. */ @Fluent -public final class ClientEventSessionAvatarConnect extends ClientEvent { +public final class ClientEventSessionAvatarConnect extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventSessionUpdate.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventSessionUpdate.java index 573b42b1b172..b8b585136c05 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventSessionUpdate.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEventSessionUpdate.java @@ -22,7 +22,7 @@ * `instructions`, pass an empty string. */ @Fluent -public final class ClientEventSessionUpdate extends ClientEvent { +public final class ClientEventSessionUpdate extends SessionClientEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ConversationRequestItem.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ConversationRequestItem.java index 01c549613eab..4d09224f13bd 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ConversationRequestItem.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ConversationRequestItem.java @@ -113,7 +113,7 @@ public static ConversationRequestItem fromJson(JsonReader jsonReader) throws IOE } else if ("function_call_output".equals(discriminatorValue)) { return FunctionCallOutputItem.fromJson(readerToUse.reset()); } else if ("mcp_approval_response".equals(discriminatorValue)) { - return MCPApprovalResponseRequestItem.fromJson(readerToUse.reset()); + return McpApprovalResponseRequestItem.fromJson(readerToUse.reset()); } else { return fromJsonKnownDiscriminator(readerToUse.reset()); } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/IceServer.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/IceServer.java index fa2505d4a646..6410997343d9 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/IceServer.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/IceServer.java @@ -18,12 +18,6 @@ @Fluent public final class IceServer implements JsonSerializable { - /* - * List of ICE server URLs (e.g., TURN or STUN endpoints). - */ - @Generated - private final List uris; - /* * Optional username used for authentication with the ICE server. */ @@ -39,21 +33,11 @@ public final class IceServer implements JsonSerializable { /** * Creates an instance of IceServer class. * - * @param uris the uris value to set. - */ - @Generated - public IceServer(List uris) { - this.uris = uris; - } - - /** - * Get the uris property: List of ICE server URLs (e.g., TURN or STUN endpoints). - * - * @return the uris value. + * @param urls the urls value to set. */ @Generated - public List getUris() { - return this.uris; + public IceServer(List urls) { + this.urls = urls; } /** @@ -107,7 +91,7 @@ public IceServer setCredential(String credential) { @Override public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); - jsonWriter.writeArrayField("urls", this.uris, (writer, element) -> writer.writeString(element)); + jsonWriter.writeArrayField("urls", this.urls, (writer, element) -> writer.writeString(element)); jsonWriter.writeStringField("username", this.username); jsonWriter.writeStringField("credential", this.credential); return jsonWriter.writeEndObject(); @@ -125,14 +109,14 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { @Generated public static IceServer fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { - List uris = null; + List urls = null; String username = null; String credential = null; while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); reader.nextToken(); if ("urls".equals(fieldName)) { - uris = reader.readArray(reader1 -> reader1.getString()); + urls = reader.readArray(reader1 -> reader1.getString()); } else if ("username".equals(fieldName)) { username = reader.getString(); } else if ("credential".equals(fieldName)) { @@ -141,10 +125,26 @@ public static IceServer fromJson(JsonReader jsonReader) throws IOException { reader.skipChildren(); } } - IceServer deserializedIceServer = new IceServer(uris); + IceServer deserializedIceServer = new IceServer(urls); deserializedIceServer.username = username; deserializedIceServer.credential = credential; return deserializedIceServer; }); } + + /* + * List of ICE server URLs (e.g., TURN or STUN endpoints). + */ + @Generated + private final List urls; + + /** + * Get the urls property: List of ICE server URLs (e.g., TURN or STUN endpoints). + * + * @return the urls value. + */ + @Generated + public List getUrls() { + return this.urls; + } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/InputTokenDetails.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/InputTokenDetails.java index 2fe3c8d502fc..fe30ff5c3f43 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/InputTokenDetails.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/InputTokenDetails.java @@ -17,60 +17,12 @@ @Immutable public final class InputTokenDetails implements JsonSerializable { - /* - * Number of cached tokens used in the input. - */ - @Generated - private final int cachedTokens; - - /* - * Number of text tokens used in the input. - */ - @Generated - private final int textTokens; - - /* - * Number of audio tokens used in the input. - */ - @Generated - private final int audioTokens; - /* * Details of cached token usage. */ @Generated private final CachedTokenDetails cachedTokensDetails; - /** - * Get the cachedTokens property: Number of cached tokens used in the input. - * - * @return the cachedTokens value. - */ - @Generated - public int getCachedTokens() { - return this.cachedTokens; - } - - /** - * Get the textTokens property: Number of text tokens used in the input. - * - * @return the textTokens value. - */ - @Generated - public int getTextTokens() { - return this.textTokens; - } - - /** - * Get the audioTokens property: Number of audio tokens used in the input. - * - * @return the audioTokens value. - */ - @Generated - public int getAudioTokens() { - return this.audioTokens; - } - /** * Get the cachedTokensDetails property: Details of cached token usage. * @@ -88,10 +40,10 @@ public CachedTokenDetails getCachedTokensDetails() { @Override public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); - jsonWriter.writeIntField("cached_tokens", this.cachedTokens); - jsonWriter.writeIntField("text_tokens", this.textTokens); - jsonWriter.writeIntField("audio_tokens", this.audioTokens); - jsonWriter.writeIntField("image_tokens", this.imageTokens); + jsonWriter.writeIntField("cached_tokens", this.cachedTokenCount); + jsonWriter.writeIntField("text_tokens", this.textTokenCount); + jsonWriter.writeIntField("audio_tokens", this.audioTokenCount); + jsonWriter.writeIntField("image_tokens", this.imageTokenCount); jsonWriter.writeJsonField("cached_tokens_details", this.cachedTokensDetails); return jsonWriter.writeEndObject(); } @@ -108,64 +60,113 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { @Generated public static InputTokenDetails fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { - int cachedTokens = 0; - int textTokens = 0; - int audioTokens = 0; - int imageTokens = 0; + int cachedTokenCount = 0; + int textTokenCount = 0; + int audioTokenCount = 0; + int imageTokenCount = 0; CachedTokenDetails cachedTokensDetails = null; while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); reader.nextToken(); if ("cached_tokens".equals(fieldName)) { - cachedTokens = reader.getInt(); + cachedTokenCount = reader.getInt(); } else if ("text_tokens".equals(fieldName)) { - textTokens = reader.getInt(); + textTokenCount = reader.getInt(); } else if ("audio_tokens".equals(fieldName)) { - audioTokens = reader.getInt(); + audioTokenCount = reader.getInt(); } else if ("image_tokens".equals(fieldName)) { - imageTokens = reader.getInt(); + imageTokenCount = reader.getInt(); } else if ("cached_tokens_details".equals(fieldName)) { cachedTokensDetails = CachedTokenDetails.fromJson(reader); } else { reader.skipChildren(); } } - return new InputTokenDetails(cachedTokens, textTokens, audioTokens, imageTokens, cachedTokensDetails); + return new InputTokenDetails(cachedTokenCount, textTokenCount, audioTokenCount, imageTokenCount, + cachedTokensDetails); }); } + /** + * Creates an instance of InputTokenDetails class. + * + * @param cachedTokenCount the cachedTokenCount value to set. + * @param textTokenCount the textTokenCount value to set. + * @param audioTokenCount the audioTokenCount value to set. + * @param imageTokenCount the imageTokenCount value to set. + * @param cachedTokensDetails the cachedTokensDetails value to set. + */ + @Generated + private InputTokenDetails(int cachedTokenCount, int textTokenCount, int audioTokenCount, int imageTokenCount, + CachedTokenDetails cachedTokensDetails) { + this.cachedTokenCount = cachedTokenCount; + this.textTokenCount = textTokenCount; + this.audioTokenCount = audioTokenCount; + this.imageTokenCount = imageTokenCount; + this.cachedTokensDetails = cachedTokensDetails; + } + + /* + * Number of cached tokens used in the input. + */ + @Generated + private final int cachedTokenCount; + + /* + * Number of text tokens used in the input. + */ + @Generated + private final int textTokenCount; + + /* + * Number of audio tokens used in the input. + */ + @Generated + private final int audioTokenCount; + /* * Number of image tokens used in the input. */ @Generated - private final int imageTokens; + private final int imageTokenCount; /** - * Creates an instance of InputTokenDetails class. + * Get the cachedTokenCount property: Number of cached tokens used in the input. * - * @param cachedTokens the cachedTokens value to set. - * @param textTokens the textTokens value to set. - * @param audioTokens the audioTokens value to set. - * @param imageTokens the imageTokens value to set. - * @param cachedTokensDetails the cachedTokensDetails value to set. + * @return the cachedTokenCount value. */ @Generated - private InputTokenDetails(int cachedTokens, int textTokens, int audioTokens, int imageTokens, - CachedTokenDetails cachedTokensDetails) { - this.cachedTokens = cachedTokens; - this.textTokens = textTokens; - this.audioTokens = audioTokens; - this.imageTokens = imageTokens; - this.cachedTokensDetails = cachedTokensDetails; + public int getCachedTokenCount() { + return this.cachedTokenCount; + } + + /** + * Get the textTokenCount property: Number of text tokens used in the input. + * + * @return the textTokenCount value. + */ + @Generated + public int getTextTokenCount() { + return this.textTokenCount; + } + + /** + * Get the audioTokenCount property: Number of audio tokens used in the input. + * + * @return the audioTokenCount value. + */ + @Generated + public int getAudioTokenCount() { + return this.audioTokenCount; } /** - * Get the imageTokens property: Number of image tokens used in the input. + * Get the imageTokenCount property: Number of image tokens used in the input. * - * @return the imageTokens value. + * @return the imageTokenCount value. */ @Generated - public int getImageTokens() { - return this.imageTokens; + public int getImageTokenCount() { + return this.imageTokenCount; } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/LogProbProperties.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/LogProbProperties.java index 5748d7e75da5..a894f7159c58 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/LogProbProperties.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/LogProbProperties.java @@ -24,12 +24,6 @@ public final class LogProbProperties implements JsonSerializable bytes) { + private LogProbProperties(String token, double logProb, List bytes) { this.token = token; - this.logprob = logprob; + this.logProb = logProb; this.bytes = bytes; } @@ -60,16 +54,6 @@ public String getToken() { return this.token; } - /** - * Get the logprob property: The log probability of the token. - * - * @return the logprob value. - */ - @Generated - public double getLogprob() { - return this.logprob; - } - /** * Get the bytes property: The bytes that were used to generate the log probability. * @@ -88,7 +72,7 @@ public List getBytes() { public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); jsonWriter.writeStringField("token", this.token); - jsonWriter.writeDoubleField("logprob", this.logprob); + jsonWriter.writeDoubleField("logprob", this.logProb); jsonWriter.writeArrayField("bytes", this.bytes, (writer, element) -> writer.writeInt(element)); return jsonWriter.writeEndObject(); } @@ -106,7 +90,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { public static LogProbProperties fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String token = null; - double logprob = 0.0; + double logProb = 0.0; List bytes = null; while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); @@ -114,14 +98,30 @@ public static LogProbProperties fromJson(JsonReader jsonReader) throws IOExcepti if ("token".equals(fieldName)) { token = reader.getString(); } else if ("logprob".equals(fieldName)) { - logprob = reader.getDouble(); + logProb = reader.getDouble(); } else if ("bytes".equals(fieldName)) { bytes = reader.readArray(reader1 -> reader1.getInt()); } else { reader.skipChildren(); } } - return new LogProbProperties(token, logprob, bytes); + return new LogProbProperties(token, logProb, bytes); }); } + + /* + * The log probability of the token. + */ + @Generated + private final double logProb; + + /** + * Get the logProb property: The log probability of the token. + * + * @return the logProb value. + */ + @Generated + public double getLogProb() { + return this.logProb; + } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPApprovalResponseRequestItem.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpApprovalResponseRequestItem.java similarity index 82% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPApprovalResponseRequestItem.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpApprovalResponseRequestItem.java index 6c4c3c9230c3..c113fac98f22 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPApprovalResponseRequestItem.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpApprovalResponseRequestItem.java @@ -14,7 +14,7 @@ * A request item that represents a response to an MCP approval request. */ @Fluent -public final class MCPApprovalResponseRequestItem extends ConversationRequestItem { +public final class McpApprovalResponseRequestItem extends ConversationRequestItem { /* * The type property. @@ -35,13 +35,13 @@ public final class MCPApprovalResponseRequestItem extends ConversationRequestIte private final boolean approve; /** - * Creates an instance of MCPApprovalResponseRequestItem class. + * Creates an instance of McpApprovalResponseRequestItem class. * * @param approvalRequestId the approvalRequestId value to set. * @param approve the approve value to set. */ @Generated - public MCPApprovalResponseRequestItem(String approvalRequestId, boolean approve) { + public McpApprovalResponseRequestItem(String approvalRequestId, boolean approve) { this.approvalRequestId = approvalRequestId; this.approve = approve; } @@ -82,7 +82,7 @@ public boolean isApprove() { */ @Generated @Override - public MCPApprovalResponseRequestItem setId(String id) { + public McpApprovalResponseRequestItem setId(String id) { super.setId(id); return this; } @@ -102,16 +102,16 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of MCPApprovalResponseRequestItem from the JsonReader. + * Reads an instance of McpApprovalResponseRequestItem from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of MCPApprovalResponseRequestItem if the JsonReader was pointing to an instance of it, or + * @return An instance of McpApprovalResponseRequestItem if the JsonReader was pointing to an instance of it, or * null if it was pointing to JSON null. * @throws IllegalStateException If the deserialized JSON object was missing any required properties. - * @throws IOException If an error occurs while reading the MCPApprovalResponseRequestItem. + * @throws IOException If an error occurs while reading the McpApprovalResponseRequestItem. */ @Generated - public static MCPApprovalResponseRequestItem fromJson(JsonReader jsonReader) throws IOException { + public static McpApprovalResponseRequestItem fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String id = null; String approvalRequestId = null; @@ -132,11 +132,11 @@ public static MCPApprovalResponseRequestItem fromJson(JsonReader jsonReader) thr reader.skipChildren(); } } - MCPApprovalResponseRequestItem deserializedMCPApprovalResponseRequestItem - = new MCPApprovalResponseRequestItem(approvalRequestId, approve); - deserializedMCPApprovalResponseRequestItem.setId(id); - deserializedMCPApprovalResponseRequestItem.type = type; - return deserializedMCPApprovalResponseRequestItem; + McpApprovalResponseRequestItem deserializedMcpApprovalResponseRequestItem + = new McpApprovalResponseRequestItem(approvalRequestId, approve); + deserializedMcpApprovalResponseRequestItem.setId(id); + deserializedMcpApprovalResponseRequestItem.type = type; + return deserializedMcpApprovalResponseRequestItem; }); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPApprovalType.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpApprovalType.java similarity index 52% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPApprovalType.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpApprovalType.java index 378487863c90..334439ed1cba 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPApprovalType.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpApprovalType.java @@ -10,48 +10,48 @@ /** * The available set of MCP approval types. */ -public final class MCPApprovalType extends ExpandableStringEnum { +public final class McpApprovalType extends ExpandableStringEnum { /** * Approval is never required. */ @Generated - public static final MCPApprovalType NEVER = fromString("never"); + public static final McpApprovalType NEVER = fromString("never"); /** * Approval is always required. */ @Generated - public static final MCPApprovalType ALWAYS = fromString("always"); + public static final McpApprovalType ALWAYS = fromString("always"); /** - * Creates a new instance of MCPApprovalType value. + * Creates a new instance of McpApprovalType value. * * @deprecated Use the {@link #fromString(String)} factory method. */ @Generated @Deprecated - public MCPApprovalType() { + public McpApprovalType() { } /** - * Creates or finds a MCPApprovalType from its string representation. + * Creates or finds a McpApprovalType from its string representation. * * @param name a name to look for. - * @return the corresponding MCPApprovalType. + * @return the corresponding McpApprovalType. */ @Generated - public static MCPApprovalType fromString(String name) { - return fromString(name, MCPApprovalType.class); + public static McpApprovalType fromString(String name) { + return fromString(name, McpApprovalType.class); } /** - * Gets known MCPApprovalType values. + * Gets known McpApprovalType values. * - * @return known MCPApprovalType values. + * @return known McpApprovalType values. */ @Generated - public static Collection values() { - return values(MCPApprovalType.class); + public static Collection values() { + return values(McpApprovalType.class); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPServer.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpServer.java similarity index 85% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPServer.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpServer.java index 26ecffb88f30..e40e012fd8fc 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPServer.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpServer.java @@ -17,7 +17,7 @@ * The definition of an MCP server as used by the voicelive endpoint. */ @Fluent -public final class MCPServer extends VoiceLiveToolDefinition { +public final class McpServer extends VoiceLiveToolDefinition { /* * The type property. @@ -62,13 +62,13 @@ public final class MCPServer extends VoiceLiveToolDefinition { private BinaryData requireApproval; /** - * Creates an instance of MCPServer class. + * Creates an instance of McpServer class. * * @param serverLabel the serverLabel value to set. * @param serverUrl the serverUrl value to set. */ @Generated - public MCPServer(String serverLabel, String serverUrl) { + public McpServer(String serverLabel, String serverUrl) { this.serverLabel = serverLabel; this.serverUrl = serverUrl; } @@ -118,10 +118,10 @@ public String getAuthorization() { * Set the authorization property: The authorization property. * * @param authorization the authorization value to set. - * @return the MCPServer object itself. + * @return the McpServer object itself. */ @Generated - public MCPServer setAuthorization(String authorization) { + public McpServer setAuthorization(String authorization) { this.authorization = authorization; return this; } @@ -140,10 +140,10 @@ public Map getHeaders() { * Set the headers property: The headers property. * * @param headers the headers value to set. - * @return the MCPServer object itself. + * @return the McpServer object itself. */ @Generated - public MCPServer setHeaders(Map headers) { + public McpServer setHeaders(Map headers) { this.headers = headers; return this; } @@ -162,10 +162,10 @@ public List getAllowedTools() { * Set the allowedTools property: The allowed_tools property. * * @param allowedTools the allowedTools value to set. - * @return the MCPServer object itself. + * @return the McpServer object itself. */ @Generated - public MCPServer setAllowedTools(List allowedTools) { + public McpServer setAllowedTools(List allowedTools) { this.allowedTools = allowedTools; return this; } @@ -184,10 +184,10 @@ public BinaryData getRequireApproval() { * Set the requireApproval property: The require_approval property. * * @param requireApproval the requireApproval value to set. - * @return the MCPServer object itself. + * @return the McpServer object itself. */ @Generated - public MCPServer setRequireApproval(BinaryData requireApproval) { + public McpServer setRequireApproval(BinaryData requireApproval) { this.requireApproval = requireApproval; return this; } @@ -214,16 +214,16 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of MCPServer from the JsonReader. + * Reads an instance of McpServer from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of MCPServer if the JsonReader was pointing to an instance of it, or null if it was pointing + * @return An instance of McpServer if the JsonReader was pointing to an instance of it, or null if it was pointing * to JSON null. * @throws IllegalStateException If the deserialized JSON object was missing any required properties. - * @throws IOException If an error occurs while reading the MCPServer. + * @throws IOException If an error occurs while reading the McpServer. */ @Generated - public static MCPServer fromJson(JsonReader jsonReader) throws IOException { + public static McpServer fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String serverLabel = null; String serverUrl = null; @@ -254,13 +254,13 @@ public static MCPServer fromJson(JsonReader jsonReader) throws IOException { reader.skipChildren(); } } - MCPServer deserializedMCPServer = new MCPServer(serverLabel, serverUrl); - deserializedMCPServer.type = type; - deserializedMCPServer.authorization = authorization; - deserializedMCPServer.headers = headers; - deserializedMCPServer.allowedTools = allowedTools; - deserializedMCPServer.requireApproval = requireApproval; - return deserializedMCPServer; + McpServer deserializedMcpServer = new McpServer(serverLabel, serverUrl); + deserializedMcpServer.type = type; + deserializedMcpServer.authorization = authorization; + deserializedMcpServer.headers = headers; + deserializedMcpServer.allowedTools = allowedTools; + deserializedMcpServer.requireApproval = requireApproval; + return deserializedMcpServer; }); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPTool.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpTool.java similarity index 87% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPTool.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpTool.java index 3b8adcbb9a73..ba8719b6933b 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/MCPTool.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/McpTool.java @@ -16,7 +16,7 @@ * Represents a mcp tool definition. */ @Immutable -public final class MCPTool implements JsonSerializable { +public final class McpTool implements JsonSerializable { /* * The name of the tool. @@ -43,13 +43,13 @@ public final class MCPTool implements JsonSerializable { private BinaryData annotations; /** - * Creates an instance of MCPTool class. + * Creates an instance of McpTool class. * * @param name the name value to set. * @param inputSchema the inputSchema value to set. */ @Generated - private MCPTool(String name, BinaryData inputSchema) { + private McpTool(String name, BinaryData inputSchema) { this.name = name; this.inputSchema = inputSchema; } @@ -113,16 +113,16 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of MCPTool from the JsonReader. + * Reads an instance of McpTool from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of MCPTool if the JsonReader was pointing to an instance of it, or null if it was pointing to + * @return An instance of McpTool if the JsonReader was pointing to an instance of it, or null if it was pointing to * JSON null. * @throws IllegalStateException If the deserialized JSON object was missing any required properties. - * @throws IOException If an error occurs while reading the MCPTool. + * @throws IOException If an error occurs while reading the McpTool. */ @Generated - public static MCPTool fromJson(JsonReader jsonReader) throws IOException { + public static McpTool fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String name = null; BinaryData inputSchema = null; @@ -145,10 +145,10 @@ public static MCPTool fromJson(JsonReader jsonReader) throws IOException { reader.skipChildren(); } } - MCPTool deserializedMCPTool = new MCPTool(name, inputSchema); - deserializedMCPTool.description = description; - deserializedMCPTool.annotations = annotations; - return deserializedMCPTool; + McpTool deserializedMcpTool = new McpTool(name, inputSchema); + deserializedMcpTool.description = description; + deserializedMcpTool.annotations = annotations; + return deserializedMcpTool; }); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/OutputTokenDetails.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/OutputTokenDetails.java index 41648ae92753..110bd7056497 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/OutputTokenDetails.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/OutputTokenDetails.java @@ -17,48 +17,16 @@ @Immutable public final class OutputTokenDetails implements JsonSerializable { - /* - * Number of text tokens generated in the output. - */ - @Generated - private final int textTokens; - - /* - * Number of audio tokens generated in the output. - */ - @Generated - private final int audioTokens; - /** * Creates an instance of OutputTokenDetails class. * - * @param textTokens the textTokens value to set. - * @param audioTokens the audioTokens value to set. - */ - @Generated - private OutputTokenDetails(int textTokens, int audioTokens) { - this.textTokens = textTokens; - this.audioTokens = audioTokens; - } - - /** - * Get the textTokens property: Number of text tokens generated in the output. - * - * @return the textTokens value. - */ - @Generated - public int getTextTokens() { - return this.textTokens; - } - - /** - * Get the audioTokens property: Number of audio tokens generated in the output. - * - * @return the audioTokens value. + * @param textTokenCount the textTokenCount value to set. + * @param audioTokenCount the audioTokenCount value to set. */ @Generated - public int getAudioTokens() { - return this.audioTokens; + private OutputTokenDetails(int textTokenCount, int audioTokenCount) { + this.textTokenCount = textTokenCount; + this.audioTokenCount = audioTokenCount; } /** @@ -68,9 +36,9 @@ public int getAudioTokens() { @Override public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); - jsonWriter.writeIntField("text_tokens", this.textTokens); - jsonWriter.writeIntField("audio_tokens", this.audioTokens); - jsonWriter.writeNumberField("reasoning_tokens", this.reasoningTokens); + jsonWriter.writeIntField("text_tokens", this.textTokenCount); + jsonWriter.writeIntField("audio_tokens", this.audioTokenCount); + jsonWriter.writeNumberField("reasoning_tokens", this.reasoningTokenCount); return jsonWriter.writeEndObject(); } @@ -86,41 +54,73 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { @Generated public static OutputTokenDetails fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { - int textTokens = 0; - int audioTokens = 0; - Integer reasoningTokens = null; + int textTokenCount = 0; + int audioTokenCount = 0; + Integer reasoningTokenCount = null; while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); reader.nextToken(); if ("text_tokens".equals(fieldName)) { - textTokens = reader.getInt(); + textTokenCount = reader.getInt(); } else if ("audio_tokens".equals(fieldName)) { - audioTokens = reader.getInt(); + audioTokenCount = reader.getInt(); } else if ("reasoning_tokens".equals(fieldName)) { - reasoningTokens = reader.getNullable(JsonReader::getInt); + reasoningTokenCount = reader.getNullable(JsonReader::getInt); } else { reader.skipChildren(); } } - OutputTokenDetails deserializedOutputTokenDetails = new OutputTokenDetails(textTokens, audioTokens); - deserializedOutputTokenDetails.reasoningTokens = reasoningTokens; + OutputTokenDetails deserializedOutputTokenDetails = new OutputTokenDetails(textTokenCount, audioTokenCount); + deserializedOutputTokenDetails.reasoningTokenCount = reasoningTokenCount; return deserializedOutputTokenDetails; }); } + /* + * Number of text tokens generated in the output. + */ + @Generated + private final int textTokenCount; + + /* + * Number of audio tokens generated in the output. + */ + @Generated + private final int audioTokenCount; + /* * Number of reasoning tokens generated in the output. */ @Generated - private Integer reasoningTokens; + private Integer reasoningTokenCount; + + /** + * Get the textTokenCount property: Number of text tokens generated in the output. + * + * @return the textTokenCount value. + */ + @Generated + public int getTextTokenCount() { + return this.textTokenCount; + } + + /** + * Get the audioTokenCount property: Number of audio tokens generated in the output. + * + * @return the audioTokenCount value. + */ + @Generated + public int getAudioTokenCount() { + return this.audioTokenCount; + } /** - * Get the reasoningTokens property: Number of reasoning tokens generated in the output. + * Get the reasoningTokenCount property: Number of reasoning tokens generated in the output. * - * @return the reasoningTokens value. + * @return the reasoningTokenCount value. */ @Generated - public Integer getReasoningTokens() { - return this.reasoningTokens; + public Integer getReasoningTokenCount() { + return this.reasoningTokenCount; } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/RequestImageContentPart.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/RequestImageContentPart.java index 2023e2e109dc..8eabb18a756f 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/RequestImageContentPart.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/RequestImageContentPart.java @@ -22,12 +22,6 @@ public final class RequestImageContentPart extends VoiceLiveContentPart { @Generated private ContentPartType type = ContentPartType.INPUT_IMAGE; - /* - * The url property. - */ - @Generated - private String url; - /* * The detail property. */ @@ -52,28 +46,6 @@ public ContentPartType getType() { return this.type; } - /** - * Get the url property: The url property. - * - * @return the url value. - */ - @Generated - public String getUrl() { - return this.url; - } - - /** - * Set the url property: The url property. - * - * @param url the url value to set. - * @return the RequestImageContentPart object itself. - */ - @Generated - public RequestImageContentPart setUrl(String url) { - this.url = url; - return this; - } - /** * Get the detail property: The detail property. * @@ -104,7 +76,7 @@ public RequestImageContentPart setDetail(RequestImageContentPartDetail detail) { public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); jsonWriter.writeStringField("type", this.type == null ? null : this.type.toString()); - jsonWriter.writeStringField("url", this.url); + jsonWriter.writeStringField("image_url", this.imageUrl); jsonWriter.writeStringField("detail", this.detail == null ? null : this.detail.toString()); return jsonWriter.writeEndObject(); } @@ -126,8 +98,8 @@ public static RequestImageContentPart fromJson(JsonReader jsonReader) throws IOE reader.nextToken(); if ("type".equals(fieldName)) { deserializedRequestImageContentPart.type = ContentPartType.fromString(reader.getString()); - } else if ("url".equals(fieldName)) { - deserializedRequestImageContentPart.url = reader.getString(); + } else if ("image_url".equals(fieldName)) { + deserializedRequestImageContentPart.imageUrl = reader.getString(); } else if ("detail".equals(fieldName)) { deserializedRequestImageContentPart.detail = RequestImageContentPartDetail.fromString(reader.getString()); @@ -138,4 +110,32 @@ public static RequestImageContentPart fromJson(JsonReader jsonReader) throws IOE return deserializedRequestImageContentPart; }); } + + /* + * The image_url property. + */ + @Generated + private String imageUrl; + + /** + * Get the imageUrl property: The image_url property. + * + * @return the imageUrl value. + */ + @Generated + public String getImageUrl() { + return this.imageUrl; + } + + /** + * Set the imageUrl property: The image_url property. + * + * @param imageUrl the imageUrl value to set. + * @return the RequestImageContentPart object itself. + */ + @Generated + public RequestImageContentPart setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + return this; + } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPApprovalRequestItem.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpApprovalRequestItem.java similarity index 83% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPApprovalRequestItem.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpApprovalRequestItem.java index 08f8e164f486..1d7899d7432d 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPApprovalRequestItem.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpApprovalRequestItem.java @@ -14,7 +14,7 @@ * A response item that represents a request for approval to call an MCP tool. */ @Immutable -public final class ResponseMCPApprovalRequestItem extends SessionResponseItem { +public final class ResponseMcpApprovalRequestItem extends SessionResponseItem { /* * The type property. @@ -41,13 +41,13 @@ public final class ResponseMCPApprovalRequestItem extends SessionResponseItem { private final String serverLabel; /** - * Creates an instance of ResponseMCPApprovalRequestItem class. + * Creates an instance of ResponseMcpApprovalRequestItem class. * * @param name the name value to set. * @param serverLabel the serverLabel value to set. */ @Generated - private ResponseMCPApprovalRequestItem(String name, String serverLabel) { + private ResponseMcpApprovalRequestItem(String name, String serverLabel) { this.name = name; this.serverLabel = serverLabel; } @@ -110,16 +110,16 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of ResponseMCPApprovalRequestItem from the JsonReader. + * Reads an instance of ResponseMcpApprovalRequestItem from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of ResponseMCPApprovalRequestItem if the JsonReader was pointing to an instance of it, or + * @return An instance of ResponseMcpApprovalRequestItem if the JsonReader was pointing to an instance of it, or * null if it was pointing to JSON null. * @throws IllegalStateException If the deserialized JSON object was missing any required properties. - * @throws IOException If an error occurs while reading the ResponseMCPApprovalRequestItem. + * @throws IOException If an error occurs while reading the ResponseMcpApprovalRequestItem. */ @Generated - public static ResponseMCPApprovalRequestItem fromJson(JsonReader jsonReader) throws IOException { + public static ResponseMcpApprovalRequestItem fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String id = null; ResponseItemObject object = null; @@ -146,13 +146,13 @@ public static ResponseMCPApprovalRequestItem fromJson(JsonReader jsonReader) thr reader.skipChildren(); } } - ResponseMCPApprovalRequestItem deserializedResponseMCPApprovalRequestItem - = new ResponseMCPApprovalRequestItem(name, serverLabel); - deserializedResponseMCPApprovalRequestItem.setId(id); - deserializedResponseMCPApprovalRequestItem.setObject(object); - deserializedResponseMCPApprovalRequestItem.type = type; - deserializedResponseMCPApprovalRequestItem.arguments = arguments; - return deserializedResponseMCPApprovalRequestItem; + ResponseMcpApprovalRequestItem deserializedResponseMcpApprovalRequestItem + = new ResponseMcpApprovalRequestItem(name, serverLabel); + deserializedResponseMcpApprovalRequestItem.setId(id); + deserializedResponseMcpApprovalRequestItem.setObject(object); + deserializedResponseMcpApprovalRequestItem.type = type; + deserializedResponseMcpApprovalRequestItem.arguments = arguments; + return deserializedResponseMcpApprovalRequestItem; }); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPApprovalResponseItem.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpApprovalResponseItem.java similarity index 83% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPApprovalResponseItem.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpApprovalResponseItem.java index 621f74804e8a..d791b5e88715 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPApprovalResponseItem.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpApprovalResponseItem.java @@ -14,7 +14,7 @@ * A response item that represents a response to an MCP approval request. */ @Immutable -public final class ResponseMCPApprovalResponseItem extends SessionResponseItem { +public final class ResponseMcpApprovalResponseItem extends SessionResponseItem { /* * The type property. @@ -41,13 +41,13 @@ public final class ResponseMCPApprovalResponseItem extends SessionResponseItem { private String reason; /** - * Creates an instance of ResponseMCPApprovalResponseItem class. + * Creates an instance of ResponseMcpApprovalResponseItem class. * * @param approvalRequestId the approvalRequestId value to set. * @param approve the approve value to set. */ @Generated - private ResponseMCPApprovalResponseItem(String approvalRequestId, boolean approve) { + private ResponseMcpApprovalResponseItem(String approvalRequestId, boolean approve) { this.approvalRequestId = approvalRequestId; this.approve = approve; } @@ -110,16 +110,16 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of ResponseMCPApprovalResponseItem from the JsonReader. + * Reads an instance of ResponseMcpApprovalResponseItem from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of ResponseMCPApprovalResponseItem if the JsonReader was pointing to an instance of it, or + * @return An instance of ResponseMcpApprovalResponseItem if the JsonReader was pointing to an instance of it, or * null if it was pointing to JSON null. * @throws IllegalStateException If the deserialized JSON object was missing any required properties. - * @throws IOException If an error occurs while reading the ResponseMCPApprovalResponseItem. + * @throws IOException If an error occurs while reading the ResponseMcpApprovalResponseItem. */ @Generated - public static ResponseMCPApprovalResponseItem fromJson(JsonReader jsonReader) throws IOException { + public static ResponseMcpApprovalResponseItem fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String id = null; ResponseItemObject object = null; @@ -146,13 +146,13 @@ public static ResponseMCPApprovalResponseItem fromJson(JsonReader jsonReader) th reader.skipChildren(); } } - ResponseMCPApprovalResponseItem deserializedResponseMCPApprovalResponseItem - = new ResponseMCPApprovalResponseItem(approvalRequestId, approve); - deserializedResponseMCPApprovalResponseItem.setId(id); - deserializedResponseMCPApprovalResponseItem.setObject(object); - deserializedResponseMCPApprovalResponseItem.type = type; - deserializedResponseMCPApprovalResponseItem.reason = reason; - return deserializedResponseMCPApprovalResponseItem; + ResponseMcpApprovalResponseItem deserializedResponseMcpApprovalResponseItem + = new ResponseMcpApprovalResponseItem(approvalRequestId, approve); + deserializedResponseMcpApprovalResponseItem.setId(id); + deserializedResponseMcpApprovalResponseItem.setObject(object); + deserializedResponseMcpApprovalResponseItem.type = type; + deserializedResponseMcpApprovalResponseItem.reason = reason; + return deserializedResponseMcpApprovalResponseItem; }); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPCallItem.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpCallItem.java similarity index 86% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPCallItem.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpCallItem.java index 502bfea89335..f504b722ce0e 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPCallItem.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpCallItem.java @@ -15,7 +15,7 @@ * A response item that represents a call to an MCP tool. */ @Immutable -public final class ResponseMCPCallItem extends SessionResponseItem { +public final class ResponseMcpCallItem extends SessionResponseItem { /* * The type property. @@ -60,14 +60,14 @@ public final class ResponseMCPCallItem extends SessionResponseItem { private BinaryData error; /** - * Creates an instance of ResponseMCPCallItem class. + * Creates an instance of ResponseMcpCallItem class. * * @param arguments the arguments value to set. * @param serverLabel the serverLabel value to set. * @param name the name value to set. */ @Generated - private ResponseMCPCallItem(String arguments, String serverLabel, String name) { + private ResponseMcpCallItem(String arguments, String serverLabel, String name) { this.arguments = arguments; this.serverLabel = serverLabel; this.name = name; @@ -167,16 +167,16 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of ResponseMCPCallItem from the JsonReader. + * Reads an instance of ResponseMcpCallItem from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of ResponseMCPCallItem if the JsonReader was pointing to an instance of it, or null if it was + * @return An instance of ResponseMcpCallItem if the JsonReader was pointing to an instance of it, or null if it was * pointing to JSON null. * @throws IllegalStateException If the deserialized JSON object was missing any required properties. - * @throws IOException If an error occurs while reading the ResponseMCPCallItem. + * @throws IOException If an error occurs while reading the ResponseMcpCallItem. */ @Generated - public static ResponseMCPCallItem fromJson(JsonReader jsonReader) throws IOException { + public static ResponseMcpCallItem fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String id = null; ResponseItemObject object = null; @@ -212,14 +212,14 @@ public static ResponseMCPCallItem fromJson(JsonReader jsonReader) throws IOExcep reader.skipChildren(); } } - ResponseMCPCallItem deserializedResponseMCPCallItem = new ResponseMCPCallItem(arguments, serverLabel, name); - deserializedResponseMCPCallItem.setId(id); - deserializedResponseMCPCallItem.setObject(object); - deserializedResponseMCPCallItem.type = type; - deserializedResponseMCPCallItem.approvalRequestId = approvalRequestId; - deserializedResponseMCPCallItem.output = output; - deserializedResponseMCPCallItem.error = error; - return deserializedResponseMCPCallItem; + ResponseMcpCallItem deserializedResponseMcpCallItem = new ResponseMcpCallItem(arguments, serverLabel, name); + deserializedResponseMcpCallItem.setId(id); + deserializedResponseMcpCallItem.setObject(object); + deserializedResponseMcpCallItem.type = type; + deserializedResponseMcpCallItem.approvalRequestId = approvalRequestId; + deserializedResponseMcpCallItem.output = output; + deserializedResponseMcpCallItem.error = error; + return deserializedResponseMcpCallItem; }); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPListToolItem.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpListToolItem.java similarity index 79% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPListToolItem.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpListToolItem.java index f5d9666642a4..c245a22de9ef 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMCPListToolItem.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseMcpListToolItem.java @@ -15,7 +15,7 @@ * A response item that lists the tools available on an MCP server. */ @Immutable -public final class ResponseMCPListToolItem extends SessionResponseItem { +public final class ResponseMcpListToolItem extends SessionResponseItem { /* * The type property. @@ -27,7 +27,7 @@ public final class ResponseMCPListToolItem extends SessionResponseItem { * The tools available on the server. */ @Generated - private final List tools; + private final List tools; /* * The label of the server that provides the tools. @@ -36,13 +36,13 @@ public final class ResponseMCPListToolItem extends SessionResponseItem { private final String serverLabel; /** - * Creates an instance of ResponseMCPListToolItem class. + * Creates an instance of ResponseMcpListToolItem class. * * @param tools the tools value to set. * @param serverLabel the serverLabel value to set. */ @Generated - private ResponseMCPListToolItem(List tools, String serverLabel) { + private ResponseMcpListToolItem(List tools, String serverLabel) { this.tools = tools; this.serverLabel = serverLabel; } @@ -64,7 +64,7 @@ public ItemType getType() { * @return the tools value. */ @Generated - public List getTools() { + public List getTools() { return this.tools; } @@ -94,20 +94,20 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of ResponseMCPListToolItem from the JsonReader. + * Reads an instance of ResponseMcpListToolItem from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of ResponseMCPListToolItem if the JsonReader was pointing to an instance of it, or null if it + * @return An instance of ResponseMcpListToolItem if the JsonReader was pointing to an instance of it, or null if it * was pointing to JSON null. * @throws IllegalStateException If the deserialized JSON object was missing any required properties. - * @throws IOException If an error occurs while reading the ResponseMCPListToolItem. + * @throws IOException If an error occurs while reading the ResponseMcpListToolItem. */ @Generated - public static ResponseMCPListToolItem fromJson(JsonReader jsonReader) throws IOException { + public static ResponseMcpListToolItem fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String id = null; ResponseItemObject object = null; - List tools = null; + List tools = null; String serverLabel = null; ItemType type = ItemType.MCP_LIST_TOOLS; while (reader.nextToken() != JsonToken.END_OBJECT) { @@ -118,7 +118,7 @@ public static ResponseMCPListToolItem fromJson(JsonReader jsonReader) throws IOE } else if ("object".equals(fieldName)) { object = ResponseItemObject.fromString(reader.getString()); } else if ("tools".equals(fieldName)) { - tools = reader.readArray(reader1 -> MCPTool.fromJson(reader1)); + tools = reader.readArray(reader1 -> McpTool.fromJson(reader1)); } else if ("server_label".equals(fieldName)) { serverLabel = reader.getString(); } else if ("type".equals(fieldName)) { @@ -127,12 +127,12 @@ public static ResponseMCPListToolItem fromJson(JsonReader jsonReader) throws IOE reader.skipChildren(); } } - ResponseMCPListToolItem deserializedResponseMCPListToolItem - = new ResponseMCPListToolItem(tools, serverLabel); - deserializedResponseMCPListToolItem.setId(id); - deserializedResponseMCPListToolItem.setObject(object); - deserializedResponseMCPListToolItem.type = type; - return deserializedResponseMCPListToolItem; + ResponseMcpListToolItem deserializedResponseMcpListToolItem + = new ResponseMcpListToolItem(tools, serverLabel); + deserializedResponseMcpListToolItem.setId(id); + deserializedResponseMcpListToolItem.setObject(object); + deserializedResponseMcpListToolItem.type = type; + return deserializedResponseMcpListToolItem; }); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseTokenStatistics.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseTokenStatistics.java index b1eda0fa0d5e..ebe84ba1369b 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseTokenStatistics.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ResponseTokenStatistics.java @@ -17,24 +17,6 @@ @Immutable public final class ResponseTokenStatistics implements JsonSerializable { - /* - * Total number of tokens (input + output). - */ - @Generated - private final int totalTokens; - - /* - * Number of input tokens. - */ - @Generated - private final int inputTokens; - - /* - * Number of output tokens. - */ - @Generated - private final int outputTokens; - /* * Detailed breakdown of input tokens. */ @@ -50,52 +32,22 @@ public final class ResponseTokenStatistics implements JsonSerializable { - int totalTokens = 0; - int inputTokens = 0; - int outputTokens = 0; + int totalTokenCount = 0; + int inputTokenCount = 0; + int outputTokenCount = 0; InputTokenDetails inputTokenDetails = null; OutputTokenDetails outputTokenDetails = null; while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); reader.nextToken(); if ("total_tokens".equals(fieldName)) { - totalTokens = reader.getInt(); + totalTokenCount = reader.getInt(); } else if ("input_tokens".equals(fieldName)) { - inputTokens = reader.getInt(); + inputTokenCount = reader.getInt(); } else if ("output_tokens".equals(fieldName)) { - outputTokens = reader.getInt(); + outputTokenCount = reader.getInt(); } else if ("input_token_details".equals(fieldName)) { inputTokenDetails = InputTokenDetails.fromJson(reader); } else if ("output_token_details".equals(fieldName)) { @@ -165,8 +117,56 @@ public static ResponseTokenStatistics fromJson(JsonReader jsonReader) throws IOE reader.skipChildren(); } } - return new ResponseTokenStatistics(totalTokens, inputTokens, outputTokens, inputTokenDetails, + return new ResponseTokenStatistics(totalTokenCount, inputTokenCount, outputTokenCount, inputTokenDetails, outputTokenDetails); }); } + + /* + * Total number of tokens (input + output). + */ + @Generated + private final int totalTokenCount; + + /* + * Number of input tokens. + */ + @Generated + private final int inputTokenCount; + + /* + * Number of output tokens. + */ + @Generated + private final int outputTokenCount; + + /** + * Get the totalTokenCount property: Total number of tokens (input + output). + * + * @return the totalTokenCount value. + */ + @Generated + public int getTotalTokenCount() { + return this.totalTokenCount; + } + + /** + * Get the inputTokenCount property: Number of input tokens. + * + * @return the inputTokenCount value. + */ + @Generated + public int getInputTokenCount() { + return this.inputTokenCount; + } + + /** + * Get the outputTokenCount property: Number of output tokens. + * + * @return the outputTokenCount value. + */ + @Generated + public int getOutputTokenCount() { + return this.outputTokenCount; + } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsCompleted.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsCompleted.java index 874bc77f3a47..558c18f615c6 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsCompleted.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsCompleted.java @@ -14,7 +14,7 @@ * MCP list tools completed message. */ @Immutable -public final class ServerEventMcpListToolsCompleted extends SessionUpdate { +public final class ServerEventMcpListToolsCompleted extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsFailed.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsFailed.java index bfc2a7408735..6e56e9c5ad1a 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsFailed.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsFailed.java @@ -14,7 +14,7 @@ * MCP list tools failed message. */ @Immutable -public final class ServerEventMcpListToolsFailed extends SessionUpdate { +public final class ServerEventMcpListToolsFailed extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsInProgress.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsInProgress.java index 211d37403b4a..1692b6be1475 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsInProgress.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsInProgress.java @@ -14,7 +14,7 @@ * MCP list tools in progress message. */ @Immutable -public final class ServerEventMcpListToolsInProgress extends SessionUpdate { +public final class ServerEventMcpListToolsInProgress extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventOutputAudioBufferCleared.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventOutputAudioBufferCleared.java index db8be39b514d..eb7ea981df49 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventOutputAudioBufferCleared.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventOutputAudioBufferCleared.java @@ -14,7 +14,7 @@ * Returned when the output audio buffer has been cleared. */ @Immutable -public final class ServerEventOutputAudioBufferCleared extends SessionUpdate { +public final class ServerEventOutputAudioBufferCleared extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseAudioTranscriptAnnotationAdded.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseAudioTranscriptAnnotationAdded.java index ff8de4caa71f..345c91d5f1bc 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseAudioTranscriptAnnotationAdded.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseAudioTranscriptAnnotationAdded.java @@ -15,7 +15,7 @@ * Returned when an audio transcript annotation is added to a response. */ @Immutable -public final class ServerEventResponseAudioTranscriptAnnotationAdded extends SessionUpdate { +public final class ServerEventResponseAudioTranscriptAnnotationAdded extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallCompleted.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallCompleted.java index 16b76d56af91..f450b22e59f5 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallCompleted.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallCompleted.java @@ -14,7 +14,7 @@ * Returned when a file search call has completed. */ @Immutable -public final class ServerEventResponseFileSearchCallCompleted extends SessionUpdate { +public final class ServerEventResponseFileSearchCallCompleted extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallInProgress.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallInProgress.java index e38a3b835bfc..d0689cb0bccd 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallInProgress.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallInProgress.java @@ -14,7 +14,7 @@ * Returned when a file search call is in progress. */ @Immutable -public final class ServerEventResponseFileSearchCallInProgress extends SessionUpdate { +public final class ServerEventResponseFileSearchCallInProgress extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallSearching.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallSearching.java index 981d3c8d69a7..916c021b5473 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallSearching.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallSearching.java @@ -14,7 +14,7 @@ * Returned when a file search call is searching. */ @Immutable -public final class ServerEventResponseFileSearchCallSearching extends SessionUpdate { +public final class ServerEventResponseFileSearchCallSearching extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDelta.java index aa95b6773f2c..c67f9c8c9dc6 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDelta.java @@ -14,7 +14,7 @@ * Represents a delta update of the arguments for an MCP tool call. */ @Immutable -public final class ServerEventResponseMcpCallArgumentsDelta extends SessionUpdate { +public final class ServerEventResponseMcpCallArgumentsDelta extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDone.java index 6be9d831b5e4..d63bbe648d93 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDone.java @@ -14,7 +14,7 @@ * Indicates the completion of the arguments for an MCP tool call. */ @Immutable -public final class ServerEventResponseMcpCallArgumentsDone extends SessionUpdate { +public final class ServerEventResponseMcpCallArgumentsDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallCompleted.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallCompleted.java index c98be999611e..e953f2327e8c 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallCompleted.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallCompleted.java @@ -14,7 +14,7 @@ * Indicates the MCP call has completed. */ @Immutable -public final class ServerEventResponseMcpCallCompleted extends SessionUpdate { +public final class ServerEventResponseMcpCallCompleted extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallFailed.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallFailed.java index 84362a744497..c1b5d31543e8 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallFailed.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallFailed.java @@ -14,7 +14,7 @@ * Indicates the MCP call has failed. */ @Immutable -public final class ServerEventResponseMcpCallFailed extends SessionUpdate { +public final class ServerEventResponseMcpCallFailed extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallInProgress.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallInProgress.java index ed930eea6188..b2788614741f 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallInProgress.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallInProgress.java @@ -14,7 +14,7 @@ * Indicates the MCP call running. */ @Immutable -public final class ServerEventResponseMcpCallInProgress extends SessionUpdate { +public final class ServerEventResponseMcpCallInProgress extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseVideoDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseVideoDelta.java index 18b172acf841..3dcf8004141f 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseVideoDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseVideoDelta.java @@ -14,7 +14,7 @@ * Returned when avatar video frame data is streamed. */ @Immutable -public final class ServerEventResponseVideoDelta extends SessionUpdate { +public final class ServerEventResponseVideoDelta extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallCompleted.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallCompleted.java index 04592ec6954a..c18c0c64382d 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallCompleted.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallCompleted.java @@ -14,7 +14,7 @@ * Returned when a web search call has completed. */ @Immutable -public final class ServerEventResponseWebSearchCallCompleted extends SessionUpdate { +public final class ServerEventResponseWebSearchCallCompleted extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallInProgress.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallInProgress.java index 703352f7057c..0bc7968ed45a 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallInProgress.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallInProgress.java @@ -14,7 +14,7 @@ * Returned when a web search call is in progress. */ @Immutable -public final class ServerEventResponseWebSearchCallInProgress extends SessionUpdate { +public final class ServerEventResponseWebSearchCallInProgress extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallSearching.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallSearching.java index 00e5ff81a63a..6af8b50c4ce1 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallSearching.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallSearching.java @@ -14,7 +14,7 @@ * Returned when a web search call is searching. */ @Immutable -public final class ServerEventResponseWebSearchCallSearching extends SessionUpdate { +public final class ServerEventResponseWebSearchCallSearching extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToIdle.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToIdle.java index d6dd3be767ac..04b829f1a1fe 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToIdle.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToIdle.java @@ -14,7 +14,7 @@ * Returned when the avatar switches to idle state. */ @Immutable -public final class ServerEventSessionAvatarSwitchToIdle extends SessionUpdate { +public final class ServerEventSessionAvatarSwitchToIdle extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToSpeaking.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToSpeaking.java index 8819f0b56748..36b4a90d3c4b 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToSpeaking.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToSpeaking.java @@ -14,7 +14,7 @@ * Returned when the avatar switches to speaking state. */ @Immutable -public final class ServerEventSessionAvatarSwitchToSpeaking extends SessionUpdate { +public final class ServerEventSessionAvatarSwitchToSpeaking extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventWarning.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventWarning.java index d2e897a05e20..136f2bffd514 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventWarning.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ServerEventWarning.java @@ -15,7 +15,7 @@ * Warnings are informational and the session will continue normally. */ @Immutable -public final class ServerEventWarning extends SessionUpdate { +public final class ServerEventWarning extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEvent.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionClientEvent.java similarity index 84% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEvent.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionClientEvent.java index 980409458c07..ff9125e59dd6 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/ClientEvent.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionClientEvent.java @@ -15,13 +15,13 @@ * A voicelive client event. */ @Fluent -public class ClientEvent implements JsonSerializable { +public class SessionClientEvent implements JsonSerializable { /* * The type of event. */ @Generated - private ClientEventType type = ClientEventType.fromString("ClientEvent"); + private ClientEventType type = ClientEventType.fromString("SessionClientEvent"); /* * The event_id property. @@ -30,10 +30,10 @@ public class ClientEvent implements JsonSerializable { private String eventId; /** - * Creates an instance of ClientEvent class. + * Creates an instance of SessionClientEvent class. */ @Generated - public ClientEvent() { + public SessionClientEvent() { } /** @@ -60,10 +60,10 @@ public String getEventId() { * Set the eventId property: The event_id property. * * @param eventId the eventId value to set. - * @return the ClientEvent object itself. + * @return the SessionClientEvent object itself. */ @Generated - public ClientEvent setEventId(String eventId) { + public SessionClientEvent setEventId(String eventId) { this.eventId = eventId; return this; } @@ -81,15 +81,15 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of ClientEvent from the JsonReader. + * Reads an instance of SessionClientEvent from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of ClientEvent if the JsonReader was pointing to an instance of it, or null if it was + * @return An instance of SessionClientEvent if the JsonReader was pointing to an instance of it, or null if it was * pointing to JSON null. - * @throws IOException If an error occurs while reading the ClientEvent. + * @throws IOException If an error occurs while reading the SessionClientEvent. */ @Generated - public static ClientEvent fromJson(JsonReader jsonReader) throws IOException { + public static SessionClientEvent fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String discriminatorValue = null; try (JsonReader readerToUse = reader.bufferObject()) { @@ -148,21 +148,21 @@ public static ClientEvent fromJson(JsonReader jsonReader) throws IOException { } @Generated - static ClientEvent fromJsonKnownDiscriminator(JsonReader jsonReader) throws IOException { + static SessionClientEvent fromJsonKnownDiscriminator(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { - ClientEvent deserializedClientEvent = new ClientEvent(); + SessionClientEvent deserializedSessionClientEvent = new SessionClientEvent(); while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); reader.nextToken(); if ("type".equals(fieldName)) { - deserializedClientEvent.type = ClientEventType.fromString(reader.getString()); + deserializedSessionClientEvent.type = ClientEventType.fromString(reader.getString()); } else if ("event_id".equals(fieldName)) { - deserializedClientEvent.eventId = reader.getString(); + deserializedSessionClientEvent.eventId = reader.getString(); } else { reader.skipChildren(); } } - return deserializedClientEvent; + return deserializedSessionClientEvent; }); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionResponseItem.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionResponseItem.java index d8025bca30c6..75d787c00493 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionResponseItem.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionResponseItem.java @@ -142,13 +142,13 @@ public static SessionResponseItem fromJson(JsonReader jsonReader) throws IOExcep } else if ("function_call_output".equals(discriminatorValue)) { return ResponseFunctionCallOutputItem.fromJson(readerToUse.reset()); } else if ("mcp_list_tools".equals(discriminatorValue)) { - return ResponseMCPListToolItem.fromJson(readerToUse.reset()); + return ResponseMcpListToolItem.fromJson(readerToUse.reset()); } else if ("mcp_call".equals(discriminatorValue)) { - return ResponseMCPCallItem.fromJson(readerToUse.reset()); + return ResponseMcpCallItem.fromJson(readerToUse.reset()); } else if ("mcp_approval_request".equals(discriminatorValue)) { - return ResponseMCPApprovalRequestItem.fromJson(readerToUse.reset()); + return ResponseMcpApprovalRequestItem.fromJson(readerToUse.reset()); } else if ("mcp_approval_response".equals(discriminatorValue)) { - return ResponseMCPApprovalResponseItem.fromJson(readerToUse.reset()); + return ResponseMcpApprovalResponseItem.fromJson(readerToUse.reset()); } else if ("web_search_call".equals(discriminatorValue)) { return ResponseWebSearchCallItem.fromJson(readerToUse.reset()); } else if ("file_search_call".equals(discriminatorValue)) { diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdate.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionServerEvent.java similarity index 92% rename from sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdate.java rename to sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionServerEvent.java index edb634601605..5c9a352f4f49 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdate.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionServerEvent.java @@ -15,13 +15,13 @@ * A voicelive server event. */ @Immutable -public class SessionUpdate implements JsonSerializable { +public class SessionServerEvent implements JsonSerializable { /* * The type of event. */ @Generated - private ServerEventType type = ServerEventType.fromString("SessionUpdate"); + private ServerEventType type = ServerEventType.fromString("SessionServerEvent"); /* * The event_id property. @@ -30,10 +30,10 @@ public class SessionUpdate implements JsonSerializable { private String eventId; /** - * Creates an instance of SessionUpdate class. + * Creates an instance of SessionServerEvent class. */ @Generated - protected SessionUpdate() { + protected SessionServerEvent() { } /** @@ -60,10 +60,10 @@ public String getEventId() { * Set the eventId property: The event_id property. * * @param eventId the eventId value to set. - * @return the SessionUpdate object itself. + * @return the SessionServerEvent object itself. */ @Generated - SessionUpdate setEventId(String eventId) { + SessionServerEvent setEventId(String eventId) { this.eventId = eventId; return this; } @@ -81,15 +81,15 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { } /** - * Reads an instance of SessionUpdate from the JsonReader. + * Reads an instance of SessionServerEvent from the JsonReader. * * @param jsonReader The JsonReader being read. - * @return An instance of SessionUpdate if the JsonReader was pointing to an instance of it, or null if it was + * @return An instance of SessionServerEvent if the JsonReader was pointing to an instance of it, or null if it was * pointing to JSON null. - * @throws IOException If an error occurs while reading the SessionUpdate. + * @throws IOException If an error occurs while reading the SessionServerEvent. */ @Generated - public static SessionUpdate fromJson(JsonReader jsonReader) throws IOException { + public static SessionServerEvent fromJson(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { String discriminatorValue = null; try (JsonReader readerToUse = reader.bufferObject()) { @@ -224,21 +224,21 @@ public static SessionUpdate fromJson(JsonReader jsonReader) throws IOException { } @Generated - static SessionUpdate fromJsonKnownDiscriminator(JsonReader jsonReader) throws IOException { + static SessionServerEvent fromJsonKnownDiscriminator(JsonReader jsonReader) throws IOException { return jsonReader.readObject(reader -> { - SessionUpdate deserializedSessionUpdate = new SessionUpdate(); + SessionServerEvent deserializedSessionServerEvent = new SessionServerEvent(); while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); reader.nextToken(); if ("type".equals(fieldName)) { - deserializedSessionUpdate.type = ServerEventType.fromString(reader.getString()); + deserializedSessionServerEvent.type = ServerEventType.fromString(reader.getString()); } else if ("event_id".equals(fieldName)) { - deserializedSessionUpdate.eventId = reader.getString(); + deserializedSessionServerEvent.eventId = reader.getString(); } else { reader.skipChildren(); } } - return deserializedSessionUpdate; + return deserializedSessionServerEvent; }); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateAvatarConnecting.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateAvatarConnecting.java index 6d1e3a78e694..5d49e281f6db 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateAvatarConnecting.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateAvatarConnecting.java @@ -14,7 +14,7 @@ * Sent when the server is in the process of establishing an avatar media connection and provides its SDP answer. */ @Immutable -public final class SessionUpdateAvatarConnecting extends SessionUpdate { +public final class SessionUpdateAvatarConnecting extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemCreated.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemCreated.java index e9a2dbacc421..11817e36503b 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemCreated.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemCreated.java @@ -22,7 +22,7 @@ * to the Conversation. */ @Immutable -public final class SessionUpdateConversationItemCreated extends SessionUpdate { +public final class SessionUpdateConversationItemCreated extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemDeleted.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemDeleted.java index cc0e3f257972..172cb12e52a5 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemDeleted.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemDeleted.java @@ -16,7 +16,7 @@ * server's understanding of the conversation history with the client's view. */ @Immutable -public final class SessionUpdateConversationItemDeleted extends SessionUpdate { +public final class SessionUpdateConversationItemDeleted extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionCompleted.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionCompleted.java index 42bf07e72145..72774b89fafa 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionCompleted.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionCompleted.java @@ -23,7 +23,7 @@ * should be treated as a rough guide. */ @Immutable -public final class SessionUpdateConversationItemInputAudioTranscriptionCompleted extends SessionUpdate { +public final class SessionUpdateConversationItemInputAudioTranscriptionCompleted extends SessionServerEvent { /* * The type of event. @@ -117,7 +117,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeIntField("content_index", this.contentIndex); jsonWriter.writeStringField("transcript", this.transcript); jsonWriter.writeStringField("type", this.type == null ? null : this.type.toString()); - jsonWriter.writeArrayField("logprobs", this.logprobs, (writer, element) -> writer.writeJson(element)); + jsonWriter.writeArrayField("logprobs", this.logProbs, (writer, element) -> writer.writeJson(element)); jsonWriter.writeArrayField("phrases", this.phrases, (writer, element) -> writer.writeJson(element)); return jsonWriter.writeEndObject(); } @@ -141,7 +141,7 @@ public static SessionUpdateConversationItemInputAudioTranscriptionCompleted from int contentIndex = 0; String transcript = null; ServerEventType type = ServerEventType.CONVERSATION_ITEM_INPUT_AUDIO_TRANSCRIPTION_COMPLETED; - List logprobs = null; + List logProbs = null; List phrases = null; while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); @@ -157,7 +157,7 @@ public static SessionUpdateConversationItemInputAudioTranscriptionCompleted from } else if ("type".equals(fieldName)) { type = ServerEventType.fromString(reader.getString()); } else if ("logprobs".equals(fieldName)) { - logprobs = reader.readArray(reader1 -> LogProbProperties.fromJson(reader1)); + logProbs = reader.readArray(reader1 -> LogProbProperties.fromJson(reader1)); } else if ("phrases".equals(fieldName)) { phrases = reader.readArray(reader1 -> TranscriptionPhrase.fromJson(reader1)); } else { @@ -168,18 +168,12 @@ public static SessionUpdateConversationItemInputAudioTranscriptionCompleted from = new SessionUpdateConversationItemInputAudioTranscriptionCompleted(itemId, contentIndex, transcript); deserializedSessionUpdateConversationItemInputAudioTranscriptionCompleted.setEventId(eventId); deserializedSessionUpdateConversationItemInputAudioTranscriptionCompleted.type = type; - deserializedSessionUpdateConversationItemInputAudioTranscriptionCompleted.logprobs = logprobs; + deserializedSessionUpdateConversationItemInputAudioTranscriptionCompleted.logProbs = logProbs; deserializedSessionUpdateConversationItemInputAudioTranscriptionCompleted.phrases = phrases; return deserializedSessionUpdateConversationItemInputAudioTranscriptionCompleted; }); } - /* - * The log probabilities of the transcription tokens. - */ - @Generated - private List logprobs; - /* * The transcription phrases with timing information. */ @@ -187,22 +181,28 @@ public static SessionUpdateConversationItemInputAudioTranscriptionCompleted from private List phrases; /** - * Get the logprobs property: The log probabilities of the transcription tokens. + * Get the phrases property: The transcription phrases with timing information. * - * @return the logprobs value. + * @return the phrases value. */ @Generated - public List getLogprobs() { - return this.logprobs; + public List getPhrases() { + return this.phrases; } + /* + * The log probabilities of the transcription tokens. + */ + @Generated + private List logProbs; + /** - * Get the phrases property: The transcription phrases with timing information. + * Get the logProbs property: The log probabilities of the transcription tokens. * - * @return the phrases value. + * @return the logProbs value. */ @Generated - public List getPhrases() { - return this.phrases; + public List getLogProbs() { + return this.logProbs; } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionDelta.java index 845d7151e1a7..123135120ca4 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionDelta.java @@ -15,7 +15,7 @@ * Returned when the text value of an input audio transcription content part is updated. */ @Immutable -public final class SessionUpdateConversationItemInputAudioTranscriptionDelta extends SessionUpdate { +public final class SessionUpdateConversationItemInputAudioTranscriptionDelta extends SessionServerEvent { /* * The type of event. @@ -41,12 +41,6 @@ public final class SessionUpdateConversationItemInputAudioTranscriptionDelta ext @Generated private String delta; - /* - * The log probabilities of the transcription. - */ - @Generated - private List logprobs; - /** * Creates an instance of SessionUpdateConversationItemInputAudioTranscriptionDelta class. * @@ -98,16 +92,6 @@ public String getDelta() { return this.delta; } - /** - * Get the logprobs property: The log probabilities of the transcription. - * - * @return the logprobs value. - */ - @Generated - public List getLogprobs() { - return this.logprobs; - } - /** * {@inheritDoc} */ @@ -120,7 +104,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStringField("type", this.type == null ? null : this.type.toString()); jsonWriter.writeNumberField("content_index", this.contentIndex); jsonWriter.writeStringField("delta", this.delta); - jsonWriter.writeArrayField("logprobs", this.logprobs, (writer, element) -> writer.writeJson(element)); + jsonWriter.writeArrayField("logprobs", this.logProbs, (writer, element) -> writer.writeJson(element)); return jsonWriter.writeEndObject(); } @@ -143,7 +127,7 @@ public static SessionUpdateConversationItemInputAudioTranscriptionDelta fromJson ServerEventType type = ServerEventType.CONVERSATION_ITEM_INPUT_AUDIO_TRANSCRIPTION_DELTA; Integer contentIndex = null; String delta = null; - List logprobs = null; + List logProbs = null; while (reader.nextToken() != JsonToken.END_OBJECT) { String fieldName = reader.getFieldName(); reader.nextToken(); @@ -158,7 +142,7 @@ public static SessionUpdateConversationItemInputAudioTranscriptionDelta fromJson } else if ("delta".equals(fieldName)) { delta = reader.getString(); } else if ("logprobs".equals(fieldName)) { - logprobs = reader.readArray(reader1 -> LogProbProperties.fromJson(reader1)); + logProbs = reader.readArray(reader1 -> LogProbProperties.fromJson(reader1)); } else { reader.skipChildren(); } @@ -169,8 +153,24 @@ public static SessionUpdateConversationItemInputAudioTranscriptionDelta fromJson deserializedSessionUpdateConversationItemInputAudioTranscriptionDelta.type = type; deserializedSessionUpdateConversationItemInputAudioTranscriptionDelta.contentIndex = contentIndex; deserializedSessionUpdateConversationItemInputAudioTranscriptionDelta.delta = delta; - deserializedSessionUpdateConversationItemInputAudioTranscriptionDelta.logprobs = logprobs; + deserializedSessionUpdateConversationItemInputAudioTranscriptionDelta.logProbs = logProbs; return deserializedSessionUpdateConversationItemInputAudioTranscriptionDelta; }); } + + /* + * The log probabilities of the transcription. + */ + @Generated + private List logProbs; + + /** + * Get the logProbs property: The log probabilities of the transcription. + * + * @return the logProbs value. + */ + @Generated + public List getLogProbs() { + return this.logProbs; + } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionFailed.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionFailed.java index 0445dce51d7a..882ae62b5d9b 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionFailed.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionFailed.java @@ -16,7 +16,7 @@ * `error` events so that the client can identify the related Item. */ @Immutable -public final class SessionUpdateConversationItemInputAudioTranscriptionFailed extends SessionUpdate { +public final class SessionUpdateConversationItemInputAudioTranscriptionFailed extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemRetrieved.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemRetrieved.java index 1c2783654dee..d99661ddccf6 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemRetrieved.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemRetrieved.java @@ -14,7 +14,7 @@ * Returned when a conversation item is retrieved with `conversation.item.retrieve`. */ @Immutable -public final class SessionUpdateConversationItemRetrieved extends SessionUpdate { +public final class SessionUpdateConversationItemRetrieved extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemTruncated.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemTruncated.java index f1af6d6b70e5..b376763cb052 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemTruncated.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemTruncated.java @@ -18,7 +18,7 @@ * to ensure there is no text in the context that hasn't been heard by the user. */ @Immutable -public final class SessionUpdateConversationItemTruncated extends SessionUpdate { +public final class SessionUpdateConversationItemTruncated extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateError.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateError.java index 7e8f8821f784..0139a732d602 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateError.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateError.java @@ -16,7 +16,7 @@ * recommend to implementors to monitor and log error messages by default. */ @Immutable -public final class SessionUpdateError extends SessionUpdate { +public final class SessionUpdateError extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCleared.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCleared.java index c4eaf3040ba3..82e4fab2322d 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCleared.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCleared.java @@ -15,7 +15,7 @@ * `input_audio_buffer.clear` event. */ @Immutable -public final class SessionUpdateInputAudioBufferCleared extends SessionUpdate { +public final class SessionUpdateInputAudioBufferCleared extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCommitted.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCommitted.java index 0aa7f09695b7..326f819405bb 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCommitted.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCommitted.java @@ -17,7 +17,7 @@ * will also be sent to the client. */ @Immutable -public final class SessionUpdateInputAudioBufferCommitted extends SessionUpdate { +public final class SessionUpdateInputAudioBufferCommitted extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStarted.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStarted.java index c1e908b9f0d5..2cb9ccbfa72a 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStarted.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStarted.java @@ -22,7 +22,7 @@ * the audio buffer during VAD activation). */ @Immutable -public final class SessionUpdateInputAudioBufferSpeechStarted extends SessionUpdate { +public final class SessionUpdateInputAudioBufferSpeechStarted extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStopped.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStopped.java index 81020e243332..9aa91903972e 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStopped.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStopped.java @@ -16,7 +16,7 @@ * event with the user message item that is created from the audio buffer. */ @Immutable -public final class SessionUpdateInputAudioBufferSpeechStopped extends SessionUpdate { +public final class SessionUpdateInputAudioBufferSpeechStopped extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDelta.java index 719a82a2394d..617d48203e5b 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDelta.java @@ -15,7 +15,7 @@ * Represents a delta update of blendshape animation frames for a specific output of a response. */ @Immutable -public final class SessionUpdateResponseAnimationBlendshapeDelta extends SessionUpdate { +public final class SessionUpdateResponseAnimationBlendshapeDelta extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDone.java index 75a49555c910..566317105bc2 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDone.java @@ -14,7 +14,7 @@ * Indicates the completion of blendshape animation processing for a specific output of a response. */ @Immutable -public final class SessionUpdateResponseAnimationBlendshapeDone extends SessionUpdate { +public final class SessionUpdateResponseAnimationBlendshapeDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDelta.java index 9852be570dd8..0d8781dea309 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDelta.java @@ -14,7 +14,7 @@ * Represents a viseme ID delta update for animation based on audio. */ @Immutable -public final class SessionUpdateResponseAnimationVisemeDelta extends SessionUpdate { +public final class SessionUpdateResponseAnimationVisemeDelta extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDone.java index 92c8b8161472..7f6188e71f0b 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDone.java @@ -14,7 +14,7 @@ * Indicates completion of viseme animation delivery for a response. */ @Immutable -public final class SessionUpdateResponseAnimationVisemeDone extends SessionUpdate { +public final class SessionUpdateResponseAnimationVisemeDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDelta.java index 6b96b6507479..ac9fc60696be 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDelta.java @@ -15,7 +15,7 @@ * Returned when the model-generated audio is updated. */ @Immutable -public final class SessionUpdateResponseAudioDelta extends SessionUpdate { +public final class SessionUpdateResponseAudioDelta extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDone.java index 31a08ad19089..9ea2e5f05573 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDone.java @@ -15,7 +15,7 @@ * is interrupted, incomplete, or cancelled. */ @Immutable -public final class SessionUpdateResponseAudioDone extends SessionUpdate { +public final class SessionUpdateResponseAudioDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDelta.java index 21cb1e4d45b0..366709b99115 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDelta.java @@ -14,7 +14,7 @@ * Represents a word-level audio timestamp delta for a response. */ @Immutable -public final class SessionUpdateResponseAudioTimestampDelta extends SessionUpdate { +public final class SessionUpdateResponseAudioTimestampDelta extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDone.java index 543066ae08d6..017b0567b747 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDone.java @@ -14,7 +14,7 @@ * Indicates completion of audio timestamp delivery for a response. */ @Immutable -public final class SessionUpdateResponseAudioTimestampDone extends SessionUpdate { +public final class SessionUpdateResponseAudioTimestampDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDelta.java index e3a22c7adb20..c1435a5e45cd 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDelta.java @@ -14,7 +14,7 @@ * Returned when the model-generated transcription of audio output is updated. */ @Immutable -public final class SessionUpdateResponseAudioTranscriptDelta extends SessionUpdate { +public final class SessionUpdateResponseAudioTranscriptDelta extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDone.java index 727604e54262..3f71bb67e78e 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDone.java @@ -16,7 +16,7 @@ * cancelled. */ @Immutable -public final class SessionUpdateResponseAudioTranscriptDone extends SessionUpdate { +public final class SessionUpdateResponseAudioTranscriptDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartAdded.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartAdded.java index d4fa452bd47a..e133349929b7 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartAdded.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartAdded.java @@ -15,7 +15,7 @@ * response generation. */ @Immutable -public final class SessionUpdateResponseContentPartAdded extends SessionUpdate { +public final class SessionUpdateResponseContentPartAdded extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartDone.java index 08b79cb30c99..2350dc7ad28a 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartDone.java @@ -15,7 +15,7 @@ * Also emitted when a Response is interrupted, incomplete, or cancelled. */ @Immutable -public final class SessionUpdateResponseContentPartDone extends SessionUpdate { +public final class SessionUpdateResponseContentPartDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseCreated.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseCreated.java index 358ad5a5035e..82acb250e4ca 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseCreated.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseCreated.java @@ -15,7 +15,7 @@ * where the response is in an initial state of `in_progress`. */ @Immutable -public final class SessionUpdateResponseCreated extends SessionUpdate { +public final class SessionUpdateResponseCreated extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseDone.java index 209f56f29935..bd7044724a2f 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseDone.java @@ -16,7 +16,7 @@ * include all output Items in the Response but will omit the raw audio data. */ @Immutable -public final class SessionUpdateResponseDone extends SessionUpdate { +public final class SessionUpdateResponseDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDelta.java index 0d9d3e572351..0822d4cd50de 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDelta.java @@ -14,7 +14,7 @@ * Returned when the model-generated function call arguments are updated. */ @Immutable -public final class SessionUpdateResponseFunctionCallArgumentsDelta extends SessionUpdate { +public final class SessionUpdateResponseFunctionCallArgumentsDelta extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDone.java index 8b52c8454ea9..e82d164136b2 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDone.java @@ -15,7 +15,7 @@ * Also emitted when a Response is interrupted, incomplete, or cancelled. */ @Immutable -public final class SessionUpdateResponseFunctionCallArgumentsDone extends SessionUpdate { +public final class SessionUpdateResponseFunctionCallArgumentsDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemAdded.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemAdded.java index e76ffd3c7aed..0873851416c0 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemAdded.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemAdded.java @@ -14,7 +14,7 @@ * Returned when a new Item is created during Response generation. */ @Immutable -public final class SessionUpdateResponseOutputItemAdded extends SessionUpdate { +public final class SessionUpdateResponseOutputItemAdded extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemDone.java index bf55c8acc2b7..da6b454c06ee 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemDone.java @@ -15,7 +15,7 @@ * interrupted, incomplete, or cancelled. */ @Immutable -public final class SessionUpdateResponseOutputItemDone extends SessionUpdate { +public final class SessionUpdateResponseOutputItemDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDelta.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDelta.java index 05859a3875c9..0e4aada5dbb8 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDelta.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDelta.java @@ -14,7 +14,7 @@ * Returned when the text value of a "text" content part is updated. */ @Immutable -public final class SessionUpdateResponseTextDelta extends SessionUpdate { +public final class SessionUpdateResponseTextDelta extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDone.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDone.java index 51b4dea5106b..cdf787312096 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDone.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDone.java @@ -15,7 +15,7 @@ * emitted when a Response is interrupted, incomplete, or cancelled. */ @Immutable -public final class SessionUpdateResponseTextDone extends SessionUpdate { +public final class SessionUpdateResponseTextDone extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionCreated.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionCreated.java index 9ee1a552af50..9990d788baad 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionCreated.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionCreated.java @@ -16,7 +16,7 @@ * the default Session configuration. */ @Immutable -public final class SessionUpdateSessionCreated extends SessionUpdate { +public final class SessionUpdateSessionCreated extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionUpdated.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionUpdated.java index be030083835a..fde5b7d65f99 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionUpdated.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionUpdated.java @@ -15,7 +15,7 @@ * there is an error. */ @Immutable -public final class SessionUpdateSessionUpdated extends SessionUpdate { +public final class SessionUpdateSessionUpdated extends SessionServerEvent { /* * The type of event. diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionOptions.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionOptions.java index da9f1c71bf9d..c07412427293 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionOptions.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionOptions.java @@ -32,12 +32,6 @@ public final class VoiceLiveSessionOptions implements JsonSerializable modalities; - /* - * The animation configuration for the session. - */ - @Generated - private AnimationOptions animation; - /* * The voice configuration for the session. */ @@ -90,12 +84,6 @@ public final class VoiceLiveSessionOptions implements JsonSerializable modalitie return this; } - /** - * Get the animation property: The animation configuration for the session. - * - * @return the animation value. - */ - @Generated - public AnimationOptions getAnimation() { - return this.animation; - } - - /** - * Set the animation property: The animation configuration for the session. - * - * @param animation the animation value to set. - * @return the VoiceLiveSessionOptions object itself. - */ - @Generated - public VoiceLiveSessionOptions setAnimation(AnimationOptions animation) { - this.animation = animation; - return this; - } - /** * Get the voice property: The voice configuration for the session. * @@ -379,28 +345,6 @@ public VoiceLiveSessionOptions setInputAudioEchoCancellation(AudioEchoCancellati return this; } - /** - * Get the avatar property: Configuration for avatar streaming and behavior during the session. - * - * @return the avatar value. - */ - @Generated - public AvatarConfiguration getAvatar() { - return this.avatar; - } - - /** - * Set the avatar property: Configuration for avatar streaming and behavior during the session. - * - * @param avatar the avatar value to set. - * @return the VoiceLiveSessionOptions object itself. - */ - @Generated - public VoiceLiveSessionOptions setAvatar(AvatarConfiguration avatar) { - this.avatar = avatar; - return this; - } - /** * Get the inputAudioTranscription property: Configuration for input audio transcription. * @@ -520,7 +464,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStringField("model", this.model); jsonWriter.writeArrayField("modalities", this.modalities, (writer, element) -> writer.writeString(element == null ? null : element.toString())); - jsonWriter.writeJsonField("animation", this.animation); + jsonWriter.writeJsonField("animation", this.animationOptions); if (this.voice != null) { jsonWriter.writeFieldName("voice"); this.voice.writeTo(jsonWriter); @@ -534,7 +478,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeJsonField("turn_detection", this.turnDetection); jsonWriter.writeJsonField("input_audio_noise_reduction", this.inputAudioNoiseReduction); jsonWriter.writeJsonField("input_audio_echo_cancellation", this.inputAudioEchoCancellation); - jsonWriter.writeJsonField("avatar", this.avatar); + jsonWriter.writeJsonField("avatar", this.avatarOptions); jsonWriter.writeJsonField("input_audio_transcription", this.inputAudioTranscription); jsonWriter.writeArrayField("output_audio_timestamp_types", this.outputAudioTimestampTypes, (writer, element) -> writer.writeString(element == null ? null : element.toString())); @@ -582,7 +526,7 @@ public static VoiceLiveSessionOptions fromJson(JsonReader jsonReader) throws IOE = reader.readArray(reader1 -> InteractionModality.fromString(reader1.getString())); deserializedVoiceLiveSessionOptions.modalities = modalities; } else if ("animation".equals(fieldName)) { - deserializedVoiceLiveSessionOptions.animation = AnimationOptions.fromJson(reader); + deserializedVoiceLiveSessionOptions.animationOptions = AnimationOptions.fromJson(reader); } else if ("voice".equals(fieldName)) { deserializedVoiceLiveSessionOptions.voice = reader.getNullable(nonNullReader -> BinaryData.fromObject(nonNullReader.readUntyped())); @@ -604,7 +548,7 @@ public static VoiceLiveSessionOptions fromJson(JsonReader jsonReader) throws IOE deserializedVoiceLiveSessionOptions.inputAudioEchoCancellation = AudioEchoCancellation.fromJson(reader); } else if ("avatar".equals(fieldName)) { - deserializedVoiceLiveSessionOptions.avatar = AvatarConfiguration.fromJson(reader); + deserializedVoiceLiveSessionOptions.avatarOptions = AvatarOptions.fromJson(reader); } else if ("input_audio_transcription".equals(fieldName)) { deserializedVoiceLiveSessionOptions.inputAudioTranscription = AudioInputTranscriptionOptions.fromJson(reader); @@ -813,4 +757,60 @@ public VoiceLiveSessionOptions setMetadata(Map metadata) { this.metadata = metadata; return this; } + + /* + * The animation configuration for the session. + */ + @Generated + private AnimationOptions animationOptions; + + /* + * Configuration for avatar streaming and behavior during the session. + */ + @Generated + private AvatarOptions avatarOptions; + + /** + * Get the animationOptions property: The animation configuration for the session. + * + * @return the animationOptions value. + */ + @Generated + public AnimationOptions getAnimationOptions() { + return this.animationOptions; + } + + /** + * Set the animationOptions property: The animation configuration for the session. + * + * @param animationOptions the animationOptions value to set. + * @return the VoiceLiveSessionOptions object itself. + */ + @Generated + public VoiceLiveSessionOptions setAnimationOptions(AnimationOptions animationOptions) { + this.animationOptions = animationOptions; + return this; + } + + /** + * Get the avatarOptions property: Configuration for avatar streaming and behavior during the session. + * + * @return the avatarOptions value. + */ + @Generated + public AvatarOptions getAvatarOptions() { + return this.avatarOptions; + } + + /** + * Set the avatarOptions property: Configuration for avatar streaming and behavior during the session. + * + * @param avatarOptions the avatarOptions value to set. + * @return the VoiceLiveSessionOptions object itself. + */ + @Generated + public VoiceLiveSessionOptions setAvatarOptions(AvatarOptions avatarOptions) { + this.avatarOptions = avatarOptions; + return this; + } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionResponse.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionResponse.java index 4c89d045e6d4..78c74fa3ba3e 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionResponse.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionResponse.java @@ -32,12 +32,6 @@ public final class VoiceLiveSessionResponse implements JsonSerializable modalities; - /* - * The animation configuration for the session. - */ - @Generated - private AnimationOptions animation; - /* * The voice configuration for the session. */ @@ -90,12 +84,6 @@ public final class VoiceLiveSessionResponse implements JsonSerializable modaliti return this; } - /** - * Get the animation property: The animation configuration for the session. - * - * @return the animation value. - */ - @Generated - public AnimationOptions getAnimation() { - return this.animation; - } - - /** - * Set the animation property: The animation configuration for the session. - * - * @param animation the animation value to set. - * @return the VoiceLiveSessionResponse object itself. - */ - @Generated - public VoiceLiveSessionResponse setAnimation(AnimationOptions animation) { - this.animation = animation; - return this; - } - /** * Get the voice property: The voice configuration for the session. * @@ -391,28 +357,6 @@ public VoiceLiveSessionResponse setInputAudioEchoCancellation(AudioEchoCancellat return this; } - /** - * Get the avatar property: Configuration for avatar streaming and behavior during the session. - * - * @return the avatar value. - */ - @Generated - public AvatarConfiguration getAvatar() { - return this.avatar; - } - - /** - * Set the avatar property: Configuration for avatar streaming and behavior during the session. - * - * @param avatar the avatar value to set. - * @return the VoiceLiveSessionResponse object itself. - */ - @Generated - public VoiceLiveSessionResponse setAvatar(AvatarConfiguration avatar) { - this.avatar = avatar; - return this; - } - /** * Get the inputAudioTranscription property: Configuration for input audio transcription. * @@ -576,7 +520,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStringField("model", this.model); jsonWriter.writeArrayField("modalities", this.modalities, (writer, element) -> writer.writeString(element == null ? null : element.toString())); - jsonWriter.writeJsonField("animation", this.animation); + jsonWriter.writeJsonField("animation", this.animationOptions); if (this.voice != null) { jsonWriter.writeFieldName("voice"); this.voice.writeTo(jsonWriter); @@ -590,7 +534,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeJsonField("turn_detection", this.turnDetection); jsonWriter.writeJsonField("input_audio_noise_reduction", this.inputAudioNoiseReduction); jsonWriter.writeJsonField("input_audio_echo_cancellation", this.inputAudioEchoCancellation); - jsonWriter.writeJsonField("avatar", this.avatar); + jsonWriter.writeJsonField("avatar", this.avatarOptions); jsonWriter.writeJsonField("input_audio_transcription", this.inputAudioTranscription); jsonWriter.writeArrayField("output_audio_timestamp_types", this.outputAudioTimestampTypes, (writer, element) -> writer.writeString(element == null ? null : element.toString())); @@ -640,7 +584,7 @@ public static VoiceLiveSessionResponse fromJson(JsonReader jsonReader) throws IO = reader.readArray(reader1 -> InteractionModality.fromString(reader1.getString())); deserializedVoiceLiveSessionResponse.modalities = modalities; } else if ("animation".equals(fieldName)) { - deserializedVoiceLiveSessionResponse.animation = AnimationOptions.fromJson(reader); + deserializedVoiceLiveSessionResponse.animationOptions = AnimationOptions.fromJson(reader); } else if ("voice".equals(fieldName)) { deserializedVoiceLiveSessionResponse.voice = reader.getNullable(nonNullReader -> BinaryData.fromObject(nonNullReader.readUntyped())); @@ -664,7 +608,7 @@ public static VoiceLiveSessionResponse fromJson(JsonReader jsonReader) throws IO deserializedVoiceLiveSessionResponse.inputAudioEchoCancellation = AudioEchoCancellation.fromJson(reader); } else if ("avatar".equals(fieldName)) { - deserializedVoiceLiveSessionResponse.avatar = AvatarConfiguration.fromJson(reader); + deserializedVoiceLiveSessionResponse.avatarOptions = AvatarOptions.fromJson(reader); } else if ("input_audio_transcription".equals(fieldName)) { deserializedVoiceLiveSessionResponse.inputAudioTranscription = AudioInputTranscriptionOptions.fromJson(reader); @@ -877,4 +821,60 @@ public VoiceLiveSessionResponse setMetadata(Map metadata) { this.metadata = metadata; return this; } + + /* + * The animation configuration for the session. + */ + @Generated + private AnimationOptions animationOptions; + + /* + * Configuration for avatar streaming and behavior during the session. + */ + @Generated + private AvatarOptions avatarOptions; + + /** + * Get the animationOptions property: The animation configuration for the session. + * + * @return the animationOptions value. + */ + @Generated + public AnimationOptions getAnimationOptions() { + return this.animationOptions; + } + + /** + * Set the animationOptions property: The animation configuration for the session. + * + * @param animationOptions the animationOptions value to set. + * @return the VoiceLiveSessionResponse object itself. + */ + @Generated + public VoiceLiveSessionResponse setAnimationOptions(AnimationOptions animationOptions) { + this.animationOptions = animationOptions; + return this; + } + + /** + * Get the avatarOptions property: Configuration for avatar streaming and behavior during the session. + * + * @return the avatarOptions value. + */ + @Generated + public AvatarOptions getAvatarOptions() { + return this.avatarOptions; + } + + /** + * Set the avatarOptions property: Configuration for avatar streaming and behavior during the session. + * + * @param avatarOptions the avatarOptions value to set. + * @return the VoiceLiveSessionResponse object itself. + */ + @Generated + public VoiceLiveSessionResponse setAvatarOptions(AvatarOptions avatarOptions) { + this.avatarOptions = avatarOptions; + return this; + } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveToolDefinition.java b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveToolDefinition.java index dae0cd192f44..a03c0370410b 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveToolDefinition.java +++ b/sdk/voicelive/azure-ai-voicelive/src/main/java/com/azure/ai/voicelive/models/VoiceLiveToolDefinition.java @@ -80,7 +80,7 @@ public static VoiceLiveToolDefinition fromJson(JsonReader jsonReader) throws IOE if ("function".equals(discriminatorValue)) { return VoiceLiveFunctionDefinition.fromJson(readerToUse.reset()); } else if ("mcp".equals(discriminatorValue)) { - return MCPServer.fromJson(readerToUse.reset()); + return McpServer.fromJson(readerToUse.reset()); } else { return fromJsonKnownDiscriminator(readerToUse.reset()); } diff --git a/sdk/voicelive/azure-ai-voicelive/src/main/resources/META-INF/azure-ai-voicelive_metadata.json b/sdk/voicelive/azure-ai-voicelive/src/main/resources/META-INF/azure-ai-voicelive_metadata.json index d9c9db952ffc..350696f07ce2 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/main/resources/META-INF/azure-ai-voicelive_metadata.json +++ b/sdk/voicelive/azure-ai-voicelive/src/main/resources/META-INF/azure-ai-voicelive_metadata.json @@ -1 +1 @@ -{"flavor":"azure","apiVersions":{"VoiceLive":"2026-04-10"},"crossLanguagePackageId":"VoiceLive","crossLanguageVersion":"86299c665983","crossLanguageDefinitions":{"com.azure.ai.voicelive.models.AnimationOptions":"VoiceLive.Animation","com.azure.ai.voicelive.models.AnimationOutputType":"VoiceLive.AnimationOutputType","com.azure.ai.voicelive.models.AssistantMessageItem":"VoiceLive.AssistantMessageItem","com.azure.ai.voicelive.models.AudioEchoCancellation":"VoiceLive.AudioEchoCancellation","com.azure.ai.voicelive.models.AudioInputTranscriptionOptions":"VoiceLive.AudioInputTranscriptionOptions","com.azure.ai.voicelive.models.AudioInputTranscriptionOptionsModel":"VoiceLive.AudioInputTranscriptionOptions.model.anonymous","com.azure.ai.voicelive.models.AudioNoiseReduction":"VoiceLive.AudioNoiseReduction","com.azure.ai.voicelive.models.AudioNoiseReductionType":"VoiceLive.AudioNoiseReduction.type.anonymous","com.azure.ai.voicelive.models.AudioTimestampType":"VoiceLive.AudioTimestampType","com.azure.ai.voicelive.models.AvatarConfigTypes":"VoiceLive.AvatarConfigTypes","com.azure.ai.voicelive.models.AvatarConfiguration":"VoiceLive.AvatarConfig","com.azure.ai.voicelive.models.AvatarOutputProtocol":"VoiceLive.AvatarOutputProtocol","com.azure.ai.voicelive.models.AzureAvatarVoiceSyncVoice":"VoiceLive.AzureAvatarVoiceSyncVoice","com.azure.ai.voicelive.models.AzureCustomVoice":"VoiceLive.AzureCustomVoice","com.azure.ai.voicelive.models.AzurePersonalVoice":"VoiceLive.AzurePersonalVoice","com.azure.ai.voicelive.models.AzureSemanticEouDetection":"VoiceLive.AzureSemanticDetection","com.azure.ai.voicelive.models.AzureSemanticEouDetectionEn":"VoiceLive.AzureSemanticDetectionEn","com.azure.ai.voicelive.models.AzureSemanticEouDetectionMultilingual":"VoiceLive.AzureSemanticDetectionMultilingual","com.azure.ai.voicelive.models.AzureSemanticVadTurnDetection":"VoiceLive.AzureSemanticVad","com.azure.ai.voicelive.models.AzureSemanticVadTurnDetectionEn":"VoiceLive.AzureSemanticVadEn","com.azure.ai.voicelive.models.AzureSemanticVadTurnDetectionMultilingual":"VoiceLive.AzureSemanticVadMultilingual","com.azure.ai.voicelive.models.AzureStandardVoice":"VoiceLive.AzureStandardVoice","com.azure.ai.voicelive.models.AzureVoice":"VoiceLive.AzureVoice","com.azure.ai.voicelive.models.AzureVoiceType":"VoiceLive.AzureVoiceType","com.azure.ai.voicelive.models.CachedTokenDetails":"VoiceLive.CachedTokenDetails","com.azure.ai.voicelive.models.ClientEvent":"VoiceLive.ClientEvent","com.azure.ai.voicelive.models.ClientEventConversationItemCreate":"VoiceLive.ClientEventConversationItemCreate","com.azure.ai.voicelive.models.ClientEventConversationItemDelete":"VoiceLive.ClientEventConversationItemDelete","com.azure.ai.voicelive.models.ClientEventConversationItemRetrieve":"VoiceLive.ClientEventConversationItemRetrieve","com.azure.ai.voicelive.models.ClientEventConversationItemTruncate":"VoiceLive.ClientEventConversationItemTruncate","com.azure.ai.voicelive.models.ClientEventInputAudioBufferAppend":"VoiceLive.ClientEventInputAudioBufferAppend","com.azure.ai.voicelive.models.ClientEventInputAudioBufferClear":"VoiceLive.ClientEventInputAudioBufferClear","com.azure.ai.voicelive.models.ClientEventInputAudioBufferCommit":"VoiceLive.ClientEventInputAudioBufferCommit","com.azure.ai.voicelive.models.ClientEventInputAudioClear":"VoiceLive.ClientEventInputAudioClear","com.azure.ai.voicelive.models.ClientEventInputAudioTurnAppend":"VoiceLive.ClientEventInputAudioTurnAppend","com.azure.ai.voicelive.models.ClientEventInputAudioTurnCancel":"VoiceLive.ClientEventInputAudioTurnCancel","com.azure.ai.voicelive.models.ClientEventInputAudioTurnEnd":"VoiceLive.ClientEventInputAudioTurnEnd","com.azure.ai.voicelive.models.ClientEventInputAudioTurnStart":"VoiceLive.ClientEventInputAudioTurnStart","com.azure.ai.voicelive.models.ClientEventOutputAudioBufferClear":"VoiceLive.ClientEventOutputAudioBufferClear","com.azure.ai.voicelive.models.ClientEventResponseCancel":"VoiceLive.ClientEventResponseCancel","com.azure.ai.voicelive.models.ClientEventResponseCreate":"VoiceLive.ClientEventResponseCreate","com.azure.ai.voicelive.models.ClientEventSessionAvatarConnect":"VoiceLive.ClientEventSessionAvatarConnect","com.azure.ai.voicelive.models.ClientEventSessionUpdate":"VoiceLive.ClientEventSessionUpdate","com.azure.ai.voicelive.models.ClientEventType":"VoiceLive.ClientEventType","com.azure.ai.voicelive.models.ContentPartType":"VoiceLive.ContentPartType","com.azure.ai.voicelive.models.ConversationRequestItem":"VoiceLive.ConversationRequestItem","com.azure.ai.voicelive.models.EouDetection":"VoiceLive.EouDetection","com.azure.ai.voicelive.models.EouDetectionModel":"VoiceLive.EouDetection.model.anonymous","com.azure.ai.voicelive.models.EouThresholdLevel":"VoiceLive.EouThresholdLevel","com.azure.ai.voicelive.models.FileSearchResult":"VoiceLive.FileSearchResult","com.azure.ai.voicelive.models.FunctionCallItem":"VoiceLive.FunctionCallItem","com.azure.ai.voicelive.models.FunctionCallOutputItem":"VoiceLive.FunctionCallOutputItem","com.azure.ai.voicelive.models.IceServer":"VoiceLive.IceServer","com.azure.ai.voicelive.models.InputAudioContentPart":"VoiceLive.InputAudioContentPart","com.azure.ai.voicelive.models.InputAudioFormat":"VoiceLive.InputAudioFormat","com.azure.ai.voicelive.models.InputTextContentPart":"VoiceLive.InputTextContentPart","com.azure.ai.voicelive.models.InputTokenDetails":"VoiceLive.InputTokenDetails","com.azure.ai.voicelive.models.InteractionModality":"VoiceLive.Modality","com.azure.ai.voicelive.models.InterimResponseConfigBase":"VoiceLive.InterimResponseConfigBase","com.azure.ai.voicelive.models.InterimResponseConfigType":"VoiceLive.InterimResponseConfigType","com.azure.ai.voicelive.models.InterimResponseTrigger":"VoiceLive.InterimResponseTrigger","com.azure.ai.voicelive.models.ItemParamStatus":"VoiceLive.ItemParamStatus","com.azure.ai.voicelive.models.ItemType":"VoiceLive.ItemType","com.azure.ai.voicelive.models.LlmInterimResponseConfig":"VoiceLive.LlmInterimResponseConfig","com.azure.ai.voicelive.models.LogProbProperties":"VoiceLive.LogProbProperties","com.azure.ai.voicelive.models.MCPApprovalResponseRequestItem":"VoiceLive.MCPApprovalResponseRequestItem","com.azure.ai.voicelive.models.MCPApprovalType":"VoiceLive.MCPApprovalType","com.azure.ai.voicelive.models.MCPServer":"VoiceLive.MCPServer","com.azure.ai.voicelive.models.MCPTool":"VoiceLive.MCPTool","com.azure.ai.voicelive.models.MessageContentPart":"VoiceLive.MessageContentPart","com.azure.ai.voicelive.models.MessageItem":"VoiceLive.MessageItem","com.azure.ai.voicelive.models.OpenAIVoice":"VoiceLive.OpenAIVoice","com.azure.ai.voicelive.models.OpenAIVoiceName":"VoiceLive.OAIVoice","com.azure.ai.voicelive.models.OutputAudioFormat":"VoiceLive.OutputAudioFormat","com.azure.ai.voicelive.models.OutputTextContentPart":"VoiceLive.OutputTextContentPart","com.azure.ai.voicelive.models.OutputTokenDetails":"VoiceLive.OutputTokenDetails","com.azure.ai.voicelive.models.PersonalVoiceModels":"VoiceLive.PersonalVoiceModels","com.azure.ai.voicelive.models.PhotoAvatarBaseModes":"VoiceLive.PhotoAvatarBaseModes","com.azure.ai.voicelive.models.ReasoningEffort":"VoiceLive.ReasoningEffort","com.azure.ai.voicelive.models.RequestAudioContentPart":"VoiceLive.RequestAudioContentPart","com.azure.ai.voicelive.models.RequestImageContentPart":"VoiceLive.RequestImageContentPart","com.azure.ai.voicelive.models.RequestImageContentPartDetail":"VoiceLive.RequestImageContentPartDetail","com.azure.ai.voicelive.models.RequestTextContentPart":"VoiceLive.RequestTextContentPart","com.azure.ai.voicelive.models.RespondingAgentOptions":"VoiceLive.AgentConfig","com.azure.ai.voicelive.models.ResponseAudioContentPart":"VoiceLive.ResponseAudioContentPart","com.azure.ai.voicelive.models.ResponseCancelledDetails":"VoiceLive.ResponseCancelledDetails","com.azure.ai.voicelive.models.ResponseCancelledDetailsReason":"VoiceLive.ResponseCancelledDetails.reason.anonymous","com.azure.ai.voicelive.models.ResponseCreateParams":"VoiceLive.ResponseCreateParams","com.azure.ai.voicelive.models.ResponseFailedDetails":"VoiceLive.ResponseFailedDetails","com.azure.ai.voicelive.models.ResponseFileSearchCallItem":"VoiceLive.ResponseFileSearchCallItem","com.azure.ai.voicelive.models.ResponseFileSearchCallItemStatus":"VoiceLive.ResponseFileSearchCallItem.status.anonymous","com.azure.ai.voicelive.models.ResponseFunctionCallItem":"VoiceLive.ResponseFunctionCallItem","com.azure.ai.voicelive.models.ResponseFunctionCallOutputItem":"VoiceLive.ResponseFunctionCallOutputItem","com.azure.ai.voicelive.models.ResponseIncompleteDetails":"VoiceLive.ResponseIncompleteDetails","com.azure.ai.voicelive.models.ResponseIncompleteDetailsReason":"VoiceLive.ResponseIncompleteDetails.reason.anonymous","com.azure.ai.voicelive.models.ResponseItemObject":null,"com.azure.ai.voicelive.models.ResponseMCPApprovalRequestItem":"VoiceLive.ResponseMCPApprovalRequestItem","com.azure.ai.voicelive.models.ResponseMCPApprovalResponseItem":"VoiceLive.ResponseMCPApprovalResponseItem","com.azure.ai.voicelive.models.ResponseMCPCallItem":"VoiceLive.ResponseMCPCallItem","com.azure.ai.voicelive.models.ResponseMCPListToolItem":"VoiceLive.ResponseMCPListToolItem","com.azure.ai.voicelive.models.ResponseMessageRole":"VoiceLive.MessageRole","com.azure.ai.voicelive.models.ResponseObject":null,"com.azure.ai.voicelive.models.ResponseStatusDetails":"VoiceLive.ResponseStatusDetails","com.azure.ai.voicelive.models.ResponseTextContentPart":"VoiceLive.ResponseTextContentPart","com.azure.ai.voicelive.models.ResponseTokenStatistics":"VoiceLive.TokenUsage","com.azure.ai.voicelive.models.ResponseWebSearchCallItem":"VoiceLive.ResponseWebSearchCallItem","com.azure.ai.voicelive.models.ResponseWebSearchCallItemStatus":"VoiceLive.ResponseWebSearchCallItem.status.anonymous","com.azure.ai.voicelive.models.Scene":"VoiceLive.Scene","com.azure.ai.voicelive.models.ServerEventMcpListToolsCompleted":"VoiceLive.ServerEventMcpListToolsCompleted","com.azure.ai.voicelive.models.ServerEventMcpListToolsFailed":"VoiceLive.ServerEventMcpListToolsFailed","com.azure.ai.voicelive.models.ServerEventMcpListToolsInProgress":"VoiceLive.ServerEventMcpListToolsInProgress","com.azure.ai.voicelive.models.ServerEventOutputAudioBufferCleared":"VoiceLive.ServerEventOutputAudioBufferCleared","com.azure.ai.voicelive.models.ServerEventResponseAudioTranscriptAnnotationAdded":"VoiceLive.ServerEventResponseAudioTranscriptAnnotationAdded","com.azure.ai.voicelive.models.ServerEventResponseFileSearchCallCompleted":"VoiceLive.ServerEventResponseFileSearchCallCompleted","com.azure.ai.voicelive.models.ServerEventResponseFileSearchCallInProgress":"VoiceLive.ServerEventResponseFileSearchCallInProgress","com.azure.ai.voicelive.models.ServerEventResponseFileSearchCallSearching":"VoiceLive.ServerEventResponseFileSearchCallSearching","com.azure.ai.voicelive.models.ServerEventResponseMcpCallArgumentsDelta":"VoiceLive.ServerEventResponseMcpCallArgumentsDelta","com.azure.ai.voicelive.models.ServerEventResponseMcpCallArgumentsDone":"VoiceLive.ServerEventResponseMcpCallArgumentsDone","com.azure.ai.voicelive.models.ServerEventResponseMcpCallCompleted":"VoiceLive.ServerEventResponseMcpCallCompleted","com.azure.ai.voicelive.models.ServerEventResponseMcpCallFailed":"VoiceLive.ServerEventResponseMcpCallFailed","com.azure.ai.voicelive.models.ServerEventResponseMcpCallInProgress":"VoiceLive.ServerEventResponseMcpCallInProgress","com.azure.ai.voicelive.models.ServerEventResponseVideoDelta":"VoiceLive.ServerEventResponseVideoDelta","com.azure.ai.voicelive.models.ServerEventResponseWebSearchCallCompleted":"VoiceLive.ServerEventResponseWebSearchCallCompleted","com.azure.ai.voicelive.models.ServerEventResponseWebSearchCallInProgress":"VoiceLive.ServerEventResponseWebSearchCallInProgress","com.azure.ai.voicelive.models.ServerEventResponseWebSearchCallSearching":"VoiceLive.ServerEventResponseWebSearchCallSearching","com.azure.ai.voicelive.models.ServerEventSessionAvatarSwitchToIdle":"VoiceLive.ServerEventSessionAvatarSwitchToIdle","com.azure.ai.voicelive.models.ServerEventSessionAvatarSwitchToSpeaking":"VoiceLive.ServerEventSessionAvatarSwitchToSpeaking","com.azure.ai.voicelive.models.ServerEventType":"VoiceLive.ServerEventType","com.azure.ai.voicelive.models.ServerEventWarning":"VoiceLive.ServerEventWarning","com.azure.ai.voicelive.models.ServerEventWarningDetails":"VoiceLive.ServerEventWarningDetails","com.azure.ai.voicelive.models.ServerVadTurnDetection":"VoiceLive.ServerVad","com.azure.ai.voicelive.models.SessionIncludeOption":"VoiceLive.SessionIncludeOption","com.azure.ai.voicelive.models.SessionResponse":"VoiceLive.Response","com.azure.ai.voicelive.models.SessionResponseItem":"VoiceLive.ResponseItem","com.azure.ai.voicelive.models.SessionResponseItemStatus":"VoiceLive.ResponseItemStatus","com.azure.ai.voicelive.models.SessionResponseMessageItem":"VoiceLive.ResponseMessageItem","com.azure.ai.voicelive.models.SessionResponseStatus":"VoiceLive.ResponseStatus","com.azure.ai.voicelive.models.SessionUpdate":"VoiceLive.ServerEvent","com.azure.ai.voicelive.models.SessionUpdateAvatarConnecting":"VoiceLive.ServerEventSessionAvatarConnecting","com.azure.ai.voicelive.models.SessionUpdateConversationItemCreated":"VoiceLive.ServerEventConversationItemCreated","com.azure.ai.voicelive.models.SessionUpdateConversationItemDeleted":"VoiceLive.ServerEventConversationItemDeleted","com.azure.ai.voicelive.models.SessionUpdateConversationItemInputAudioTranscriptionCompleted":"VoiceLive.ServerEventConversationItemInputAudioTranscriptionCompleted","com.azure.ai.voicelive.models.SessionUpdateConversationItemInputAudioTranscriptionDelta":"VoiceLive.ServerEventConversationItemInputAudioTranscriptionDelta","com.azure.ai.voicelive.models.SessionUpdateConversationItemInputAudioTranscriptionFailed":"VoiceLive.ServerEventConversationItemInputAudioTranscriptionFailed","com.azure.ai.voicelive.models.SessionUpdateConversationItemRetrieved":"VoiceLive.ServerEventConversationItemRetrieved","com.azure.ai.voicelive.models.SessionUpdateConversationItemTruncated":"VoiceLive.ServerEventConversationItemTruncated","com.azure.ai.voicelive.models.SessionUpdateError":"VoiceLive.ServerEventError","com.azure.ai.voicelive.models.SessionUpdateErrorDetails":"VoiceLive.ServerEventErrorDetails","com.azure.ai.voicelive.models.SessionUpdateInputAudioBufferCleared":"VoiceLive.ServerEventInputAudioBufferCleared","com.azure.ai.voicelive.models.SessionUpdateInputAudioBufferCommitted":"VoiceLive.ServerEventInputAudioBufferCommitted","com.azure.ai.voicelive.models.SessionUpdateInputAudioBufferSpeechStarted":"VoiceLive.ServerEventInputAudioBufferSpeechStarted","com.azure.ai.voicelive.models.SessionUpdateInputAudioBufferSpeechStopped":"VoiceLive.ServerEventInputAudioBufferSpeechStopped","com.azure.ai.voicelive.models.SessionUpdateResponseAnimationBlendshapeDelta":"VoiceLive.ServerEventResponseAnimationBlendshapeDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAnimationBlendshapeDone":"VoiceLive.ServerEventResponseAnimationBlendshapeDone","com.azure.ai.voicelive.models.SessionUpdateResponseAnimationVisemeDelta":"VoiceLive.ServerEventResponseAnimationVisemeDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAnimationVisemeDone":"VoiceLive.ServerEventResponseAnimationVisemeDone","com.azure.ai.voicelive.models.SessionUpdateResponseAudioDelta":"VoiceLive.ServerEventResponseAudioDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAudioDone":"VoiceLive.ServerEventResponseAudioDone","com.azure.ai.voicelive.models.SessionUpdateResponseAudioTimestampDelta":"VoiceLive.ServerEventResponseAudioTimestampDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAudioTimestampDone":"VoiceLive.ServerEventResponseAudioTimestampDone","com.azure.ai.voicelive.models.SessionUpdateResponseAudioTranscriptDelta":"VoiceLive.ServerEventResponseAudioTranscriptDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAudioTranscriptDone":"VoiceLive.ServerEventResponseAudioTranscriptDone","com.azure.ai.voicelive.models.SessionUpdateResponseContentPartAdded":"VoiceLive.ServerEventResponseContentPartAdded","com.azure.ai.voicelive.models.SessionUpdateResponseContentPartDone":"VoiceLive.ServerEventResponseContentPartDone","com.azure.ai.voicelive.models.SessionUpdateResponseCreated":"VoiceLive.ServerEventResponseCreated","com.azure.ai.voicelive.models.SessionUpdateResponseDone":"VoiceLive.ServerEventResponseDone","com.azure.ai.voicelive.models.SessionUpdateResponseFunctionCallArgumentsDelta":"VoiceLive.ServerEventResponseFunctionCallArgumentsDelta","com.azure.ai.voicelive.models.SessionUpdateResponseFunctionCallArgumentsDone":"VoiceLive.ServerEventResponseFunctionCallArgumentsDone","com.azure.ai.voicelive.models.SessionUpdateResponseOutputItemAdded":"VoiceLive.ServerEventResponseOutputItemAdded","com.azure.ai.voicelive.models.SessionUpdateResponseOutputItemDone":"VoiceLive.ServerEventResponseOutputItemDone","com.azure.ai.voicelive.models.SessionUpdateResponseTextDelta":"VoiceLive.ServerEventResponseTextDelta","com.azure.ai.voicelive.models.SessionUpdateResponseTextDone":"VoiceLive.ServerEventResponseTextDone","com.azure.ai.voicelive.models.SessionUpdateSessionCreated":"VoiceLive.ServerEventSessionCreated","com.azure.ai.voicelive.models.SessionUpdateSessionUpdated":"VoiceLive.ServerEventSessionUpdated","com.azure.ai.voicelive.models.StaticInterimResponseConfig":"VoiceLive.StaticInterimResponseConfig","com.azure.ai.voicelive.models.SystemMessageItem":"VoiceLive.SystemMessageItem","com.azure.ai.voicelive.models.ToolChoiceFunctionSelection":"VoiceLive.ToolChoiceFunctionObject","com.azure.ai.voicelive.models.ToolChoiceLiteral":"VoiceLive.ToolChoiceLiteral","com.azure.ai.voicelive.models.ToolChoiceSelection":"VoiceLive.ToolChoiceObject","com.azure.ai.voicelive.models.ToolType":"VoiceLive.ToolType","com.azure.ai.voicelive.models.TranscriptionPhrase":"VoiceLive.TranscriptionPhrase","com.azure.ai.voicelive.models.TranscriptionWord":"VoiceLive.TranscriptionWord","com.azure.ai.voicelive.models.TurnDetection":"VoiceLive.TurnDetection","com.azure.ai.voicelive.models.TurnDetectionType":"VoiceLive.TurnDetectionType","com.azure.ai.voicelive.models.UserMessageItem":"VoiceLive.UserMessageItem","com.azure.ai.voicelive.models.VideoBackground":"VoiceLive.Background","com.azure.ai.voicelive.models.VideoCrop":"VoiceLive.VideoCrop","com.azure.ai.voicelive.models.VideoParams":"VoiceLive.VideoParams","com.azure.ai.voicelive.models.VideoParamsCodec":null,"com.azure.ai.voicelive.models.VideoResolution":"VoiceLive.VideoResolution","com.azure.ai.voicelive.models.VoiceLiveContentPart":"VoiceLive.ContentPart","com.azure.ai.voicelive.models.VoiceLiveErrorDetails":"VoiceLive.VoiceLiveErrorDetails","com.azure.ai.voicelive.models.VoiceLiveFunctionDefinition":"VoiceLive.FunctionTool","com.azure.ai.voicelive.models.VoiceLiveSessionOptions":"VoiceLive.RequestSession","com.azure.ai.voicelive.models.VoiceLiveSessionResponse":"VoiceLive.ResponseSession","com.azure.ai.voicelive.models.VoiceLiveToolDefinition":"VoiceLive.Tool"},"generatedFiles":["src/main/java/com/azure/ai/voicelive/implementation/package-info.java","src/main/java/com/azure/ai/voicelive/models/AnimationOptions.java","src/main/java/com/azure/ai/voicelive/models/AnimationOutputType.java","src/main/java/com/azure/ai/voicelive/models/AssistantMessageItem.java","src/main/java/com/azure/ai/voicelive/models/AudioEchoCancellation.java","src/main/java/com/azure/ai/voicelive/models/AudioInputTranscriptionOptions.java","src/main/java/com/azure/ai/voicelive/models/AudioInputTranscriptionOptionsModel.java","src/main/java/com/azure/ai/voicelive/models/AudioNoiseReduction.java","src/main/java/com/azure/ai/voicelive/models/AudioNoiseReductionType.java","src/main/java/com/azure/ai/voicelive/models/AudioTimestampType.java","src/main/java/com/azure/ai/voicelive/models/AvatarConfigTypes.java","src/main/java/com/azure/ai/voicelive/models/AvatarConfiguration.java","src/main/java/com/azure/ai/voicelive/models/AvatarOutputProtocol.java","src/main/java/com/azure/ai/voicelive/models/AzureAvatarVoiceSyncVoice.java","src/main/java/com/azure/ai/voicelive/models/AzureCustomVoice.java","src/main/java/com/azure/ai/voicelive/models/AzurePersonalVoice.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticEouDetection.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticEouDetectionEn.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticEouDetectionMultilingual.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticVadTurnDetection.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticVadTurnDetectionEn.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticVadTurnDetectionMultilingual.java","src/main/java/com/azure/ai/voicelive/models/AzureStandardVoice.java","src/main/java/com/azure/ai/voicelive/models/AzureVoice.java","src/main/java/com/azure/ai/voicelive/models/AzureVoiceType.java","src/main/java/com/azure/ai/voicelive/models/CachedTokenDetails.java","src/main/java/com/azure/ai/voicelive/models/ClientEvent.java","src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemCreate.java","src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemDelete.java","src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemRetrieve.java","src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemTruncate.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferAppend.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferClear.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferCommit.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioClear.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnAppend.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnCancel.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnEnd.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnStart.java","src/main/java/com/azure/ai/voicelive/models/ClientEventOutputAudioBufferClear.java","src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCancel.java","src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCreate.java","src/main/java/com/azure/ai/voicelive/models/ClientEventSessionAvatarConnect.java","src/main/java/com/azure/ai/voicelive/models/ClientEventSessionUpdate.java","src/main/java/com/azure/ai/voicelive/models/ClientEventType.java","src/main/java/com/azure/ai/voicelive/models/ContentPartType.java","src/main/java/com/azure/ai/voicelive/models/ConversationRequestItem.java","src/main/java/com/azure/ai/voicelive/models/EouDetection.java","src/main/java/com/azure/ai/voicelive/models/EouDetectionModel.java","src/main/java/com/azure/ai/voicelive/models/EouThresholdLevel.java","src/main/java/com/azure/ai/voicelive/models/FileSearchResult.java","src/main/java/com/azure/ai/voicelive/models/FunctionCallItem.java","src/main/java/com/azure/ai/voicelive/models/FunctionCallOutputItem.java","src/main/java/com/azure/ai/voicelive/models/IceServer.java","src/main/java/com/azure/ai/voicelive/models/InputAudioContentPart.java","src/main/java/com/azure/ai/voicelive/models/InputAudioFormat.java","src/main/java/com/azure/ai/voicelive/models/InputTextContentPart.java","src/main/java/com/azure/ai/voicelive/models/InputTokenDetails.java","src/main/java/com/azure/ai/voicelive/models/InteractionModality.java","src/main/java/com/azure/ai/voicelive/models/InterimResponseConfigBase.java","src/main/java/com/azure/ai/voicelive/models/InterimResponseConfigType.java","src/main/java/com/azure/ai/voicelive/models/InterimResponseTrigger.java","src/main/java/com/azure/ai/voicelive/models/ItemParamStatus.java","src/main/java/com/azure/ai/voicelive/models/ItemType.java","src/main/java/com/azure/ai/voicelive/models/LlmInterimResponseConfig.java","src/main/java/com/azure/ai/voicelive/models/LogProbProperties.java","src/main/java/com/azure/ai/voicelive/models/MCPApprovalResponseRequestItem.java","src/main/java/com/azure/ai/voicelive/models/MCPApprovalType.java","src/main/java/com/azure/ai/voicelive/models/MCPServer.java","src/main/java/com/azure/ai/voicelive/models/MCPTool.java","src/main/java/com/azure/ai/voicelive/models/MessageContentPart.java","src/main/java/com/azure/ai/voicelive/models/MessageItem.java","src/main/java/com/azure/ai/voicelive/models/OpenAIVoice.java","src/main/java/com/azure/ai/voicelive/models/OpenAIVoiceName.java","src/main/java/com/azure/ai/voicelive/models/OutputAudioFormat.java","src/main/java/com/azure/ai/voicelive/models/OutputTextContentPart.java","src/main/java/com/azure/ai/voicelive/models/OutputTokenDetails.java","src/main/java/com/azure/ai/voicelive/models/PersonalVoiceModels.java","src/main/java/com/azure/ai/voicelive/models/PhotoAvatarBaseModes.java","src/main/java/com/azure/ai/voicelive/models/ReasoningEffort.java","src/main/java/com/azure/ai/voicelive/models/RequestAudioContentPart.java","src/main/java/com/azure/ai/voicelive/models/RequestImageContentPart.java","src/main/java/com/azure/ai/voicelive/models/RequestImageContentPartDetail.java","src/main/java/com/azure/ai/voicelive/models/RequestTextContentPart.java","src/main/java/com/azure/ai/voicelive/models/RespondingAgentOptions.java","src/main/java/com/azure/ai/voicelive/models/ResponseAudioContentPart.java","src/main/java/com/azure/ai/voicelive/models/ResponseCancelledDetails.java","src/main/java/com/azure/ai/voicelive/models/ResponseCancelledDetailsReason.java","src/main/java/com/azure/ai/voicelive/models/ResponseCreateParams.java","src/main/java/com/azure/ai/voicelive/models/ResponseFailedDetails.java","src/main/java/com/azure/ai/voicelive/models/ResponseFileSearchCallItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseFileSearchCallItemStatus.java","src/main/java/com/azure/ai/voicelive/models/ResponseFunctionCallItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseFunctionCallOutputItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseIncompleteDetails.java","src/main/java/com/azure/ai/voicelive/models/ResponseIncompleteDetailsReason.java","src/main/java/com/azure/ai/voicelive/models/ResponseItemObject.java","src/main/java/com/azure/ai/voicelive/models/ResponseMCPApprovalRequestItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseMCPApprovalResponseItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseMCPCallItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseMCPListToolItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseMessageRole.java","src/main/java/com/azure/ai/voicelive/models/ResponseObject.java","src/main/java/com/azure/ai/voicelive/models/ResponseStatusDetails.java","src/main/java/com/azure/ai/voicelive/models/ResponseTextContentPart.java","src/main/java/com/azure/ai/voicelive/models/ResponseTokenStatistics.java","src/main/java/com/azure/ai/voicelive/models/ResponseWebSearchCallItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseWebSearchCallItemStatus.java","src/main/java/com/azure/ai/voicelive/models/Scene.java","src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsCompleted.java","src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsFailed.java","src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsInProgress.java","src/main/java/com/azure/ai/voicelive/models/ServerEventOutputAudioBufferCleared.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseAudioTranscriptAnnotationAdded.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallCompleted.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallInProgress.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallSearching.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDelta.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDone.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallCompleted.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallFailed.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallInProgress.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseVideoDelta.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallCompleted.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallInProgress.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallSearching.java","src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToIdle.java","src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToSpeaking.java","src/main/java/com/azure/ai/voicelive/models/ServerEventType.java","src/main/java/com/azure/ai/voicelive/models/ServerEventWarning.java","src/main/java/com/azure/ai/voicelive/models/ServerEventWarningDetails.java","src/main/java/com/azure/ai/voicelive/models/ServerVadTurnDetection.java","src/main/java/com/azure/ai/voicelive/models/SessionIncludeOption.java","src/main/java/com/azure/ai/voicelive/models/SessionResponse.java","src/main/java/com/azure/ai/voicelive/models/SessionResponseItem.java","src/main/java/com/azure/ai/voicelive/models/SessionResponseItemStatus.java","src/main/java/com/azure/ai/voicelive/models/SessionResponseMessageItem.java","src/main/java/com/azure/ai/voicelive/models/SessionResponseStatus.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdate.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateAvatarConnecting.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemCreated.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemDeleted.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionCompleted.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionFailed.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemRetrieved.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemTruncated.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateError.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateErrorDetails.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCleared.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCommitted.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStarted.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStopped.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartAdded.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseCreated.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemAdded.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionCreated.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionUpdated.java","src/main/java/com/azure/ai/voicelive/models/StaticInterimResponseConfig.java","src/main/java/com/azure/ai/voicelive/models/SystemMessageItem.java","src/main/java/com/azure/ai/voicelive/models/ToolChoiceFunctionSelection.java","src/main/java/com/azure/ai/voicelive/models/ToolChoiceLiteral.java","src/main/java/com/azure/ai/voicelive/models/ToolChoiceSelection.java","src/main/java/com/azure/ai/voicelive/models/ToolType.java","src/main/java/com/azure/ai/voicelive/models/TranscriptionPhrase.java","src/main/java/com/azure/ai/voicelive/models/TranscriptionWord.java","src/main/java/com/azure/ai/voicelive/models/TurnDetection.java","src/main/java/com/azure/ai/voicelive/models/TurnDetectionType.java","src/main/java/com/azure/ai/voicelive/models/UserMessageItem.java","src/main/java/com/azure/ai/voicelive/models/VideoBackground.java","src/main/java/com/azure/ai/voicelive/models/VideoCrop.java","src/main/java/com/azure/ai/voicelive/models/VideoParams.java","src/main/java/com/azure/ai/voicelive/models/VideoParamsCodec.java","src/main/java/com/azure/ai/voicelive/models/VideoResolution.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveContentPart.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveErrorDetails.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveFunctionDefinition.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionOptions.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionResponse.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveToolDefinition.java","src/main/java/com/azure/ai/voicelive/models/package-info.java","src/main/java/com/azure/ai/voicelive/package-info.java","src/main/java/module-info.java"]} \ No newline at end of file +{"flavor":"azure","apiVersions":{"VoiceLive":"2026-04-10"},"crossLanguagePackageId":"VoiceLive","crossLanguageVersion":"a27d51d71448","crossLanguageDefinitions":{"com.azure.ai.voicelive.models.AnimationOptions":"VoiceLive.Animation","com.azure.ai.voicelive.models.AnimationOutputType":"VoiceLive.AnimationOutputType","com.azure.ai.voicelive.models.AssistantMessageItem":"VoiceLive.AssistantMessageItem","com.azure.ai.voicelive.models.AudioEchoCancellation":"VoiceLive.AudioEchoCancellation","com.azure.ai.voicelive.models.AudioInputTranscriptionOptions":"VoiceLive.AudioInputTranscriptionOptions","com.azure.ai.voicelive.models.AudioInputTranscriptionOptionsModel":"VoiceLive.AudioInputTranscriptionOptions.model.anonymous","com.azure.ai.voicelive.models.AudioNoiseReduction":"VoiceLive.AudioNoiseReduction","com.azure.ai.voicelive.models.AudioNoiseReductionType":"VoiceLive.AudioNoiseReduction.type.anonymous","com.azure.ai.voicelive.models.AudioTimestampType":"VoiceLive.AudioTimestampType","com.azure.ai.voicelive.models.AvatarConfigTypes":"VoiceLive.AvatarConfigTypes","com.azure.ai.voicelive.models.AvatarOptions":"VoiceLive.AvatarConfig","com.azure.ai.voicelive.models.AvatarOutputProtocol":"VoiceLive.AvatarOutputProtocol","com.azure.ai.voicelive.models.AzureAvatarVoiceSyncVoice":"VoiceLive.AzureAvatarVoiceSyncVoice","com.azure.ai.voicelive.models.AzureCustomVoice":"VoiceLive.AzureCustomVoice","com.azure.ai.voicelive.models.AzurePersonalVoice":"VoiceLive.AzurePersonalVoice","com.azure.ai.voicelive.models.AzureSemanticEouDetection":"VoiceLive.AzureSemanticDetection","com.azure.ai.voicelive.models.AzureSemanticEouDetectionEn":"VoiceLive.AzureSemanticDetectionEn","com.azure.ai.voicelive.models.AzureSemanticEouDetectionMultilingual":"VoiceLive.AzureSemanticDetectionMultilingual","com.azure.ai.voicelive.models.AzureSemanticVadTurnDetection":"VoiceLive.AzureSemanticVad","com.azure.ai.voicelive.models.AzureSemanticVadTurnDetectionEn":"VoiceLive.AzureSemanticVadEn","com.azure.ai.voicelive.models.AzureSemanticVadTurnDetectionMultilingual":"VoiceLive.AzureSemanticVadMultilingual","com.azure.ai.voicelive.models.AzureStandardVoice":"VoiceLive.AzureStandardVoice","com.azure.ai.voicelive.models.AzureVoice":"VoiceLive.AzureVoice","com.azure.ai.voicelive.models.AzureVoiceType":"VoiceLive.AzureVoiceType","com.azure.ai.voicelive.models.CachedTokenDetails":"VoiceLive.CachedTokenDetails","com.azure.ai.voicelive.models.ClientEventConversationItemCreate":"VoiceLive.ClientEventConversationItemCreate","com.azure.ai.voicelive.models.ClientEventConversationItemDelete":"VoiceLive.ClientEventConversationItemDelete","com.azure.ai.voicelive.models.ClientEventConversationItemRetrieve":"VoiceLive.ClientEventConversationItemRetrieve","com.azure.ai.voicelive.models.ClientEventConversationItemTruncate":"VoiceLive.ClientEventConversationItemTruncate","com.azure.ai.voicelive.models.ClientEventInputAudioBufferAppend":"VoiceLive.ClientEventInputAudioBufferAppend","com.azure.ai.voicelive.models.ClientEventInputAudioBufferClear":"VoiceLive.ClientEventInputAudioBufferClear","com.azure.ai.voicelive.models.ClientEventInputAudioBufferCommit":"VoiceLive.ClientEventInputAudioBufferCommit","com.azure.ai.voicelive.models.ClientEventInputAudioClear":"VoiceLive.ClientEventInputAudioClear","com.azure.ai.voicelive.models.ClientEventInputAudioTurnAppend":"VoiceLive.ClientEventInputAudioTurnAppend","com.azure.ai.voicelive.models.ClientEventInputAudioTurnCancel":"VoiceLive.ClientEventInputAudioTurnCancel","com.azure.ai.voicelive.models.ClientEventInputAudioTurnEnd":"VoiceLive.ClientEventInputAudioTurnEnd","com.azure.ai.voicelive.models.ClientEventInputAudioTurnStart":"VoiceLive.ClientEventInputAudioTurnStart","com.azure.ai.voicelive.models.ClientEventOutputAudioBufferClear":"VoiceLive.ClientEventOutputAudioBufferClear","com.azure.ai.voicelive.models.ClientEventResponseCancel":"VoiceLive.ClientEventResponseCancel","com.azure.ai.voicelive.models.ClientEventResponseCreate":"VoiceLive.ClientEventResponseCreate","com.azure.ai.voicelive.models.ClientEventSessionAvatarConnect":"VoiceLive.ClientEventSessionAvatarConnect","com.azure.ai.voicelive.models.ClientEventSessionUpdate":"VoiceLive.ClientEventSessionUpdate","com.azure.ai.voicelive.models.ClientEventType":"VoiceLive.ClientEventType","com.azure.ai.voicelive.models.ContentPartType":"VoiceLive.ContentPartType","com.azure.ai.voicelive.models.ConversationRequestItem":"VoiceLive.ConversationRequestItem","com.azure.ai.voicelive.models.EouDetection":"VoiceLive.EouDetection","com.azure.ai.voicelive.models.EouDetectionModel":"VoiceLive.EouDetection.model.anonymous","com.azure.ai.voicelive.models.EouThresholdLevel":"VoiceLive.EouThresholdLevel","com.azure.ai.voicelive.models.FileSearchResult":"VoiceLive.FileSearchResult","com.azure.ai.voicelive.models.FunctionCallItem":"VoiceLive.FunctionCallItem","com.azure.ai.voicelive.models.FunctionCallOutputItem":"VoiceLive.FunctionCallOutputItem","com.azure.ai.voicelive.models.IceServer":"VoiceLive.IceServer","com.azure.ai.voicelive.models.InputAudioContentPart":"VoiceLive.InputAudioContentPart","com.azure.ai.voicelive.models.InputAudioFormat":"VoiceLive.InputAudioFormat","com.azure.ai.voicelive.models.InputTextContentPart":"VoiceLive.InputTextContentPart","com.azure.ai.voicelive.models.InputTokenDetails":"VoiceLive.InputTokenDetails","com.azure.ai.voicelive.models.InteractionModality":"VoiceLive.Modality","com.azure.ai.voicelive.models.InterimResponseConfigBase":"VoiceLive.InterimResponseConfigBase","com.azure.ai.voicelive.models.InterimResponseConfigType":"VoiceLive.InterimResponseConfigType","com.azure.ai.voicelive.models.InterimResponseTrigger":"VoiceLive.InterimResponseTrigger","com.azure.ai.voicelive.models.ItemParamStatus":"VoiceLive.ItemParamStatus","com.azure.ai.voicelive.models.ItemType":"VoiceLive.ItemType","com.azure.ai.voicelive.models.LlmInterimResponseConfig":"VoiceLive.LlmInterimResponseConfig","com.azure.ai.voicelive.models.LogProbProperties":"VoiceLive.LogProbProperties","com.azure.ai.voicelive.models.McpApprovalResponseRequestItem":"VoiceLive.MCPApprovalResponseRequestItem","com.azure.ai.voicelive.models.McpApprovalType":"VoiceLive.MCPApprovalType","com.azure.ai.voicelive.models.McpServer":"VoiceLive.MCPServer","com.azure.ai.voicelive.models.McpTool":"VoiceLive.MCPTool","com.azure.ai.voicelive.models.MessageContentPart":"VoiceLive.MessageContentPart","com.azure.ai.voicelive.models.MessageItem":"VoiceLive.MessageItem","com.azure.ai.voicelive.models.OpenAIVoice":"VoiceLive.OpenAIVoice","com.azure.ai.voicelive.models.OpenAIVoiceName":"VoiceLive.OAIVoice","com.azure.ai.voicelive.models.OutputAudioFormat":"VoiceLive.OutputAudioFormat","com.azure.ai.voicelive.models.OutputTextContentPart":"VoiceLive.OutputTextContentPart","com.azure.ai.voicelive.models.OutputTokenDetails":"VoiceLive.OutputTokenDetails","com.azure.ai.voicelive.models.PersonalVoiceModels":"VoiceLive.PersonalVoiceModels","com.azure.ai.voicelive.models.PhotoAvatarBaseModes":"VoiceLive.PhotoAvatarBaseModes","com.azure.ai.voicelive.models.ReasoningEffort":"VoiceLive.ReasoningEffort","com.azure.ai.voicelive.models.RequestAudioContentPart":"VoiceLive.RequestAudioContentPart","com.azure.ai.voicelive.models.RequestImageContentPart":"VoiceLive.RequestImageContentPart","com.azure.ai.voicelive.models.RequestImageContentPartDetail":"VoiceLive.RequestImageContentPartDetail","com.azure.ai.voicelive.models.RequestTextContentPart":"VoiceLive.RequestTextContentPart","com.azure.ai.voicelive.models.RespondingAgentOptions":"VoiceLive.AgentConfig","com.azure.ai.voicelive.models.ResponseAudioContentPart":"VoiceLive.ResponseAudioContentPart","com.azure.ai.voicelive.models.ResponseCancelledDetails":"VoiceLive.ResponseCancelledDetails","com.azure.ai.voicelive.models.ResponseCancelledDetailsReason":"VoiceLive.ResponseCancelledDetails.reason.anonymous","com.azure.ai.voicelive.models.ResponseCreateParams":"VoiceLive.ResponseCreateParams","com.azure.ai.voicelive.models.ResponseFailedDetails":"VoiceLive.ResponseFailedDetails","com.azure.ai.voicelive.models.ResponseFileSearchCallItem":"VoiceLive.ResponseFileSearchCallItem","com.azure.ai.voicelive.models.ResponseFileSearchCallItemStatus":"VoiceLive.ResponseFileSearchCallItem.status.anonymous","com.azure.ai.voicelive.models.ResponseFunctionCallItem":"VoiceLive.ResponseFunctionCallItem","com.azure.ai.voicelive.models.ResponseFunctionCallOutputItem":"VoiceLive.ResponseFunctionCallOutputItem","com.azure.ai.voicelive.models.ResponseIncompleteDetails":"VoiceLive.ResponseIncompleteDetails","com.azure.ai.voicelive.models.ResponseIncompleteDetailsReason":"VoiceLive.ResponseIncompleteDetails.reason.anonymous","com.azure.ai.voicelive.models.ResponseItemObject":null,"com.azure.ai.voicelive.models.ResponseMcpApprovalRequestItem":"VoiceLive.ResponseMCPApprovalRequestItem","com.azure.ai.voicelive.models.ResponseMcpApprovalResponseItem":"VoiceLive.ResponseMCPApprovalResponseItem","com.azure.ai.voicelive.models.ResponseMcpCallItem":"VoiceLive.ResponseMCPCallItem","com.azure.ai.voicelive.models.ResponseMcpListToolItem":"VoiceLive.ResponseMCPListToolItem","com.azure.ai.voicelive.models.ResponseMessageRole":"VoiceLive.MessageRole","com.azure.ai.voicelive.models.ResponseObject":null,"com.azure.ai.voicelive.models.ResponseStatusDetails":"VoiceLive.ResponseStatusDetails","com.azure.ai.voicelive.models.ResponseTextContentPart":"VoiceLive.ResponseTextContentPart","com.azure.ai.voicelive.models.ResponseTokenStatistics":"VoiceLive.TokenUsage","com.azure.ai.voicelive.models.ResponseWebSearchCallItem":"VoiceLive.ResponseWebSearchCallItem","com.azure.ai.voicelive.models.ResponseWebSearchCallItemStatus":"VoiceLive.ResponseWebSearchCallItem.status.anonymous","com.azure.ai.voicelive.models.Scene":"VoiceLive.Scene","com.azure.ai.voicelive.models.ServerEventMcpListToolsCompleted":"VoiceLive.ServerEventMcpListToolsCompleted","com.azure.ai.voicelive.models.ServerEventMcpListToolsFailed":"VoiceLive.ServerEventMcpListToolsFailed","com.azure.ai.voicelive.models.ServerEventMcpListToolsInProgress":"VoiceLive.ServerEventMcpListToolsInProgress","com.azure.ai.voicelive.models.ServerEventOutputAudioBufferCleared":"VoiceLive.ServerEventOutputAudioBufferCleared","com.azure.ai.voicelive.models.ServerEventResponseAudioTranscriptAnnotationAdded":"VoiceLive.ServerEventResponseAudioTranscriptAnnotationAdded","com.azure.ai.voicelive.models.ServerEventResponseFileSearchCallCompleted":"VoiceLive.ServerEventResponseFileSearchCallCompleted","com.azure.ai.voicelive.models.ServerEventResponseFileSearchCallInProgress":"VoiceLive.ServerEventResponseFileSearchCallInProgress","com.azure.ai.voicelive.models.ServerEventResponseFileSearchCallSearching":"VoiceLive.ServerEventResponseFileSearchCallSearching","com.azure.ai.voicelive.models.ServerEventResponseMcpCallArgumentsDelta":"VoiceLive.ServerEventResponseMcpCallArgumentsDelta","com.azure.ai.voicelive.models.ServerEventResponseMcpCallArgumentsDone":"VoiceLive.ServerEventResponseMcpCallArgumentsDone","com.azure.ai.voicelive.models.ServerEventResponseMcpCallCompleted":"VoiceLive.ServerEventResponseMcpCallCompleted","com.azure.ai.voicelive.models.ServerEventResponseMcpCallFailed":"VoiceLive.ServerEventResponseMcpCallFailed","com.azure.ai.voicelive.models.ServerEventResponseMcpCallInProgress":"VoiceLive.ServerEventResponseMcpCallInProgress","com.azure.ai.voicelive.models.ServerEventResponseVideoDelta":"VoiceLive.ServerEventResponseVideoDelta","com.azure.ai.voicelive.models.ServerEventResponseWebSearchCallCompleted":"VoiceLive.ServerEventResponseWebSearchCallCompleted","com.azure.ai.voicelive.models.ServerEventResponseWebSearchCallInProgress":"VoiceLive.ServerEventResponseWebSearchCallInProgress","com.azure.ai.voicelive.models.ServerEventResponseWebSearchCallSearching":"VoiceLive.ServerEventResponseWebSearchCallSearching","com.azure.ai.voicelive.models.ServerEventSessionAvatarSwitchToIdle":"VoiceLive.ServerEventSessionAvatarSwitchToIdle","com.azure.ai.voicelive.models.ServerEventSessionAvatarSwitchToSpeaking":"VoiceLive.ServerEventSessionAvatarSwitchToSpeaking","com.azure.ai.voicelive.models.ServerEventType":"VoiceLive.ServerEventType","com.azure.ai.voicelive.models.ServerEventWarning":"VoiceLive.ServerEventWarning","com.azure.ai.voicelive.models.ServerEventWarningDetails":"VoiceLive.ServerEventWarningDetails","com.azure.ai.voicelive.models.ServerVadTurnDetection":"VoiceLive.ServerVad","com.azure.ai.voicelive.models.SessionClientEvent":"VoiceLive.ClientEvent","com.azure.ai.voicelive.models.SessionIncludeOption":"VoiceLive.SessionIncludeOption","com.azure.ai.voicelive.models.SessionResponse":"VoiceLive.Response","com.azure.ai.voicelive.models.SessionResponseItem":"VoiceLive.ResponseItem","com.azure.ai.voicelive.models.SessionResponseItemStatus":"VoiceLive.ResponseItemStatus","com.azure.ai.voicelive.models.SessionResponseMessageItem":"VoiceLive.ResponseMessageItem","com.azure.ai.voicelive.models.SessionResponseStatus":"VoiceLive.ResponseStatus","com.azure.ai.voicelive.models.SessionServerEvent":"VoiceLive.ServerEvent","com.azure.ai.voicelive.models.SessionUpdateAvatarConnecting":"VoiceLive.ServerEventSessionAvatarConnecting","com.azure.ai.voicelive.models.SessionUpdateConversationItemCreated":"VoiceLive.ServerEventConversationItemCreated","com.azure.ai.voicelive.models.SessionUpdateConversationItemDeleted":"VoiceLive.ServerEventConversationItemDeleted","com.azure.ai.voicelive.models.SessionUpdateConversationItemInputAudioTranscriptionCompleted":"VoiceLive.ServerEventConversationItemInputAudioTranscriptionCompleted","com.azure.ai.voicelive.models.SessionUpdateConversationItemInputAudioTranscriptionDelta":"VoiceLive.ServerEventConversationItemInputAudioTranscriptionDelta","com.azure.ai.voicelive.models.SessionUpdateConversationItemInputAudioTranscriptionFailed":"VoiceLive.ServerEventConversationItemInputAudioTranscriptionFailed","com.azure.ai.voicelive.models.SessionUpdateConversationItemRetrieved":"VoiceLive.ServerEventConversationItemRetrieved","com.azure.ai.voicelive.models.SessionUpdateConversationItemTruncated":"VoiceLive.ServerEventConversationItemTruncated","com.azure.ai.voicelive.models.SessionUpdateError":"VoiceLive.ServerEventError","com.azure.ai.voicelive.models.SessionUpdateErrorDetails":"VoiceLive.ServerEventErrorDetails","com.azure.ai.voicelive.models.SessionUpdateInputAudioBufferCleared":"VoiceLive.ServerEventInputAudioBufferCleared","com.azure.ai.voicelive.models.SessionUpdateInputAudioBufferCommitted":"VoiceLive.ServerEventInputAudioBufferCommitted","com.azure.ai.voicelive.models.SessionUpdateInputAudioBufferSpeechStarted":"VoiceLive.ServerEventInputAudioBufferSpeechStarted","com.azure.ai.voicelive.models.SessionUpdateInputAudioBufferSpeechStopped":"VoiceLive.ServerEventInputAudioBufferSpeechStopped","com.azure.ai.voicelive.models.SessionUpdateResponseAnimationBlendshapeDelta":"VoiceLive.ServerEventResponseAnimationBlendshapeDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAnimationBlendshapeDone":"VoiceLive.ServerEventResponseAnimationBlendshapeDone","com.azure.ai.voicelive.models.SessionUpdateResponseAnimationVisemeDelta":"VoiceLive.ServerEventResponseAnimationVisemeDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAnimationVisemeDone":"VoiceLive.ServerEventResponseAnimationVisemeDone","com.azure.ai.voicelive.models.SessionUpdateResponseAudioDelta":"VoiceLive.ServerEventResponseAudioDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAudioDone":"VoiceLive.ServerEventResponseAudioDone","com.azure.ai.voicelive.models.SessionUpdateResponseAudioTimestampDelta":"VoiceLive.ServerEventResponseAudioTimestampDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAudioTimestampDone":"VoiceLive.ServerEventResponseAudioTimestampDone","com.azure.ai.voicelive.models.SessionUpdateResponseAudioTranscriptDelta":"VoiceLive.ServerEventResponseAudioTranscriptDelta","com.azure.ai.voicelive.models.SessionUpdateResponseAudioTranscriptDone":"VoiceLive.ServerEventResponseAudioTranscriptDone","com.azure.ai.voicelive.models.SessionUpdateResponseContentPartAdded":"VoiceLive.ServerEventResponseContentPartAdded","com.azure.ai.voicelive.models.SessionUpdateResponseContentPartDone":"VoiceLive.ServerEventResponseContentPartDone","com.azure.ai.voicelive.models.SessionUpdateResponseCreated":"VoiceLive.ServerEventResponseCreated","com.azure.ai.voicelive.models.SessionUpdateResponseDone":"VoiceLive.ServerEventResponseDone","com.azure.ai.voicelive.models.SessionUpdateResponseFunctionCallArgumentsDelta":"VoiceLive.ServerEventResponseFunctionCallArgumentsDelta","com.azure.ai.voicelive.models.SessionUpdateResponseFunctionCallArgumentsDone":"VoiceLive.ServerEventResponseFunctionCallArgumentsDone","com.azure.ai.voicelive.models.SessionUpdateResponseOutputItemAdded":"VoiceLive.ServerEventResponseOutputItemAdded","com.azure.ai.voicelive.models.SessionUpdateResponseOutputItemDone":"VoiceLive.ServerEventResponseOutputItemDone","com.azure.ai.voicelive.models.SessionUpdateResponseTextDelta":"VoiceLive.ServerEventResponseTextDelta","com.azure.ai.voicelive.models.SessionUpdateResponseTextDone":"VoiceLive.ServerEventResponseTextDone","com.azure.ai.voicelive.models.SessionUpdateSessionCreated":"VoiceLive.ServerEventSessionCreated","com.azure.ai.voicelive.models.SessionUpdateSessionUpdated":"VoiceLive.ServerEventSessionUpdated","com.azure.ai.voicelive.models.StaticInterimResponseConfig":"VoiceLive.StaticInterimResponseConfig","com.azure.ai.voicelive.models.SystemMessageItem":"VoiceLive.SystemMessageItem","com.azure.ai.voicelive.models.ToolChoiceFunctionSelection":"VoiceLive.ToolChoiceFunctionObject","com.azure.ai.voicelive.models.ToolChoiceLiteral":"VoiceLive.ToolChoiceLiteral","com.azure.ai.voicelive.models.ToolChoiceSelection":"VoiceLive.ToolChoiceObject","com.azure.ai.voicelive.models.ToolType":"VoiceLive.ToolType","com.azure.ai.voicelive.models.TranscriptionPhrase":"VoiceLive.TranscriptionPhrase","com.azure.ai.voicelive.models.TranscriptionWord":"VoiceLive.TranscriptionWord","com.azure.ai.voicelive.models.TurnDetection":"VoiceLive.TurnDetection","com.azure.ai.voicelive.models.TurnDetectionType":"VoiceLive.TurnDetectionType","com.azure.ai.voicelive.models.UserMessageItem":"VoiceLive.UserMessageItem","com.azure.ai.voicelive.models.VideoBackground":"VoiceLive.Background","com.azure.ai.voicelive.models.VideoCrop":"VoiceLive.VideoCrop","com.azure.ai.voicelive.models.VideoParams":"VoiceLive.VideoParams","com.azure.ai.voicelive.models.VideoParamsCodec":null,"com.azure.ai.voicelive.models.VideoResolution":"VoiceLive.VideoResolution","com.azure.ai.voicelive.models.VoiceLiveContentPart":"VoiceLive.ContentPart","com.azure.ai.voicelive.models.VoiceLiveErrorDetails":"VoiceLive.VoiceLiveErrorDetails","com.azure.ai.voicelive.models.VoiceLiveFunctionDefinition":"VoiceLive.FunctionTool","com.azure.ai.voicelive.models.VoiceLiveSessionOptions":"VoiceLive.RequestSession","com.azure.ai.voicelive.models.VoiceLiveSessionResponse":"VoiceLive.ResponseSession","com.azure.ai.voicelive.models.VoiceLiveToolDefinition":"VoiceLive.Tool"},"generatedFiles":["src/main/java/com/azure/ai/voicelive/implementation/package-info.java","src/main/java/com/azure/ai/voicelive/models/AnimationOptions.java","src/main/java/com/azure/ai/voicelive/models/AnimationOutputType.java","src/main/java/com/azure/ai/voicelive/models/AssistantMessageItem.java","src/main/java/com/azure/ai/voicelive/models/AudioEchoCancellation.java","src/main/java/com/azure/ai/voicelive/models/AudioInputTranscriptionOptions.java","src/main/java/com/azure/ai/voicelive/models/AudioInputTranscriptionOptionsModel.java","src/main/java/com/azure/ai/voicelive/models/AudioNoiseReduction.java","src/main/java/com/azure/ai/voicelive/models/AudioNoiseReductionType.java","src/main/java/com/azure/ai/voicelive/models/AudioTimestampType.java","src/main/java/com/azure/ai/voicelive/models/AvatarConfigTypes.java","src/main/java/com/azure/ai/voicelive/models/AvatarOptions.java","src/main/java/com/azure/ai/voicelive/models/AvatarOutputProtocol.java","src/main/java/com/azure/ai/voicelive/models/AzureAvatarVoiceSyncVoice.java","src/main/java/com/azure/ai/voicelive/models/AzureCustomVoice.java","src/main/java/com/azure/ai/voicelive/models/AzurePersonalVoice.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticEouDetection.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticEouDetectionEn.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticEouDetectionMultilingual.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticVadTurnDetection.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticVadTurnDetectionEn.java","src/main/java/com/azure/ai/voicelive/models/AzureSemanticVadTurnDetectionMultilingual.java","src/main/java/com/azure/ai/voicelive/models/AzureStandardVoice.java","src/main/java/com/azure/ai/voicelive/models/AzureVoice.java","src/main/java/com/azure/ai/voicelive/models/AzureVoiceType.java","src/main/java/com/azure/ai/voicelive/models/CachedTokenDetails.java","src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemCreate.java","src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemDelete.java","src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemRetrieve.java","src/main/java/com/azure/ai/voicelive/models/ClientEventConversationItemTruncate.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferAppend.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferClear.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioBufferCommit.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioClear.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnAppend.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnCancel.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnEnd.java","src/main/java/com/azure/ai/voicelive/models/ClientEventInputAudioTurnStart.java","src/main/java/com/azure/ai/voicelive/models/ClientEventOutputAudioBufferClear.java","src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCancel.java","src/main/java/com/azure/ai/voicelive/models/ClientEventResponseCreate.java","src/main/java/com/azure/ai/voicelive/models/ClientEventSessionAvatarConnect.java","src/main/java/com/azure/ai/voicelive/models/ClientEventSessionUpdate.java","src/main/java/com/azure/ai/voicelive/models/ClientEventType.java","src/main/java/com/azure/ai/voicelive/models/ContentPartType.java","src/main/java/com/azure/ai/voicelive/models/ConversationRequestItem.java","src/main/java/com/azure/ai/voicelive/models/EouDetection.java","src/main/java/com/azure/ai/voicelive/models/EouDetectionModel.java","src/main/java/com/azure/ai/voicelive/models/EouThresholdLevel.java","src/main/java/com/azure/ai/voicelive/models/FileSearchResult.java","src/main/java/com/azure/ai/voicelive/models/FunctionCallItem.java","src/main/java/com/azure/ai/voicelive/models/FunctionCallOutputItem.java","src/main/java/com/azure/ai/voicelive/models/IceServer.java","src/main/java/com/azure/ai/voicelive/models/InputAudioContentPart.java","src/main/java/com/azure/ai/voicelive/models/InputAudioFormat.java","src/main/java/com/azure/ai/voicelive/models/InputTextContentPart.java","src/main/java/com/azure/ai/voicelive/models/InputTokenDetails.java","src/main/java/com/azure/ai/voicelive/models/InteractionModality.java","src/main/java/com/azure/ai/voicelive/models/InterimResponseConfigBase.java","src/main/java/com/azure/ai/voicelive/models/InterimResponseConfigType.java","src/main/java/com/azure/ai/voicelive/models/InterimResponseTrigger.java","src/main/java/com/azure/ai/voicelive/models/ItemParamStatus.java","src/main/java/com/azure/ai/voicelive/models/ItemType.java","src/main/java/com/azure/ai/voicelive/models/LlmInterimResponseConfig.java","src/main/java/com/azure/ai/voicelive/models/LogProbProperties.java","src/main/java/com/azure/ai/voicelive/models/McpApprovalResponseRequestItem.java","src/main/java/com/azure/ai/voicelive/models/McpApprovalType.java","src/main/java/com/azure/ai/voicelive/models/McpServer.java","src/main/java/com/azure/ai/voicelive/models/McpTool.java","src/main/java/com/azure/ai/voicelive/models/MessageContentPart.java","src/main/java/com/azure/ai/voicelive/models/MessageItem.java","src/main/java/com/azure/ai/voicelive/models/OpenAIVoice.java","src/main/java/com/azure/ai/voicelive/models/OpenAIVoiceName.java","src/main/java/com/azure/ai/voicelive/models/OutputAudioFormat.java","src/main/java/com/azure/ai/voicelive/models/OutputTextContentPart.java","src/main/java/com/azure/ai/voicelive/models/OutputTokenDetails.java","src/main/java/com/azure/ai/voicelive/models/PersonalVoiceModels.java","src/main/java/com/azure/ai/voicelive/models/PhotoAvatarBaseModes.java","src/main/java/com/azure/ai/voicelive/models/ReasoningEffort.java","src/main/java/com/azure/ai/voicelive/models/RequestAudioContentPart.java","src/main/java/com/azure/ai/voicelive/models/RequestImageContentPart.java","src/main/java/com/azure/ai/voicelive/models/RequestImageContentPartDetail.java","src/main/java/com/azure/ai/voicelive/models/RequestTextContentPart.java","src/main/java/com/azure/ai/voicelive/models/RespondingAgentOptions.java","src/main/java/com/azure/ai/voicelive/models/ResponseAudioContentPart.java","src/main/java/com/azure/ai/voicelive/models/ResponseCancelledDetails.java","src/main/java/com/azure/ai/voicelive/models/ResponseCancelledDetailsReason.java","src/main/java/com/azure/ai/voicelive/models/ResponseCreateParams.java","src/main/java/com/azure/ai/voicelive/models/ResponseFailedDetails.java","src/main/java/com/azure/ai/voicelive/models/ResponseFileSearchCallItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseFileSearchCallItemStatus.java","src/main/java/com/azure/ai/voicelive/models/ResponseFunctionCallItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseFunctionCallOutputItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseIncompleteDetails.java","src/main/java/com/azure/ai/voicelive/models/ResponseIncompleteDetailsReason.java","src/main/java/com/azure/ai/voicelive/models/ResponseItemObject.java","src/main/java/com/azure/ai/voicelive/models/ResponseMcpApprovalRequestItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseMcpApprovalResponseItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseMcpCallItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseMcpListToolItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseMessageRole.java","src/main/java/com/azure/ai/voicelive/models/ResponseObject.java","src/main/java/com/azure/ai/voicelive/models/ResponseStatusDetails.java","src/main/java/com/azure/ai/voicelive/models/ResponseTextContentPart.java","src/main/java/com/azure/ai/voicelive/models/ResponseTokenStatistics.java","src/main/java/com/azure/ai/voicelive/models/ResponseWebSearchCallItem.java","src/main/java/com/azure/ai/voicelive/models/ResponseWebSearchCallItemStatus.java","src/main/java/com/azure/ai/voicelive/models/Scene.java","src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsCompleted.java","src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsFailed.java","src/main/java/com/azure/ai/voicelive/models/ServerEventMcpListToolsInProgress.java","src/main/java/com/azure/ai/voicelive/models/ServerEventOutputAudioBufferCleared.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseAudioTranscriptAnnotationAdded.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallCompleted.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallInProgress.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseFileSearchCallSearching.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDelta.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallArgumentsDone.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallCompleted.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallFailed.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseMcpCallInProgress.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseVideoDelta.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallCompleted.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallInProgress.java","src/main/java/com/azure/ai/voicelive/models/ServerEventResponseWebSearchCallSearching.java","src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToIdle.java","src/main/java/com/azure/ai/voicelive/models/ServerEventSessionAvatarSwitchToSpeaking.java","src/main/java/com/azure/ai/voicelive/models/ServerEventType.java","src/main/java/com/azure/ai/voicelive/models/ServerEventWarning.java","src/main/java/com/azure/ai/voicelive/models/ServerEventWarningDetails.java","src/main/java/com/azure/ai/voicelive/models/ServerVadTurnDetection.java","src/main/java/com/azure/ai/voicelive/models/SessionClientEvent.java","src/main/java/com/azure/ai/voicelive/models/SessionIncludeOption.java","src/main/java/com/azure/ai/voicelive/models/SessionResponse.java","src/main/java/com/azure/ai/voicelive/models/SessionResponseItem.java","src/main/java/com/azure/ai/voicelive/models/SessionResponseItemStatus.java","src/main/java/com/azure/ai/voicelive/models/SessionResponseMessageItem.java","src/main/java/com/azure/ai/voicelive/models/SessionResponseStatus.java","src/main/java/com/azure/ai/voicelive/models/SessionServerEvent.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateAvatarConnecting.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemCreated.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemDeleted.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionCompleted.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemInputAudioTranscriptionFailed.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemRetrieved.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateConversationItemTruncated.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateError.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateErrorDetails.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCleared.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferCommitted.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStarted.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateInputAudioBufferSpeechStopped.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationBlendshapeDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAnimationVisemeDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTimestampDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseAudioTranscriptDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartAdded.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseContentPartDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseCreated.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseFunctionCallArgumentsDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemAdded.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseOutputItemDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDelta.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateResponseTextDone.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionCreated.java","src/main/java/com/azure/ai/voicelive/models/SessionUpdateSessionUpdated.java","src/main/java/com/azure/ai/voicelive/models/StaticInterimResponseConfig.java","src/main/java/com/azure/ai/voicelive/models/SystemMessageItem.java","src/main/java/com/azure/ai/voicelive/models/ToolChoiceFunctionSelection.java","src/main/java/com/azure/ai/voicelive/models/ToolChoiceLiteral.java","src/main/java/com/azure/ai/voicelive/models/ToolChoiceSelection.java","src/main/java/com/azure/ai/voicelive/models/ToolType.java","src/main/java/com/azure/ai/voicelive/models/TranscriptionPhrase.java","src/main/java/com/azure/ai/voicelive/models/TranscriptionWord.java","src/main/java/com/azure/ai/voicelive/models/TurnDetection.java","src/main/java/com/azure/ai/voicelive/models/TurnDetectionType.java","src/main/java/com/azure/ai/voicelive/models/UserMessageItem.java","src/main/java/com/azure/ai/voicelive/models/VideoBackground.java","src/main/java/com/azure/ai/voicelive/models/VideoCrop.java","src/main/java/com/azure/ai/voicelive/models/VideoParams.java","src/main/java/com/azure/ai/voicelive/models/VideoParamsCodec.java","src/main/java/com/azure/ai/voicelive/models/VideoResolution.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveContentPart.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveErrorDetails.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveFunctionDefinition.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionOptions.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveSessionResponse.java","src/main/java/com/azure/ai/voicelive/models/VoiceLiveToolDefinition.java","src/main/java/com/azure/ai/voicelive/models/package-info.java","src/main/java/com/azure/ai/voicelive/package-info.java","src/main/java/module-info.java"]} \ No newline at end of file diff --git a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/AgentV2Sample.java b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/AgentV2Sample.java index f6aaa185a126..80db8de02a96 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/AgentV2Sample.java +++ b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/AgentV2Sample.java @@ -17,7 +17,7 @@ import com.azure.ai.voicelive.models.OutputAudioFormat; import com.azure.ai.voicelive.models.ServerEventType; import com.azure.ai.voicelive.models.ServerVadTurnDetection; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import com.azure.ai.voicelive.models.SessionUpdateResponseAudioDelta; import com.azure.ai.voicelive.models.SessionUpdateConversationItemInputAudioTranscriptionCompleted; import com.azure.ai.voicelive.models.SessionUpdateResponseAudioTranscriptDone; @@ -235,12 +235,12 @@ void start() { // Create the VoiceLive client using DefaultAzureCredential (Entra ID). VoiceLiveAsyncClient client = new VoiceLiveClientBuilder() .endpoint(endpoint) - .serviceVersion(VoiceLiveServiceVersion.V2026_01_01_PREVIEW) + .serviceVersion(VoiceLiveServiceVersion.V2026_04_10) .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); // Connect using AgentSessionConfig. - client.startSession(agentConfig) + client.startSession(agentConfig, null) .flatMapMany(voiceLiveSession -> { System.out.println("Connected to VoiceLive service"); this.audioProcessor = new AudioProcessor(voiceLiveSession); @@ -313,7 +313,7 @@ private Mono configureSession(VoiceLiveSessionAsyncClient session) { return session.sendEvent(sessionUpdate).then(); } - private void handleEvent(SessionUpdate event) { + private void handleEvent(SessionServerEvent event) { ServerEventType eventType = event.getType(); if (eventType == ServerEventType.SESSION_UPDATED) { @@ -477,7 +477,7 @@ private void captureLoop() { // sendInputAudio returns a cold Mono - it must be subscribed for the // audio to actually be sent over the WebSocket. - session.sendInputAudio(audioData) + session.sendInputAudio(BinaryData.fromBytes(audioData)) .subscribe( noValueEmitted -> { /* sendInputAudio returns Mono; no onNext values are ever emitted */ }, error -> System.err.println("Error sending audio: " + error.getMessage()) diff --git a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/AudioPlaybackSample.java b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/AudioPlaybackSample.java index 40ddf63d832f..9f7b43e8fec7 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/AudioPlaybackSample.java +++ b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/AudioPlaybackSample.java @@ -13,7 +13,7 @@ import com.azure.ai.voicelive.models.OpenAIVoiceName; import com.azure.ai.voicelive.models.OutputAudioFormat; import com.azure.ai.voicelive.models.ServerEventType; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import com.azure.ai.voicelive.models.SessionUpdateError; import com.azure.ai.voicelive.models.SessionUpdateResponseAudioDelta; import com.azure.ai.voicelive.models.UserMessageItem; @@ -142,7 +142,7 @@ public static void main(String[] args) { final CountDownLatch completionLatch = new CountDownLatch(1); // Open a WebSocket session against the realtime model. - client.startSession("gpt-realtime") + client.startSession("gpt-realtime", null) // Configure the session (voice, modalities, audio formats, instructions). .flatMap(session -> { ClientEventSessionUpdate updateEvent = new ClientEventSessionUpdate(sessionOptions); @@ -313,7 +313,7 @@ private static void stopPlayback(BlockingQueue audioQueue, AtomicBoolean * @param audioQueue Queue to receive audio data * @param completionLatch Latch to release when the response is complete or fails */ - private static void handleEvent(SessionUpdate event, BlockingQueue audioQueue, + private static void handleEvent(SessionServerEvent event, BlockingQueue audioQueue, CountDownLatch completionLatch) { ServerEventType eventType = event.getType(); diff --git a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/BasicVoiceConversationSample.java b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/BasicVoiceConversationSample.java index e11c771de08f..7291330949f1 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/BasicVoiceConversationSample.java +++ b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/BasicVoiceConversationSample.java @@ -9,7 +9,7 @@ import com.azure.ai.voicelive.models.InputTextContentPart; import com.azure.ai.voicelive.models.InteractionModality; import com.azure.ai.voicelive.models.ServerEventType; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import com.azure.ai.voicelive.models.SessionUpdateError; import com.azure.ai.voicelive.models.SessionUpdateResponseTextDelta; import com.azure.ai.voicelive.models.UserMessageItem; @@ -49,7 +49,7 @@ * *

Reactor pattern used by this sample:

*
{@code
- * client.startSession(model)
+ * client.startSession(model, null)
  *     .flatMap(session -> session.sendEvent(sessionUpdate).thenReturn(session))
  *     .flatMap(session -> session.sendEvent(conversationItemCreate).thenReturn(session))
  *     .flatMap(session -> session.sendEvent(responseCreate).thenReturn(session))
@@ -117,7 +117,8 @@ public static void main(String[] args) {
         final CountDownLatch completionLatch = new CountDownLatch(1);
 
         // Open a WebSocket session against the realtime model.
-        client.startSession("gpt-realtime")
+        // Pass null when no VoiceLiveRequestOptions value is needed.
+        client.startSession("gpt-realtime", null)
             // Configure the session (text-only modality, instructions).
             .flatMap(session -> {
                 ClientEventSessionUpdate updateEvent = new ClientEventSessionUpdate(sessionOptions);
@@ -160,7 +161,7 @@ public static void main(String[] args) {
      * Handle incoming server events: print text deltas as they stream, and release the latch when
      * the response is complete or an error occurs.
      */
-    private static void handleEvent(SessionUpdate event, CountDownLatch completionLatch) {
+    private static void handleEvent(SessionServerEvent event, CountDownLatch completionLatch) {
         ServerEventType eventType = event.getType();
 
         if (eventType == ServerEventType.SESSION_CREATED) {
diff --git a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/FunctionCallingSample.java b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/FunctionCallingSample.java
index 67c23b671cc5..4d02fb4c4125 100644
--- a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/FunctionCallingSample.java
+++ b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/FunctionCallingSample.java
@@ -16,15 +16,14 @@
 import com.azure.ai.voicelive.models.InputAudioFormat;
 import com.azure.ai.voicelive.models.InteractionModality;
 import com.azure.ai.voicelive.models.ItemType;
-import com.azure.ai.voicelive.models.OpenAIVoice;
-import com.azure.ai.voicelive.models.OpenAIVoiceName;
 import com.azure.ai.voicelive.models.OutputAudioFormat;
 import com.azure.ai.voicelive.models.ResponseFunctionCallItem;
+import com.azure.ai.voicelive.models.AzureStandardVoice;
 import com.azure.ai.voicelive.models.SessionUpdateConversationItemCreated;
 import com.azure.ai.voicelive.models.SessionUpdateResponseFunctionCallArgumentsDone;
 import com.azure.ai.voicelive.models.ServerEventType;
 import com.azure.ai.voicelive.models.ServerVadTurnDetection;
-import com.azure.ai.voicelive.models.SessionUpdate;
+import com.azure.ai.voicelive.models.SessionServerEvent;
 import com.azure.ai.voicelive.models.SessionUpdateResponseAudioDelta;
 import com.azure.ai.voicelive.models.SessionUpdateSessionUpdated;
 import com.azure.ai.voicelive.models.VoiceLiveSessionOptions;
@@ -165,7 +164,7 @@ private static void runFunctionCallingSession(VoiceLiveAsyncClient client) throw
         // Start session. Session lifetime is local to this reactive chain — the session is
         // captured by the lambda passed to flatMapMany and then threaded into per-event handling
         // via flatMap, so no instance field or shared holder is needed.
-        client.startSession(DEFAULT_MODEL)
+        client.startSession(DEFAULT_MODEL, null)
             .flatMapMany(session -> {
                 System.out.println("✓ Session started successfully");
                 audioProcessorRef.set(new AudioProcessor(session));
@@ -231,7 +230,7 @@ private static ClientEventSessionUpdate createSessionConfigWithFunctions() {
                 + "When asked about weather, use the get_current_weather function. "
                 + "Acknowledge when you're calling a function and present the results naturally in your response."
             )
-            .setVoice(BinaryData.fromObject(new OpenAIVoice(OpenAIVoiceName.ALLOY)))
+            .setVoice(BinaryData.fromObject(new AzureStandardVoice("en-US-AvaNeural")))
             .setModalities(Arrays.asList(InteractionModality.TEXT, InteractionModality.AUDIO))
             .setInputAudioFormat(InputAudioFormat.PCM16)
             .setOutputAudioFormat(OutputAudioFormat.PCM16)
@@ -247,7 +246,7 @@ private static ClientEventSessionUpdate createSessionConfigWithFunctions() {
                 .setCreateResponse(true))
             .setTools(functionTools)
             .setInputAudioTranscription(
-                new AudioInputTranscriptionOptions(AudioInputTranscriptionOptionsModel.WHISPER_1)
+                new AudioInputTranscriptionOptions(AudioInputTranscriptionOptionsModel.WHISPER_1).setLanguage("en")
             );
 
         return new ClientEventSessionUpdate(sessionOptions);
@@ -302,7 +301,7 @@ private static VoiceLiveFunctionDefinition createGetCurrentWeatherFunction() {
      */
     private static Mono handleServerEvent(
         VoiceLiveSessionAsyncClient session,
-        SessionUpdate event,
+        SessionServerEvent event,
         AudioProcessor audioProcessor,
         Map pendingFunctionCalls
     ) {
@@ -503,11 +502,15 @@ void startCapture() {
                             int bytesRead = microphone.read(buffer, 0, buffer.length);
                             if (bytesRead > 0) {
                                 byte[] audioData = Arrays.copyOf(buffer, bytesRead);
-                                session.sendInputAudio(BinaryData.fromBytes(audioData))
-                                    .subscribe(
-                                        noValueEmitted -> { /* sendInputAudio returns Mono; no onNext values are ever emitted */ },
-                                        error -> System.err.println("Error sending audio: " + error.getMessage())
-                                    );
+                                // Block on this capture thread so sends are serialized; fire-and-forget
+                                // subscribes can flood the WebSocket send sink and trigger FAIL_OVERFLOW.
+                                try {
+                                    session.sendInputAudio(BinaryData.fromBytes(audioData)).block();
+                                } catch (Exception sendError) {
+                                    if (isCapturing.get()) {
+                                        System.err.println("Error sending audio: " + sendError.getMessage());
+                                    }
+                                }
                             }
                         } catch (Exception e) {
                             if (isCapturing.get()) {
diff --git a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/MCPSample.java b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/McpSample.java
similarity index 91%
rename from sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/MCPSample.java
rename to sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/McpSample.java
index 8d47ddff21f9..d628045c5b51 100644
--- a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/MCPSample.java
+++ b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/McpSample.java
@@ -8,13 +8,12 @@
 import com.azure.ai.voicelive.models.ClientEventSessionUpdate;
 import com.azure.ai.voicelive.models.InteractionModality;
 import com.azure.ai.voicelive.models.ItemType;
-import com.azure.ai.voicelive.models.MCPApprovalResponseRequestItem;
-import com.azure.ai.voicelive.models.MCPApprovalType;
-import com.azure.ai.voicelive.models.MCPServer;
-import com.azure.ai.voicelive.models.OpenAIVoice;
-import com.azure.ai.voicelive.models.OpenAIVoiceName;
-import com.azure.ai.voicelive.models.ResponseMCPApprovalRequestItem;
-import com.azure.ai.voicelive.models.ResponseMCPCallItem;
+import com.azure.ai.voicelive.models.McpApprovalResponseRequestItem;
+import com.azure.ai.voicelive.models.McpApprovalType;
+import com.azure.ai.voicelive.models.McpServer;
+import com.azure.ai.voicelive.models.AzureStandardVoice;
+import com.azure.ai.voicelive.models.ResponseMcpApprovalRequestItem;
+import com.azure.ai.voicelive.models.ResponseMcpCallItem;
 import com.azure.ai.voicelive.models.ServerEventResponseMcpCallArgumentsDone;
 import com.azure.ai.voicelive.models.ServerEventResponseMcpCallCompleted;
 import com.azure.ai.voicelive.models.SessionUpdateConversationItemCreated;
@@ -22,7 +21,7 @@
 import com.azure.ai.voicelive.models.SessionUpdateResponseOutputItemDone;
 import com.azure.ai.voicelive.models.ServerEventType;
 import com.azure.ai.voicelive.models.SessionResponseItem;
-import com.azure.ai.voicelive.models.SessionUpdate;
+import com.azure.ai.voicelive.models.SessionServerEvent;
 import com.azure.ai.voicelive.models.SessionUpdateSessionUpdated;
 import com.azure.ai.voicelive.models.VoiceLiveSessionOptions;
 import com.azure.ai.voicelive.models.VoiceLiveToolDefinition;
@@ -80,7 +79,7 @@
  *
  * 

How to Run:

*
{@code
- * mvn exec:java -Dexec.mainClass="com.azure.ai.voicelive.MCPSample" -Dexec.classpathScope=test
+ * mvn exec:java -Dexec.mainClass="com.azure.ai.voicelive.McpSample" -Dexec.classpathScope=test
  * }
* *

Try asking:

@@ -89,7 +88,7 @@ *
  • "Can you summarize Azure docs about VoiceLive?"
  • * */ -public final class MCPSample { +public final class McpSample { // Service configuration private static final String DEFAULT_MODEL = "gpt-realtime"; @@ -101,7 +100,7 @@ public final class MCPSample { private static final int SAMPLE_SIZE_BITS = 16; private static final int CHUNK_SIZE = 1200; - private MCPSample() { + private McpSample() { } /** @@ -120,7 +119,7 @@ public static void main(String[] args) { } try { - runMCPSample(endpoint); + runMcpSample(endpoint); } catch (Exception e) { System.err.println("❌ Error: " + e.getMessage()); e.printStackTrace(); @@ -131,7 +130,7 @@ public static void main(String[] args) { /** * Run the MCP sample. */ - private static void runMCPSample(String endpoint) { + private static void runMcpSample(String endpoint) { System.out.println("🔌 Connecting to VoiceLive API with MCP support..."); System.out.println("📡 Endpoint: " + endpoint); System.out.println("🤖 Model: " + DEFAULT_MODEL); @@ -146,14 +145,14 @@ private static void runMCPSample(String endpoint) { // Create the VoiceLive client using DefaultAzureCredential (Entra ID). VoiceLiveAsyncClient client = new VoiceLiveClientBuilder() .endpoint(endpoint) - .serviceVersion(VoiceLiveServiceVersion.V2026_01_01_PREVIEW) + .serviceVersion(VoiceLiveServiceVersion.V2026_04_10) .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); // Start the session. Session lifetime is local to this reactive chain — the session is // captured by the lambda passed to flatMapMany and then threaded into per-event handling // via flatMap, so no instance field or shared holder is needed. - client.startSession(DEFAULT_MODEL) + client.startSession(DEFAULT_MODEL, null) .flatMapMany(session -> { System.out.println("✓ Session started successfully"); audioProcessorRef.set(new AudioProcessor(session)); @@ -208,13 +207,13 @@ private static ClientEventSessionUpdate createSessionConfigWithMCPTools() { // Define MCP servers as tools List mcpTools = Arrays.asList( // DeepWiki MCP server - no approval required - new MCPServer("deepwiki", "https://mcp.deepwiki.com/mcp") + new McpServer("deepwiki", "https://mcp.deepwiki.com/mcp") .setAllowedTools(Arrays.asList("read_wiki_structure", "ask_question")) - .setRequireApproval(BinaryData.fromObject(MCPApprovalType.NEVER)), + .setRequireApproval(BinaryData.fromObject(McpApprovalType.NEVER)), // Azure documentation MCP server - approval always required - new MCPServer("azure_doc", "https://learn.microsoft.com/api/mcp") - .setRequireApproval(BinaryData.fromObject(MCPApprovalType.ALWAYS)) + new McpServer("azure_doc", "https://learn.microsoft.com/api/mcp") + .setRequireApproval(BinaryData.fromObject(McpApprovalType.ALWAYS)) ); // Create session options @@ -224,7 +223,7 @@ private static ClientEventSessionUpdate createSessionConfigWithMCPTools() { + "You can use MCP tools to search for information when needed. " + "When calling MCP tools, explain what you're doing and present the results naturally." ) - .setVoice(BinaryData.fromObject(new OpenAIVoice(OpenAIVoiceName.ALLOY))) + .setVoice(BinaryData.fromObject(new AzureStandardVoice("en-US-AvaNeural"))) .setModalities(Arrays.asList(InteractionModality.TEXT, InteractionModality.AUDIO)) .setInputAudioFormat(InputAudioFormat.PCM16) .setOutputAudioFormat(OutputAudioFormat.PCM16) @@ -239,7 +238,7 @@ private static ClientEventSessionUpdate createSessionConfigWithMCPTools() { .setCreateResponse(true)) .setTools(mcpTools) .setInputAudioTranscription( - new AudioInputTranscriptionOptions(AudioInputTranscriptionOptionsModel.WHISPER_1) + new AudioInputTranscriptionOptions(AudioInputTranscriptionOptionsModel.WHISPER_1).setLanguage("en") ); return new ClientEventSessionUpdate(sessionOptions); @@ -252,7 +251,7 @@ private static ClientEventSessionUpdate createSessionConfigWithMCPTools() { */ private static Mono handleServerEvent( VoiceLiveSessionAsyncClient session, - SessionUpdate event, + SessionServerEvent event, AtomicReference activeMCPCallId, AudioProcessor audioProcessor ) { @@ -326,7 +325,7 @@ private static Mono handleServerEvent( private static void handleOutputItemDone(SessionUpdateResponseOutputItemDone event) { SessionResponseItem item = event.getItem(); if (item != null && item.getType() == ItemType.MCP_CALL) { - ResponseMCPCallItem mcpCallItem = (ResponseMCPCallItem) item; + ResponseMcpCallItem mcpCallItem = (ResponseMcpCallItem) item; String output = mcpCallItem.getOutput(); if (output != null && !output.isEmpty()) { @@ -364,7 +363,7 @@ private static Mono handleConversationItemCreated( System.out.println("📋 MCP list tools requested: id=" + itemCreated.getItem().getId()); } else if (itemType == ItemType.MCP_CALL) { - ResponseMCPCallItem mcpCallItem = (ResponseMCPCallItem) itemCreated.getItem(); + ResponseMcpCallItem mcpCallItem = (ResponseMcpCallItem) itemCreated.getItem(); String callId = mcpCallItem.getId(); activeMCPCallId.set(callId); @@ -374,7 +373,7 @@ private static Mono handleConversationItemCreated( System.out.println(" Call ID: " + callId); } else if (itemType == ItemType.MCP_APPROVAL_REQUEST) { - return handleMCPApprovalRequest(session, (ResponseMCPApprovalRequestItem) itemCreated.getItem()); + return handleMCPApprovalRequest(session, (ResponseMcpApprovalRequestItem) itemCreated.getItem()); } return Mono.empty(); @@ -385,7 +384,7 @@ private static Mono handleConversationItemCreated( */ private static Mono handleMCPApprovalRequest( VoiceLiveSessionAsyncClient session, - ResponseMCPApprovalRequestItem approvalItem + ResponseMcpApprovalRequestItem approvalItem ) { String approvalId = approvalItem.getId(); String serverLabel = approvalItem.getServerLabel(); @@ -402,8 +401,8 @@ private static Mono handleMCPApprovalRequest( // Get user approval boolean approved = getUserApproval(); - MCPApprovalResponseRequestItem approvalResponse = - new MCPApprovalResponseRequestItem(approvalId, approved); + McpApprovalResponseRequestItem approvalResponse = + new McpApprovalResponseRequestItem(approvalId, approved); return session.sendEvent(new ClientEventConversationItemCreate().setItem(approvalResponse)); } @@ -506,13 +505,16 @@ void startCapture() { int bytesRead = microphone.read(buffer, 0, buffer.length); if (bytesRead > 0) { byte[] audioData = Arrays.copyOf(buffer, bytesRead); - // sendInputAudio returns a cold Mono - it must be subscribed - // for the audio to actually be sent over the WebSocket. - session.sendInputAudio(BinaryData.fromBytes(audioData)) - .subscribe( - noValueEmitted -> { /* sendInputAudio returns Mono; no onNext values are ever emitted */ }, - error -> System.err.println("Error sending audio: " + error.getMessage()) - ); + // sendInputAudio returns a cold Mono. Block on this capture thread so + // sends are serialized; otherwise fire-and-forget subscribes can flood + // the WebSocket send sink and trigger FAIL_OVERFLOW. + try { + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(); + } catch (Exception sendError) { + if (isCapturing.get()) { + System.err.println("Error sending audio: " + sendError.getMessage()); + } + } } } catch (Exception e) { if (isCapturing.get()) { diff --git a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/MicrophoneInputSample.java b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/MicrophoneInputSample.java index e383783b08bf..8d57511c2279 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/MicrophoneInputSample.java +++ b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/MicrophoneInputSample.java @@ -12,7 +12,7 @@ import com.azure.ai.voicelive.models.ResponseTextContentPart; import com.azure.ai.voicelive.models.ServerEventType; import com.azure.ai.voicelive.models.SessionResponseMessageItem; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import com.azure.ai.voicelive.models.SessionUpdateResponseDone; import com.azure.ai.voicelive.models.VoiceLiveSessionOptions; import com.azure.core.util.BinaryData; @@ -125,7 +125,7 @@ public static void main(String[] args) { // Start session. Session lifetime is local to this reactive chain; the session // instance is captured only inside the flatMapMany lambda. - client.startSession("gpt-realtime") + client.startSession("gpt-realtime", null) .flatMapMany(session -> { System.out.println("✓ Session started"); AudioProcessor audioProcessor = new AudioProcessor(session); @@ -187,7 +187,7 @@ private static boolean checkMicrophoneAvailable() { * * @param event The server event */ - private static void handleEvent(SessionUpdate event) { + private static void handleEvent(SessionServerEvent event) { ServerEventType eventType = event.getType(); if (eventType == ServerEventType.SESSION_CREATED) { diff --git a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/ReadmeSamples.java b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/ReadmeSamples.java index 9664b857b379..44bee3a9fbad 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/ReadmeSamples.java +++ b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/ReadmeSamples.java @@ -14,11 +14,11 @@ import com.azure.ai.voicelive.models.ClientEventResponseCreate; import com.azure.ai.voicelive.models.FunctionCallOutputItem; import com.azure.ai.voicelive.models.ItemType; -import com.azure.ai.voicelive.models.MCPApprovalResponseRequestItem; -import com.azure.ai.voicelive.models.MCPApprovalType; -import com.azure.ai.voicelive.models.MCPServer; +import com.azure.ai.voicelive.models.McpApprovalResponseRequestItem; +import com.azure.ai.voicelive.models.McpApprovalType; +import com.azure.ai.voicelive.models.McpServer; import com.azure.ai.voicelive.models.ResponseFunctionCallItem; -import com.azure.ai.voicelive.models.ResponseMCPApprovalRequestItem; +import com.azure.ai.voicelive.models.ResponseMcpApprovalRequestItem; import com.azure.ai.voicelive.models.SessionResponseItem; import com.azure.ai.voicelive.models.SessionUpdateConversationItemCreated; import com.azure.ai.voicelive.models.VoiceLiveFunctionDefinition; @@ -33,7 +33,7 @@ import com.azure.ai.voicelive.models.PersonalVoiceModels; import com.azure.ai.voicelive.models.ServerEventType; import com.azure.ai.voicelive.models.ServerVadTurnDetection; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import com.azure.ai.voicelive.models.SessionUpdateError; import com.azure.ai.voicelive.models.SessionUpdateResponseAudioDelta; import com.azure.ai.voicelive.models.SessionUpdateResponseOutputItemDone; @@ -99,8 +99,8 @@ public void readmeSamples() { .setInputAudioTranscription(transcriptionOptions) .setTurnDetection(turnDetection); - // Start session and handle events - client.startSession("gpt-realtime") + // Start session (null VoiceLiveRequestOptions), then handle events + client.startSession("gpt-realtime", null) .flatMap(session -> { // Send session configuration, then listen for events. ClientEventSessionUpdate updateEvent = new ClientEventSessionUpdate(sessionOptions); @@ -162,8 +162,8 @@ public void simpleSession() { .buildAsyncClient(); // BEGIN: com.azure.ai.voicelive.simple.session - // Start session with default options - client.startSession("gpt-realtime") + // Start session with a specific model; pass null when no VoiceLiveRequestOptions value is needed + client.startSession("gpt-realtime", null) .flatMap(session -> { System.out.println("Session started"); @@ -213,8 +213,8 @@ public void configureSessionOptions() { .setInputAudioTranscription(transcription) .setTurnDetection(turnDetection); - // Start session with options - client.startSession("gpt-realtime") + // Start session and then send session configuration + client.startSession("gpt-realtime", null) .flatMap(session -> { // Send session configuration ClientEventSessionUpdate updateEvent = new ClientEventSessionUpdate(options); @@ -236,7 +236,7 @@ public void sendAudioInput() throws IOException { .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - VoiceLiveSessionAsyncClient session = client.startSession("gpt-realtime").block(); + VoiceLiveSessionAsyncClient session = client.startSession("gpt-realtime", null).block(); // BEGIN: com.azure.ai.voicelive.send.audioinput // Send audio chunk @@ -265,7 +265,7 @@ public void handleEventTypes() { .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - VoiceLiveSessionAsyncClient session = client.startSession("gpt-realtime").block(); + VoiceLiveSessionAsyncClient session = client.startSession("gpt-realtime", null).block(); // BEGIN: com.azure.ai.voicelive.handle.eventtypes session.receiveEvents() @@ -362,7 +362,7 @@ public void functionCalling() { .setInstructions("You have access to weather information. Use get_current_weather when asked about weather."); // 3. Handle function call events - client.startSession("gpt-realtime") + client.startSession("gpt-realtime", null) .flatMap(session -> { return session.receiveEvents() .doOnNext(event -> { @@ -424,12 +424,12 @@ public void mcpToolIntegration() { .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - VoiceLiveSessionAsyncClient session = client.startSession("gpt-realtime").block(); + VoiceLiveSessionAsyncClient session = client.startSession("gpt-realtime", null).block(); // BEGIN: com.azure.ai.voicelive.mcp // Configure MCP servers as tools - MCPServer mcpServer = new MCPServer("deepwiki", "https://mcp.deepwiki.com/mcp") - .setRequireApproval(BinaryData.fromObject(MCPApprovalType.ALWAYS)); + McpServer mcpServer = new McpServer("deepwiki", "https://mcp.deepwiki.com/mcp") + .setRequireApproval(BinaryData.fromObject(McpApprovalType.ALWAYS)); VoiceLiveSessionOptions options = new VoiceLiveSessionOptions() .setTools(Arrays.asList(mcpServer)) @@ -442,10 +442,10 @@ public void mcpToolIntegration() { SessionUpdateResponseOutputItemDone itemDone = (SessionUpdateResponseOutputItemDone) event; SessionResponseItem item = itemDone.getItem(); - if (item instanceof ResponseMCPApprovalRequestItem) { + if (item instanceof ResponseMcpApprovalRequestItem) { // Approve the tool call - ResponseMCPApprovalRequestItem approvalRequest = (ResponseMCPApprovalRequestItem) item; - MCPApprovalResponseRequestItem approval = new MCPApprovalResponseRequestItem( + ResponseMcpApprovalRequestItem approvalRequest = (ResponseMcpApprovalRequestItem) item; + McpApprovalResponseRequestItem approval = new McpApprovalResponseRequestItem( approvalRequest.getId(), true); ClientEventConversationItemCreate createItem = new ClientEventConversationItemCreate() .setItem(approval); @@ -469,13 +469,13 @@ public void agentSession() { AgentSessionConfig agentConfig = new AgentSessionConfig("my-agent", "my-project") .setAgentVersion("1.0"); - // Start session with agent config (uses DefaultAzureCredential) + // Start session with agent config; pass null when no VoiceLiveRequestOptions value is needed VoiceLiveAsyncClient client = new VoiceLiveClientBuilder() .endpoint(endpoint) .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - client.startSession(agentConfig) + client.startSession(agentConfig, null) .flatMap(session -> { return session.receiveEvents() .doOnNext(event -> handleEvent(event)) @@ -504,7 +504,7 @@ private void playAudioChunk(byte[] delta) { // Implementation for playing audio } - private void handleEvent(SessionUpdate event) { + private void handleEvent(SessionServerEvent event) { // Implementation for handling events } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/VoiceAssistantSample.java b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/VoiceAssistantSample.java index a9fb90803d8d..315df9ca0668 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/VoiceAssistantSample.java +++ b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/VoiceAssistantSample.java @@ -8,15 +8,14 @@ import com.azure.ai.voicelive.models.AudioInputTranscriptionOptionsModel; import com.azure.ai.voicelive.models.AudioNoiseReduction; import com.azure.ai.voicelive.models.AudioNoiseReductionType; +import com.azure.ai.voicelive.models.AzureStandardVoice; import com.azure.ai.voicelive.models.ClientEventSessionUpdate; import com.azure.ai.voicelive.models.InputAudioFormat; import com.azure.ai.voicelive.models.InteractionModality; -import com.azure.ai.voicelive.models.OpenAIVoice; -import com.azure.ai.voicelive.models.OpenAIVoiceName; import com.azure.ai.voicelive.models.OutputAudioFormat; import com.azure.ai.voicelive.models.ServerEventType; import com.azure.ai.voicelive.models.ServerVadTurnDetection; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import com.azure.ai.voicelive.models.SessionUpdateError; import com.azure.ai.voicelive.models.SessionUpdateResponseAudioDelta; import com.azure.ai.voicelive.models.SessionUpdateSessionUpdated; @@ -247,17 +246,16 @@ private void captureAudioLoop() { // Send audio to VoiceLive service byte[] audioChunk = Arrays.copyOf(buffer, bytesRead); - // Send audio asynchronously using the session's audio buffer append - session.sendInputAudio(BinaryData.fromBytes(audioChunk)) - .subscribe( - noValueEmitted -> { /* sendInputAudio returns Mono; no onNext values are ever emitted */ }, // onNext - error -> { - // Only log non-interruption errors - if (!error.getMessage().contains("cancelled")) { - System.err.println("❌ Error sending audio: " + error.getMessage()); - } - } - ); + // Block on this capture thread so sends are serialized; fire-and-forget + // subscribes can flood the WebSocket send sink and trigger FAIL_OVERFLOW. + try { + session.sendInputAudio(BinaryData.fromBytes(audioChunk)).block(); + } catch (Exception sendError) { + String msg = sendError.getMessage(); + if (isCapturing.get() && (msg == null || !msg.contains("cancelled"))) { + System.err.println("❌ Error sending audio: " + msg); + } + } } } catch (Exception e) { if (isCapturing.get()) { @@ -464,7 +462,7 @@ private static void runVoiceAssistantWithClient(VoiceLiveAsyncClient client) { // Start session. Session lifetime is local to this reactive chain — the session is // captured by the lambda passed to flatMapMany and then threaded into per-event handling // via flatMap, so no instance field or shared holder is needed. - client.startSession(DEFAULT_MODEL) + client.startSession(DEFAULT_MODEL, null) .flatMapMany(session -> { System.out.println("✓ Session started successfully"); audioProcessorRef.set(new AudioProcessor(session)); @@ -527,12 +525,12 @@ private static VoiceLiveSessionOptions createVoiceSessionOptions() { .setCreateResponse(true); // Create audio input transcription configuration - AudioInputTranscriptionOptions transcriptionOptions = new AudioInputTranscriptionOptions(AudioInputTranscriptionOptionsModel.WHISPER_1); + AudioInputTranscriptionOptions transcriptionOptions = new AudioInputTranscriptionOptions(AudioInputTranscriptionOptionsModel.WHISPER_1).setLanguage("en"); VoiceLiveSessionOptions options = new VoiceLiveSessionOptions() .setInstructions("You are a helpful AI voice assistant. Respond naturally and conversationally. Keep your responses concise but engaging. Speak as if having a real conversation.") // Voice: OpenAIVoice (OpenAIVoiceName enum) or AzureStandardVoice/AzureCustomVoice/AzurePersonalVoice - .setVoice(BinaryData.fromObject(new OpenAIVoice(OpenAIVoiceName.ALLOY))) + .setVoice(BinaryData.fromObject(new AzureStandardVoice("en-US-AvaNeural"))) .setModalities(Arrays.asList(InteractionModality.TEXT, InteractionModality.AUDIO)) .setInputAudioFormat(InputAudioFormat.PCM16) .setOutputAudioFormat(OutputAudioFormat.PCM16) @@ -552,7 +550,7 @@ private static VoiceLiveSessionOptions createVoiceSessionOptions() { * inside the reactive chain (no nested subscribe). The voice assistant doesn't send any * follow-up events, so handlers always return {@link Mono#empty()}. */ - private static Mono handleServerEvent(SessionUpdate event, AudioProcessor audioProcessor) { + private static Mono handleServerEvent(SessionServerEvent event, AudioProcessor audioProcessor) { ServerEventType eventType = event.getType(); try { diff --git a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/telemetry/GlobalTracingSample.java b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/telemetry/GlobalTracingSample.java index 998ecb4136ce..333a1f85f7e4 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/telemetry/GlobalTracingSample.java +++ b/sdk/voicelive/azure-ai-voicelive/src/samples/java/com/azure/ai/voicelive/telemetry/GlobalTracingSample.java @@ -109,7 +109,7 @@ public static void main(String[] args) throws InterruptedException { // Session lifetime is local to this reactive chain; the session is captured by the // lambda passed to flatMapMany and then threaded into per-event handling via flatMap, // so no instance field or shared holder is needed. - client.startSession("gpt-realtime") + client.startSession("gpt-realtime", null) .flatMapMany(session -> configureSession(session, sessionOptions, prompts) .thenMany(session.receiveEvents()) .flatMap(GlobalTracingSample::handleServerEvent)) @@ -152,12 +152,12 @@ private static Mono configureSession( * inside the reactive chain (no nested subscribe). This sample doesn't send any follow-up * events from inside the handler. */ - private static Mono handleServerEvent(com.azure.ai.voicelive.models.SessionUpdate serverEvent) { + private static Mono handleServerEvent(com.azure.ai.voicelive.models.SessionServerEvent serverEvent) { System.out.println("Event: " + serverEvent.getType()); if (serverEvent instanceof SessionUpdateResponseDone) { SessionResponse response = ((SessionUpdateResponseDone) serverEvent).getResponse(); if (response.getUsage() != null) { - System.out.println(" Total tokens: " + response.getUsage().getTotalTokens()); + System.out.println(" Total tokens: " + response.getUsage().getTotalTokenCount()); } } return Mono.empty(); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/VoiceLiveAsyncClientTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/VoiceLiveAsyncClientTest.java index 41788c563209..285ce1c6322e 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/VoiceLiveAsyncClientTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/VoiceLiveAsyncClientTest.java @@ -13,8 +13,11 @@ import reactor.core.publisher.Mono; import java.net.URI; +import java.util.Map; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -64,14 +67,23 @@ void testStartSessionWithValidOptions() { // Note: This test might need to be adjusted based on actual implementation // For now, we're testing that the method exists and can be called assertDoesNotThrow(() -> { - client.startSession(sessionOptions.getModel()); + client.startSession(sessionOptions.getModel(), null); }); } @Test void testStartSessionWithNullOptions() { // Act & Assert - assertThrows(NullPointerException.class, () -> client.startSession((String) null)); + assertThrows(NullPointerException.class, () -> client.startSession((String) null, null)); + } + + @Test + void testStartSessionWithoutModel() { + // Act & Assert + assertDoesNotThrow(() -> { + Mono result = client.startSession(); + assertNotNull(result); + }); } @Test @@ -81,14 +93,25 @@ void testStartSessionWithModelString() { // Act & Assert assertDoesNotThrow(() -> { - client.startSession(model); + client.startSession(model, null); }); } @Test void testStartSessionWithNullModel() { // Act & Assert - assertThrows(NullPointerException.class, () -> client.startSession((String) null)); + assertThrows(NullPointerException.class, () -> client.startSession((String) null, null)); + } + + @Test + void testStartSessionWithModelAndRequestOptions() { + String model = "gpt-4o-realtime-preview"; + VoiceLiveRequestOptions requestOptions = new VoiceLiveRequestOptions(); + + assertDoesNotThrow(() -> { + Mono sessionMono = client.startSession(model, requestOptions); + assertNotNull(sessionMono); + }); } @Test @@ -116,20 +139,19 @@ void testOptimizedConnectMethods() { // Test startSession with model string assertDoesNotThrow(() -> { - Mono result = client.startSession("gpt-4o-realtime-preview"); + Mono result = client.startSession("gpt-4o-realtime-preview", null); assertNotNull(result); }); // Test startSession with session options VoiceLiveSessionOptions sessionOptions = new VoiceLiveSessionOptions().setModel("gpt-4o-realtime-preview"); assertDoesNotThrow(() -> { - Mono result = client.startSession(sessionOptions.getModel()); + Mono result = client.startSession(sessionOptions.getModel(), null); assertNotNull(result); }); // Test null parameter validation for startSession methods - assertThrows(NullPointerException.class, () -> client.startSession((String) null)); - assertThrows(NullPointerException.class, () -> client.startSession((VoiceLiveRequestOptions) null)); + assertThrows(NullPointerException.class, () -> client.startSession((String) null, null)); } @Test @@ -138,28 +160,19 @@ void testReturnTypeOptimization() { String model = "gpt-4o-realtime-preview"; assertDoesNotThrow(() -> { - Mono sessionMono = client.startSession(model); + Mono sessionMono = client.startSession(model, null); assertNotNull(sessionMono); // The returned Mono should contain a VoiceLiveSessionAsyncClient when subscribed }); VoiceLiveSessionOptions options = new VoiceLiveSessionOptions().setModel(model); assertDoesNotThrow(() -> { - Mono sessionMono = client.startSession(options.getModel()); + Mono sessionMono = client.startSession(options.getModel(), null); assertNotNull(sessionMono); // The returned Mono should contain a VoiceLiveSessionAsyncClient when subscribed }); } - @Test - void testStartSessionWithoutModel() { - // Test that startSession() without parameters works - assertDoesNotThrow(() -> { - Mono sessionMono = client.startSession(); - assertNotNull(sessionMono); - }); - } - @Test void testStartSessionWithAgentConfig() { // Arrange @@ -167,7 +180,7 @@ void testStartSessionWithAgentConfig() { // Act & Assert assertDoesNotThrow(() -> { - Mono sessionMono = client.startSession(agentConfig); + Mono sessionMono = client.startSession(agentConfig, null); assertNotNull(sessionMono); }); } @@ -181,7 +194,7 @@ void testStartSessionWithAgentConfigAllOptions() { // Act & Assert assertDoesNotThrow(() -> { - Mono sessionMono = client.startSession(agentConfig); + Mono sessionMono = client.startSession(agentConfig, null); assertNotNull(sessionMono); }); } @@ -189,7 +202,7 @@ void testStartSessionWithAgentConfigAllOptions() { @Test void testStartSessionWithNullAgentConfig() { // Act & Assert - assertThrows(NullPointerException.class, () -> client.startSession((AgentSessionConfig) null)); + assertThrows(NullPointerException.class, () -> client.startSession((AgentSessionConfig) null, null)); } @Test @@ -212,7 +225,10 @@ void testStartSessionWithAgentConfigAndNullRequestOptions() { AgentSessionConfig agentConfig = new AgentSessionConfig("test-agent", "test-project"); // Act & Assert - assertThrows(NullPointerException.class, () -> client.startSession(agentConfig, null)); + assertDoesNotThrow(() -> { + Mono sessionMono = client.startSession(agentConfig, null); + assertNotNull(sessionMono); + }); } @Test @@ -224,4 +240,45 @@ void testStartSessionWithNullAgentConfigAndValidRequestOptions() { assertThrows(NullPointerException.class, () -> client.startSession((AgentSessionConfig) null, requestOptions)); } + @Test + void testToQueryParametersWithRequiredOnly() { + AgentSessionConfig config = new AgentSessionConfig("my-agent", "my-project"); + + Map params = VoiceLiveAsyncClient.toQueryParameters(config); + + assertEquals(2, params.size()); + assertEquals("my-agent", params.get("agent-name")); + assertEquals("my-project", params.get("agent-project-name")); + } + + @Test + void testToQueryParametersWithAllOptions() { + AgentSessionConfig config = new AgentSessionConfig("my-agent", "my-project").setAgentVersion("2.0") + .setConversationId("conversation-xyz") + .setAuthenticationIdentityClientId("auth-client-id") + .setFoundryResourceOverride("override-resource"); + + Map params = VoiceLiveAsyncClient.toQueryParameters(config); + + assertEquals(6, params.size()); + assertEquals("my-agent", params.get("agent-name")); + assertEquals("my-project", params.get("agent-project-name")); + assertEquals("2.0", params.get("agent-version")); + assertEquals("conversation-xyz", params.get("conversation-id")); + assertEquals("auth-client-id", params.get("agent-authentication-identity-client-id")); + assertEquals("override-resource", params.get("foundry-resource-override")); + } + + @Test + void testToQueryParametersExcludesEmptyOptionalValues() { + AgentSessionConfig config + = new AgentSessionConfig("my-agent", "my-project").setAgentVersion("").setConversationId(""); + + Map params = VoiceLiveAsyncClient.toQueryParameters(config); + + assertEquals(2, params.size()); + assertFalse(params.containsKey("agent-version")); + assertFalse(params.containsKey("conversation-id")); + } + } diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/VoiceLiveClientBuilderTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/VoiceLiveClientBuilderTest.java index c87ed6a42aff..463305c74f12 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/VoiceLiveClientBuilderTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/VoiceLiveClientBuilderTest.java @@ -173,7 +173,7 @@ void testBuilderWithServiceVersion() { assertDoesNotThrow(() -> { VoiceLiveAsyncClient client = clientBuilder.endpoint(endpoint) .credential(mockKeyCredential) - .serviceVersion(VoiceLiveServiceVersion.V2026_01_01_PREVIEW) + .serviceVersion(VoiceLiveServiceVersion.V2026_04_10) .buildAsyncClient(); assertNotNull(client); @@ -189,7 +189,7 @@ void testBuilderChaining() { assertDoesNotThrow(() -> { VoiceLiveAsyncClient client = clientBuilder.endpoint(endpoint) .credential(mockKeyCredential) - .serviceVersion(VoiceLiveServiceVersion.V2026_01_01_PREVIEW) + .serviceVersion(VoiceLiveServiceVersion.V2026_04_10) .buildAsyncClient(); assertNotNull(client); @@ -201,7 +201,7 @@ void testBuilderReturnsBuilder() { // Test that all methods return the builder for chaining assertSame(clientBuilder, clientBuilder.endpoint("https://test.cognitiveservices.azure.com")); assertSame(clientBuilder, clientBuilder.credential(mockKeyCredential)); - assertSame(clientBuilder, clientBuilder.serviceVersion(VoiceLiveServiceVersion.V2026_01_01_PREVIEW)); + assertSame(clientBuilder, clientBuilder.serviceVersion(VoiceLiveServiceVersion.V2026_04_10)); } @Test diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/implementation/VoiceLiveTracerTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/implementation/VoiceLiveTracerTest.java index f2447d0b09bd..20d510aa904a 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/implementation/VoiceLiveTracerTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/implementation/VoiceLiveTracerTest.java @@ -11,7 +11,7 @@ import com.azure.ai.voicelive.models.ClientEventResponseCancel; import com.azure.ai.voicelive.models.ClientEventResponseCreate; import com.azure.ai.voicelive.models.FunctionCallOutputItem; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.StatusCode; @@ -115,7 +115,7 @@ void testRecvSpanCreated() throws Exception { String json = "{\"type\":\"session.created\",\"event_id\":\"event1\"," + "\"session\":{\"id\":\"session123\",\"model\":\"gpt-4o\"}}"; - SessionUpdate update = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(json)); + SessionServerEvent update = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(json)); voiceLiveTracer.traceRecv(update, json); voiceLiveTracer.endConnectSpan(null); @@ -176,7 +176,8 @@ void testResponseCreateTracksLatency() throws Exception { Thread.sleep(10); String audioJson = "{\"type\":\"response.audio.delta\",\"response_id\":\"r1\"," + "\"item_id\":\"i1\",\"output_index\":0,\"content_index\":0,\"delta\":\"AQID\"}"; - SessionUpdate audioDelta = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(audioJson)); + SessionServerEvent audioDelta + = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(audioJson)); voiceLiveTracer.traceRecv(audioDelta, audioJson); voiceLiveTracer.endConnectSpan(null); @@ -199,7 +200,8 @@ void testAudioBytesTracking() throws Exception { // Receive audio delta (base64 "AQIDBA==" = 4 bytes) String audioJson = "{\"type\":\"response.audio.delta\",\"response_id\":\"r1\"," + "\"item_id\":\"i1\",\"output_index\":0,\"content_index\":0,\"delta\":\"AQIDBA==\"}"; - SessionUpdate audioDelta = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(audioJson)); + SessionServerEvent audioDelta + = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(audioJson)); voiceLiveTracer.traceRecv(audioDelta, audioJson); voiceLiveTracer.endConnectSpan(null); @@ -217,7 +219,8 @@ void testTurnCountTracking() throws Exception { String doneJson = "{\"type\":\"response.done\",\"event_id\":\"event1\"," + "\"response\":{\"id\":\"response1\",\"status\":\"completed\",\"output\":[]}}"; - SessionUpdate responseDone = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(doneJson)); + SessionServerEvent responseDone + = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(doneJson)); voiceLiveTracer.traceRecv(responseDone, doneJson); voiceLiveTracer.endConnectSpan(null); @@ -236,7 +239,8 @@ void testTokenUsageOnResponseDone() throws Exception { + "\"usage\":{\"total_tokens\":150,\"input_tokens\":100,\"output_tokens\":50," + "\"input_token_details\":{\"cached_tokens\":0,\"text_tokens\":50,\"audio_tokens\":50}," + "\"output_token_details\":{\"text_tokens\":25,\"audio_tokens\":25}}}}"; - SessionUpdate responseDone = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(doneJson)); + SessionServerEvent responseDone + = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(doneJson)); voiceLiveTracer.traceRecv(responseDone, doneJson); voiceLiveTracer.endConnectSpan(null); @@ -254,7 +258,8 @@ void testErrorEventTracking() throws Exception { String errorJson = "{\"type\":\"error\",\"event_id\":\"event1\"," + "\"error\":{\"type\":\"server_error\",\"code\":\"500\",\"message\":\"Internal error\"}}"; - SessionUpdate errorUpdate = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(errorJson)); + SessionServerEvent errorUpdate + = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(errorJson)); voiceLiveTracer.traceRecv(errorUpdate, errorJson); voiceLiveTracer.endConnectSpan(null); @@ -294,7 +299,7 @@ void testSessionIdFromSessionCreated() throws Exception { String json = "{\"type\":\"session.created\",\"event_id\":\"event1\"," + "\"session\":{\"id\":\"session456\",\"model\":\"gpt-4o\"}}"; - SessionUpdate update = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(json)); + SessionServerEvent update = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(json)); voiceLiveTracer.traceRecv(update, json); voiceLiveTracer.endConnectSpan(null); @@ -329,7 +334,7 @@ void testParentChildSpanHierarchy() throws Exception { // Recv String json = "{\"type\":\"session.created\",\"event_id\":\"event1\"," + "\"session\":{\"id\":\"session123\",\"model\":\"gpt-4o\"}}"; - SessionUpdate update = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(json)); + SessionServerEvent update = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(json)); voiceLiveTracer.traceRecv(update, json); // Close @@ -390,7 +395,8 @@ void testResponseDoneTracksConversationAndFinishReason() throws Exception { String doneJson = "{\"type\":\"response.done\",\"event_id\":\"event1\"," + "\"response\":{\"id\":\"response1\",\"conversation_id\":\"conversation1\"," + "\"status\":\"completed\",\"output\":[]}}"; - SessionUpdate responseDone = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(doneJson)); + SessionServerEvent responseDone + = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(doneJson)); voiceLiveTracer.traceRecv(responseDone, doneJson); voiceLiveTracer.endConnectSpan(null); @@ -456,7 +462,7 @@ void testSessionCreatedTracksAgentAttributes() throws Exception { String json = "{\"type\":\"session.created\",\"event_id\":\"event1\",\"session\":{" + "\"id\":\"session123\",\"input_audio_sampling_rate\":24000," + "\"agent\":{\"agent_id\":\"agent123\",\"thread_id\":\"thread456\"}}}"; - SessionUpdate update = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(json)); + SessionServerEvent update = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(json)); voiceLiveTracer.traceRecv(update, json); voiceLiveTracer.endConnectSpan(null); @@ -493,7 +499,7 @@ void testSessionCreatedTracksInputAudioSamplingRate() throws Exception { String json = "{\"type\":\"session.created\",\"event_id\":\"event1\"," + "\"session\":{\"id\":\"session789\",\"model\":\"gpt-4o\"," + "\"input_audio_sampling_rate\":24000}}"; - SessionUpdate update = SessionUpdate.fromJson(com.azure.json.JsonProviders.createReader(json)); + SessionServerEvent update = SessionServerEvent.fromJson(com.azure.json.JsonProviders.createReader(json)); voiceLiveTracer.traceRecv(update, json); voiceLiveTracer.endConnectSpan(null); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveAudioFormatTests.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveAudioFormatTests.java index 388a676647c2..f4bd80064633 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveAudioFormatTests.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveAudioFormatTests.java @@ -46,7 +46,7 @@ public class VoiceLiveAudioFormatTests extends VoiceLiveTestBase { static Stream modelAndSamplingRateProvider() { return withApiVersions(Stream.of(Arguments.of("gpt-realtime", 16000), Arguments.of("gpt-realtime", 44100), Arguments.of("gpt-realtime", 8000), Arguments.of("gpt-4o", 16000), Arguments.of("gpt-4o", 44100), - Arguments.of("gpt-4.1", 8000)), API_VERSION_GA, API_VERSION_PREVIEW); + Arguments.of("gpt-4.1", 8000))); } static Stream modelAndInputAudioFormatProvider() { @@ -101,7 +101,7 @@ public void testRealtimeServiceWithInputAudioFormat(String model, String audioFo .setTurnDetection(turnDetection) .setInputAudioTranscription(getSpeechRecognitionSetting(model)); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -155,8 +155,8 @@ public void testRealtimeServiceWithInputAudioFormat(String model, String audioFo } } - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes(8000, 2.0)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes(8000, 2.0))).block(SEND_TIMEOUT); boolean received = responseLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); @@ -199,11 +199,11 @@ public void testRealtimeServiceWithInputAudioSamplingRate(String model, int samp .setInputAudioTranscription(getSpeechRecognitionSetting(model)) .setInstructions( "You are a helpful assistant. Please respond briefly to the user's question about lakes.") - .setTurnDetection(API_VERSION_PREVIEW.equals(apiVersion) + .setTurnDetection(API_VERSIONS[1].equals(apiVersion) ? new ServerVadTurnDetection().setSilenceDurationMs(200) : new ServerVadTurnDetection()); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -263,8 +263,9 @@ public void testRealtimeServiceWithInputAudioSamplingRate(String model, int samp "Expected sampling rate " + samplingRate + ", got " + actualSamplingRate); } - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes(samplingRate, 2.0)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes(samplingRate, 2.0))) + .block(SEND_TIMEOUT); boolean speechStarted = speechStartedLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); Assertions.assertTrue(speechStarted, "Should receive speech started event"); @@ -318,7 +319,7 @@ public void testOutputFormatsWithAzureVoice(String model, String outputFormat, S .setTurnDetection( new ServerVadTurnDetection().setThreshold(0.5).setPrefixPaddingMs(300).setSilenceDurationMs(200)); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -351,8 +352,8 @@ public void testOutputFormatsWithAzureVoice(String model, String outputFormat, S waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean received = responseLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); @@ -394,7 +395,7 @@ public void testOutputFormatsWithOpenAIVoice(String model, String outputFormat, .setTurnDetection( new ServerVadTurnDetection().setThreshold(0.5).setPrefixPaddingMs(300).setSilenceDurationMs(200)); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -427,8 +428,8 @@ public void testOutputFormatsWithOpenAIVoice(String model, String outputFormat, waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean received = responseLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveAudioTests.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveAudioTests.java index 2b697d5a0f73..394eb2056206 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveAudioTests.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveAudioTests.java @@ -15,6 +15,7 @@ import com.azure.ai.voicelive.models.SessionUpdateResponseAudioDelta; import com.azure.ai.voicelive.models.VoiceLiveSessionOptions; import com.azure.core.test.annotation.LiveOnly; +import com.azure.core.util.BinaryData; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -36,8 +37,7 @@ public class VoiceLiveAudioTests extends VoiceLiveTestBase { static Stream audioParams() { - return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, API_VERSIONS); } @ParameterizedTest @@ -59,7 +59,7 @@ public void testRealtimeServiceWithAudio(String model, String apiVersion) throws .setModalities(Arrays.asList(InteractionModality.TEXT, InteractionModality.AUDIO)) .setInputAudioFormat(InputAudioFormat.PCM16); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -91,7 +91,7 @@ public void testRealtimeServiceWithAudio(String model, String apiVersion) throws Thread.sleep(SETUP_DELAY_MS); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); boolean received = audioResponseLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); @@ -108,8 +108,7 @@ public void testRealtimeServiceWithAudio(String model, String apiVersion) throws } static Stream audioEnhancementsParams() { - return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, API_VERSIONS); } @ParameterizedTest @@ -133,7 +132,7 @@ public void testRealtimeServiceWithAudioEnhancements(String model, String apiVer new AudioNoiseReduction(AudioNoiseReductionType.AZURE_DEEP_NOISE_SUPPRESSION)) .setInputAudioEchoCancellation(new AudioEchoCancellation()); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -166,7 +165,7 @@ public void testRealtimeServiceWithAudioEnhancements(String model, String apiVer waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); // Wait for events to be collected Thread.sleep(EVENT_TIMEOUT_SECONDS * 1000); @@ -183,7 +182,6 @@ public void testRealtimeServiceWithAudioEnhancements(String model, String apiVer } static Stream echoCancellationParams() { - return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, API_VERSIONS); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveConversationTests.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveConversationTests.java index a756f9b604d9..6b73600a3480 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveConversationTests.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveConversationTests.java @@ -26,6 +26,7 @@ import org.junit.jupiter.params.provider.MethodSource; import java.io.IOException; +import java.time.Duration; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -37,7 +38,7 @@ public class VoiceLiveConversationTests extends VoiceLiveTestBase { static Stream retrieveItemParams() { - return crossProduct(new String[] { "gpt-realtime" }, new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { "gpt-realtime" }, API_VERSIONS); } @ParameterizedTest @@ -61,7 +62,7 @@ public void testRealtimeServiceRetrieveItem(String model, String apiVersion) = new VoiceLiveSessionOptions().setInstructions("You are a helpful assistant.") .setVoice(BinaryData.fromObject(new OpenAIVoice(OpenAIVoiceName.ALLOY))); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -101,8 +102,8 @@ public void testRealtimeServiceRetrieveItem(String model, String apiVersion) waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean outputReceived = outputItemLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); Assertions.assertTrue(outputReceived, "Should receive output item done event"); @@ -132,7 +133,7 @@ public void testRealtimeServiceRetrieveItem(String model, String apiVersion) } static Stream truncateItemParams() { - return crossProduct(new String[] { "gpt-realtime" }, new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { "gpt-realtime" }, API_VERSIONS); } @ParameterizedTest @@ -155,7 +156,7 @@ public void testRealtimeServiceTruncateItem(String model, String apiVersion) VoiceLiveSessionOptions sessionOptions = new VoiceLiveSessionOptions().setInstructions("You are a helpful assistant."); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -193,15 +194,15 @@ public void testRealtimeServiceTruncateItem(String model, String apiVersion) waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean outputReceived = outputItemLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); Assertions.assertTrue(outputReceived, "Should receive output item done event"); Assertions.assertNotNull(outputItemId.get(), "Output item ID should not be null"); // Truncate the conversation item at 1000ms - session.truncateConversation(outputItemId.get(), 0, 1000).block(SEND_TIMEOUT); + session.truncateConversation(outputItemId.get(), 0, Duration.ofMillis(1000)).block(SEND_TIMEOUT); boolean truncated = truncateLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); Assertions.assertTrue(truncated, "Should receive conversation item truncated event"); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveSessionTests.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveSessionTests.java index 9c95d4f136ef..04f67cc1342c 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveSessionTests.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveSessionTests.java @@ -31,7 +31,7 @@ public class VoiceLiveSessionTests extends VoiceLiveTestBase { static Stream apiVersionParams() { - return Stream.of(Arguments.of(API_VERSION_GA), Arguments.of(API_VERSION_PREVIEW)); + return Arrays.stream(API_VERSIONS).map(Arguments::of); } @ParameterizedTest @@ -52,7 +52,7 @@ public void testSessionUpdateEventIsReceived(String apiVersion) throws Interrupt .setModalities(Arrays.asList(InteractionModality.TEXT, InteractionModality.AUDIO)) .setInputAudioFormat(InputAudioFormat.PCM16); - session = client.startSession(TEST_MODEL).block(SESSION_TIMEOUT); + session = client.startSession(TEST_MODEL, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); Assertions.assertTrue(session.isConnected(), "Session should be connected"); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTestBase.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTestBase.java index 89d6d9096fc7..94810f134660 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTestBase.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTestBase.java @@ -11,7 +11,7 @@ import com.azure.ai.voicelive.models.AudioInputTranscriptionOptionsModel; import com.azure.ai.voicelive.models.InputAudioFormat; import com.azure.ai.voicelive.models.OutputAudioFormat; -import com.azure.ai.voicelive.models.SessionUpdate; +import com.azure.ai.voicelive.models.SessionServerEvent; import com.azure.ai.voicelive.models.SessionUpdateError; import com.azure.core.credential.KeyCredential; import com.azure.core.test.TestProxyTestBase; @@ -65,9 +65,8 @@ public abstract class VoiceLiveTestBase extends TestProxyTestBase { protected static final int DEFAULT_SAMPLE_RATE = 24000; protected static final double DEFAULT_SILENCE_DURATION = 2.0; - // API version constants - protected static final String API_VERSION_GA = "2025-10-01"; - protected static final String API_VERSION_PREVIEW = "2026-01-01-preview"; + // API versions exercised by parameterized live tests. + protected static final String[] API_VERSIONS = { "2025-10-01", "2026-04-10" }; protected String getEndpoint() { String endpoint = Configuration.getGlobalConfiguration().get("AI_SERVICES_ENDPOINT"); @@ -112,7 +111,7 @@ protected static Stream crossProduct(String[] models, String[] apiVer } protected static Stream withApiVersions(Stream base) { - return withApiVersions(base, API_VERSION_GA, API_VERSION_PREVIEW); + return withApiVersions(base, API_VERSIONS); } protected static Stream withApiVersions(Stream base, String... apiVersions) { @@ -164,7 +163,7 @@ protected byte[] getTrailingSilenceBytes() { return getTrailingSilenceBytes(DEFAULT_SAMPLE_RATE, DEFAULT_SILENCE_DURATION); } - protected void handleError(SessionUpdate event) { + protected void handleError(SessionServerEvent event) { if (event instanceof SessionUpdateError) { SessionUpdateError errorEvent = (SessionUpdateError) event; System.err.println( diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveToolCallTests.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveToolCallTests.java index 755ab6db1b57..a974bc577061 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveToolCallTests.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveToolCallTests.java @@ -49,13 +49,12 @@ public class VoiceLiveToolCallTests extends VoiceLiveTestBase { private static final String API_VERSION_2025_05_01_PREVIEW = "2025-05-01-preview"; // ===== test_realtime_service_tool_call ===== - // Python: models=[gpt-realtime, gpt-4o], api_versions=[2025-10-01, 2026-01-01-preview] + // Python: models=[gpt-realtime, gpt-4o], api_versions=[2025-10-01, 2026-04-10] // Uses _get_speech_recognition_setting(model), audio=4-1.wav, tool=assess_pronunciation // Voice: AzureStandardVoice("en-US-AriaNeural") static Stream toolCallParams() { - return crossProduct(new String[] { MODEL_GPT_REALTIME, MODEL_GPT_4O }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { MODEL_GPT_REALTIME, MODEL_GPT_4O }, API_VERSIONS); } @ParameterizedTest @@ -113,7 +112,7 @@ private void doTestRealtimeServiceToolCall(String model, String apiVersion) .setTools(Arrays.asList(assessTool)) .setToolChoice(BinaryData.fromObject("auto")); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); subscription = session.receiveEvents().subscribe(event -> { @@ -138,7 +137,7 @@ private void doTestRealtimeServiceToolCall(String model, String apiVersion) // Send audio and response.create() in tight succession to beat server VAD. // With gpt-realtime, the default server VAD detects speech, auto-commits the // buffer and triggers its own response before a delayed response.create() arrives. - session.sendInputAudio(audioData) + session.sendInputAudio(BinaryData.fromBytes(audioData)) .then(session.sendEvent(new ClientEventResponseCreate())) .block(SEND_TIMEOUT); @@ -166,14 +165,13 @@ private void doTestRealtimeServiceToolCall(String model, String apiVersion) // ===== test_realtime_service_tool_choice ===== // Python: models=[gpt-realtime, gpt-4o, gpt-5-chat], skip if "realtime" in model // -> effective models: [gpt-4o, gpt-5-chat] - // api_versions=[2025-10-01, 2026-01-01-preview] + // api_versions=[2025-10-01, 2026-04-10] // Uses azure-speech + ServerVad, audio=ask_weather.wav // Tools: get_weather, get_time. ToolChoice: get_time // Assert: function_done.name == "get_time", arguments contains Beijing static Stream toolChoiceParams() { - return crossProduct(new String[] { MODEL_GPT_4O, MODEL_GPT_5_CHAT }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { MODEL_GPT_4O, MODEL_GPT_5_CHAT }, API_VERSIONS); } @ParameterizedTest @@ -210,7 +208,7 @@ public void testRealtimeServiceToolChoice(String model, String apiVersion) .setTools(Arrays.asList(weatherTool, timeTool)) .setToolChoice(BinaryData.fromObject(new ToolChoiceFunctionSelection("get_time"))); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); subscription = session.receiveEvents().subscribe(event -> { @@ -233,8 +231,8 @@ public void testRealtimeServiceToolChoice(String model, String apiVersion) session.sendEvent(new ClientEventSessionUpdate(sessionOptions)).block(SEND_TIMEOUT); waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean done = responseDoneLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); Assertions.assertTrue(done, "Should receive response done event"); @@ -260,14 +258,13 @@ public void testRealtimeServiceToolChoice(String model, String apiVersion) // ===== test_realtime_service_tool_call_parameter ===== // Python: models=[gpt-realtime, gpt-4.1, gpt-5, gpt-5.1, gpt-5.2, phi4-mm-realtime], // skip if "realtime" in model -> effective models: [gpt-4.1, gpt-5] - // api_versions=[2025-10-01, 2026-01-01-preview] + // api_versions=[2025-10-01, 2026-04-10] // Uses azure-speech + ServerVad, audio=ask_weather.wav // Tool: get_weather. Full tool call flow: get function call -> send tool output -> get transcript // Assert: transcript contains "sunny" or chinese equivalent, and "25" static Stream toolCallParameterParams() { - return crossProduct(new String[] { MODEL_GPT_41, MODEL_GPT_5 }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { MODEL_GPT_41, MODEL_GPT_5 }, API_VERSIONS); } @ParameterizedTest @@ -311,7 +308,7 @@ public void testRealtimeServiceToolCallParameter(String model, String apiVersion .setTools(Arrays.asList(weatherTool)) .setToolChoice(BinaryData.fromObject("auto")); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); subscription = session.receiveEvents().subscribe(event -> { @@ -351,8 +348,8 @@ public void testRealtimeServiceToolCallParameter(String model, String apiVersion waitForSetup(); // Send audio + trailing silence - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); // Wait for RESPONSE_DONE that contains the function call. // This ensures all interleaved audio_transcript events from the same response @@ -399,7 +396,7 @@ public void testRealtimeServiceToolCallParameter(String model, String apiVersion } // ===== test_realtime_service_live_session_update ===== - // Python: model=[gpt-realtime], api_versions=[2025-05-01-preview, 2026-01-01-preview] + // Python: model=[gpt-realtime], api_versions=[2025-05-01-preview, 2026-04-10] // Two-phase test: // Phase 1: Session without tools -> send audio -> expect no function call in response // Phase 2: New session with tools -> send audio -> expect function call @@ -407,7 +404,7 @@ public void testRealtimeServiceToolCallParameter(String model, String apiVersion static Stream liveSessionUpdateParams() { return crossProduct(new String[] { MODEL_GPT_REALTIME }, - new String[] { API_VERSION_2025_05_01_PREVIEW, API_VERSION_PREVIEW }); + new String[] { API_VERSION_2025_05_01_PREVIEW, API_VERSIONS[1] }); } @ParameterizedTest @@ -428,7 +425,7 @@ public void testRealtimeServiceLiveSessionUpdate(String model, String apiVersion VoiceLiveSessionAsyncClient session = null; Disposable subscription = null; try { - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); // Phase tracking: 1 = no tools, 2 = with tools, 3 = post-response.create @@ -499,8 +496,8 @@ public void testRealtimeServiceLiveSessionUpdate(String model, String apiVersion session.sendEvent(new ClientEventSessionUpdate(sessionOptionsNoTools)).block(SEND_TIMEOUT); waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean phase1Done = phase1Latch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); Assertions.assertTrue(phase1Done, "Phase 1: Should receive audio transcript done event"); @@ -527,8 +524,8 @@ public void testRealtimeServiceLiveSessionUpdate(String model, String apiVersion session.sendEvent(new ClientEventSessionUpdate(sessionOptionsWithTools)).block(SEND_TIMEOUT); waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean phase2Done = phase2Latch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); Assertions.assertTrue(phase2Done, "Phase 2: Should receive function call after adding tools"); @@ -569,6 +566,6 @@ public void testRealtimeServiceLiveSessionUpdate(String model, String apiVersion // Python: @pytest.mark.skip() - skipped in Python tests static Stream toolCallNoAudioOverlapParams() { - return crossProduct(new String[] { MODEL_GPT_REALTIME }, new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { MODEL_GPT_REALTIME }, API_VERSIONS); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTranscriptionTests.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTranscriptionTests.java index 6b81c311e1b3..f4a00c8ad369 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTranscriptionTests.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTranscriptionTests.java @@ -13,6 +13,7 @@ import com.azure.ai.voicelive.models.ServerEventType; import com.azure.ai.voicelive.models.SessionUpdateConversationItemInputAudioTranscriptionCompleted; import com.azure.ai.voicelive.models.VoiceLiveSessionOptions; +import com.azure.core.util.BinaryData; import com.azure.core.test.annotation.LiveOnly; import org.junit.jupiter.api.Assertions; import reactor.core.Disposable; @@ -34,8 +35,7 @@ public class VoiceLiveTranscriptionTests extends VoiceLiveTestBase { static Stream whisperTranscriptionParams() { - return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, API_VERSIONS); } @ParameterizedTest @@ -59,7 +59,7 @@ public void testInputAudioTranscriptionWithWhisper(String model, String apiVersi .setInputAudioFormat(InputAudioFormat.PCM16) .setInputAudioTranscription(getSpeechRecognitionSetting(model)); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -92,8 +92,8 @@ public void testInputAudioTranscriptionWithWhisper(String model, String apiVersi waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean received = transcriptionLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); @@ -108,8 +108,7 @@ public void testInputAudioTranscriptionWithWhisper(String model, String apiVersi } static Stream gpt4oTranscribeParams() { - return crossProduct(new String[] { "gpt-4o-transcribe", "gpt-4o-mini-transcribe" }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { "gpt-4o-transcribe", "gpt-4o-mini-transcribe" }, API_VERSIONS); } @ParameterizedTest @@ -135,7 +134,7 @@ public void testInputAudioTranscriptionWithGpt4oTranscribe(String transcriptionM VoiceLiveSessionOptions sessionOptions = new VoiceLiveSessionOptions().setInputAudioTranscription( new AudioInputTranscriptionOptions(transcriptionOptionsModel).setLanguage("en-US")); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -168,8 +167,8 @@ public void testInputAudioTranscriptionWithGpt4oTranscribe(String transcriptionM waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean received = transcriptionLatch.await(EVENT_TIMEOUT_SECONDS, TimeUnit.SECONDS); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTurnDetectionTests.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTurnDetectionTests.java index 5cb735b4fdb5..782ebd9fb469 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTurnDetectionTests.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveTurnDetectionTests.java @@ -16,6 +16,7 @@ import com.azure.ai.voicelive.models.TurnDetection; import com.azure.ai.voicelive.models.VoiceLiveSessionOptions; import com.azure.core.test.annotation.LiveOnly; +import com.azure.core.util.BinaryData; import org.junit.jupiter.api.Assertions; import reactor.core.Disposable; import org.junit.jupiter.params.ParameterizedTest; @@ -38,14 +39,13 @@ public class VoiceLiveTurnDetectionTests extends VoiceLiveTestBase { // ===== test_realtime_service_with_turn_detection_long_tts_vad_duration ===== - // Python: models=[gpt-realtime, gpt-4o], api_versions=[2025-10-01, 2026-01-01-preview] + // Python: models=[gpt-realtime, gpt-4o], api_versions=[2025-10-01, 2026-04-10] // turn_detection: {"type": "azure_semantic_vad", "speech_duration_assistant_speaking_ms": 800} // Note: speechDurationAssistantSpeakingMs not available in Java SDK; // using speechDurationMs(800) as the closest available parameter. static Stream longTtsVadDurationParams() { - return crossProduct(new String[] { MODEL_GPT_REALTIME, MODEL_GPT_4O }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { MODEL_GPT_REALTIME, MODEL_GPT_4O }, API_VERSIONS); } @ParameterizedTest @@ -86,7 +86,7 @@ private void doTestLongTtsVadDuration(String model, String apiVersion) throws In VoiceLiveSessionAsyncClient session = null; Disposable subscription = null; try { - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); subscription = session.receiveEvents().subscribe(event -> { @@ -111,7 +111,7 @@ private void doTestLongTtsVadDuration(String model, String apiVersion) throws In session.sendEvent(new ClientEventSessionUpdate(sessionOptions)).block(SEND_TIMEOUT); waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); // Python: _wait_for_event(conn, {RESPONSE_AUDIO_DELTA}, 30) boolean received = audioDeltaLatch.await(30, TimeUnit.SECONDS); @@ -130,7 +130,7 @@ private void doTestLongTtsVadDuration(String model, String apiVersion) throws In } // ===== test_realtime_service_with_turn_detection_multilingual ===== - // Python: models × semanticVadParams, api_versions=[2025-10-01, 2026-01-01-preview] + // Python: models × semanticVadParams, api_versions=[2025-10-01, 2026-04-10] // Uses AzureSemanticVadMultilingual(**semantic_vad_params) static Stream multilingualParams() { @@ -179,7 +179,7 @@ private void doTestMultilingual(String description, String model, TurnDetection VoiceLiveSessionAsyncClient session = null; Disposable subscription = null; try { - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); subscription = session.receiveEvents().subscribe(event -> { @@ -209,8 +209,8 @@ private void doTestMultilingual(String description, String model, TurnDetection session.sendEvent(new ClientEventSessionUpdate(sessionOptions)).block(SEND_TIMEOUT); waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); // Python uses _collect_event which collects events over a timeout period Thread.sleep(EVENT_TIMEOUT_SECONDS * 1000); @@ -231,7 +231,7 @@ private void doTestMultilingual(String description, String model, TurnDetection // ===== test_realtime_service_with_eou ===== // Python: model=gpt-4o, turn_detection_cls × end_of_detection combinations // 6 combos: ServerVad/AzureSemanticVad/AzureSemanticVadMultilingual × AzureSemanticDetection/AzureSemanticDetectionEn - // api_versions=[2025-10-01, 2026-01-01-preview] + // api_versions=[2025-10-01, 2026-04-10] static Stream eouParams() { return withApiVersions(Stream.of( @@ -296,7 +296,7 @@ private void doTestEou(String description, TurnDetection turnDetection, String a VoiceLiveSessionAsyncClient session = null; Disposable subscription = null; try { - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); subscription = session.receiveEvents().subscribe(event -> { @@ -329,9 +329,10 @@ private void doTestEou(String description, TurnDetection turnDetection, String a session.sendEvent(new ClientEventSessionUpdate(sessionOptions)).block(SEND_TIMEOUT); waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); // Python: _get_trailing_silence_bytes(duration_s=0.5) - session.sendInputAudio(getTrailingSilenceBytes(DEFAULT_SAMPLE_RATE, 0.5)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes(DEFAULT_SAMPLE_RATE, 0.5))) + .block(SEND_TIMEOUT); // Python: _collect_event(conn, event_type=ServerEventType.RESPONSE_DONE) Thread.sleep(EVENT_TIMEOUT_SECONDS * 1000); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveVoicePropertiesTests.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveVoicePropertiesTests.java index 90044e045f4c..d439b256d9d8 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveVoicePropertiesTests.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/livetests/VoiceLiveVoicePropertiesTests.java @@ -33,8 +33,7 @@ public class VoiceLiveVoicePropertiesTests extends VoiceLiveTestBase { static Stream voicePropertiesParams() { - return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, API_VERSIONS); } @ParameterizedTest @@ -61,7 +60,7 @@ public void testRealtimeServiceWithVoiceProperties(String model, String apiVersi = new VoiceLiveSessionOptions().setVoice(BinaryData.fromObject(voice)) .setInputAudioTranscription(getSpeechRecognitionSetting(model)); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -94,8 +93,8 @@ public void testRealtimeServiceWithVoiceProperties(String model, String apiVersi waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); - session.sendInputAudio(getTrailingSilenceBytes()).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(getTrailingSilenceBytes())).block(SEND_TIMEOUT); boolean received = responseLatch.await(EVENT_TIMEOUT_SECONDS, java.util.concurrent.TimeUnit.SECONDS); @@ -110,8 +109,7 @@ public void testRealtimeServiceWithVoiceProperties(String model, String apiVersi } static Stream audioTimestampAndVisemeParams() { - return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, - new String[] { API_VERSION_GA, API_VERSION_PREVIEW }); + return crossProduct(new String[] { "gpt-realtime", "gpt-4.1" }, API_VERSIONS); } @ParameterizedTest @@ -133,10 +131,11 @@ public void testRealtimeServiceWithAudioTimestampAndViseme(String model, String try { VoiceLiveSessionOptions sessionOptions = new VoiceLiveSessionOptions() .setVoice(BinaryData.fromObject(new AzureStandardVoice("en-US-NancyNeural"))) - .setAnimation(new AnimationOptions().setOutputs(Arrays.asList(AnimationOutputType.VISEME_ID))) + .setAnimationOptions( + new AnimationOptions().setOutputTypes(Arrays.asList(AnimationOutputType.VISEME_ID))) .setOutputAudioTimestampTypes(Arrays.asList(AudioTimestampType.WORD)); - session = client.startSession(model).block(SESSION_TIMEOUT); + session = client.startSession(model, null).block(SESSION_TIMEOUT); Assertions.assertNotNull(session, "Session should be created successfully"); @@ -171,7 +170,7 @@ public void testRealtimeServiceWithAudioTimestampAndViseme(String model, String waitForSetup(); - session.sendInputAudio(audioData).block(SEND_TIMEOUT); + session.sendInputAudio(BinaryData.fromBytes(audioData)).block(SEND_TIMEOUT); Thread.sleep(10000); collectingEvents.set(false); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/AgentSessionConfigTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/AgentSessionConfigTest.java index 7beb7d875e0f..49c14e3c2993 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/AgentSessionConfigTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/AgentSessionConfigTest.java @@ -5,14 +5,9 @@ import org.junit.jupiter.api.Test; -import java.util.Map; - import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * Unit tests for {@link AgentSessionConfig}. @@ -83,78 +78,4 @@ void testOptionalPropertiesDefaultToNull() { assertNull(config.getAuthenticationIdentityClientId()); assertNull(config.getFoundryResourceOverride()); } - - @Test - void testToQueryParametersWithRequiredOnly() { - // Arrange - AgentSessionConfig config = new AgentSessionConfig("my-agent", "my-project"); - - // Act - Map params = config.toQueryParameters(); - - // Assert - assertNotNull(params); - assertEquals(2, params.size()); - assertEquals("my-agent", params.get("agent-name")); - assertEquals("my-project", params.get("agent-project-name")); - } - - @Test - void testToQueryParametersWithAllOptions() { - // Arrange - AgentSessionConfig config = new AgentSessionConfig("my-agent", "my-project").setAgentVersion("2.0") - .setConversationId("conversation-xyz") - .setAuthenticationIdentityClientId("auth-client-id") - .setFoundryResourceOverride("override-resource"); - - // Act - Map params = config.toQueryParameters(); - - // Assert - assertNotNull(params); - assertEquals(6, params.size()); - assertEquals("my-agent", params.get("agent-name")); - assertEquals("my-project", params.get("agent-project-name")); - assertEquals("2.0", params.get("agent-version")); - assertEquals("conversation-xyz", params.get("conversation-id")); - assertEquals("auth-client-id", params.get("agent-authentication-identity-client-id")); - assertEquals("override-resource", params.get("foundry-resource-override")); - } - - @Test - void testToQueryParametersExcludesEmptyStrings() { - // Arrange - AgentSessionConfig config - = new AgentSessionConfig("my-agent", "my-project").setAgentVersion("").setConversationId(""); - - // Act - Map params = config.toQueryParameters(); - - // Assert - assertNotNull(params); - assertEquals(2, params.size()); - assertTrue(params.containsKey("agent-name")); - assertTrue(params.containsKey("agent-project-name")); - assertFalse(params.containsKey("agent-version")); - assertFalse(params.containsKey("conversation-id")); - } - - @Test - void testToQueryParametersWithSomeOptionalParams() { - // Arrange - AgentSessionConfig config = new AgentSessionConfig("supervisor", "ai-project").setAgentVersion("1.5"); - - // Act - Map params = config.toQueryParameters(); - - // Assert - assertNotNull(params); - assertEquals(3, params.size()); - assertEquals("supervisor", params.get("agent-name")); - assertEquals("ai-project", params.get("agent-project-name")); - assertEquals("1.5", params.get("agent-version")); - assertFalse(params.containsKey("conversation-id")); - assertFalse(params.containsKey("agent-authentication-identity-client-id")); - assertFalse(params.containsKey("foundry-resource-override")); - } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/AvatarAndAudioBufferEventsTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/AvatarAndAudioBufferEventsTest.java index dc0a1c127a64..fd5f4f415742 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/AvatarAndAudioBufferEventsTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/AvatarAndAudioBufferEventsTest.java @@ -60,7 +60,7 @@ void testAvatarSwitchToIdleDeserialization() { void testAvatarSwitchToSpeakingPolymorphicViaSessionUpdate() { String json = "{\"type\":\"session.avatar.switch_to_speaking\",\"event_id\":\"e3\",\"turn_id\":\"t3\"}"; - SessionUpdate update = BinaryData.fromString(json).toObject(SessionUpdate.class); + SessionServerEvent update = BinaryData.fromString(json).toObject(SessionServerEvent.class); assertTrue(update instanceof ServerEventSessionAvatarSwitchToSpeaking, "Expected ServerEventSessionAvatarSwitchToSpeaking, got " + update.getClass()); @@ -112,7 +112,7 @@ void testServerEventOutputAudioBufferClearedDeserialization() { void testServerEventOutputAudioBufferClearedPolymorphicViaSessionUpdate() { String json = "{\"type\":\"output_audio_buffer.cleared\",\"event_id\":\"e7\"}"; - SessionUpdate update = BinaryData.fromString(json).toObject(SessionUpdate.class); + SessionServerEvent update = BinaryData.fromString(json).toObject(SessionServerEvent.class); assertTrue(update instanceof ServerEventOutputAudioBufferCleared, "Expected ServerEventOutputAudioBufferCleared, got " + update.getClass()); @@ -155,7 +155,7 @@ void testClientEventOutputAudioBufferClearRoundTrip() { void testClientEventOutputAudioBufferClearPolymorphicViaClientEvent() { ClientEventOutputAudioBufferClear original = new ClientEventOutputAudioBufferClear().setEventId("clear-3"); - ClientEvent deserialized = BinaryData.fromObject(original).toObject(ClientEvent.class); + SessionClientEvent deserialized = BinaryData.fromObject(original).toObject(SessionClientEvent.class); assertTrue(deserialized instanceof ClientEventOutputAudioBufferClear, "Expected ClientEventOutputAudioBufferClear, got " + deserialized.getClass()); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/MCPApprovalTypeTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/McpApprovalTypeTest.java similarity index 58% rename from sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/MCPApprovalTypeTest.java rename to sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/McpApprovalTypeTest.java index be50ec40bc89..c7bf75fca87b 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/MCPApprovalTypeTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/McpApprovalTypeTest.java @@ -12,39 +12,39 @@ import static org.junit.jupiter.api.Assertions.assertTrue; /** - * Unit tests for {@link MCPApprovalType}. + * Unit tests for {@link McpApprovalType}. */ -class MCPApprovalTypeTest { +class McpApprovalTypeTest { @Test void testNeverApprovalType() { // Assert - assertNotNull(MCPApprovalType.NEVER); - assertEquals("never", MCPApprovalType.NEVER.toString()); + assertNotNull(McpApprovalType.NEVER); + assertEquals("never", McpApprovalType.NEVER.toString()); } @Test void testAlwaysApprovalType() { // Assert - assertNotNull(MCPApprovalType.ALWAYS); - assertEquals("always", MCPApprovalType.ALWAYS.toString()); + assertNotNull(McpApprovalType.ALWAYS); + assertEquals("always", McpApprovalType.ALWAYS.toString()); } @Test void testFromString() { // Act - MCPApprovalType never = MCPApprovalType.fromString("never"); - MCPApprovalType always = MCPApprovalType.fromString("always"); + McpApprovalType never = McpApprovalType.fromString("never"); + McpApprovalType always = McpApprovalType.fromString("always"); // Assert - assertEquals(MCPApprovalType.NEVER, never); - assertEquals(MCPApprovalType.ALWAYS, always); + assertEquals(McpApprovalType.NEVER, never); + assertEquals(McpApprovalType.ALWAYS, always); } @Test void testFromStringWithCustomValue() { // Act - MCPApprovalType custom = MCPApprovalType.fromString("custom-approval-type"); + McpApprovalType custom = McpApprovalType.fromString("custom-approval-type"); // Assert assertNotNull(custom); @@ -54,20 +54,20 @@ void testFromStringWithCustomValue() { @Test void testValues() { // Act - Collection values = MCPApprovalType.values(); + Collection values = McpApprovalType.values(); // Assert assertNotNull(values); assertTrue(values.size() >= 2); // At least NEVER and ALWAYS - assertTrue(values.contains(MCPApprovalType.NEVER)); - assertTrue(values.contains(MCPApprovalType.ALWAYS)); + assertTrue(values.contains(McpApprovalType.NEVER)); + assertTrue(values.contains(McpApprovalType.ALWAYS)); } @Test void testEquality() { // Arrange - MCPApprovalType never1 = MCPApprovalType.fromString("never"); - MCPApprovalType never2 = MCPApprovalType.NEVER; + McpApprovalType never1 = McpApprovalType.fromString("never"); + McpApprovalType never2 = McpApprovalType.NEVER; // Assert assertEquals(never1, never2); @@ -77,9 +77,9 @@ void testEquality() { @Test void testCaseInsensitivity() { // Act - MCPApprovalType lowercase = MCPApprovalType.fromString("never"); - MCPApprovalType uppercase = MCPApprovalType.fromString("NEVER"); - MCPApprovalType mixedCase = MCPApprovalType.fromString("Never"); + McpApprovalType lowercase = McpApprovalType.fromString("never"); + McpApprovalType uppercase = McpApprovalType.fromString("NEVER"); + McpApprovalType mixedCase = McpApprovalType.fromString("Never"); // Assert - ExpandableStringEnum is typically case-sensitive for string matching // but creates new instances for different cases diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/MCPServerEventTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/McpServerEventTest.java similarity index 99% rename from sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/MCPServerEventTest.java rename to sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/McpServerEventTest.java index b7a04394c10d..d196418dcb14 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/MCPServerEventTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/McpServerEventTest.java @@ -12,7 +12,7 @@ /** * Unit tests for MCP server event classes. */ -class MCPServerEventTest { +class McpServerEventTest { @Test void testServerEventMcpListToolsInProgress() { diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/MCPServerTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/McpServerTest.java similarity index 88% rename from sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/MCPServerTest.java rename to sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/McpServerTest.java index 40bc9ec6ccfa..3d0bc720338d 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/MCPServerTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/McpServerTest.java @@ -20,17 +20,17 @@ import static org.junit.jupiter.api.Assertions.assertSame; /** - * Unit tests for {@link MCPServer}. + * Unit tests for {@link McpServer}. */ -class MCPServerTest { +class McpServerTest { private static final String TEST_SERVER_LABEL = "test-server"; private static final String TEST_SERVER_URL = "http://localhost:8080"; - private MCPServer mcpServer; + private McpServer mcpServer; @BeforeEach void setUp() { - mcpServer = new MCPServer(TEST_SERVER_LABEL, TEST_SERVER_URL); + mcpServer = new McpServer(TEST_SERVER_LABEL, TEST_SERVER_URL); } @Test @@ -46,7 +46,7 @@ void testConstructorWithValidParameters() { void testConstructorWithNullServerLabel() { // Act & Assert assertDoesNotThrow(() -> { - MCPServer server = new MCPServer(null, TEST_SERVER_URL); + McpServer server = new McpServer(null, TEST_SERVER_URL); assertNull(server.getServerLabel()); }); } @@ -55,7 +55,7 @@ void testConstructorWithNullServerLabel() { void testConstructorWithNullServerUrl() { // Act & Assert assertDoesNotThrow(() -> { - MCPServer server = new MCPServer(TEST_SERVER_LABEL, null); + McpServer server = new McpServer(TEST_SERVER_LABEL, null); assertNull(server.getServerUrl()); }); } @@ -66,7 +66,7 @@ void testSetAndGetAuthorization() { String authorization = "Bearer test-token"; // Act - MCPServer result = mcpServer.setAuthorization(authorization); + McpServer result = mcpServer.setAuthorization(authorization); // Assert assertEquals(authorization, mcpServer.getAuthorization()); @@ -90,7 +90,7 @@ void testSetAndGetHeaders() { headers.put("X-Custom-Header", "test-value"); // Act - MCPServer result = mcpServer.setHeaders(headers); + McpServer result = mcpServer.setHeaders(headers); // Assert assertEquals(headers, mcpServer.getHeaders()); @@ -127,7 +127,7 @@ void testSetAndGetAllowedTools() { List allowedTools = Arrays.asList("tool1", "tool2", "tool3"); // Act - MCPServer result = mcpServer.setAllowedTools(allowedTools); + McpServer result = mcpServer.setAllowedTools(allowedTools); // Assert assertEquals(allowedTools, mcpServer.getAllowedTools()); @@ -160,10 +160,10 @@ void testSetAllowedToolsWithNull() { @Test void testSetAndGetRequireApproval() { // Arrange - BinaryData requireApproval = BinaryData.fromObject(MCPApprovalType.ALWAYS); + BinaryData requireApproval = BinaryData.fromObject(McpApprovalType.ALWAYS); // Act - MCPServer result = mcpServer.setRequireApproval(requireApproval); + McpServer result = mcpServer.setRequireApproval(requireApproval); // Assert assertEquals(requireApproval, mcpServer.getRequireApproval()); @@ -185,7 +185,7 @@ void testTypeIsAlwaysMCP() { assertEquals(ToolType.MCP, mcpServer.getType()); // Create another instance to verify consistency - MCPServer anotherServer = new MCPServer("another-server", "http://localhost:9090"); + McpServer anotherServer = new McpServer("another-server", "http://localhost:9090"); assertEquals(ToolType.MCP, anotherServer.getType()); } @@ -196,10 +196,10 @@ void testFluentConfiguration() { Map headers = new HashMap<>(); headers.put("X-API-Key", "secret"); List allowedTools = Arrays.asList("tool1", "tool2"); - BinaryData requireApproval = BinaryData.fromObject(MCPApprovalType.NEVER); + BinaryData requireApproval = BinaryData.fromObject(McpApprovalType.NEVER); // Act - Test fluent method chaining - MCPServer result = mcpServer.setAuthorization(authorization) + McpServer result = mcpServer.setAuthorization(authorization) .setHeaders(headers) .setAllowedTools(allowedTools) .setRequireApproval(requireApproval); @@ -244,8 +244,8 @@ void testJsonSerializationRoundtrip() { @Test void testMultipleInstancesAreIndependent() { // Arrange - MCPServer server1 = new MCPServer("server1", "http://server1.com"); - MCPServer server2 = new MCPServer("server2", "http://server2.com"); + McpServer server1 = new McpServer("server1", "http://server1.com"); + McpServer server2 = new McpServer("server2", "http://server2.com"); server1.setAuthorization("token1"); server2.setAuthorization("token2"); @@ -259,13 +259,13 @@ void testMultipleInstancesAreIndependent() { @Test void testComplexRequireApprovalConfiguration() { - // Test with MCPApprovalType.ALWAYS - BinaryData alwaysApproval = BinaryData.fromObject(MCPApprovalType.ALWAYS); + // Test with McpApprovalType.ALWAYS + BinaryData alwaysApproval = BinaryData.fromObject(McpApprovalType.ALWAYS); mcpServer.setRequireApproval(alwaysApproval); assertEquals(alwaysApproval, mcpServer.getRequireApproval()); - // Test with MCPApprovalType.NEVER - BinaryData neverApproval = BinaryData.fromObject(MCPApprovalType.NEVER); + // Test with McpApprovalType.NEVER + BinaryData neverApproval = BinaryData.fromObject(McpApprovalType.NEVER); mcpServer.setRequireApproval(neverApproval); assertEquals(neverApproval, mcpServer.getRequireApproval()); } diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/RequestImageContentPartTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/RequestImageContentPartTest.java index 11757ce01d11..997d1339e434 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/RequestImageContentPartTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/RequestImageContentPartTest.java @@ -32,10 +32,10 @@ void testSetAndGetUrl() { String imageUrl = "https://example.com/image.jpg"; // Act - RequestImageContentPart result = imagePart.setUrl(imageUrl); + RequestImageContentPart result = imagePart.setImageUrl(imageUrl); // Assert - assertEquals(imageUrl, imagePart.getUrl()); + assertEquals(imageUrl, imagePart.getImageUrl()); assertEquals(imagePart, result); // Fluent API } @@ -55,7 +55,7 @@ void testSetAndGetDetail() { @Test void testFromJsonWithUrl() { // Arrange - String json = "{\"type\":\"input_image\",\"url\":\"https://example.com/test.png\"}"; + String json = "{\"type\":\"input_image\",\"image_url\":\"https://example.com/test.png\"}"; BinaryData data = BinaryData.fromString(json); // Act @@ -64,14 +64,14 @@ void testFromJsonWithUrl() { // Assert assertNotNull(imagePart); assertEquals(ContentPartType.INPUT_IMAGE, imagePart.getType()); - assertEquals("https://example.com/test.png", imagePart.getUrl()); + assertEquals("https://example.com/test.png", imagePart.getImageUrl()); assertNull(imagePart.getDetail()); } @Test void testFromJsonWithAllFields() { // Arrange - String json = "{\"type\":\"input_image\",\"url\":\"https://example.com/image.jpg\",\"detail\":\"high\"}"; + String json = "{\"type\":\"input_image\",\"image_url\":\"https://example.com/image.jpg\",\"detail\":\"high\"}"; BinaryData data = BinaryData.fromString(json); // Act @@ -80,14 +80,14 @@ void testFromJsonWithAllFields() { // Assert assertNotNull(imagePart); assertEquals(ContentPartType.INPUT_IMAGE, imagePart.getType()); - assertEquals("https://example.com/image.jpg", imagePart.getUrl()); + assertEquals("https://example.com/image.jpg", imagePart.getImageUrl()); assertEquals(RequestImageContentPartDetail.HIGH, imagePart.getDetail()); } @Test void testJsonRoundTrip() { // Arrange - RequestImageContentPart original = new RequestImageContentPart().setUrl("https://example.com/photo.png") + RequestImageContentPart original = new RequestImageContentPart().setImageUrl("https://example.com/photo.png") .setDetail(RequestImageContentPartDetail.AUTO); // Act @@ -97,14 +97,14 @@ void testJsonRoundTrip() { // Assert assertNotNull(deserialized); assertEquals(original.getType(), deserialized.getType()); - assertEquals(original.getUrl(), deserialized.getUrl()); + assertEquals(original.getImageUrl(), deserialized.getImageUrl()); assertEquals(original.getDetail(), deserialized.getDetail()); } @Test void testWithLowDetail() { // Arrange - String json = "{\"type\":\"input_image\",\"url\":\"https://example.com/low-res.jpg\",\"detail\":\"low\"}"; + String json = "{\"type\":\"input_image\",\"image_url\":\"https://example.com/low-res.jpg\",\"detail\":\"low\"}"; BinaryData data = BinaryData.fromString(json); // Act @@ -117,7 +117,7 @@ void testWithLowDetail() { @Test void testWithAutoDetail() { // Arrange - String json = "{\"type\":\"input_image\",\"url\":\"https://example.com/auto.jpg\",\"detail\":\"auto\"}"; + String json = "{\"type\":\"input_image\",\"image_url\":\"https://example.com/auto.jpg\",\"detail\":\"auto\"}"; BinaryData data = BinaryData.fromString(json); // Act @@ -130,12 +130,12 @@ void testWithAutoDetail() { @Test void testFluentApi() { // Act - RequestImageContentPart imagePart = new RequestImageContentPart().setUrl("https://example.com/fluent.png") + RequestImageContentPart imagePart = new RequestImageContentPart().setImageUrl("https://example.com/fluent.png") .setDetail(RequestImageContentPartDetail.HIGH); // Assert assertNotNull(imagePart); - assertEquals("https://example.com/fluent.png", imagePart.getUrl()); + assertEquals("https://example.com/fluent.png", imagePart.getImageUrl()); assertEquals(RequestImageContentPartDetail.HIGH, imagePart.getDetail()); } } diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPApprovalRequestItemTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpApprovalRequestItemTest.java similarity index 83% rename from sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPApprovalRequestItemTest.java rename to sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpApprovalRequestItemTest.java index 083ccd097a78..2be0335a5e96 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPApprovalRequestItemTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpApprovalRequestItemTest.java @@ -11,9 +11,9 @@ import static org.junit.jupiter.api.Assertions.assertNull; /** - * Unit tests for {@link ResponseMCPApprovalRequestItem}. + * Unit tests for {@link ResponseMcpApprovalRequestItem}. */ -class ResponseMCPApprovalRequestItemTest { +class ResponseMcpApprovalRequestItemTest { @Test void testFromJsonWithRequiredFields() { @@ -23,8 +23,8 @@ void testFromJsonWithRequiredFields() { + "\"name\":\"sensitive-tool\"," + "\"server_label\":\"production-server\"" + "}"; // Act - ResponseMCPApprovalRequestItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalRequestItem.class); + ResponseMcpApprovalRequestItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalRequestItem.class); // Assert assertNotNull(item); @@ -42,8 +42,8 @@ void testFromJsonWithArguments() { + "\"arguments\":\"{\\\"resource_id\\\":\\\"res-123\\\"}\"" + "}"; // Act - ResponseMCPApprovalRequestItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalRequestItem.class); + ResponseMcpApprovalRequestItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalRequestItem.class); // Assert assertNotNull(item); @@ -60,8 +60,8 @@ void testTypeIsAlwaysMcpApprovalRequest() { + "\"type\":\"mcp_approval_request\"," + "\"name\":\"tool\"," + "\"server_label\":\"server\"" + "}"; // Act - ResponseMCPApprovalRequestItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalRequestItem.class); + ResponseMcpApprovalRequestItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalRequestItem.class); // Assert assertEquals(ItemType.MCP_APPROVAL_REQUEST, item.getType()); @@ -75,8 +75,8 @@ void testWithNullArguments() { + "\"name\":\"no-arg-tool\"," + "\"server_label\":\"test-server\"" + "}"; // Act - ResponseMCPApprovalRequestItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalRequestItem.class); + ResponseMcpApprovalRequestItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalRequestItem.class); // Assert assertNotNull(item); @@ -91,14 +91,14 @@ void testJsonRoundTrip() { + "\"arguments\":\"{\\\"backup_type\\\":\\\"full\\\"}\"" + "}"; // Act - ResponseMCPApprovalRequestItem item - = BinaryData.fromString(originalJson).toObject(ResponseMCPApprovalRequestItem.class); + ResponseMcpApprovalRequestItem item + = BinaryData.fromString(originalJson).toObject(ResponseMcpApprovalRequestItem.class); String serializedJson = BinaryData.fromObject(item).toString(); // Assert assertNotNull(serializedJson); - ResponseMCPApprovalRequestItem deserializedItem - = BinaryData.fromString(serializedJson).toObject(ResponseMCPApprovalRequestItem.class); + ResponseMcpApprovalRequestItem deserializedItem + = BinaryData.fromString(serializedJson).toObject(ResponseMcpApprovalRequestItem.class); assertEquals(item.getId(), deserializedItem.getId()); assertEquals(item.getName(), deserializedItem.getName()); assertEquals(item.getServerLabel(), deserializedItem.getServerLabel()); @@ -114,8 +114,8 @@ void testComplexToolArguments() { + "\"arguments\":\"" + complexArgs.replace("\"", "\\\"") + "\"" + "}"; // Act - ResponseMCPApprovalRequestItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalRequestItem.class); + ResponseMcpApprovalRequestItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalRequestItem.class); // Assert assertNotNull(item.getArguments()); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPApprovalResponseItemTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpApprovalResponseItemTest.java similarity index 83% rename from sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPApprovalResponseItemTest.java rename to sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpApprovalResponseItemTest.java index e388f4907bcd..b14b1fc628f3 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPApprovalResponseItemTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpApprovalResponseItemTest.java @@ -13,9 +13,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; /** - * Unit tests for {@link ResponseMCPApprovalResponseItem}. + * Unit tests for {@link ResponseMcpApprovalResponseItem}. */ -class ResponseMCPApprovalResponseItemTest { +class ResponseMcpApprovalResponseItemTest { @Test void testFromJsonWithApprove() { @@ -24,8 +24,8 @@ void testFromJsonWithApprove() { + "\"type\":\"mcp_approval_response\"," + "\"approval_request_id\":\"req-123\"," + "\"approve\":true" + "}"; // Act - ResponseMCPApprovalResponseItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalResponseItem.class); + ResponseMcpApprovalResponseItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalResponseItem.class); // Assert assertNotNull(item); @@ -43,8 +43,8 @@ void testFromJsonWithDeny() { + "\"approval_request_id\":\"req-456\"," + "\"approve\":false" + "}"; // Act - ResponseMCPApprovalResponseItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalResponseItem.class); + ResponseMcpApprovalResponseItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalResponseItem.class); // Assert assertNotNull(item); @@ -61,8 +61,8 @@ void testFromJsonWithReason() { + "\"reason\":\"Security policy violation\"" + "}"; // Act - ResponseMCPApprovalResponseItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalResponseItem.class); + ResponseMcpApprovalResponseItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalResponseItem.class); // Assert assertNotNull(item); @@ -77,8 +77,8 @@ void testTypeIsAlwaysMcpApprovalResponse() { + "\"type\":\"mcp_approval_response\"," + "\"approval_request_id\":\"req-999\"," + "\"approve\":true" + "}"; // Act - ResponseMCPApprovalResponseItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalResponseItem.class); + ResponseMcpApprovalResponseItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalResponseItem.class); // Assert assertEquals(ItemType.MCP_APPROVAL_RESPONSE, item.getType()); @@ -91,8 +91,8 @@ void testWithNullReason() { + "\"type\":\"mcp_approval_response\"," + "\"approval_request_id\":\"req-111\"," + "\"approve\":true" + "}"; // Act - ResponseMCPApprovalResponseItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalResponseItem.class); + ResponseMcpApprovalResponseItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalResponseItem.class); // Assert assertNotNull(item); @@ -107,14 +107,14 @@ void testJsonRoundTrip() { + "\"reason\":\"User denied the action\"" + "}"; // Act - ResponseMCPApprovalResponseItem item - = BinaryData.fromString(originalJson).toObject(ResponseMCPApprovalResponseItem.class); + ResponseMcpApprovalResponseItem item + = BinaryData.fromString(originalJson).toObject(ResponseMcpApprovalResponseItem.class); String serializedJson = BinaryData.fromObject(item).toString(); // Assert assertNotNull(serializedJson); - ResponseMCPApprovalResponseItem deserializedItem - = BinaryData.fromString(serializedJson).toObject(ResponseMCPApprovalResponseItem.class); + ResponseMcpApprovalResponseItem deserializedItem + = BinaryData.fromString(serializedJson).toObject(ResponseMcpApprovalResponseItem.class); assertEquals(item.getId(), deserializedItem.getId()); assertEquals(item.getApprovalRequestId(), deserializedItem.getApprovalRequestId()); assertEquals(item.isApprove(), deserializedItem.isApprove()); @@ -130,8 +130,8 @@ void testApprovalWithDetailedReason() { + "\"reason\":\"" + detailedReason + "\"" + "}"; // Act - ResponseMCPApprovalResponseItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalResponseItem.class); + ResponseMcpApprovalResponseItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalResponseItem.class); // Assert assertNotNull(item); @@ -147,8 +147,8 @@ void testApprovalApprovedWithReason() { + "\"reason\":\"User explicitly confirmed the action\"" + "}"; // Act - ResponseMCPApprovalResponseItem item - = BinaryData.fromString(json).toObject(ResponseMCPApprovalResponseItem.class); + ResponseMcpApprovalResponseItem item + = BinaryData.fromString(json).toObject(ResponseMcpApprovalResponseItem.class); // Assert assertTrue(item.isApprove()); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPCallItemTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpCallItemTest.java similarity index 85% rename from sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPCallItemTest.java rename to sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpCallItemTest.java index a089e75bbe84..75bc0e94dfc8 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPCallItemTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpCallItemTest.java @@ -11,9 +11,9 @@ import static org.junit.jupiter.api.Assertions.assertNull; /** - * Unit tests for {@link ResponseMCPCallItem}. + * Unit tests for {@link ResponseMcpCallItem}. */ -class ResponseMCPCallItemTest { +class ResponseMcpCallItemTest { @Test void testFromJsonWithRequiredFields() { @@ -23,7 +23,7 @@ void testFromJsonWithRequiredFields() { + "\"name\":\"test-tool\"" + "}"; // Act - ResponseMCPCallItem item = BinaryData.fromString(json).toObject(ResponseMCPCallItem.class); + ResponseMcpCallItem item = BinaryData.fromString(json).toObject(ResponseMcpCallItem.class); // Assert assertNotNull(item); @@ -43,7 +43,7 @@ void testFromJsonWithAllFields() { + "\"error\":{\"message\":\"error occurred\"}" + "}"; // Act - ResponseMCPCallItem item = BinaryData.fromString(json).toObject(ResponseMCPCallItem.class); + ResponseMcpCallItem item = BinaryData.fromString(json).toObject(ResponseMcpCallItem.class); // Assert assertNotNull(item); @@ -63,7 +63,7 @@ void testTypeIsAlwaysMcpCall() { + "\"arguments\":\"{}\"," + "\"server_label\":\"server\"," + "\"name\":\"tool\"" + "}"; // Act - ResponseMCPCallItem item = BinaryData.fromString(json).toObject(ResponseMCPCallItem.class); + ResponseMcpCallItem item = BinaryData.fromString(json).toObject(ResponseMcpCallItem.class); // Assert assertEquals(ItemType.MCP_CALL, item.getType()); @@ -76,7 +76,7 @@ void testWithNullOptionalFields() { + "\"arguments\":\"{\\\"test\\\":true}\"," + "\"server_label\":\"label\"," + "\"name\":\"toolname\"" + "}"; // Act - ResponseMCPCallItem item = BinaryData.fromString(json).toObject(ResponseMCPCallItem.class); + ResponseMcpCallItem item = BinaryData.fromString(json).toObject(ResponseMcpCallItem.class); // Assert assertNotNull(item); @@ -93,14 +93,14 @@ void testJsonRoundTrip() { + "\"name\":\"test-tool\"," + "\"output\":\"result\"" + "}"; // Act - ResponseMCPCallItem item = BinaryData.fromString(originalJson).toObject(ResponseMCPCallItem.class); + ResponseMcpCallItem item = BinaryData.fromString(originalJson).toObject(ResponseMcpCallItem.class); String serializedJson = BinaryData.fromObject(item).toString(); // Assert assertNotNull(serializedJson); // Deserialize again to verify round-trip - ResponseMCPCallItem deserializedItem - = BinaryData.fromString(serializedJson).toObject(ResponseMCPCallItem.class); + ResponseMcpCallItem deserializedItem + = BinaryData.fromString(serializedJson).toObject(ResponseMcpCallItem.class); assertEquals(item.getId(), deserializedItem.getId()); assertEquals(item.getArguments(), deserializedItem.getArguments()); assertEquals(item.getServerLabel(), deserializedItem.getServerLabel()); @@ -116,7 +116,7 @@ void testComplexArgumentsJson() { + "\"name\":\"complex-tool\"" + "}"; // Act - ResponseMCPCallItem item = BinaryData.fromString(json).toObject(ResponseMCPCallItem.class); + ResponseMcpCallItem item = BinaryData.fromString(json).toObject(ResponseMcpCallItem.class); // Assert assertNotNull(item.getArguments()); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPListToolItemTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpListToolItemTest.java similarity index 85% rename from sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPListToolItemTest.java rename to sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpListToolItemTest.java index 8f433cae6786..31d58c0129d1 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMCPListToolItemTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/ResponseMcpListToolItemTest.java @@ -13,9 +13,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; /** - * Unit tests for {@link ResponseMCPListToolItem}. + * Unit tests for {@link ResponseMcpListToolItem}. */ -class ResponseMCPListToolItemTest { +class ResponseMcpListToolItemTest { @Test void testFromJsonWithEmptyTools() { @@ -24,7 +24,7 @@ void testFromJsonWithEmptyTools() { + "\"tools\":[]," + "\"server_label\":\"test-server\"" + "}"; // Act - ResponseMCPListToolItem item = BinaryData.fromString(json).toObject(ResponseMCPListToolItem.class); + ResponseMcpListToolItem item = BinaryData.fromString(json).toObject(ResponseMcpListToolItem.class); // Assert assertNotNull(item); @@ -45,7 +45,7 @@ void testFromJsonWithMultipleTools() { + " \"input_schema\":{\"type\":\"object\"}" + " }" + "]" + "}"; // Act - ResponseMCPListToolItem item = BinaryData.fromString(json).toObject(ResponseMCPListToolItem.class); + ResponseMcpListToolItem item = BinaryData.fromString(json).toObject(ResponseMcpListToolItem.class); // Assert assertNotNull(item); @@ -54,7 +54,7 @@ void testFromJsonWithMultipleTools() { assertNotNull(item.getTools()); assertEquals(2, item.getTools().size()); - List tools = item.getTools(); + List tools = item.getTools(); assertEquals("get_weather", tools.get(0).getName()); assertEquals("Get weather information", tools.get(0).getDescription()); assertEquals("send_email", tools.get(1).getName()); @@ -68,7 +68,7 @@ void testTypeIsAlwaysMcpListTools() { + "\"tools\":[]," + "\"server_label\":\"test\"" + "}"; // Act - ResponseMCPListToolItem item = BinaryData.fromString(json).toObject(ResponseMCPListToolItem.class); + ResponseMcpListToolItem item = BinaryData.fromString(json).toObject(ResponseMcpListToolItem.class); // Assert assertEquals(ItemType.MCP_LIST_TOOLS, item.getType()); @@ -84,13 +84,13 @@ void testJsonRoundTrip() { + "]" + "}"; // Act - ResponseMCPListToolItem item = BinaryData.fromString(originalJson).toObject(ResponseMCPListToolItem.class); + ResponseMcpListToolItem item = BinaryData.fromString(originalJson).toObject(ResponseMcpListToolItem.class); String serializedJson = BinaryData.fromObject(item).toString(); // Assert assertNotNull(serializedJson); - ResponseMCPListToolItem deserializedItem - = BinaryData.fromString(serializedJson).toObject(ResponseMCPListToolItem.class); + ResponseMcpListToolItem deserializedItem + = BinaryData.fromString(serializedJson).toObject(ResponseMcpListToolItem.class); assertEquals(item.getId(), deserializedItem.getId()); assertEquals(item.getServerLabel(), deserializedItem.getServerLabel()); assertEquals(item.getTools().size(), deserializedItem.getTools().size()); @@ -108,12 +108,12 @@ void testToolsWithComplexSchema() { + " \"required\":[\"query\"]" + " }" + " }" + "]" + "}"; // Act - ResponseMCPListToolItem item = BinaryData.fromString(json).toObject(ResponseMCPListToolItem.class); + ResponseMcpListToolItem item = BinaryData.fromString(json).toObject(ResponseMcpListToolItem.class); // Assert assertNotNull(item); assertEquals(1, item.getTools().size()); - MCPTool tool = item.getTools().get(0); + McpTool tool = item.getTools().get(0); assertEquals("search", tool.getName()); assertEquals("Search for items", tool.getDescription()); assertNotNull(tool.getInputSchema()); @@ -129,12 +129,12 @@ void testToolsWithAnnotations() { + " \"annotations\":{\"version\":\"1.0\",\"author\":\"test\"}" + " }" + "]" + "}"; // Act - ResponseMCPListToolItem item = BinaryData.fromString(json).toObject(ResponseMCPListToolItem.class); + ResponseMcpListToolItem item = BinaryData.fromString(json).toObject(ResponseMcpListToolItem.class); // Assert assertNotNull(item); assertEquals(1, item.getTools().size()); - MCPTool tool = item.getTools().get(0); + McpTool tool = item.getTools().get(0); assertEquals("annotated_tool", tool.getName()); assertNotNull(tool.getAnnotations()); } @@ -151,7 +151,7 @@ void testMultipleToolsFromSameServer() { + " {\"name\":\"tool5\",\"input_schema\":{\"type\":\"object\"}}" + "]" + "}"; // Act - ResponseMCPListToolItem item = BinaryData.fromString(json).toObject(ResponseMCPListToolItem.class); + ResponseMcpListToolItem item = BinaryData.fromString(json).toObject(ResponseMcpListToolItem.class); // Assert assertEquals(5, item.getTools().size()); diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/TranscriptionAndIncludeOptionsTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/TranscriptionAndIncludeOptionsTest.java index 9be1614a3c0e..056ecb8412d4 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/TranscriptionAndIncludeOptionsTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/TranscriptionAndIncludeOptionsTest.java @@ -104,16 +104,16 @@ void testTranscriptionCompletedWithLogprobsAndPhrases() { assertEquals(0, event.getContentIndex()); assertEquals("hello world", event.getTranscript()); - List logprobs = event.getLogprobs(); + List logprobs = event.getLogProbs(); assertNotNull(logprobs); assertEquals(2, logprobs.size()); assertEquals("hello", logprobs.get(0).getToken()); - assertEquals(-0.12, logprobs.get(0).getLogprob()); + assertEquals(-0.12, logprobs.get(0).getLogProb()); assertNotNull(logprobs.get(0).getBytes()); assertEquals(5, logprobs.get(0).getBytes().size()); assertEquals(Integer.valueOf(104), logprobs.get(0).getBytes().get(0)); assertEquals(" world", logprobs.get(1).getToken()); - assertEquals(-0.34, logprobs.get(1).getLogprob()); + assertEquals(-0.34, logprobs.get(1).getLogProb()); List phrases = event.getPhrases(); assertNotNull(phrases); @@ -141,7 +141,7 @@ void testTranscriptionCompletedWithoutLogprobsOrPhrases() { assertEquals("hi", event.getTranscript()); assertEquals(3, event.getContentIndex()); - assertNull(event.getLogprobs()); + assertNull(event.getLogProbs()); assertNull(event.getPhrases()); } @@ -158,11 +158,11 @@ void testTranscriptionCompletedJsonRoundTripPreservesArrays() { SessionUpdateConversationItemInputAudioTranscriptionCompleted roundTripped = BinaryData.fromObject(original) .toObject(SessionUpdateConversationItemInputAudioTranscriptionCompleted.class); - assertNotNull(roundTripped.getLogprobs()); - assertEquals(1, roundTripped.getLogprobs().size()); - assertEquals("hi", roundTripped.getLogprobs().get(0).getToken()); - assertEquals(-0.5, roundTripped.getLogprobs().get(0).getLogprob()); - assertEquals(Arrays.asList(104, 105), roundTripped.getLogprobs().get(0).getBytes()); + assertNotNull(roundTripped.getLogProbs()); + assertEquals(1, roundTripped.getLogProbs().size()); + assertEquals("hi", roundTripped.getLogProbs().get(0).getToken()); + assertEquals(-0.5, roundTripped.getLogProbs().get(0).getLogProb()); + assertEquals(Arrays.asList(104, 105), roundTripped.getLogProbs().get(0).getBytes()); assertNotNull(roundTripped.getPhrases()); assertEquals(1, roundTripped.getPhrases().size()); @@ -178,14 +178,14 @@ void testTranscriptionCompletedPolymorphicViaSessionUpdate() { + "\"logprobs\":[{\"token\":\"yo\",\"logprob\":-0.1,\"bytes\":[121,111]}]," + "\"phrases\":[{\"offset_milliseconds\":0,\"duration_milliseconds\":50,\"text\":\"yo\"}]}"; - SessionUpdate update = BinaryData.fromString(json).toObject(SessionUpdate.class); + SessionServerEvent update = BinaryData.fromString(json).toObject(SessionServerEvent.class); assertTrue(update instanceof SessionUpdateConversationItemInputAudioTranscriptionCompleted, "Expected SessionUpdateConversationItemInputAudioTranscriptionCompleted, got " + update.getClass()); SessionUpdateConversationItemInputAudioTranscriptionCompleted typed = (SessionUpdateConversationItemInputAudioTranscriptionCompleted) update; - assertNotNull(typed.getLogprobs()); - assertEquals(1, typed.getLogprobs().size()); + assertNotNull(typed.getLogProbs()); + assertEquals(1, typed.getLogProbs().size()); assertNotNull(typed.getPhrases()); assertEquals(1, typed.getPhrases().size()); } @@ -286,9 +286,9 @@ void testOutputTokenDetailsReasoningTokens() { OutputTokenDetails details = BinaryData.fromString(json).toObject(OutputTokenDetails.class); - assertEquals(10, details.getTextTokens()); - assertEquals(20, details.getAudioTokens()); - assertEquals(Integer.valueOf(7), details.getReasoningTokens()); + assertEquals(10, details.getTextTokenCount()); + assertEquals(20, details.getAudioTokenCount()); + assertEquals(Integer.valueOf(7), details.getReasoningTokenCount()); } @Test @@ -297,7 +297,7 @@ void testOutputTokenDetailsReasoningTokensNullable() { OutputTokenDetails details = BinaryData.fromString(json).toObject(OutputTokenDetails.class); - assertNull(details.getReasoningTokens()); + assertNull(details.getReasoningTokenCount()); } // -------- ResponseAudioTranscriptAnnotationAdded -------- diff --git a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/WebAndFileSearchTest.java b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/WebAndFileSearchTest.java index 68c7a6d35024..fbcf546b1b92 100644 --- a/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/WebAndFileSearchTest.java +++ b/sdk/voicelive/azure-ai-voicelive/src/test/java/com/azure/ai/voicelive/models/WebAndFileSearchTest.java @@ -231,7 +231,7 @@ void testWebSearchCallCompletedPolymorphicViaSessionUpdate() { String json = "{\"type\":\"response.web_search_call.completed\",\"event_id\":\"e4\"," + "\"response_id\":\"r4\",\"item_id\":\"i4\",\"output_index\":2,\"sequence_number\":7}"; - SessionUpdate update = BinaryData.fromString(json).toObject(SessionUpdate.class); + SessionServerEvent update = BinaryData.fromString(json).toObject(SessionServerEvent.class); assertTrue(update instanceof ServerEventResponseWebSearchCallCompleted, "Expected ServerEventResponseWebSearchCallCompleted, got " + update.getClass()); diff --git a/sdk/voicelive/azure-ai-voicelive/tsp-location.yaml b/sdk/voicelive/azure-ai-voicelive/tsp-location.yaml index 5dca041d3058..e0aa3c5e6d9c 100644 --- a/sdk/voicelive/azure-ai-voicelive/tsp-location.yaml +++ b/sdk/voicelive/azure-ai-voicelive/tsp-location.yaml @@ -1,4 +1,4 @@ directory: specification/ai/data-plane/VoiceLive -commit: 1336b57a1c46df56e5190738f06504b65fad5ca9 +commit: eca370c584051b74254a685f9b7f60c9683a9c26 repo: Azure/azure-rest-api-specs additionalDirectories: