Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions sdk/ai/azure-ai-agents/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,16 @@
responses to Azure SDK `IterableStream` and Reactor `Flux` types.
- Added raw JSON WebSocket sends, complete unknown-event payloads, UTF-8 binary JSON reception, configurable receive
limits and overflow policies, and opt-in recovery from malformed events.
- Added saved-job polling resumption for memory updates and agent optimization jobs.
- Added custom WebSocket close codes and reasons, and per-event synchronous receive timeouts.
- Added synchronous and asynchronous OpenAI factory overloads accepting a native OpenAI options callback for URL, credential, headers, query parameters, and transport overrides.
- Added opt-in HTTP logging defaults through `AZURE_AI_PROJECTS_CONSOLE_LOGGING` and chunk-as-consumed SSE body logging in the OpenAI bridge, using the configured Java logging backend.
- Added realtime handshake options for session IDs, structured inputs, API versions, credential scopes, preview features, extra headers and query parameters, and same-host secure connection URL overrides.

- Added preview `BetaVoiceAgentsTelephonyClient` and `BetaVoiceAgentsTelephonyAsyncClient` for outbound call jobs and campaign management, including recipient import, validation, publishing, pausing, resuming, and cancellation.
- Added preview `BetaVoiceAgentsConversationsClient` and `BetaVoiceAgentsConversationsAsyncClient` for managing
persisted voice-agent conversations and their responses, items, and audio content.
- Added session-affinity routing configuration through `AzureCreateResponseOptions.setRoutingConfig(...)`, `RoutingConfiguration`, and `SessionAffinityConfiguration`, with response details exposed by `ModelRouterDetails.getSessionAffinity()`.
- Added preview `BetaVoiceAgentWebSocketClient`, `BetaVoiceAgentWebSocketAsyncClient`,
`BetaVoiceAgentWebSocketSessionClient`, and `BetaVoiceAgentWebSocketSessionAsyncClient` with typed realtime events,
text and PCM16 audio input, response cancellation, function-call output, persisted-conversation options, and
Expand All @@ -32,11 +36,25 @@
### Bugs Fixed

- Reject insecure voice-agent WebSocket URLs before token acquisition to prevent sending credentials over plaintext.
- Native asynchronous OpenAI factories and `ResponsesAsyncClient` now retrieve Azure tokens asynchronously, including factory-supplied custom OpenAI transports.
- Supplied empty operations with zero usage when completed memory results are omitted or null.
- Omitted multipart request and response bodies from SDK pipeline logging.
- Preserved UTF-8 characters split across reads when logging OpenAI SSE response bodies.
- Made synchronous voice-agent receive-buffer overflow signaling atomic across concurrent callbacks.
- Rejected code-upload paths without a file name with an explicit argument error.
- Agent-scoped OpenAI clients now send agent preview features, including model router controls, when
`AgentsClientBuilder.allowPreview(true)` is configured, and use an overridable API-version query parameter.
- Preserved OpenAI credential and user-agent overrides through the default Azure HTTP bridge. User-supplied pipelines retain their authentication policies.

- Added Java opt-in guidance to `403 preview_feature_required` errors when preview is disabled, preserving the service response and error details.
- Preserved explicitly supplied empty `Foundry-Features` headers instead of replacing them with automatic preview opt-ins.
- Fixed polling for telephony operations that return the `cancelled` status spelling.
- Fixed polling for optimization jobs that return the `cancelled` status spelling.

### Other Changes

- Streamed replayable code-upload content when computing SHA-256 to avoid materializing the entire upload in memory.

## 2.5.0 (2026-09-09)

### Features Added
Expand Down
46 changes: 43 additions & 3 deletions sdk/ai/azure-ai-agents/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,36 @@ ResponseService responseService = responsesClient.getResponseService();
ConversationService conversationService = openAIClient.conversations();
```

Agent-scoped OpenAI clients opt in to agent preview features when `allowPreview(true)` is configured,
and use the configured service version. Override the defaults with native OpenAI options:

```java
OpenAIClient agentClient = builder.buildAgentScopedOpenAIClient("agent-name", options -> options
.replaceHeaders("User-Agent", "my-application/1.0")
.replaceQueryParams("api-version", "v1"));
```

The callback is also available on the project-scoped and asynchronous OpenAI factory methods.
It supports URL, credential, headers, query parameters, and transport options. Explicit `Foundry-Features`
headers, including empty values and case-insensitive names, are preserved. Custom OpenAI transports bypass
the Azure pipeline. Custom Azure pipelines retain their authentication policies, which may replace
OpenAI credential overrides. The default bridge delegates authentication to OpenAI using the builder's
Entra credential unless overridden.

Set `AZURE_AI_PROJECTS_CONSOLE_LOGGING=true` to default the builder's HTTP logging to `BODY_AND_HEADERS`.
Native asynchronous OpenAI clients and `ResponsesAsyncClient` retrieve Azure tokens without blocking. Supply custom
native OpenAI transports through the factory options callback to retain this authentication. Replacing the transport
later through native `withOptions(...)` bypasses the authentication adapter and requires an explicit native credential.
Cancelling a native OpenAI operation's future does not guarantee cancellation of pending Azure token retrieval;
the native client's future decorators control cancellation propagation.
Explicit `HttpLogOptions` take precedence, including `HttpLogDetailLevel.NONE` to disable HTTP logging.
Enable INFO output in your Java logging backend (or set `AZURE_LOG_LEVEL=information` for Azure Core's
default logger). This option does not install console handlers or change other libraries' logging levels.
The default OpenAI bridge logs `text/event-stream` response chunks only as the caller reads them;
it does not pre-consume the stream. Other HTTP messages use Azure Core's logging and redaction rules.
Custom transports and custom pipelines retain their own logging configuration. Body logs are not redacted
and can contain prompts, responses, and other sensitive data; enable them only in a trusted environment.

### Realtime connection options

Use `VoiceAgentWebSocketConnectionOptions` with the synchronous or asynchronous beta voice-agent client's
Expand Down Expand Up @@ -234,9 +264,9 @@ and [AgentOptimizationAsyncSample.java](https://github.com/Azure/azure-sdk-for-j

### Memory item management

`BetaMemoryStoresClient` and `BetaMemoryStoresAsyncClient` manage memory stores and individual memory items. In addition to store-level operations, use `createMemory`, `updateMemory`, `listMemories`, `getMemory`, and `deleteMemory` to manage individual memories. `ListMemoriesOptions` supports filtering by scope and `MemoryItemKind`, including `MemoryItemKind.PROCEDURAL`. See `MemoryStoreItemsSample` and `MemoryStoreItemsAsyncSample` for complete examples.
`BetaMemoryStoresClient` and `BetaMemoryStoresAsyncClient` manage memory stores and individual memory items. In addition to store-level operations, use `createMemory`, `updateMemory`, `listMemories`, `getMemory`, and `deleteMemory` to manage individual memories. `ListMemoriesOptions` supports filtering by scope and `MemoryItemKind`, including `MemoryItemKind.PROCEDURAL`. See [MemoryStoreItemsSample.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/memory/MemoryStoreItemsSample.java) and [MemoryStoreItemsAsyncSample.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/memory/MemoryStoreItemsAsyncSample.java) for complete examples.

For conversational memory workflows, use `beginUpdateMemories` to extract memories from conversation items, `searchMemories` to retrieve relevant memories, and `deleteScope` to remove all memories for a scope. See `MemoryStoreAdvancedSample` and `MemoryStoreAdvancedAsyncSample` for complete synchronous and asynchronous examples.
For conversational memory workflows, use `beginUpdateMemories` to extract memories from conversation items, `searchMemories` to retrieve relevant memories, and `deleteScope` to remove all memories for a scope. See [MemoryStoreAdvancedSample.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/memory/MemoryStoreAdvancedSample.java) and [MemoryStoreAdvancedAsyncSample.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/memory/MemoryStoreAdvancedAsyncSample.java) for complete synchronous and asynchronous examples.

### Using OpenAI's official library

Expand Down Expand Up @@ -518,7 +548,7 @@ MemorySearchPreviewTool tool = new MemorySearchPreviewTool(memoryStore.getName()
.setUpdateDelaySeconds(1);
```

See the full sample in [MemorySearchSync.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/tools/MemorySearchSync.java) showing how to create an agent with a memory store and use it across multiple conversations.
See the full samples in [MemorySearchSync.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/tools/MemorySearchSync.java) and [MemorySearchAsync.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/tools/MemorySearchAsync.java), which show how to create an agent with a memory store and use it across multiple conversations.

---

Expand Down Expand Up @@ -1095,6 +1125,16 @@ All realtime examples require `FOUNDRY_PROJECT_ENDPOINT` and optionally use `FOU

The live audio example requires a Java Sound-compatible microphone and speaker. It streams signed, little-endian, mono PCM16 audio at 24 kHz. These examples use WebSocket transport. Although the generated protocol models include WebRTC signaling events, the Java client does not provide a WebRTC peer connection or media implementation.

### Additional end-to-end samples

All agent samples use `FOUNDRY_PROJECT_ENDPOINT`. Prompt-agent samples also use `FOUNDRY_MODEL_NAME`.

- **Agent lifecycle and structured inputs:** [CreateAgent.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/agents/CreateAgent.java), [GetAgent.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/agents/GetAgent.java), and [CreateResponseWithStructuredInput.java](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/CreateResponseWithStructuredInput.java).
- **Optimization jobs:** the [optimization samples](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/ai/azure-ai-agents/src/samples/java/com/azure/ai/agents/optimization) cover SDK polling, application-managed polling, cancellation, listing, retrieval, and deletion.
- **Advanced tools:** additional samples cover structured inputs, generated-file download, File Search streaming, non-preview Web Search, custom search, and end-to-end toolbox search.

---

### Service API versions

The client library targets the latest service API version by default.
Expand Down
Loading
Loading