// Copyright (c) Microsoft. All rights reserved. using System.ClientModel; using System.ClientModel.Primitives; using System.Runtime.CompilerServices; using Microsoft.Agents.AI; using Microsoft.Extensions.AI; using OpenAI; using OpenAI.Responses; namespace AgentWebChat.Web; /// /// Is a simple frontend client which exercises the ability of exposed agent to communicate via OpenAI Responses protocol. /// internal sealed class OpenAIResponsesAgentClient(HttpClient httpClient) : AgentClientBase { public override async IAsyncEnumerable RunStreamingAsync( string agentName, IList messages, string? sessionId = null, [EnumeratorCancellation] CancellationToken cancellationToken = default) { OpenAIClientOptions options = new() { Endpoint = new Uri(httpClient.BaseAddress!, "/v1/"), Transport = new HttpClientPipelineTransport(httpClient) }; var openAiClient = new ResponsesClient(model: agentName, credential: new ApiKeyCredential("dummy-key"), options: options).AsIChatClient(); var chatOptions = new ChatOptions() { ConversationId = sessionId }; await foreach (var update in openAiClient.GetStreamingResponseAsync(messages, chatOptions, cancellationToken: cancellationToken)) { yield return new AgentResponseUpdate(update); } } }