mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
* Checkpoint * Checkpoint * Namespaces * Namespace * Cleanup * Namespace order * Fix sync * Formatting * Formatting * Namespace * Namespace order * Code convention * Naming * Naming * Text handling * Text handling * Namespace * Namespace order * Namespace ordering * Test * ValueTask * net472 * Test fix * Fix namespace (net472) * Namespace * Fix conditional namespace * Fix type expression * Compatibility and cleanup * Sample compatibility * Sample compat * Test compat * modifier order * Simply http-stub * Formating fix for unit-test * Fix test * Real fix * Test clean-up * Update dotnet/src/Microsoft.Agents.Orchestration/Handoff/HandoffOrchestration.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix build errors after merging --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Stephen Toub <stoub@microsoft.com>
56 lines
2.2 KiB
C#
56 lines
2.2 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.Extensions.AI;
|
|
|
|
namespace Microsoft.Agents.Orchestration.GroupChat;
|
|
|
|
/// <summary>
|
|
/// A <see cref="GroupChatManager"/> that selects agents in a round-robin fashion.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Subclass this class to customize filter and user interaction behavior.
|
|
/// </remarks>
|
|
public class RoundRobinGroupChatManager : GroupChatManager
|
|
{
|
|
private int _currentAgentIndex;
|
|
|
|
/// <inheritdoc/>
|
|
public override ValueTask<GroupChatManagerResult<string>> FilterResults(IReadOnlyCollection<ChatMessage> history, CancellationToken cancellationToken = default)
|
|
{
|
|
GroupChatManagerResult<string> result = new(history.LastOrDefault()?.Text ?? string.Empty) { Reason = "Default result filter provides the final chat message." };
|
|
#if !NETCOREAPP
|
|
return new ValueTask<GroupChatManagerResult<string>>(result);
|
|
#else
|
|
return ValueTask.FromResult(result);
|
|
#endif
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public override ValueTask<GroupChatManagerResult<string>> SelectNextAgent(IReadOnlyCollection<ChatMessage> history, GroupChatTeam team, CancellationToken cancellationToken = default)
|
|
{
|
|
string nextAgent = team.Skip(this._currentAgentIndex).First().Key;
|
|
this._currentAgentIndex = (this._currentAgentIndex + 1) % team.Count;
|
|
GroupChatManagerResult<string> result = new(nextAgent) { Reason = $"Selected agent at index: {this._currentAgentIndex}" };
|
|
#if !NETCOREAPP
|
|
return new ValueTask<GroupChatManagerResult<string>>(result);
|
|
#else
|
|
return ValueTask.FromResult(result);
|
|
#endif
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public override ValueTask<GroupChatManagerResult<bool>> ShouldRequestUserInput(IReadOnlyCollection<ChatMessage> history, CancellationToken cancellationToken = default)
|
|
{
|
|
GroupChatManagerResult<bool> result = new(false) { Reason = "The default round-robin group chat manager does not request user input." };
|
|
#if !NETCOREAPP
|
|
return new ValueTask<GroupChatManagerResult<bool>>(result);
|
|
#else
|
|
return ValueTask.FromResult(result);
|
|
#endif
|
|
}
|
|
}
|