mirror of
https://github.com/microsoft/autogen.git
synced 2025-07-13 03:50:51 +00:00
113 lines
3.7 KiB
C#
113 lines
3.7 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// WorkflowOrchestratorTests.cs
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using FluentAssertions;
|
|
using Xunit;
|
|
|
|
namespace AutoGen.Tests;
|
|
|
|
public class WorkflowOrchestratorTests
|
|
{
|
|
[Fact]
|
|
public async Task ItReturnNextAgentAsync()
|
|
{
|
|
var workflow = new Graph();
|
|
var alice = new EchoAgent("Alice");
|
|
var bob = new EchoAgent("Bob");
|
|
var charlie = new EchoAgent("Charlie");
|
|
workflow.AddTransition(Transition.Create(alice, bob));
|
|
workflow.AddTransition(Transition.Create(bob, charlie));
|
|
workflow.AddTransition(Transition.Create(charlie, alice));
|
|
var orchestrator = new WorkflowOrchestrator(workflow);
|
|
var context = new OrchestrationContext
|
|
{
|
|
Candidates = [alice, bob, charlie]
|
|
};
|
|
|
|
var messages = new List<IMessage>
|
|
{
|
|
new TextMessage(Role.User, "Hello, Alice", from: "Alice"),
|
|
new TextMessage(Role.User, "Hello, Bob", from: "Bob"),
|
|
new TextMessage(Role.User, "Hello, Charlie", from: "Charlie"),
|
|
};
|
|
|
|
var expected = new List<string> { "Bob", "Charlie", "Alice" };
|
|
|
|
var zip = messages.Zip(expected);
|
|
|
|
foreach (var (msg, expect) in zip)
|
|
{
|
|
context.ChatHistory = [msg];
|
|
var result = await orchestrator.GetNextSpeakerAsync(context);
|
|
Assert.Equal(expect, result!.Name);
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ItReturnNullIfNoCandidates()
|
|
{
|
|
var workflow = new Graph();
|
|
var orchestrator = new WorkflowOrchestrator(workflow);
|
|
var context = new OrchestrationContext
|
|
{
|
|
Candidates = new List<IAgent>(),
|
|
ChatHistory = new List<IMessage>
|
|
{
|
|
new TextMessage(Role.User, "Hello, Alice", from: "Alice"),
|
|
},
|
|
};
|
|
|
|
var nextAgent = await orchestrator.GetNextSpeakerAsync(context);
|
|
nextAgent.Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ItReturnNullIfNoAgentIsAvailableFromWorkflowAsync()
|
|
{
|
|
var workflow = new Graph();
|
|
var alice = new EchoAgent("Alice");
|
|
var bob = new EchoAgent("Bob");
|
|
workflow.AddTransition(Transition.Create(alice, bob));
|
|
var orchestrator = new WorkflowOrchestrator(workflow);
|
|
var context = new OrchestrationContext
|
|
{
|
|
Candidates = [alice, bob],
|
|
ChatHistory = new List<IMessage>
|
|
{
|
|
new TextMessage(Role.User, "Hello, Bob", from: "Bob"),
|
|
},
|
|
};
|
|
|
|
var nextSpeaker = await orchestrator.GetNextSpeakerAsync(context);
|
|
nextSpeaker.Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ItThrowExceptionWhenMoreThanOneAvailableAgentsFromWorkflowAsync()
|
|
{
|
|
var workflow = new Graph();
|
|
var alice = new EchoAgent("Alice");
|
|
var bob = new EchoAgent("Bob");
|
|
var charlie = new EchoAgent("Charlie");
|
|
workflow.AddTransition(Transition.Create(alice, bob));
|
|
workflow.AddTransition(Transition.Create(alice, charlie));
|
|
var orchestrator = new WorkflowOrchestrator(workflow);
|
|
var context = new OrchestrationContext
|
|
{
|
|
Candidates = [alice, bob, charlie],
|
|
ChatHistory = new List<IMessage>
|
|
{
|
|
new TextMessage(Role.User, "Hello, Bob", from: "Alice"),
|
|
},
|
|
};
|
|
|
|
var action = async () => await orchestrator.GetNextSpeakerAsync(context);
|
|
|
|
await action.Should().ThrowExactlyAsync<ArgumentException>().WithMessage("There are more than one available agents from the workflow for the next speaker.");
|
|
}
|
|
}
|