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>
46 lines
1.9 KiB
C#
46 lines
1.9 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System.Threading.Tasks;
|
|
using Microsoft.Extensions.AI;
|
|
using Microsoft.Extensions.AI.Agents;
|
|
using Microsoft.Extensions.Logging;
|
|
using Microsoft.SemanticKernel.Agents.Runtime;
|
|
using Microsoft.SemanticKernel.Agents.Runtime.Core;
|
|
|
|
namespace Microsoft.Agents.Orchestration.Concurrent;
|
|
|
|
/// <summary>
|
|
/// An <see cref="AgentActor"/> used with the <see cref="ConcurrentOrchestration{TInput, TOutput}"/>.
|
|
/// </summary>
|
|
internal sealed class ConcurrentActor : AgentActor, IHandle<ConcurrentMessages.Request>
|
|
{
|
|
private readonly AgentType _handoffActor;
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="ConcurrentActor"/> class.
|
|
/// </summary>
|
|
/// <param name="id">The unique identifier of the agent.</param>
|
|
/// <param name="runtime">The runtime associated with the agent.</param>
|
|
/// <param name="context">The orchestration context.</param>
|
|
/// <param name="agent">An <see cref="Agent"/>.</param>
|
|
/// <param name="resultActor">Identifies the actor collecting results.</param>
|
|
/// <param name="logger">The logger to use for the actor</param>
|
|
public ConcurrentActor(AgentId id, IAgentRuntime runtime, OrchestrationContext context, Agent agent, AgentType resultActor, ILogger<ConcurrentActor>? logger = null)
|
|
: base(id, runtime, context, agent, logger)
|
|
{
|
|
this._handoffActor = resultActor;
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public async ValueTask HandleAsync(ConcurrentMessages.Request item, MessageContext messageContext)
|
|
{
|
|
this.Logger.LogConcurrentAgentInvoke(this.Id);
|
|
|
|
ChatMessage response = await this.InvokeAsync(item.Messages, messageContext.CancellationToken).ConfigureAwait(false);
|
|
|
|
this.Logger.LogConcurrentAgentResult(this.Id, response.Text);
|
|
|
|
await this.PublishMessageAsync(response.AsResultMessage(), this._handoffActor, messageContext.CancellationToken).ConfigureAwait(false);
|
|
}
|
|
}
|