From f562152b78ba6baa309c8d587c2e62c857f7bbff Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Mon, 17 Mar 2025 17:02:24 -0500 Subject: [PATCH] add instruct hooks --- .../Instructs/Functions/ExecuteTemplateFn.cs | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/Infrastructure/BotSharp.Core/Instructs/Functions/ExecuteTemplateFn.cs b/src/Infrastructure/BotSharp.Core/Instructs/Functions/ExecuteTemplateFn.cs index b09019e3..7ff892ed 100644 --- a/src/Infrastructure/BotSharp.Core/Instructs/Functions/ExecuteTemplateFn.cs +++ b/src/Infrastructure/BotSharp.Core/Instructs/Functions/ExecuteTemplateFn.cs @@ -1,4 +1,5 @@ using BotSharp.Abstraction.Functions; +using BotSharp.Abstraction.Instructs; using BotSharp.Abstraction.Instructs.Models; namespace BotSharp.Core.Instructs.Functions; @@ -23,7 +24,7 @@ public class ExecuteTemplateFn : IFunctionCallback var args = JsonSerializer.Deserialize(message.FunctionArgs); if (string.IsNullOrEmpty(args.TemplateName)) { - message.Content = $"Empty template name."; + message.Content = $"Invalid template name."; return false; } @@ -37,16 +38,18 @@ public class ExecuteTemplateFn : IFunctionCallback return false; } - var prompt = agentService.RenderedTemplate(agent, args.TemplateName); - var response = await GetAiResponse(agent, prompt); + var response = await GetAiResponse(agent, args.TemplateName); message.Content = response; return true; } - private async Task GetAiResponse(Agent agent, string text) + private async Task GetAiResponse(Agent agent, string templateName) { try { + var agentService = _services.GetRequiredService(); + var text = agentService.RenderedTemplate(agent, templateName); + var completion = CompletionProvider.GetChatCompletion(_services, provider: agent.LlmConfig?.Provider, model: agent.LlmConfig?.Model); var response = await completion.GetChatCompletions(new Agent() { @@ -56,6 +59,21 @@ public class ExecuteTemplateFn : IFunctionCallback { new(AgentRole.User, text) }); + + var hooks = _services.GetServices(); + foreach (var hook in hooks) + { + await hook.OnResponseGenerated(new InstructResponseModel + { + AgentId = agent.Id, + TemplateName = templateName, + Provider = completion.Provider, + Model = completion.Model, + UserMessage = text, + CompletionText = response.Content + }); + } + return response.Content; } catch (Exception ex)