mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
Minor cleanup/reorg
This commit is contained in:
@@ -75,7 +75,7 @@ var workflow = builder.WithName("HandleSurveyResponse").Build();
|
||||
|
||||
FunctionsApplication.CreateBuilder(args)
|
||||
.ConfigureFunctionsWebApplication()
|
||||
//.ConfigureDurableAgents(options => options.AddAIAgent(agent))
|
||||
.ConfigureDurableAgents(options => options.AddAIAgent(agent))
|
||||
.ConfigureDurableOptions(options =>
|
||||
{
|
||||
// Configure workflows
|
||||
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
// Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
using Microsoft.Azure.Functions.Worker.Builder;
|
||||
using Microsoft.Azure.Functions.Worker.Core.FunctionMetadata;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace Microsoft.Agents.AI.Hosting.AzureFunctions;
|
||||
|
||||
/// <summary>
|
||||
/// Shared configuration logic for durable agents and workflows.
|
||||
/// This class consolidates common service registrations used by both
|
||||
/// <see cref="FunctionsApplicationBuilderExtensions.ConfigureDurableAgents"/> and
|
||||
/// <see cref="DurableOptionsExtensions.ConfigureDurableOptions"/>.
|
||||
/// </summary>
|
||||
internal static class CoreAgentConfigurationExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Registers the core agent services required for durable agents.
|
||||
/// </summary>
|
||||
/// <param name="builder">The functions application builder.</param>
|
||||
/// <returns>The functions application builder for method chaining.</returns>
|
||||
internal static FunctionsApplicationBuilder RegisterCoreAgentServices(this FunctionsApplicationBuilder builder)
|
||||
{
|
||||
builder.Services.TryAddSingleton<IFunctionsAgentOptionsProvider>(_ =>
|
||||
new DefaultFunctionsAgentOptionsProvider(DurableAgentsOptionsExtensions.GetAgentOptionsSnapshot()));
|
||||
|
||||
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IFunctionMetadataTransformer, DurableAgentFunctionMetadataTransformer>());
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers the workflow-specific services required for durable workflows.
|
||||
/// This should only be called when workflows are configured in the application.
|
||||
/// </summary>
|
||||
/// <param name="builder">The functions application builder.</param>
|
||||
/// <returns>The functions application builder for method chaining.</returns>
|
||||
internal static FunctionsApplicationBuilder RegisterWorkflowServices(this FunctionsApplicationBuilder builder)
|
||||
{
|
||||
builder.Services.TryAddSingleton<DurableWorkflowRunner>();
|
||||
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IFunctionMetadataTransformer, DurableWorkflowFunctionMetadataTransformer>());
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configures the middleware and executor for handling built-in function execution.
|
||||
/// This is shared by both agents and workflows, handling Agent HTTP, MCP tool,
|
||||
/// workflow orchestration, and Entity invocations.
|
||||
/// </summary>
|
||||
/// <param name="builder">The functions application builder.</param>
|
||||
/// <returns>The functions application builder for method chaining.</returns>
|
||||
internal static FunctionsApplicationBuilder ConfigureBuiltInFunctionMiddleware(this FunctionsApplicationBuilder builder)
|
||||
{
|
||||
builder.Services.TryAddSingleton<BuiltInFunctionExecutor>();
|
||||
|
||||
builder.UseWhen<BuiltInFunctionExecutionMiddleware>(static context =>
|
||||
IsBuiltInFunction(context.FunctionDefinition.EntryPoint));
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
private static bool IsBuiltInFunction(string? entryPoint)
|
||||
{
|
||||
return string.Equals(entryPoint, BuiltInFunctions.RunAgentHttpFunctionEntryPoint, StringComparison.Ordinal)
|
||||
|| string.Equals(entryPoint, BuiltInFunctions.RunAgentMcpToolFunctionEntryPoint, StringComparison.Ordinal)
|
||||
|| string.Equals(entryPoint, BuiltInFunctions.RunWorkflowOrechstrtationHttpFunctionEntryPoint, StringComparison.Ordinal)
|
||||
|| string.Equals(entryPoint, BuiltInFunctions.InvokeWorkflowActivityFunctionEntryPoint, StringComparison.Ordinal)
|
||||
|| string.Equals(entryPoint, BuiltInFunctions.RunAgentEntityFunctionEntryPoint, StringComparison.Ordinal);
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,10 @@
|
||||
using Microsoft.Agents.AI.DurableTask;
|
||||
using Microsoft.Azure.Functions.Worker;
|
||||
using Microsoft.Azure.Functions.Worker.Builder;
|
||||
using Microsoft.Azure.Functions.Worker.Core.FunctionMetadata;
|
||||
using Microsoft.DurableTask;
|
||||
using Microsoft.DurableTask.Worker;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Microsoft.Agents.AI.Hosting.AzureFunctions;
|
||||
@@ -41,23 +39,23 @@ public static class DurableOptionsExtensions
|
||||
|
||||
RegisterServices(builder, options);
|
||||
ConfigureAgents(builder, options);
|
||||
ConfigureMiddleware(builder);
|
||||
ConfigureWorkflowOrchestration(builder);
|
||||
builder.ConfigureBuiltInFunctionMiddleware();
|
||||
|
||||
if (options.Workflows.Workflows.Count > 0)
|
||||
{
|
||||
builder.RegisterWorkflowServices();
|
||||
ConfigureWorkflowOrchestration(builder);
|
||||
}
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
private static void RegisterServices(FunctionsApplicationBuilder builder, DurableOptions options)
|
||||
{
|
||||
builder.Services.AddSingleton(options);
|
||||
builder.Services.AddSingleton(options.Agents);
|
||||
builder.Services.AddSingleton<BuiltInFunctionExecutor>();
|
||||
builder.Services.AddSingleton<DurableWorkflowRunner>();
|
||||
builder.Services.AddSingleton<IFunctionMetadataTransformer, DurableAgentFunctionMetadataTransformer>();
|
||||
builder.Services.AddSingleton<IFunctionMetadataTransformer, DurableWorkflowFunctionMetadataTransformer>();
|
||||
builder.Services.TryAddSingleton(options);
|
||||
builder.Services.TryAddSingleton(options.Agents); // backward compatibility. can be removed in future.
|
||||
|
||||
builder.Services.TryAddSingleton<IFunctionsAgentOptionsProvider>(_ =>
|
||||
new DefaultFunctionsAgentOptionsProvider(DurableAgentsOptionsExtensions.GetAgentOptionsSnapshot()));
|
||||
builder.RegisterCoreAgentServices();
|
||||
}
|
||||
|
||||
private static void ConfigureAgents(FunctionsApplicationBuilder builder, DurableOptions options)
|
||||
@@ -81,21 +79,6 @@ public static class DurableOptionsExtensions
|
||||
});
|
||||
}
|
||||
|
||||
private static void ConfigureMiddleware(FunctionsApplicationBuilder builder)
|
||||
{
|
||||
builder.UseWhen<BuiltInFunctionExecutionMiddleware>(static context =>
|
||||
IsBuiltInFunction(context.FunctionDefinition.EntryPoint));
|
||||
}
|
||||
|
||||
private static bool IsBuiltInFunction(string? entryPoint)
|
||||
{
|
||||
return string.Equals(entryPoint, BuiltInFunctions.RunAgentHttpFunctionEntryPoint, StringComparison.Ordinal)
|
||||
|| string.Equals(entryPoint, BuiltInFunctions.RunAgentMcpToolFunctionEntryPoint, StringComparison.Ordinal)
|
||||
|| string.Equals(entryPoint, BuiltInFunctions.RunWorkflowOrechstrtationHttpFunctionEntryPoint, StringComparison.Ordinal)
|
||||
|| string.Equals(entryPoint, BuiltInFunctions.InvokeWorkflowActivityFunctionEntryPoint, StringComparison.Ordinal)
|
||||
|| string.Equals(entryPoint, BuiltInFunctions.RunAgentEntityFunctionEntryPoint, StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
private static void ConfigureWorkflowOrchestration(FunctionsApplicationBuilder builder)
|
||||
{
|
||||
// Registering a single orchestration function to handle all workflow runs.
|
||||
|
||||
+4
-16
@@ -2,10 +2,6 @@
|
||||
|
||||
using Microsoft.Agents.AI.DurableTask;
|
||||
using Microsoft.Azure.Functions.Worker.Builder;
|
||||
using Microsoft.Azure.Functions.Worker.Core.FunctionMetadata;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace Microsoft.Agents.AI.Hosting.AzureFunctions;
|
||||
|
||||
@@ -24,24 +20,16 @@ public static class FunctionsApplicationBuilderExtensions
|
||||
this FunctionsApplicationBuilder builder,
|
||||
Action<DurableAgentsOptions> configure)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(builder);
|
||||
ArgumentNullException.ThrowIfNull(configure);
|
||||
|
||||
// The main agent services registration is done in Microsoft.DurableTask.Agents.
|
||||
builder.Services.ConfigureDurableAgents(configure);
|
||||
|
||||
builder.Services.TryAddSingleton<IFunctionsAgentOptionsProvider>(_ =>
|
||||
new DefaultFunctionsAgentOptionsProvider(DurableAgentsOptionsExtensions.GetAgentOptionsSnapshot()));
|
||||
builder.RegisterCoreAgentServices();
|
||||
|
||||
builder.Services.AddSingleton<IFunctionMetadataTransformer, DurableAgentFunctionMetadataTransformer>();
|
||||
|
||||
// Handling of built-in function execution for Agent HTTP, MCP tool, or Entity invocations.
|
||||
builder.UseWhen<BuiltInFunctionExecutionMiddleware>(static context =>
|
||||
string.Equals(context.FunctionDefinition.EntryPoint, BuiltInFunctions.RunAgentHttpFunctionEntryPoint, StringComparison.Ordinal) ||
|
||||
string.Equals(context.FunctionDefinition.EntryPoint, BuiltInFunctions.RunAgentMcpToolFunctionEntryPoint, StringComparison.Ordinal) ||
|
||||
string.Equals(context.FunctionDefinition.EntryPoint, BuiltInFunctions.RunWorkflowOrechstrtationHttpFunctionEntryPoint, StringComparison.Ordinal) ||
|
||||
string.Equals(context.FunctionDefinition.EntryPoint, BuiltInFunctions.InvokeWorkflowActivityFunctionEntryPoint, StringComparison.Ordinal) ||
|
||||
string.Equals(context.FunctionDefinition.EntryPoint, BuiltInFunctions.RunAgentEntityFunctionEntryPoint, StringComparison.Ordinal));
|
||||
builder.Services.AddSingleton<BuiltInFunctionExecutor>();
|
||||
// Configure middleware for built-in function execution.
|
||||
builder.ConfigureBuiltInFunctionMiddleware();
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user