// 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; using Resources; namespace Agents; /// /// Demonstrate using code-interpreter to manipulate and generate csv files with . /// public class OpenAIAssistant_FileManipulation(ITestOutputHelper output) : BaseAssistantTest(output) { [Fact] public async Task AnalyzeCSVFileUsingOpenAIAssistantAgentAsync() { await using Stream stream = EmbeddedResource.ReadStream("sales.csv")!; string fileId = await this.Client.UploadAssistantFileAsync(stream, "sales.csv"); // Define the assistant Assistant assistant = await this.AssistantClient.CreateAssistantAsync( this.Model, enableCodeInterpreter: true, codeInterpreterFileIds: [fileId], metadata: SampleMetadata); // Create the agent OpenAIAssistantAgent agent = new(assistant, this.AssistantClient); AgentThread? agentThread = null; // Respond to user input try { await InvokeAgentAsync("Which segment had the most sales?"); await InvokeAgentAsync("List the top 5 countries that generated the most profit."); await InvokeAgentAsync("Create a tab delimited file report of profit by each country per month."); } finally { if (agentThread is not null) { await agentThread.DeleteAsync(); } await this.AssistantClient.DeleteAssistantAsync(agent.Id); await this.Client.DeleteFileAsync(fileId); } // 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.DownloadResponseContentAsync(response); agentThread = response.Thread; } } } }