mirror of
https://github.com/microsoft/autogen.git
synced 2025-07-12 19:40:40 +00:00
115 lines
3.8 KiB
C#
115 lines
3.8 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// GroupChatTests.cs
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using FluentAssertions;
|
|
using Moq;
|
|
using Xunit;
|
|
|
|
namespace AutoGen.Tests;
|
|
|
|
[Trait("Category", "UnitV1")]
|
|
public class GroupChatTests
|
|
{
|
|
[Fact]
|
|
public async Task ItSendMessageTestAsync()
|
|
{
|
|
var alice = new DefaultReplyAgent("Alice", "I am alice");
|
|
var bob = new DefaultReplyAgent("Bob", "I am bob");
|
|
|
|
var groupChat = new GroupChat([alice, bob]);
|
|
|
|
var chatHistory = new List<IMessage>();
|
|
|
|
var maxRound = 10;
|
|
await foreach (var message in groupChat.SendAsync(chatHistory, maxRound))
|
|
{
|
|
chatHistory.Add(message);
|
|
}
|
|
|
|
chatHistory.Count.Should().Be(10);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ItTerminateConversationWhenAgentReturnTerminateKeyWord()
|
|
{
|
|
var alice = new DefaultReplyAgent("Alice", "I am alice");
|
|
var bob = new DefaultReplyAgent("Bob", "I am bob");
|
|
var cathy = new DefaultReplyAgent("Cathy", $"I am cathy, {GroupChatExtension.TERMINATE}");
|
|
|
|
var groupChat = new GroupChat([alice, bob, cathy]);
|
|
|
|
var chatHistory = new List<IMessage>();
|
|
|
|
var maxRound = 10;
|
|
await foreach (var message in groupChat.SendAsync(chatHistory, maxRound))
|
|
{
|
|
chatHistory.Add(message);
|
|
}
|
|
|
|
chatHistory.Count.Should().Be(3);
|
|
chatHistory.Last().From.Should().Be("Cathy");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ItSendAsyncDoesntAddDuplicateInitializeMessagesTest()
|
|
{
|
|
// fix #3268
|
|
var alice = new DefaultReplyAgent("Alice", "I am alice");
|
|
var bob = new DefaultReplyAgent("Bob", "I am bob");
|
|
var cathy = new DefaultReplyAgent("Cathy", $"I am cathy, {GroupChatExtension.TERMINATE}");
|
|
|
|
var roundRobinOrchestrator = new RoundRobinOrchestrator();
|
|
var orchestrator = Mock.Of<IOrchestrator>();
|
|
Mock.Get(orchestrator).Setup(x => x.GetNextSpeakerAsync(It.IsAny<OrchestrationContext>(), It.IsAny<CancellationToken>()))
|
|
.Returns((OrchestrationContext context, CancellationToken token) =>
|
|
{
|
|
// determine if initialize message is already sent and not added twice
|
|
context.ChatHistory.Where(x => x.From == alice.Name).Count().Should().Be(1);
|
|
|
|
return roundRobinOrchestrator.GetNextSpeakerAsync(context, token);
|
|
});
|
|
|
|
var groupChat = new GroupChat([alice, bob, cathy], orchestrator);
|
|
groupChat.AddInitializeMessage(new TextMessage(Role.User, "Hello", from: alice.Name));
|
|
|
|
var maxRound = 2;
|
|
var chatHistory = new List<IMessage>();
|
|
await foreach (var message in groupChat.SendAsync(chatHistory, maxRound))
|
|
{
|
|
chatHistory.Add(message);
|
|
}
|
|
|
|
chatHistory.Count.Should().Be(2);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ItTerminateConversationWhenNoSpeakerAvailable()
|
|
{
|
|
// fix #3306
|
|
var alice = new DefaultReplyAgent("Alice", "I am alice");
|
|
var bob = new DefaultReplyAgent("Bob", "I am bob");
|
|
var cathy = new DefaultReplyAgent("Cathy", $"I am cathy, {GroupChatExtension.TERMINATE}");
|
|
|
|
var orchestrator = Mock.Of<IOrchestrator>();
|
|
Mock.Get(orchestrator).Setup(x => x.GetNextSpeakerAsync(It.IsAny<OrchestrationContext>(), It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync((IAgent?)null);
|
|
|
|
var groupChat = new GroupChat([alice, bob, cathy], orchestrator);
|
|
|
|
var chatHistory = new List<IMessage>();
|
|
|
|
var maxRound = 10;
|
|
await foreach (var message in groupChat.SendAsync(chatHistory, maxRound))
|
|
{
|
|
chatHistory.Add(message);
|
|
}
|
|
|
|
chatHistory.Count.Should().Be(0);
|
|
}
|
|
}
|