add instruct hooks

This commit is contained in:
Jicheng Lu 2025-03-17 17:02:24 -05:00
parent fe63875315
commit f562152b78

View file

@ -1,4 +1,5 @@
using BotSharp.Abstraction.Functions; using BotSharp.Abstraction.Functions;
using BotSharp.Abstraction.Instructs;
using BotSharp.Abstraction.Instructs.Models; using BotSharp.Abstraction.Instructs.Models;
namespace BotSharp.Core.Instructs.Functions; namespace BotSharp.Core.Instructs.Functions;
@ -23,7 +24,7 @@ public class ExecuteTemplateFn : IFunctionCallback
var args = JsonSerializer.Deserialize<ExecuteTemplateArgs>(message.FunctionArgs); var args = JsonSerializer.Deserialize<ExecuteTemplateArgs>(message.FunctionArgs);
if (string.IsNullOrEmpty(args.TemplateName)) if (string.IsNullOrEmpty(args.TemplateName))
{ {
message.Content = $"Empty template name."; message.Content = $"Invalid template name.";
return false; return false;
} }
@ -37,16 +38,18 @@ public class ExecuteTemplateFn : IFunctionCallback
return false; return false;
} }
var prompt = agentService.RenderedTemplate(agent, args.TemplateName); var response = await GetAiResponse(agent, args.TemplateName);
var response = await GetAiResponse(agent, prompt);
message.Content = response; message.Content = response;
return true; return true;
} }
private async Task<string> GetAiResponse(Agent agent, string text) private async Task<string> GetAiResponse(Agent agent, string templateName)
{ {
try try
{ {
var agentService = _services.GetRequiredService<IAgentService>();
var text = agentService.RenderedTemplate(agent, templateName);
var completion = CompletionProvider.GetChatCompletion(_services, provider: agent.LlmConfig?.Provider, model: agent.LlmConfig?.Model); var completion = CompletionProvider.GetChatCompletion(_services, provider: agent.LlmConfig?.Provider, model: agent.LlmConfig?.Model);
var response = await completion.GetChatCompletions(new Agent() var response = await completion.GetChatCompletions(new Agent()
{ {
@ -56,6 +59,21 @@ public class ExecuteTemplateFn : IFunctionCallback
{ {
new(AgentRole.User, text) new(AgentRole.User, text)
}); });
var hooks = _services.GetServices<IInstructHook>();
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; return response.Content;
} }
catch (Exception ex) catch (Exception ex)