// Copyright (c) Microsoft. All rights reserved. using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Agents; using Microsoft.SemanticKernel.Agents.OpenAI; using Microsoft.SemanticKernel.ChatCompletion; using OpenAI.Assistants; namespace Agents; /// /// Demonstrate using code-interpreter with to /// produce image content displays the requested charts. /// public class OpenAIAssistant_ChartMaker(ITestOutputHelper output) : BaseAssistantTest(output) { [Fact] public async Task GenerateChartWithOpenAIAssistantAgentAsync() { // Define the assistant Assistant assistant = await this.AssistantClient.CreateAssistantAsync( this.Model, "ChartMaker", instructions: "Create charts as requested without explanation.", enableCodeInterpreter: true, metadata: SampleMetadata); // Create the agent OpenAIAssistantAgent agent = new(assistant, this.AssistantClient); AgentThread? agentThread = null; // Respond to user input try { await InvokeAgentAsync( """ Display this data using a bar-chart (not stacked): Banding Brown Pink Yellow Sum X00000 339 433 126 898 X00300 48 421 222 691 X12345 16 395 352 763 Others 23 373 156 552 Sum 426 1622 856 2904 """); await InvokeAgentAsync("Can you regenerate this same chart using the category names as the bar colors?"); } finally { if (agentThread is not null) { await agentThread.DeleteAsync(); } await this.AssistantClient.DeleteAssistantAsync(agent.Id); } // Local function to invoke agent and display the conversation messages. async Task InvokeAgentAsync(string input) { ChatMessageContent message = new(AuthorRole.User, input); this.WriteAgentChatMessage(message); await foreach (AgentResponseItem response in agent.InvokeAsync(message)) { this.WriteAgentChatMessage(response); await this.DownloadResponseImageAsync(response); agentThread = response.Thread; } } } }