using BotSharp.Abstraction.Functions.Models; using BotSharp.Abstraction.Planning; using BotSharp.Abstraction.Routing; namespace BotSharp.Core.Planning; public class InstructExecutor : IExecutor { private readonly IServiceProvider _services; private readonly ILogger _logger; public InstructExecutor(IServiceProvider services, ILogger logger) { _services = services; _logger = logger; } public async Task Execute(IRoutingService routing, FunctionCallFromLlm inst, RoleDialogModel message, List dialogs) { message.Instruction = inst; var handlers = _services.GetServices(); var handler = handlers.FirstOrDefault(x => x.Name == inst.Function); handler.SetDialogs(dialogs); var handled = await handler.Handle(routing, inst, message); // For client display purpose var response = dialogs.Last(); response.MessageId = message.MessageId; response.Instruction = inst; return response; } }