// 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; /// /// Provides extension methods for /// to simplify the creation of AI agents that work with Azure AI services. /// [Experimental(DiagnosticIds.Experiments.AIOpenAIResponses)] public static class ProjectResponsesClientExtensions { /// /// Gets an for use with this that does not store responses for later retrieval. /// /// /// This corresponds to setting the "store" property in the JSON representation to false. /// /// The client. /// Optional deployment name (model) to use for requests. /// /// 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 . /// /// An that can be used to converse via the that does not store responses for later retrieval. /// is . [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(); } }