// Copyright (c) Microsoft. All rights reserved. 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; /// /// Extension methods for the class. /// public static class FunctionsApplicationBuilderExtensions { /// /// Configures the application to use durable agents with a builder pattern. /// /// The functions application builder. /// A delegate to configure the durable agents. /// The functions application builder. public static FunctionsApplicationBuilder ConfigureDurableAgents( this FunctionsApplicationBuilder builder, Action configure) { ArgumentNullException.ThrowIfNull(configure); // The main agent services registration is done in Microsoft.DurableTask.Agents. builder.Services.ConfigureDurableAgents(configure); builder.Services.TryAddSingleton(_ => new DefaultFunctionsAgentOptionsProvider(DurableAgentsOptionsExtensions.GetAgentOptionsSnapshot())); builder.Services.AddSingleton(); // Handling of built-in function execution for Agent HTTP, MCP tool, or Entity invocations. builder.UseWhen(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.RunAgentEntityFunctionEntryPoint, StringComparison.Ordinal)); builder.Services.AddSingleton(); return builder; } }