mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
Minor cleanup. MCP tool works.
This commit is contained in:
@@ -7,7 +7,7 @@ namespace SingleAgent;
|
||||
/// <summary>
|
||||
/// Parses an Order ID from a string input and returns an Order object populated.
|
||||
/// </summary>
|
||||
internal sealed class OrderLookupExecutor() : Executor<string, Order>("OrderLookup")
|
||||
internal sealed class OrderLookup() : Executor<string, Order>("OrderLookup")
|
||||
{
|
||||
public override async ValueTask<Order> HandleAsync(string message, IWorkflowContext context, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -19,7 +19,7 @@ internal sealed class OrderLookupExecutor() : Executor<string, Order>("OrderLook
|
||||
/// <summary>
|
||||
/// Enriches an Order object with additional information.
|
||||
/// </summary>
|
||||
internal sealed class OrderEnricherExecutor() : Executor<Order, Order>("EnrichOrder")
|
||||
internal sealed class OrderEnrich() : Executor<Order, Order>("EnrichOrder")
|
||||
{
|
||||
public override async ValueTask<Order> HandleAsync(Order message, IWorkflowContext context, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -33,7 +33,7 @@ internal sealed class OrderEnricherExecutor() : Executor<Order, Order>("EnrichOr
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PaymentProcessorExecutor() : Executor<Order, Order>("ProcessPayment")
|
||||
internal sealed class PaymentProcessor() : Executor<Order, Order>("ProcessPayment")
|
||||
{
|
||||
public override async ValueTask<Order> HandleAsync(Order message, IWorkflowContext context, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -43,6 +43,14 @@ internal sealed class PaymentProcessorExecutor() : Executor<Order, Order>("Proce
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class OrderCancel() : Executor<Order, string>("OrderCancel")
|
||||
{
|
||||
public override async ValueTask<string> HandleAsync(Order message, IWorkflowContext context, CancellationToken cancellationToken = default)
|
||||
{
|
||||
return $"Order {message.Id} cancelled at {DateTime.UtcNow:g} UTC.";
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class Order
|
||||
{
|
||||
public Order(string id, decimal amount)
|
||||
|
||||
@@ -20,12 +20,10 @@ Func<string, string> orderParserFunc = input =>
|
||||
};
|
||||
var orderParserExecutor = orderParserFunc.BindAsExecutor("OrderParser");
|
||||
|
||||
Func<string, string> cancelOrderFunc = input => $"Cancelled order:{input}";
|
||||
var orderArchiver = orderParserFunc.BindAsExecutor("OrderArchiver");
|
||||
|
||||
OrderLookupExecutor orderLookupExecutor = new();
|
||||
OrderEnricherExecutor orderEnricherExeecutor = new();
|
||||
PaymentProcessorExecutor paymentProcessorExecutor = new();
|
||||
OrderLookup orderLookupExecutor = new();
|
||||
OrderEnrich orderEnricherExeecutor = new();
|
||||
PaymentProcessor paymentProcessorExecutor = new();
|
||||
OrderCancel orderArchiverExecutor = new();
|
||||
|
||||
Workflow processOrder = new WorkflowBuilder(orderParserExecutor)
|
||||
.WithName("FulfillOrder")
|
||||
@@ -39,12 +37,16 @@ Workflow cancelOrder = new WorkflowBuilder(orderParserExecutor)
|
||||
.WithName("CancelOrder")
|
||||
.WithDescription("Cancel an order")
|
||||
.AddEdge(orderParserExecutor, orderLookupExecutor)
|
||||
.AddEdge(orderLookupExecutor, orderArchiver)
|
||||
.AddEdge(orderLookupExecutor, orderArchiverExecutor)
|
||||
.Build();
|
||||
|
||||
var host = FunctionsApplication.CreateBuilder(args)
|
||||
.ConfigureFunctionsWebApplication()
|
||||
.ConfigureDurableOptions(options => options.Workflows.AddWorkflow([processOrder, cancelOrder]))
|
||||
.ConfigureDurableOptions(options =>
|
||||
{
|
||||
options.Workflows.AddWorkflow(processOrder);
|
||||
options.Workflows.AddWorkflow(cancelOrder, true);
|
||||
})
|
||||
.Build();
|
||||
|
||||
host.Run();
|
||||
|
||||
@@ -6,12 +6,10 @@ using Microsoft.Agents.AI.DurableTask;
|
||||
using Microsoft.Azure.Functions.Worker;
|
||||
using Microsoft.Azure.Functions.Worker.Extensions.Mcp;
|
||||
using Microsoft.Azure.Functions.Worker.Http;
|
||||
using Microsoft.DurableTask;
|
||||
using Microsoft.DurableTask.Client;
|
||||
using Microsoft.DurableTask.Worker.Grpc;
|
||||
using Microsoft.Extensions.AI;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Microsoft.Agents.AI.Hosting.AzureFunctions;
|
||||
|
||||
@@ -244,9 +242,7 @@ internal static class BuiltInFunctions
|
||||
string workflowName = context.Name;
|
||||
string orchestrationFunctionName = WorkflowNamingHelper.ToOrchestrationFunctionName(workflowName);
|
||||
|
||||
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(
|
||||
orchestrationFunctionName,
|
||||
new DurableWorkflowRunRequest { WorkflowName = workflowName, Input = input });
|
||||
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(orchestrationFunctionName, input);
|
||||
|
||||
// Wait for the orchestration to complete and return the result
|
||||
OrchestrationMetadata? metadata = await client.WaitForInstanceCompletionAsync(
|
||||
@@ -257,26 +253,6 @@ internal static class BuiltInFunctions
|
||||
return metadata?.ReadOutputAs<string>();
|
||||
}
|
||||
|
||||
#pragma warning disable DURTASK001 // Durable analyzer complained
|
||||
public static Task<DurableWorkflowRunResult> WorkflowRunnerOrchestrationAsync(TaskOrchestrationContext context, DurableWorkflowRunRequest input)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(context);
|
||||
|
||||
ILogger logger = context.CreateReplaySafeLogger("BuiltInFunctions");
|
||||
logger.LogInformation("WorkflowRunnerOrchestrationAsync function called.");
|
||||
|
||||
FunctionContext? functionContext = context.GetFunctionContext();
|
||||
if (functionContext == null)
|
||||
{
|
||||
throw new InvalidOperationException("FunctionContext is not available in the orchestration context.");
|
||||
}
|
||||
|
||||
var workFlowName = input.WorkflowName;
|
||||
|
||||
return Task.FromResult(new DurableWorkflowRunResult(workFlowName, workFlowName));
|
||||
}
|
||||
#pragma warning restore DURTASK001
|
||||
|
||||
/// <summary>
|
||||
/// Creates an error response with the specified status code and error message.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user