mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
84fe6c46ab
* Add AsIChatClientWithStoredOutputDisabled for ProjectResponsesClient Add extension method on ProjectResponsesClient in Microsoft.Agents.AI.AzureAI package (Azure.AI.Extensions.OpenAI namespace) mirroring the existing extension on ResponsesClient in the OpenAI package. This enables Azure AI consumers to disable server-side response storage without depending on the OpenAI package. - New ProjectResponsesClientExtensions class with AsIChatClientWithStoredOutputDisabled - Optional deploymentName parameter (model is no longer required) - Updated OpenAI counterpart doc to remove 'Required' wording for model param - Added unit tests covering null guard, inner client accessibility, StoredOutputEnabled=false, and reasoning encrypted content inclusion/exclusion Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Preserve existing RawRepresentationFactory when disabling stored output Address PR review feedback: wrap/chain the existing factory instead of replacing it, so upstream configuration (e.g., deploymentName/model defaults from AsIChatClient) is preserved. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
61 lines
2.9 KiB
C#
61 lines
2.9 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using Microsoft.Extensions.AI;
|
|
using Microsoft.Shared.DiagnosticIds;
|
|
using Microsoft.Shared.Diagnostics;
|
|
using OpenAI.Responses;
|
|
|
|
namespace Azure.AI.Extensions.OpenAI;
|
|
|
|
/// <summary>
|
|
/// Provides extension methods for <see cref="ProjectResponsesClient"/>
|
|
/// to simplify the creation of AI agents that work with Azure AI services.
|
|
/// </summary>
|
|
[Experimental(DiagnosticIds.Experiments.AIOpenAIResponses)]
|
|
public static class ProjectResponsesClientExtensions
|
|
{
|
|
/// <summary>
|
|
/// Gets an <see cref="IChatClient"/> for use with this <see cref="ProjectResponsesClient"/> that does not store responses for later retrieval.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This corresponds to setting the "store" property in the JSON representation to false.
|
|
/// </remarks>
|
|
/// <param name="responseClient">The client.</param>
|
|
/// <param name="deploymentName">Optional deployment name (model) to use for requests.</param>
|
|
/// <param name="includeReasoningEncryptedContent">
|
|
/// Includes an encrypted version of reasoning tokens in reasoning item outputs.
|
|
/// This enables reasoning items to be used in multi-turn conversations when using the Responses API statelessly
|
|
/// (like when the store parameter is set to false, or when an organization is enrolled in the zero data retention program).
|
|
/// Defaults to <see langword="true"/>.
|
|
/// </param>
|
|
/// <returns>An <see cref="IChatClient"/> that can be used to converse via the <see cref="ProjectResponsesClient"/> that does not store responses for later retrieval.</returns>
|
|
/// <exception cref="ArgumentNullException"><paramref name="responseClient"/> is <see langword="null"/>.</exception>
|
|
[Experimental(DiagnosticIds.Experiments.AgentsAIExperiments)]
|
|
public static IChatClient AsIChatClientWithStoredOutputDisabled(this ProjectResponsesClient responseClient, string? deploymentName = null, bool includeReasoningEncryptedContent = true)
|
|
{
|
|
return Throw.IfNull(responseClient)
|
|
.AsIChatClient(deploymentName)
|
|
.AsBuilder()
|
|
.ConfigureOptions(x =>
|
|
{
|
|
var previousFactory = x.RawRepresentationFactory;
|
|
x.RawRepresentationFactory = state =>
|
|
{
|
|
var responseOptions = previousFactory?.Invoke(state) as CreateResponseOptions ?? new CreateResponseOptions();
|
|
|
|
responseOptions.StoredOutputEnabled = false;
|
|
|
|
if (includeReasoningEncryptedContent &&
|
|
!responseOptions.IncludedProperties.Contains(IncludedResponseProperty.ReasoningEncryptedContent))
|
|
{
|
|
responseOptions.IncludedProperties.Add(IncludedResponseProperty.ReasoningEncryptedContent);
|
|
}
|
|
|
|
return responseOptions;
|
|
};
|
|
})
|
|
.Build();
|
|
}
|
|
}
|