mirror of
				https://github.com/microsoft/autogen.git
				synced 2025-10-31 01:40:58 +00:00 
			
		
		
		
	 6bea055b26
			
		
	
	
		6bea055b26
		
			
		
	
	
	
	
		
			
			* add IHandle for object type * rename handle -> handleObject * remove duplicate file header setting * update * remove AgentId * fix format
		
			
				
	
	
		
			107 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| // Copyright (c) Microsoft Corporation. All rights reserved.
 | |
| // TwoAgentTest.cs
 | |
| 
 | |
| #pragma warning disable xUnit1013
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Threading.Tasks;
 | |
| using FluentAssertions;
 | |
| using Xunit.Abstractions;
 | |
| 
 | |
| namespace AutoGen.Tests;
 | |
| 
 | |
| public partial class TwoAgentTest
 | |
| {
 | |
|     private ITestOutputHelper _output;
 | |
|     public TwoAgentTest(ITestOutputHelper output)
 | |
|     {
 | |
|         _output = output;
 | |
|     }
 | |
| 
 | |
|     [Function]
 | |
|     public async Task<string> GetWeather(string city)
 | |
|     {
 | |
|         return $"[GetWeatherFunction] The weather in {city} is sunny";
 | |
|     }
 | |
| 
 | |
|     [ApiKeyFact("AZURE_OPENAI_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_DEPLOY_NAME")]
 | |
|     public async Task TwoAgentWeatherChatTestAsync()
 | |
|     {
 | |
|         var key = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY") ?? throw new ArgumentException("AZURE_OPENAI_API_KEY is not set");
 | |
|         var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new ArgumentException("AZURE_OPENAI_ENDPOINT is not set");
 | |
|         var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOY_NAME") ?? throw new ArgumentException("AZURE_OPENAI_DEPLOY_NAME is not set");
 | |
|         var config = new AzureOpenAIConfig(endpoint, deploymentName, key);
 | |
| 
 | |
|         var assistant = new AssistantAgent(
 | |
|             "assistant",
 | |
|             llmConfig: new ConversableAgentConfig
 | |
|             {
 | |
|                 ConfigList = new[] { config },
 | |
|                 FunctionContracts = new[]
 | |
|                 {
 | |
|                     this.GetWeatherFunctionContract,
 | |
|                 },
 | |
|             })
 | |
|             .RegisterMiddleware(async (msgs, option, agent, ct) =>
 | |
|             {
 | |
|                 var reply = await agent.GenerateReplyAsync(msgs, option, ct);
 | |
|                 var format = reply.FormatMessage();
 | |
|                 _output.WriteLine(format);
 | |
| 
 | |
|                 return reply;
 | |
|             });
 | |
| 
 | |
|         var user = new UserProxyAgent(
 | |
|             name: "user",
 | |
|             functionMap: new Dictionary<string, Func<string, Task<string>>>
 | |
|             {
 | |
|                 { this.GetWeatherFunctionContract.Name, this.GetWeatherWrapper },
 | |
|             })
 | |
|             .RegisterMiddleware(async (msgs, option, agent, ct) =>
 | |
|             {
 | |
|                 var lastMessage = msgs.Last();
 | |
|                 if (lastMessage.GetToolCalls()?.FirstOrDefault()?.FunctionName != null)
 | |
|                 {
 | |
|                     return await agent.GenerateReplyAsync(msgs, option, ct);
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     // terminate message
 | |
|                     return new TextMessage(Role.Assistant, GroupChatExtension.TERMINATE);
 | |
|                 }
 | |
|             })
 | |
|             .RegisterMiddleware(async (msgs, option, agent, ct) =>
 | |
|             {
 | |
|                 var reply = await agent.GenerateReplyAsync(msgs, option, ct);
 | |
|                 var format = reply.FormatMessage();
 | |
|                 _output.WriteLine(format);
 | |
| 
 | |
|                 return reply;
 | |
|             });
 | |
| 
 | |
|         var chatHistory = (await user.InitiateChatAsync(assistant, "what's weather in New York", 10)).ToArray();
 | |
| 
 | |
|         // the last message should be terminated message
 | |
|         chatHistory.Last().IsGroupChatTerminateMessage().Should().BeTrue();
 | |
| 
 | |
|         // the third last message should be the weather message from function
 | |
|         chatHistory[^3].GetContent().Should().Be("[GetWeatherFunction] The weather in New York is sunny");
 | |
| 
 | |
|         // the # of messages should be 5
 | |
|         chatHistory.Length.Should().Be(5);
 | |
|     }
 | |
| 
 | |
|     public async Task TwoAgentGetWeatherFunctionCallTestAsync(IAgent user, IAgent assistant)
 | |
|     {
 | |
|         var question = new TextMessage(Role.Assistant, "what's the weather in Seattle", from: user.Name);
 | |
|         var assistantReply = await assistant.SendAsync(question);
 | |
|         assistantReply.Should().BeOfType<ToolCallMessage>();
 | |
|         var toolCallResult = await user.SendAsync(chatHistory: [question, assistantReply]);
 | |
|         toolCallResult.Should().BeOfType<ToolCallResultMessage>();
 | |
|         var finalReply = await assistant.SendAsync(chatHistory: [question, assistantReply, toolCallResult]);
 | |
|         finalReply.Should().BeOfType<TextMessage>();
 | |
|         finalReply.GetContent()!.ToLower().Should().Contain("sunny");
 | |
|     }
 | |
| }
 |