From fa7e387ae983a070dd68be5c3424e8ed27a1f8a1 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Wed, 17 Jul 2024 21:41:25 -0500 Subject: [PATCH 1/2] move generate image to file handler --- .../Agents/Enums/AgentUtility.cs | 7 --- .../BotSharp.Core/BotSharp.Core.csproj | 10 +--- .../BotSharp.Core/Files/FilePlugin.cs | 4 -- .../Files/Hooks/ImageGeneratorHook.cs | 52 ------------------- .../Files/Hooks/ImageGeneratorUtilityHook.cs | 9 ---- .../BotSharp.Plugin.EmailHandler.csproj | 6 +-- .../Functions/HandleEmailRequestFn.cs | 2 +- ...liquid => select_attachment_prompt.liquid} | 0 .../BotSharp.Plugin.FileHandler.csproj | 8 +++ .../Enums/UtilityName.cs | 1 + .../Functions/GenerateImageFn.cs | 4 +- .../Hooks/FileHandlerHook.cs | 2 + .../Hooks/FileHandlerUtilityHook.cs | 1 + .../functions/generate_image.json | 0 .../templates/generate_image.fn.liquid | 0 15 files changed, 18 insertions(+), 88 deletions(-) delete mode 100644 src/Infrastructure/BotSharp.Abstraction/Agents/Enums/AgentUtility.cs delete mode 100644 src/Infrastructure/BotSharp.Core/Files/Hooks/ImageGeneratorHook.cs delete mode 100644 src/Infrastructure/BotSharp.Core/Files/Hooks/ImageGeneratorUtilityHook.cs rename src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/{email_attachment_prompt.liquid => select_attachment_prompt.liquid} (100%) rename src/{Infrastructure/BotSharp.Core/Files => Plugins/BotSharp.Plugin.FileHandler}/Functions/GenerateImageFn.cs (97%) rename src/{Infrastructure/BotSharp.Core => Plugins/BotSharp.Plugin.FileHandler}/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/generate_image.json (100%) rename src/{Infrastructure/BotSharp.Core => Plugins/BotSharp.Plugin.FileHandler}/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/generate_image.fn.liquid (100%) diff --git a/src/Infrastructure/BotSharp.Abstraction/Agents/Enums/AgentUtility.cs b/src/Infrastructure/BotSharp.Abstraction/Agents/Enums/AgentUtility.cs deleted file mode 100644 index 4f477563..00000000 --- a/src/Infrastructure/BotSharp.Abstraction/Agents/Enums/AgentUtility.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace BotSharp.Abstraction.Agents.Enums; - -public class AgentUtility -{ - public const string FileReader = "file-reader"; - public const string ImageGenerator = "image-generator"; -} diff --git a/src/Infrastructure/BotSharp.Core/BotSharp.Core.csproj b/src/Infrastructure/BotSharp.Core/BotSharp.Core.csproj index 009cad30..5fd9bc4c 100644 --- a/src/Infrastructure/BotSharp.Core/BotSharp.Core.csproj +++ b/src/Infrastructure/BotSharp.Core/BotSharp.Core.csproj @@ -1,4 +1,4 @@ - + $(TargetFramework) @@ -47,9 +47,7 @@ - - @@ -157,12 +155,6 @@ PreserveNewest - - PreserveNewest - - - PreserveNewest - PreserveNewest diff --git a/src/Infrastructure/BotSharp.Core/Files/FilePlugin.cs b/src/Infrastructure/BotSharp.Core/Files/FilePlugin.cs index 17630f20..a4c7f7af 100644 --- a/src/Infrastructure/BotSharp.Core/Files/FilePlugin.cs +++ b/src/Infrastructure/BotSharp.Core/Files/FilePlugin.cs @@ -1,4 +1,3 @@ -using BotSharp.Core.Files.Hooks; using BotSharp.Core.Files.Services; using Microsoft.Extensions.Configuration; @@ -16,8 +15,5 @@ public class FilePlugin : IBotSharpPlugin public void RegisterDI(IServiceCollection services, IConfiguration config) { services.AddScoped(); - - services.AddScoped(); - services.AddScoped(); } } diff --git a/src/Infrastructure/BotSharp.Core/Files/Hooks/ImageGeneratorHook.cs b/src/Infrastructure/BotSharp.Core/Files/Hooks/ImageGeneratorHook.cs deleted file mode 100644 index dadba673..00000000 --- a/src/Infrastructure/BotSharp.Core/Files/Hooks/ImageGeneratorHook.cs +++ /dev/null @@ -1,52 +0,0 @@ -namespace BotSharp.Core.Files.Hooks; - -public class ImageGeneratorHook : AgentHookBase -{ - private static string FUNCTION_NAME = "generate_image"; - - public override string SelfId => string.Empty; - - public ImageGeneratorHook(IServiceProvider services, AgentSettings settings) - : base(services, settings) - { - } - - public override void OnAgentLoaded(Agent agent) - { - var conv = _services.GetRequiredService(); - var isConvMode = conv.IsConversationMode(); - var isEnabled = !agent.Utilities.IsNullOrEmpty() && agent.Utilities.Contains(AgentUtility.ImageGenerator); - - if (isConvMode && isEnabled) - { - var (prompt, fn) = GetPromptAndFunction(); - if (fn != null) - { - if (!string.IsNullOrWhiteSpace(prompt)) - { - agent.Instruction += $"\r\n\r\n{prompt}\r\n\r\n"; - } - - if (agent.Functions == null) - { - agent.Functions = new List { fn }; - } - else - { - agent.Functions.Add(fn); - } - } - } - - base.OnAgentLoaded(agent); - } - - private (string, FunctionDef?) GetPromptAndFunction() - { - var db = _services.GetRequiredService(); - var agent = db.GetAgent(BuiltInAgentId.UtilityAssistant); - var prompt = agent?.Templates?.FirstOrDefault(x => x.Name.IsEqualTo($"{FUNCTION_NAME}.fn"))?.Content ?? string.Empty; - var loadAttachmentFn = agent?.Functions?.FirstOrDefault(x => x.Name.IsEqualTo(FUNCTION_NAME)); - return (prompt, loadAttachmentFn); - } -} diff --git a/src/Infrastructure/BotSharp.Core/Files/Hooks/ImageGeneratorUtilityHook.cs b/src/Infrastructure/BotSharp.Core/Files/Hooks/ImageGeneratorUtilityHook.cs deleted file mode 100644 index a7fdbb51..00000000 --- a/src/Infrastructure/BotSharp.Core/Files/Hooks/ImageGeneratorUtilityHook.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace BotSharp.Core.Files.Hooks; - -internal class ImageGeneratorUtilityHook : IAgentUtilityHook -{ - public void AddUtilities(List utilities) - { - utilities.Add(AgentUtility.ImageGenerator); - } -} \ No newline at end of file diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/BotSharp.Plugin.EmailHandler.csproj b/src/Plugins/BotSharp.Plugin.EmailHandler/BotSharp.Plugin.EmailHandler.csproj index d577a232..24d28331 100644 --- a/src/Plugins/BotSharp.Plugin.EmailHandler/BotSharp.Plugin.EmailHandler.csproj +++ b/src/Plugins/BotSharp.Plugin.EmailHandler/BotSharp.Plugin.EmailHandler.csproj @@ -1,4 +1,4 @@ - + $(TargetFramework) @@ -12,8 +12,8 @@ - + @@ -23,7 +23,7 @@ PreserveNewest - + PreserveNewest diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailRequestFn.cs b/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailRequestFn.cs index 984732a9..388860c1 100644 --- a/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailRequestFn.cs +++ b/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailRequestFn.cs @@ -96,7 +96,7 @@ public class HandleEmailRequestFn : IFunctionCallback { return $"id: {idx + 1}, file_name: {x.FileName}.{x.FileType}, content_type: {x.ContentType}"; }).ToList(); - var prompt = db.GetAgentTemplate(BuiltInAgentId.UtilityAssistant, "email_attachment_prompt"); + var prompt = db.GetAgentTemplate(BuiltInAgentId.UtilityAssistant, "select_attachment_prompt"); prompt = render.Render(prompt, new Dictionary { { "file_list", promptFiles } diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/email_attachment_prompt.liquid b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/select_attachment_prompt.liquid similarity index 100% rename from src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/email_attachment_prompt.liquid rename to src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/select_attachment_prompt.liquid diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/BotSharp.Plugin.FileHandler.csproj b/src/Plugins/BotSharp.Plugin.FileHandler/BotSharp.Plugin.FileHandler.csproj index 035992cf..f5b5ef1b 100644 --- a/src/Plugins/BotSharp.Plugin.FileHandler/BotSharp.Plugin.FileHandler.csproj +++ b/src/Plugins/BotSharp.Plugin.FileHandler/BotSharp.Plugin.FileHandler.csproj @@ -11,16 +11,24 @@ + + + + PreserveNewest + PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Enums/UtilityName.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Enums/UtilityName.cs index f28bc9a6..afa34a02 100644 --- a/src/Plugins/BotSharp.Plugin.FileHandler/Enums/UtilityName.cs +++ b/src/Plugins/BotSharp.Plugin.FileHandler/Enums/UtilityName.cs @@ -2,6 +2,7 @@ namespace BotSharp.Plugin.FileHandler.Enums; public class UtilityName { + public const string ImageGenerator = "image-generator"; public const string ImageReader = "image-reader"; public const string PdfReader = "pdf-reader"; } diff --git a/src/Infrastructure/BotSharp.Core/Files/Functions/GenerateImageFn.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs similarity index 97% rename from src/Infrastructure/BotSharp.Core/Files/Functions/GenerateImageFn.cs rename to src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs index c1e816e3..8f24e98d 100644 --- a/src/Infrastructure/BotSharp.Core/Files/Functions/GenerateImageFn.cs +++ b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs @@ -1,6 +1,4 @@ -using BotSharp.Abstraction.Functions; - -namespace BotSharp.Core.Files.Functions; +namespace BotSharp.Plugin.FileHandler.Functions; public class GenerateImageFn : IFunctionCallback { diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerHook.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerHook.cs index 025e53ef..2bdcdee5 100644 --- a/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerHook.cs +++ b/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerHook.cs @@ -4,6 +4,7 @@ public class FileHandlerHook : AgentHookBase, IAgentHook { private const string READ_IMAGE_FN = "read_image"; private const string READ_PDF_FN = "read_pdf"; + private const string GENERATE_IMAGE_FN = "generate_image"; public override string SelfId => string.Empty; @@ -20,6 +21,7 @@ public class FileHandlerHook : AgentHookBase, IAgentHook { AddUtility(agent, UtilityName.ImageReader, READ_IMAGE_FN); AddUtility(agent, UtilityName.PdfReader, READ_PDF_FN); + AddUtility(agent, UtilityName.ImageGenerator, GENERATE_IMAGE_FN); } base.OnAgentLoaded(agent); diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerUtilityHook.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerUtilityHook.cs index f5ef469e..7bfa1ce2 100644 --- a/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerUtilityHook.cs +++ b/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerUtilityHook.cs @@ -6,5 +6,6 @@ public class FileHandlerUtilityHook : IAgentUtilityHook { utilities.Add(UtilityName.ImageReader); utilities.Add(UtilityName.PdfReader); + utilities.Add(UtilityName.ImageGenerator); } } diff --git a/src/Infrastructure/BotSharp.Core/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/generate_image.json b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/generate_image.json similarity index 100% rename from src/Infrastructure/BotSharp.Core/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/generate_image.json rename to src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/generate_image.json diff --git a/src/Infrastructure/BotSharp.Core/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/generate_image.fn.liquid b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/generate_image.fn.liquid similarity index 100% rename from src/Infrastructure/BotSharp.Core/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/generate_image.fn.liquid rename to src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/generate_image.fn.liquid From 53821d12d7fbeda2e70a00312d2d0fa8bcd8e75e Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Wed, 17 Jul 2024 22:00:00 -0500 Subject: [PATCH 2/2] refine handle email request prompt --- .../Functions/HandleEmailRequestFn.cs | 4 ++-- .../functions/handle_email_request.json | 4 ++-- .../templates/handle_email_request.fn.liquid | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailRequestFn.cs b/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailRequestFn.cs index 388860c1..458ac009 100644 --- a/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailRequestFn.cs +++ b/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailRequestFn.cs @@ -56,7 +56,7 @@ public class HandleEmailRequestFn : IFunctionCallback } mailMessage.Body = bodyBuilder.ToMessageBody(); - var response = await HandleSendEmailBySMTP(mailMessage); + var response = await SendEmailBySMTP(mailMessage); message.Content = response; _logger.LogWarning($"Email successfully send over to {recipient}. Email Subject: {subject} [{response}]"); @@ -140,7 +140,7 @@ public class HandleEmailRequestFn : IFunctionCallback } } - private async Task HandleSendEmailBySMTP(MimeMessage mailMessage) + private async Task SendEmailBySMTP(MimeMessage mailMessage) { using var smtpClient = new SmtpClient(); await smtpClient.ConnectAsync(_emailSettings.SMTPServer, _emailSettings.SMTPPort, SecureSocketOptions.StartTls); diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_request.json b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_request.json index 5aaef8d0..a8a79998 100644 --- a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_request.json +++ b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_request.json @@ -1,6 +1,6 @@ { "name": "handle_email_request", - "description": "If the user requests to send an email, you need to capture the email content and the recipient email address. If the user explicitly enter email subject use the same if not intelligently capture the email subject from the content. Then call this function to send out email.", + "description": "If the user requests to send an email with or without attachments or files, you need to capture the email content and the recipient email address. If the user explicitly enter email subject use the same if not intelligently capture the email subject from the content. Then call this function to send out email.", "parameters": { "type": "object", "properties": { @@ -18,7 +18,7 @@ }, "is_need_attachments": { "type": "boolean", - "description": "If the user request to send email with attachemnt(s), then this value should be true. Otherwise, this value should be false." + "description": "If the user request to send email with attachemnt(s) or file(s), then this value should be True. Otherwise, this value should be False." } }, "required": [ "to_address", "email_content", "subject", "is_need_attachments" ] diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_request.fn.liquid b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_request.fn.liquid index 72c8da30..01163ab5 100644 --- a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_request.fn.liquid +++ b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_request.fn.liquid @@ -1,2 +1 @@ -Suppose user has uploaded some attachments. Please call handle_email_request if user wants to send out an email. \ No newline at end of file