mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
74879489a4
* Checkpoint * Update workflows/DeepResearch.yaml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Comment * Fix comment * Update package version * Fix nuget haxx * Checkpoint * Code complete * Testing * Message content workaround * Add sequential flow * Checkpoint * Integration test project * Checkpoint * Checkpoint cleanup * Complete * Update package --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
67 lines
2.3 KiB
C#
67 lines
2.3 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.Agents.Workflows.Declarative.Extensions;
|
|
using Microsoft.Agents.Workflows.Declarative.Interpreter;
|
|
using Microsoft.Bot.ObjectModel;
|
|
using Microsoft.Extensions.AI;
|
|
using Microsoft.Shared.Diagnostics;
|
|
|
|
namespace Microsoft.Agents.Workflows.Declarative.ObjectModel;
|
|
|
|
internal sealed class AddConversationMessageExecutor(AddConversationMessage model, WorkflowAgentProvider agentProvider, DeclarativeWorkflowState state) :
|
|
DeclarativeActionExecutor<AddConversationMessage>(model, state)
|
|
{
|
|
protected override async ValueTask<object?> ExecuteAsync(IWorkflowContext context, CancellationToken cancellationToken)
|
|
{
|
|
StringExpression conversationExpression = Throw.IfNull(this.Model.ConversationId, $"{nameof(this.Model)}.{nameof(this.Model.ConversationId)}");
|
|
string conversationId = this.State.ExpressionEngine.GetValue(conversationExpression).Value;
|
|
|
|
ChatMessage newMessage = new(this.GetRole(), [.. this.GetContent()]) { AdditionalProperties = this.GetMetadata() };
|
|
|
|
await agentProvider.CreateMessageAsync(conversationId, newMessage, cancellationToken).ConfigureAwait(false);
|
|
|
|
await this.AssignAsync(this.Model.Message?.Path, newMessage.ToRecord(), context).ConfigureAwait(false);
|
|
|
|
return default;
|
|
}
|
|
|
|
private IEnumerable<AIContent> GetContent()
|
|
{
|
|
foreach (AddConversationMessageContent content in this.Model.Content)
|
|
{
|
|
AIContent? messageContent = content.Type.Value.ToContent(this.State.Format(content.Value));
|
|
if (messageContent is not null)
|
|
{
|
|
yield return messageContent;
|
|
}
|
|
}
|
|
}
|
|
|
|
private ChatRole GetRole()
|
|
{
|
|
if (this.Model.Role is null)
|
|
{
|
|
return ChatRole.User;
|
|
}
|
|
|
|
AgentMessageRoleWrapper roleWrapper = this.State.ExpressionEngine.GetValue(this.Model.Role).Value;
|
|
|
|
return roleWrapper.Value.ToChatRole();
|
|
}
|
|
|
|
private AdditionalPropertiesDictionary? GetMetadata()
|
|
{
|
|
if (this.Model.Metadata is null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
RecordDataValue? metadataValue = this.State.ExpressionEngine.GetValue(this.Model.Metadata).Value;
|
|
|
|
return metadataValue.ToMetadata();
|
|
}
|
|
}
|