diff --git a/src/Infrastructure/BotSharp.Abstraction/Agents/AgentHookBase.cs b/src/Infrastructure/BotSharp.Abstraction/Agents/AgentHookBase.cs
index 7759a4bfb..867d9d78a 100644
--- a/src/Infrastructure/BotSharp.Abstraction/Agents/AgentHookBase.cs
+++ b/src/Infrastructure/BotSharp.Abstraction/Agents/AgentHookBase.cs
@@ -116,13 +116,14 @@ public virtual void OnAgentUtilityLoaded(Agent agent)
return ([], []);
}
+ var prefix = "util-";
utilities = utilities?.Where(x => !string.IsNullOrEmpty(x.Name) && !x.Disabled)?.ToList() ?? [];
var functionNames = utilities.SelectMany(x => x.Functions)
- .Where(x => !string.IsNullOrEmpty(x.Name))
+ .Where(x => !string.IsNullOrEmpty(x.Name) && x.Name.StartsWith(prefix))
.Select(x => x.Name)
.Distinct().ToList();
var templateNames = utilities.SelectMany(x => x.Templates)
- .Where(x => !string.IsNullOrEmpty(x.Name))
+ .Where(x => !string.IsNullOrEmpty(x.Name) && x.Name.StartsWith(prefix))
.Select(x => x.Name)
.Distinct().ToList();
diff --git a/src/Plugins/BotSharp.Plugin.AudioHandler/BotSharp.Plugin.AudioHandler.csproj b/src/Plugins/BotSharp.Plugin.AudioHandler/BotSharp.Plugin.AudioHandler.csproj
index 4ae8c7d27..ace72c5c8 100644
--- a/src/Plugins/BotSharp.Plugin.AudioHandler/BotSharp.Plugin.AudioHandler.csproj
+++ b/src/Plugins/BotSharp.Plugin.AudioHandler/BotSharp.Plugin.AudioHandler.csproj
@@ -24,15 +24,15 @@
-
-
+
+
-
+
PreserveNewest
-
+
PreserveNewest
diff --git a/src/Plugins/BotSharp.Plugin.AudioHandler/Enums/UtilityName.cs b/src/Plugins/BotSharp.Plugin.AudioHandler/Enums/UtilityName.cs
index d11bd65ac..51c86863e 100644
--- a/src/Plugins/BotSharp.Plugin.AudioHandler/Enums/UtilityName.cs
+++ b/src/Plugins/BotSharp.Plugin.AudioHandler/Enums/UtilityName.cs
@@ -2,5 +2,5 @@ namespace BotSharp.Plugin.AudioHandler.Enums;
public class UtilityName
{
- public const string AudioHandler = "audio-handler";
+ public const string AudioHandler = "audio.audio-handler";
}
diff --git a/src/Plugins/BotSharp.Plugin.AudioHandler/Functions/HandleAudioRequestFn.cs b/src/Plugins/BotSharp.Plugin.AudioHandler/Functions/HandleAudioRequestFn.cs
index 34ec530c6..9c0ab4f48 100644
--- a/src/Plugins/BotSharp.Plugin.AudioHandler/Functions/HandleAudioRequestFn.cs
+++ b/src/Plugins/BotSharp.Plugin.AudioHandler/Functions/HandleAudioRequestFn.cs
@@ -5,7 +5,7 @@ namespace BotSharp.Plugin.AudioHandler.Functions;
public class HandleAudioRequestFn : IFunctionCallback
{
- public string Name => "handle_audio_request";
+ public string Name => "util-audio-handle_audio_request";
public string Indication => "Handling audio request";
private readonly IServiceProvider _serviceProvider;
diff --git a/src/Plugins/BotSharp.Plugin.AudioHandler/Hooks/AudioHandlerUtilityHook.cs b/src/Plugins/BotSharp.Plugin.AudioHandler/Hooks/AudioHandlerUtilityHook.cs
index 3d1f3992c..4cb6d61c7 100644
--- a/src/Plugins/BotSharp.Plugin.AudioHandler/Hooks/AudioHandlerUtilityHook.cs
+++ b/src/Plugins/BotSharp.Plugin.AudioHandler/Hooks/AudioHandlerUtilityHook.cs
@@ -2,7 +2,8 @@ namespace BotSharp.Plugin.AudioHandler.Hooks;
public class AudioHandlerUtilityHook : IAgentUtilityHook
{
- private const string HANDLER_AUDIO = "handle_audio_request";
+ private const string PREFIX = "util-audio-";
+ private const string HANDLER_AUDIO = $"{PREFIX}handle_audio_request";
public void AddUtilities(List utilities)
{
diff --git a/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_audio_request.json b/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-audio-handle_audio_request.json
similarity index 94%
rename from src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_audio_request.json
rename to src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-audio-handle_audio_request.json
index c0603b1af..7655f6912 100644
--- a/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_audio_request.json
+++ b/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-audio-handle_audio_request.json
@@ -1,5 +1,5 @@
{
- "name": "handle_audio_request",
+ "name": "util-audio-handle_audio_request",
"description": "If the user requests to transcribe or summarize audio content, you need to call this function to transcribe the audio content to raw texts or provide sunmmary based on raw texts transcribed from audio",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_audio_request.fn.liquid b/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_audio_request.fn.liquid
deleted file mode 100644
index 95f17ae1a..000000000
--- a/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_audio_request.fn.liquid
+++ /dev/null
@@ -1 +0,0 @@
-Please call handle_audio_request if user wants to transcribe or summarize the content of a audio file.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-audio-handle_audio_request.fn.liquid b/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-audio-handle_audio_request.fn.liquid
new file mode 100644
index 000000000..b49c3440d
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.AudioHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-audio-handle_audio_request.fn.liquid
@@ -0,0 +1 @@
+Please call util-audio-handle_audio_request if user wants to transcribe or summarize the content of a audio file.
\ 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 3aa65e97a..f1a6c28ed 100644
--- a/src/Plugins/BotSharp.Plugin.EmailHandler/BotSharp.Plugin.EmailHandler.csproj
+++ b/src/Plugins/BotSharp.Plugin.EmailHandler/BotSharp.Plugin.EmailHandler.csproj
@@ -11,24 +11,23 @@
-
-
-
-
-
+
+
+
+
-
+
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/Enums/UtilityName.cs b/src/Plugins/BotSharp.Plugin.EmailHandler/Enums/UtilityName.cs
index b84f9c5f9..e9297d8c6 100644
--- a/src/Plugins/BotSharp.Plugin.EmailHandler/Enums/UtilityName.cs
+++ b/src/Plugins/BotSharp.Plugin.EmailHandler/Enums/UtilityName.cs
@@ -1,13 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+namespace BotSharp.Plugin.EmailHandler.Enums;
-namespace BotSharp.Plugin.EmailHandler.Enums
+public class UtilityName
{
- public class UtilityName
- {
- public const string EmailHandler = "email-handler";
- }
+ public const string EmailHandler = "email.email-handler";
}
diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailReaderFn.cs b/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailReaderFn.cs
index d0f11466a..1833a783d 100644
--- a/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailReaderFn.cs
+++ b/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailReaderFn.cs
@@ -7,7 +7,7 @@ namespace BotSharp.Plugin.EmailReader.Functions;
public class HandleEmailReaderFn : IFunctionCallback
{
- public string Name => "handle_email_reader";
+ public string Name => "util-email-handle_email_reader";
public readonly static string PROMPT_SUMMARY = "Provide a text summary of the following content.";
public readonly static string RICH_CONTENT_SUMMARIZE = "is_email_summarize: true. messageId";
public readonly static string RICH_CONTENT_READ_EMAIL = "Read the email by messageId";
diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailSenderFn.cs b/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailSenderFn.cs
index fa038811d..a6b04e493 100644
--- a/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailSenderFn.cs
+++ b/src/Plugins/BotSharp.Plugin.EmailHandler/Functions/HandleEmailSenderFn.cs
@@ -6,7 +6,7 @@ namespace BotSharp.Plugin.EmailHandler.Functions;
public class HandleEmailSenderFn : IFunctionCallback
{
- public string Name => "handle_email_sender";
+ public string Name => "util-email-handle_email_sender";
public string Indication => "Handling email send request";
private readonly IServiceProvider _services;
diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/Hooks/EmailHandlerUtilityHook.cs b/src/Plugins/BotSharp.Plugin.EmailHandler/Hooks/EmailHandlerUtilityHook.cs
index a909932e2..a99dfc8c0 100644
--- a/src/Plugins/BotSharp.Plugin.EmailHandler/Hooks/EmailHandlerUtilityHook.cs
+++ b/src/Plugins/BotSharp.Plugin.EmailHandler/Hooks/EmailHandlerUtilityHook.cs
@@ -5,8 +5,9 @@ namespace BotSharp.Plugin.EmailHandler.Hooks;
public class EmailHandlerUtilityHook : IAgentUtilityHook
{
- private static string EMAIL_READER_FN = "handle_email_reader";
- private static string EMAIL_SENDER_FN = "handle_email_sender";
+ private static string PREFIX = "util-email-";
+ private static string EMAIL_READER_FN = $"{PREFIX}handle_email_reader";
+ private static string EMAIL_SENDER_FN = $"{PREFIX}handle_email_sender";
public void AddUtilities(List utilities)
{
diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_reader.json b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-email-handle_email_reader.json
similarity index 95%
rename from src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_reader.json
rename to src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-email-handle_email_reader.json
index bcea2ac8e..36e864023 100644
--- a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_reader.json
+++ b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-email-handle_email_reader.json
@@ -1,5 +1,5 @@
{
- "name": "handle_email_reader",
+ "name": "util-email-handle_email_reader",
"description": "If the user wants to read messages from email inbox or user wants to mark an email message as read.If message id is provided, capture it but it is not required. Then call this function to read the email message or mark any message as read.",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_sender.json b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-email-handle_email_sender.json
similarity index 96%
rename from src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_sender.json
rename to src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-email-handle_email_sender.json
index 730c45970..b1ebfb730 100644
--- a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_email_sender.json
+++ b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-email-handle_email_sender.json
@@ -1,5 +1,5 @@
{
- "name": "handle_email_sender",
+ "name": "util-email-handle_email_sender",
"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",
diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_reader.fn.liquid b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_reader.fn.liquid
deleted file mode 100644
index 0efb6229d..000000000
--- a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_reader.fn.liquid
+++ /dev/null
@@ -1 +0,0 @@
-Please call handle_email_reader if user wants to read messages from email inbox.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-email-handle_email_reader.fn.liquid b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-email-handle_email_reader.fn.liquid
new file mode 100644
index 000000000..10708bb7a
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-email-handle_email_reader.fn.liquid
@@ -0,0 +1 @@
+Please call util-email-handle_email_reader if user wants to read messages from email inbox.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_sender.fn.liquid b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-email-handle_email_sender.fn.liquid
similarity index 81%
rename from src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_sender.fn.liquid
rename to src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-email-handle_email_sender.fn.liquid
index eb6f0e6f6..5fc29e3d0 100644
--- a/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_email_sender.fn.liquid
+++ b/src/Plugins/BotSharp.Plugin.EmailHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-email-handle_email_sender.fn.liquid
@@ -1,4 +1,4 @@
** Please take a look at the conversation and decide whether user wants to send email.
** If yes, then decide whether user wants to send email with files/attachments/images or not.
** If user does not want to send email explicitly or only upload images or files, please do not respond anything email related message.
-** Please call handle_email_sender if user wants to send email.
\ No newline at end of file
+** Please call util-email-handle_email_sender if user wants to send email.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.ExcelHandler/BotSharp.Plugin.ExcelHandler.csproj b/src/Plugins/BotSharp.Plugin.ExcelHandler/BotSharp.Plugin.ExcelHandler.csproj
index e23bd5e7e..08cfd79ac 100644
--- a/src/Plugins/BotSharp.Plugin.ExcelHandler/BotSharp.Plugin.ExcelHandler.csproj
+++ b/src/Plugins/BotSharp.Plugin.ExcelHandler/BotSharp.Plugin.ExcelHandler.csproj
@@ -13,15 +13,15 @@
-
-
+
+
-
+
PreserveNewest
-
+
PreserveNewest
diff --git a/src/Plugins/BotSharp.Plugin.ExcelHandler/Enums/UtilityName.cs b/src/Plugins/BotSharp.Plugin.ExcelHandler/Enums/UtilityName.cs
index 66ef3f36e..bc6892590 100644
--- a/src/Plugins/BotSharp.Plugin.ExcelHandler/Enums/UtilityName.cs
+++ b/src/Plugins/BotSharp.Plugin.ExcelHandler/Enums/UtilityName.cs
@@ -2,5 +2,5 @@ namespace BotSharp.Plugin.ExcelHandler.Enums;
public class UtilityName
{
- public const string ExcelHandler = "excel-handler";
+ public const string ExcelHandler = "excel.excel-handler";
}
diff --git a/src/Plugins/BotSharp.Plugin.ExcelHandler/Functions/HandleExcelRequestFn.cs b/src/Plugins/BotSharp.Plugin.ExcelHandler/Functions/HandleExcelRequestFn.cs
index f72492e3e..270f6177a 100644
--- a/src/Plugins/BotSharp.Plugin.ExcelHandler/Functions/HandleExcelRequestFn.cs
+++ b/src/Plugins/BotSharp.Plugin.ExcelHandler/Functions/HandleExcelRequestFn.cs
@@ -2,7 +2,6 @@
using BotSharp.Abstraction.Files.Enums;
using BotSharp.Abstraction.Files.Models;
using BotSharp.Abstraction.Files.Utilities;
-using BotSharp.Plugin.ExcelHandler.Helpers.Sqlite;
using BotSharp.Plugin.ExcelHandler.Models;
using BotSharp.Plugin.ExcelHandler.Services;
using NPOI.SS.UserModel;
@@ -12,7 +11,7 @@ namespace BotSharp.Plugin.ExcelHandler.Functions;
public class HandleExcelRequestFn : IFunctionCallback
{
- public string Name => "handle_excel_request";
+ public string Name => "util-excel-handle_excel_request";
public string Indication => "Handling excel request";
private readonly IServiceProvider _serviceProvider;
diff --git a/src/Plugins/BotSharp.Plugin.ExcelHandler/Hooks/ExcelHandlerUtilityHook.cs b/src/Plugins/BotSharp.Plugin.ExcelHandler/Hooks/ExcelHandlerUtilityHook.cs
index 15c41642e..6293a8328 100644
--- a/src/Plugins/BotSharp.Plugin.ExcelHandler/Hooks/ExcelHandlerUtilityHook.cs
+++ b/src/Plugins/BotSharp.Plugin.ExcelHandler/Hooks/ExcelHandlerUtilityHook.cs
@@ -2,7 +2,8 @@ namespace BotSharp.Plugin.ExcelHandler.Hooks;
public class ExcelHandlerUtilityHook : IAgentUtilityHook
{
- private const string HANDLER_EXCEL = "handle_excel_request";
+ private static string PREFIX = "util-excel-";
+ private static string HANDLER_EXCEL = $"{PREFIX}handle_excel_request";
public void AddUtilities(List utilities)
{
diff --git a/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_excel_request.json b/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-excel-handle_excel_request.json
similarity index 95%
rename from src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_excel_request.json
rename to src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-excel-handle_excel_request.json
index 38f2faab5..53381c673 100644
--- a/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_excel_request.json
+++ b/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-excel-handle_excel_request.json
@@ -1,5 +1,5 @@
{
- "name": "handle_excel_request",
+ "name": "util-excel-handle_excel_request",
"description": "If the user requests to read/load data from excel/csv files, you need to call this function to load the data from excel/csv files and transform into JSON format data",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_excel_request.fn.liquid b/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_excel_request.fn.liquid
deleted file mode 100644
index a3f276943..000000000
--- a/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_excel_request.fn.liquid
+++ /dev/null
@@ -1,2 +0,0 @@
-Please call handle_excel_request if user wants to load the data from a excel/csv file.
-handle_excel_request can NOT generate excel/csv.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-excel-handle_excel_request.fn.liquid b/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-excel-handle_excel_request.fn.liquid
new file mode 100644
index 000000000..53aef674d
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.ExcelHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-excel-handle_excel_request.fn.liquid
@@ -0,0 +1,2 @@
+Please call util-excel-handle_excel_request if user wants to load the data from a excel/csv file.
+util-excel-handle_excel_request can NOT generate excel/csv.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/BotSharp.Plugin.FileHandler.csproj b/src/Plugins/BotSharp.Plugin.FileHandler/BotSharp.Plugin.FileHandler.csproj
index 9b097fed8..2147d178c 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/BotSharp.Plugin.FileHandler.csproj
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/BotSharp.Plugin.FileHandler.csproj
@@ -11,40 +11,43 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
-
+
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 eb2b4e2ba..68242202c 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/Enums/UtilityName.cs
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/Enums/UtilityName.cs
@@ -2,8 +2,8 @@ namespace BotSharp.Plugin.FileHandler.Enums;
public class UtilityName
{
- public const string ImageGenerator = "image-generator";
- public const string ImageReader = "image-reader";
- public const string ImageEditor = "image-editor";
- public const string PdfReader = "pdf-reader";
+ public const string ImageGenerator = "file.image-generator";
+ public const string ImageReader = "file.image-reader";
+ public const string ImageEditor = "file.image-editor";
+ public const string PdfReader = "file.pdf-reader";
}
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/EditImageFn.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/EditImageFn.cs
index cb7139f0d..87d8268ba 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/EditImageFn.cs
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/EditImageFn.cs
@@ -4,7 +4,7 @@ namespace BotSharp.Plugin.FileHandler.Functions;
public class EditImageFn : IFunctionCallback
{
- public string Name => "edit_image";
+ public string Name => "util-file-edit_image";
public string Indication => "Editing image";
private readonly IServiceProvider _services;
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs
index c3e8c147b..a511ebae1 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs
@@ -2,7 +2,7 @@ namespace BotSharp.Plugin.FileHandler.Functions;
public class GenerateImageFn : IFunctionCallback
{
- public string Name => "generate_image";
+ public string Name => "util-file-generate_image";
public string Indication => "Generating image";
private readonly IServiceProvider _services;
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadImageFn.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadImageFn.cs
index a415207e8..f2e79b218 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadImageFn.cs
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadImageFn.cs
@@ -2,7 +2,7 @@ namespace BotSharp.Plugin.FileHandler.Functions;
public class ReadImageFn : IFunctionCallback
{
- public string Name => "read_image";
+ public string Name => "util-file-read_image";
public string Indication => "Reading images";
private readonly IServiceProvider _services;
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadPdfFn.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadPdfFn.cs
index 814f943e3..2aeb64a12 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadPdfFn.cs
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadPdfFn.cs
@@ -2,7 +2,7 @@ namespace BotSharp.Plugin.FileHandler.Functions;
public class ReadPdfFn : IFunctionCallback
{
- public string Name => "read_pdf";
+ public string Name => "util-file-read_pdf";
public string Indication => "Reading pdf";
private readonly IServiceProvider _services;
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerUtilityHook.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerUtilityHook.cs
index ab2950635..3409c4481 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerUtilityHook.cs
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/Hooks/FileHandlerUtilityHook.cs
@@ -2,10 +2,10 @@ namespace BotSharp.Plugin.FileHandler.Hooks;
public class FileHandlerUtilityHook : IAgentUtilityHook
{
- private const string READ_IMAGE_FN = "read_image";
- private const string READ_PDF_FN = "read_pdf";
- private const string GENERATE_IMAGE_FN = "generate_image";
- private const string EDIT_IMAGE_FN = "edit_image";
+ private const string READ_IMAGE_FN = "util-file-read_image";
+ private const string READ_PDF_FN = "util-file-read_pdf";
+ private const string GENERATE_IMAGE_FN = "util-file-generate_image";
+ private const string EDIT_IMAGE_FN = "util-file-edit_image";
public void AddUtilities(List utilities)
{
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/read_image.json b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/read_image.json
deleted file mode 100644
index 99daafc5c..000000000
--- a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/read_image.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "name": "read_image",
- "description": "If the user's request is related to analyzing images, you can call this function to analyze images.",
- "parameters": {
- "type": "object",
- "properties": {
- "user_request": {
- "type": "string",
- "description": "The request posted by user, which is related to analyzing requested images. User can request for multiple images to process at one time."
- }
- },
- "required": [ "user_request" ]
- }
-}
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/edit_image.json b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-file-edit_image.json
similarity index 92%
rename from src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/edit_image.json
rename to src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-file-edit_image.json
index f513ffba3..306e44dd8 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/edit_image.json
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-file-edit_image.json
@@ -1,5 +1,5 @@
{
- "name": "edit_image",
+ "name": "util-file-edit_image",
"description": "If the user requests you editting or changing an image or a picture, you can call this function to edit an image.",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/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/util-file-generate_image.json
similarity index 90%
rename from src/Plugins/BotSharp.Plugin.FileHandler/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/util-file-generate_image.json
index d9c8b70e3..ba96aef0d 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/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/util-file-generate_image.json
@@ -1,5 +1,5 @@
{
- "name": "generate_image",
+ "name": "util-file-generate_image",
"description": "If the user requests you providing or generating image or picture, you can call this function to generate image.",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-file-read_image.json b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-file-read_image.json
new file mode 100644
index 000000000..a0f269a00
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-file-read_image.json
@@ -0,0 +1,14 @@
+{
+ "name": "util-file-read_image",
+ "description": "If the user's request is related to analyzing images, you can call this function to analyze images.",
+ "parameters": {
+ "type": "object",
+ "properties": {
+ "user_request": {
+ "type": "string",
+ "description": "The request posted by user, which is related to analyzing requested images. User can request for multiple images to process at one time."
+ }
+ },
+ "required": [ "user_request" ]
+ }
+}
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/read_pdf.json b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-file-read_pdf.json
similarity index 92%
rename from src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/read_pdf.json
rename to src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-file-read_pdf.json
index 54d9424c2..d6b278192 100644
--- a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/read_pdf.json
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-file-read_pdf.json
@@ -1,5 +1,5 @@
{
- "name": "read_pdf",
+ "name": "util-file-read_pdf",
"description": "If the user's request is related to analyzing pdf files, you can call this function to analyze pdf.",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/edit_image.fn.liquid b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/edit_image.fn.liquid
deleted file mode 100644
index 7fa2ac219..000000000
--- a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/edit_image.fn.liquid
+++ /dev/null
@@ -1 +0,0 @@
-Please call edit_image if user wants to edit or change an image in the conversation.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/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
deleted file mode 100644
index 9ee28f9c0..000000000
--- a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/generate_image.fn.liquid
+++ /dev/null
@@ -1,2 +0,0 @@
-** Please call generate_image if user wants you to provide or generate an image or picture.
-** If user does not generate image explicitly, please do not call generate_image.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/read_image.fn.liquid b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/read_image.fn.liquid
deleted file mode 100644
index 3ebf28cc1..000000000
--- a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/read_image.fn.liquid
+++ /dev/null
@@ -1 +0,0 @@
-Please call function read_image if user wants to describe an image or images.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/read_pdf.fn.liquid b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/read_pdf.fn.liquid
deleted file mode 100644
index 0ea6706db..000000000
--- a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/read_pdf.fn.liquid
+++ /dev/null
@@ -1 +0,0 @@
-Please call function read_pdf if user wants to describe an pdf file or pdf files.
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-edit_image.fn.liquid b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-edit_image.fn.liquid
new file mode 100644
index 000000000..49ab707f5
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-edit_image.fn.liquid
@@ -0,0 +1 @@
+Please call util-file-edit_image if user wants to edit or change an image in the conversation.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-generate_image.fn.liquid b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-generate_image.fn.liquid
new file mode 100644
index 000000000..6d7dd6193
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-generate_image.fn.liquid
@@ -0,0 +1,2 @@
+** Please call util-file-generate_image if user wants you to provide or generate an image or picture.
+** If user does not generate image explicitly, please do not call generate_image.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-read_image.fn.liquid b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-read_image.fn.liquid
new file mode 100644
index 000000000..76f75bd09
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-read_image.fn.liquid
@@ -0,0 +1 @@
+Please call function util-file-read_image if user wants to describe an image or images.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-read_pdf.fn.liquid b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-read_pdf.fn.liquid
new file mode 100644
index 000000000..12d08f0ac
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.FileHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-file-read_pdf.fn.liquid
@@ -0,0 +1 @@
+Please call function util-file-read_pdf if user wants to describe an pdf file or pdf files.
diff --git a/src/Plugins/BotSharp.Plugin.HttpHandler/BotSharp.Plugin.HttpHandler.csproj b/src/Plugins/BotSharp.Plugin.HttpHandler/BotSharp.Plugin.HttpHandler.csproj
index 8664c6549..7dc0ac87b 100644
--- a/src/Plugins/BotSharp.Plugin.HttpHandler/BotSharp.Plugin.HttpHandler.csproj
+++ b/src/Plugins/BotSharp.Plugin.HttpHandler/BotSharp.Plugin.HttpHandler.csproj
@@ -11,11 +11,11 @@
-
-
+
+
@@ -25,10 +25,10 @@
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
diff --git a/src/Plugins/BotSharp.Plugin.HttpHandler/Enums/UtilityName.cs b/src/Plugins/BotSharp.Plugin.HttpHandler/Enums/UtilityName.cs
index 2e0146bfb..3a1e7cd53 100644
--- a/src/Plugins/BotSharp.Plugin.HttpHandler/Enums/UtilityName.cs
+++ b/src/Plugins/BotSharp.Plugin.HttpHandler/Enums/UtilityName.cs
@@ -2,5 +2,5 @@ namespace BotSharp.Plugin.HttpHandler.Enums;
public class UtilityName
{
- public const string HttpHandler = "http-handler";
+ public const string HttpHandler = "http.http-handler";
}
diff --git a/src/Plugins/BotSharp.Plugin.HttpHandler/Functions/HandleHttpRequestFn.cs b/src/Plugins/BotSharp.Plugin.HttpHandler/Functions/HandleHttpRequestFn.cs
index 20d2d012c..d36aafba4 100644
--- a/src/Plugins/BotSharp.Plugin.HttpHandler/Functions/HandleHttpRequestFn.cs
+++ b/src/Plugins/BotSharp.Plugin.HttpHandler/Functions/HandleHttpRequestFn.cs
@@ -7,7 +7,7 @@ namespace BotSharp.Plugin.HttpHandler.Functions;
public class HandleHttpRequestFn : IFunctionCallback
{
- public string Name => "handle_http_request";
+ public string Name => "util-http-handle_http_request";
public string Indication => "Handling http request";
private readonly IServiceProvider _services;
diff --git a/src/Plugins/BotSharp.Plugin.HttpHandler/Hooks/HttpHandlerUtilityHook.cs b/src/Plugins/BotSharp.Plugin.HttpHandler/Hooks/HttpHandlerUtilityHook.cs
index 265558ac6..d99b6084b 100644
--- a/src/Plugins/BotSharp.Plugin.HttpHandler/Hooks/HttpHandlerUtilityHook.cs
+++ b/src/Plugins/BotSharp.Plugin.HttpHandler/Hooks/HttpHandlerUtilityHook.cs
@@ -4,7 +4,8 @@ namespace BotSharp.Plugin.HttpHandler.Hooks;
public class HttpHandlerUtilityHook : IAgentUtilityHook
{
- private static string HTTP_HANDLER_FN = "handle_http_request";
+ private static string PREFIX = "util-http-";
+ private static string HTTP_HANDLER_FN = $"{PREFIX}handle_http_request";
public void AddUtilities(List utilities)
{
diff --git a/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_http_request.json b/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-http-handle_http_request.json
similarity index 95%
rename from src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_http_request.json
rename to src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-http-handle_http_request.json
index c7335ceeb..40ce00d5a 100644
--- a/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/handle_http_request.json
+++ b/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-http-handle_http_request.json
@@ -1,5 +1,5 @@
{
- "name": "handle_http_request",
+ "name": "util-http-handle_http_request",
"description": "If the user requests to send an http request, you need to capture the http method and request content, and then call this function to send the http request.",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_http_request.fn.liquid b/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_http_request.fn.liquid
deleted file mode 100644
index 7640d81ea..000000000
--- a/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/handle_http_request.fn.liquid
+++ /dev/null
@@ -1 +0,0 @@
-Please call handle_http_request if user wants to send an http request.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-http-handle_http_request.fn.liquid b/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-http-handle_http_request.fn.liquid
new file mode 100644
index 000000000..2d639dd06
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.HttpHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-http-handle_http_request.fn.liquid
@@ -0,0 +1 @@
+Please call util-http-handle_http_request if user wants to send an http request.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.KnowledgeBase/BotSharp.Plugin.KnowledgeBase.csproj b/src/Plugins/BotSharp.Plugin.KnowledgeBase/BotSharp.Plugin.KnowledgeBase.csproj
index 283d8b32c..77a5d076b 100644
--- a/src/Plugins/BotSharp.Plugin.KnowledgeBase/BotSharp.Plugin.KnowledgeBase.csproj
+++ b/src/Plugins/BotSharp.Plugin.KnowledgeBase/BotSharp.Plugin.KnowledgeBase.csproj
@@ -1,4 +1,4 @@
-
+
$(TargetFramework)
@@ -23,7 +23,8 @@
-
+
+
@@ -45,10 +46,10 @@
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
diff --git a/src/Plugins/BotSharp.Plugin.KnowledgeBase/Enum/UtilityName.cs b/src/Plugins/BotSharp.Plugin.KnowledgeBase/Enum/UtilityName.cs
index 18a28c91f..de90430d7 100644
--- a/src/Plugins/BotSharp.Plugin.KnowledgeBase/Enum/UtilityName.cs
+++ b/src/Plugins/BotSharp.Plugin.KnowledgeBase/Enum/UtilityName.cs
@@ -2,5 +2,5 @@ namespace BotSharp.Plugin.KnowledgeBase.Enum;
public class UtilityName
{
- public const string KnowledgeRetrieval = "knowledge-retrieval";
+ public const string KnowledgeRetrieval = "knowledge.knowledge-retrieval";
}
diff --git a/src/Plugins/BotSharp.Plugin.KnowledgeBase/Functions/KnowledgeRetrievalFn.cs b/src/Plugins/BotSharp.Plugin.KnowledgeBase/Functions/KnowledgeRetrievalFn.cs
index 606caad97..f3f8cbf10 100644
--- a/src/Plugins/BotSharp.Plugin.KnowledgeBase/Functions/KnowledgeRetrievalFn.cs
+++ b/src/Plugins/BotSharp.Plugin.KnowledgeBase/Functions/KnowledgeRetrievalFn.cs
@@ -2,7 +2,7 @@ namespace BotSharp.Plugin.KnowledgeBase.Functions;
public class KnowledgeRetrievalFn : IFunctionCallback
{
- public string Name => "knowledge_retrieval";
+ public string Name => "util-knowledge-knowledge_retrieval";
public string Indication => "searching my brain";
diff --git a/src/Plugins/BotSharp.Plugin.KnowledgeBase/Hooks/KnowledgeBaseUtilityHook.cs b/src/Plugins/BotSharp.Plugin.KnowledgeBase/Hooks/KnowledgeBaseUtilityHook.cs
index 464fd5b2d..700b84578 100644
--- a/src/Plugins/BotSharp.Plugin.KnowledgeBase/Hooks/KnowledgeBaseUtilityHook.cs
+++ b/src/Plugins/BotSharp.Plugin.KnowledgeBase/Hooks/KnowledgeBaseUtilityHook.cs
@@ -2,7 +2,8 @@ namespace BotSharp.Plugin.KnowledgeBase.Hooks;
public class KnowledgeBaseUtilityHook : IAgentUtilityHook
{
- private const string KNOWLEDGE_RETRIEVAL_FN = "knowledge_retrieval";
+ private static string PREFIX = "util-knowledge-";
+ private static string KNOWLEDGE_RETRIEVAL_FN = $"{PREFIX}knowledge_retrieval";
public void AddUtilities(List utilities)
{
diff --git a/src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/knowledge_retrieval.json b/src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-knowledge-knowledge_retrieval.json
similarity index 86%
rename from src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/knowledge_retrieval.json
rename to src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-knowledge-knowledge_retrieval.json
index b292d7d97..088f4ea6f 100644
--- a/src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/knowledge_retrieval.json
+++ b/src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-knowledge-knowledge_retrieval.json
@@ -1,5 +1,5 @@
{
- "name": "knowledge_retrieval",
+ "name": "util-knowledge-knowledge_retrieval",
"description": "Retrieve related domain knowledge to handle user request",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/knowledge_retrieval.fn.liquid b/src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-knowledge-knowledge_retrieval.fn.liquid
similarity index 63%
rename from src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/knowledge_retrieval.fn.liquid
rename to src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-knowledge-knowledge_retrieval.fn.liquid
index da5e157b3..f0bc60c84 100644
--- a/src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/knowledge_retrieval.fn.liquid
+++ b/src/Plugins/BotSharp.Plugin.KnowledgeBase/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-knowledge-knowledge_retrieval.fn.liquid
@@ -1,3 +1,3 @@
-Call function knowledge_retrieval to retrieve related domain knowledge to handle user request.
+Call function util-knowledge-knowledge_retrieval to retrieve related domain knowledge to handle user request.
You must retrieve existing KnowledgeBase to get prerequisite informations before you writing SQL query;
You must retrieve existing API specification from KnowledgeBase before calling a Web API;
diff --git a/src/Plugins/BotSharp.Plugin.Planner/BotSharp.Plugin.Planner.csproj b/src/Plugins/BotSharp.Plugin.Planner/BotSharp.Plugin.Planner.csproj
index 72c4e7107..fb183c773 100644
--- a/src/Plugins/BotSharp.Plugin.Planner/BotSharp.Plugin.Planner.csproj
+++ b/src/Plugins/BotSharp.Plugin.Planner/BotSharp.Plugin.Planner.csproj
@@ -1,4 +1,4 @@
-
+
$(TargetFramework)
@@ -19,10 +19,9 @@
-
-
-
-
+
+
+
@@ -53,13 +52,13 @@
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
diff --git a/src/Plugins/BotSharp.Plugin.Planner/Enums/UtilityName.cs b/src/Plugins/BotSharp.Plugin.Planner/Enums/UtilityName.cs
index 8a3ef6e3a..7594fae04 100644
--- a/src/Plugins/BotSharp.Plugin.Planner/Enums/UtilityName.cs
+++ b/src/Plugins/BotSharp.Plugin.Planner/Enums/UtilityName.cs
@@ -2,5 +2,5 @@ namespace BotSharp.Plugin.Planner.Enums;
public class UtilityName
{
- public const string TwoStagePlanner = "two-stage-planner";
+ public const string TwoStagePlanner = "planner.two-stage-planner";
}
diff --git a/src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/plan_primary_stage.fn.liquid b/src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-planner-plan_primary_stage.fn.liquid
similarity index 100%
rename from src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/plan_primary_stage.fn.liquid
rename to src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-planner-plan_primary_stage.fn.liquid
diff --git a/src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/plan_secondary_stage.fn.liquid b/src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-planner-plan_secondary_stage.fn.liquid
similarity index 100%
rename from src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/plan_secondary_stage.fn.liquid
rename to src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-planner-plan_secondary_stage.fn.liquid
diff --git a/src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/plan_summary.fn.liquid b/src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-planner-plan_summary.fn.liquid
similarity index 100%
rename from src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/plan_summary.fn.liquid
rename to src/Plugins/BotSharp.Plugin.Planner/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-planner-plan_summary.fn.liquid
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/BotSharp.Plugin.SqlDriver.csproj b/src/Plugins/BotSharp.Plugin.SqlDriver/BotSharp.Plugin.SqlDriver.csproj
index 3a090f0c7..84ecc1ee5 100644
--- a/src/Plugins/BotSharp.Plugin.SqlDriver/BotSharp.Plugin.SqlDriver.csproj
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/BotSharp.Plugin.SqlDriver.csproj
@@ -17,12 +17,6 @@
-
-
-
-
-
-
@@ -36,22 +30,29 @@
+
+
+
+
+
+
+
-
+
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
PreserveNewest
-
+
PreserveNewest
@@ -69,10 +70,10 @@
PreserveNewest
-
+
PreserveNewest
-
+
PreserveNewest
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/Enum/UtilityName.cs b/src/Plugins/BotSharp.Plugin.SqlDriver/Enum/UtilityName.cs
index 159d5e7ab..abb1faa21 100644
--- a/src/Plugins/BotSharp.Plugin.SqlDriver/Enum/UtilityName.cs
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/Enum/UtilityName.cs
@@ -2,7 +2,7 @@ namespace BotSharp.Plugin.SqlDriver.Enum;
public class UtilityName
{
- public const string SqlExecutor = "sql-executor";
- public const string SqlDictionaryLookup = "sql-dictionary-lookup";
- public const string SqlTableDefinition = "sql-table-definition";
+ public const string SqlExecutor = "db.sql-executor";
+ public const string SqlDictionaryLookup = "db.sql-dictionary-lookup";
+ public const string SqlTableDefinition = "db.sql-table-definition";
}
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/Hooks/SqlUtilityHook.cs b/src/Plugins/BotSharp.Plugin.SqlDriver/Hooks/SqlUtilityHook.cs
index 1984ee984..cdb65fc31 100644
--- a/src/Plugins/BotSharp.Plugin.SqlDriver/Hooks/SqlUtilityHook.cs
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/Hooks/SqlUtilityHook.cs
@@ -2,9 +2,11 @@ namespace BotSharp.Plugin.SqlDriver.Hooks;
public class SqlUtilityHook : IAgentUtilityHook
{
- private const string SQL_TABLE_DEFINITION_FN = "sql_table_definition";
- private const string VERIFY_DICTIONARY_TERM_FN = "verify_dictionary_term";
- private const string SQL_SELECT_FN = "sql_select";
+ private const string PREFIX = "util-db-";
+ private const string SQL_TABLE_DEFINITION_FN = $"{PREFIX}sql_table_definition";
+ private const string VERIFY_DICTIONARY_TERM_FN = $"{PREFIX}verify_dictionary_term";
+ private const string SQL_SELECT_FN = $"{PREFIX}sql_select";
+ private const string SQL_EXECUTOR_FN = $"{PREFIX}sql_executor";
public void AddUtilities(List utilities)
{
@@ -26,7 +28,7 @@ public void AddUtilities(List utilities)
{
Name = UtilityName.SqlExecutor,
Functions = [new(SQL_SELECT_FN), new(SQL_TABLE_DEFINITION_FN)],
- Templates = [new($"sql_executor.fn")]
+ Templates = [new($"{SQL_EXECUTOR_FN}.fn")]
}
};
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/UtilFunctions/GetTableDefinitionFn.cs b/src/Plugins/BotSharp.Plugin.SqlDriver/UtilFunctions/GetTableDefinitionFn.cs
new file mode 100644
index 000000000..a4b493a32
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/UtilFunctions/GetTableDefinitionFn.cs
@@ -0,0 +1,168 @@
+using Microsoft.Data.SqlClient;
+using MySqlConnector;
+using Npgsql;
+
+namespace BotSharp.Plugin.SqlDriver.UtilFunctions;
+
+public class GetTableDefinitionFn : IFunctionCallback
+{
+ public string Name => "util-db-sql_table_definition";
+ public string Indication => "Obtain the relevant data structure definitions.";
+ private readonly IServiceProvider _services;
+ private readonly ILogger _logger;
+
+ public GetTableDefinitionFn(
+ IServiceProvider services,
+ ILogger logger)
+ {
+ _services = services;
+ _logger = logger;
+ }
+
+ public async Task Execute(RoleDialogModel message)
+ {
+ var args = JsonSerializer.Deserialize(message.FunctionArgs);
+ var tables = args.Tables;
+ var agentService = _services.GetRequiredService();
+ var dbHook = _services.GetRequiredService();
+ var dbType = dbHook.GetDatabaseType(message);
+
+ // Get table DDL from database
+ var tableDdls = dbType switch
+ {
+ "mysql" => GetDdlFromMySql(tables),
+ "sqlserver" => GetDdlFromSqlServer(tables),
+ "redshift" => GetDdlFromRedshift(tables),
+ _ => throw new NotImplementedException($"Database type {dbType} is not supported.")
+ };
+
+ message.Content = string.Join("\r\n\r\n", tableDdls);
+ return true;
+ }
+
+ private List GetDdlFromMySql(string[] tables)
+ {
+ var settings = _services.GetRequiredService();
+ var tableDdls = new List();
+ using var connection = new MySqlConnection(settings.MySqlMetaConnectionString ?? settings.MySqlConnectionString);
+ connection.Open();
+
+ foreach (var table in tables)
+ {
+ try
+ {
+ var escapedTableName = MySqlHelper.EscapeString(table);
+ var sql = $"SHOW CREATE TABLE `{escapedTableName}`";
+
+ using var command = new MySqlCommand(sql, connection);
+ using var reader = command.ExecuteReader();
+ if (reader.Read())
+ {
+ var result = reader.GetString(1);
+ tableDdls.Add(result);
+ }
+
+ reader.Close();
+ command.Dispose();
+ }
+ catch (Exception ex)
+ {
+ _logger.LogWarning($"Error when getting ddl statement of table {table}. {ex.Message}\r\n{ex.InnerException}");
+ }
+ }
+
+ connection.Close();
+ return tableDdls;
+ }
+
+ private List GetDdlFromSqlServer(string[] tables)
+ {
+ var settings = _services.GetRequiredService();
+ var tableDdls = new List();
+ using var connection = new SqlConnection(settings.SqlServerExecutionConnectionString ?? settings.SqlServerConnectionString);
+ connection.Open();
+
+ foreach (var table in tables)
+ {
+ try
+ {
+ var sql = @$"DECLARE @TableName NVARCHAR(128) = '{table}';
+ DECLARE @SQL NVARCHAR(MAX) = 'CREATE TABLE ' + @TableName + ' (';
+
+ SELECT @SQL = @SQL + '
+ ' + COLUMN_NAME + ' ' +
+ DATA_TYPE +
+ CASE
+ WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL AND DATA_TYPE LIKE '%char%'
+ THEN '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(10)) + ')'
+ WHEN DATA_TYPE IN ('decimal', 'numeric')
+ THEN '(' + CAST(NUMERIC_PRECISION AS VARCHAR(10)) + ',' + CAST(NUMERIC_SCALE AS VARCHAR(10)) + ')'
+ ELSE ''
+ END + ' ' +
+ CASE WHEN IS_NULLABLE = 'NO' THEN 'NOT NULL' ELSE 'NULL' END + ','
+ FROM INFORMATION_SCHEMA.COLUMNS
+ WHERE TABLE_NAME = @TableName
+ ORDER BY ORDINAL_POSITION;
+
+ -- Remove the last comma and add closing parenthesis
+ SET @SQL = LEFT(@SQL, LEN(@SQL) - 1) + ');';
+
+ SELECT @SQL;";
+
+ using var command = new SqlCommand(sql, connection);
+ using var reader = command.ExecuteReader();
+ if (reader.Read())
+ {
+ var result = reader.GetString(0);
+ tableDdls.Add(result);
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogWarning($"Error when getting ddl statement of table {table}. {ex.Message}\r\n{ex.InnerException}");
+ }
+ }
+
+ connection.Close();
+ return tableDdls;
+ }
+
+ private List GetDdlFromRedshift(string[] tables)
+ {
+ var settings = _services.GetRequiredService();
+ var tableDdls = new List();
+ var schemas = "'onebi_hour','onebi_day'";
+ using var connection = new NpgsqlConnection(settings.RedshiftConnectionString);
+ connection.Open();
+
+ foreach (var table in tables)
+ {
+ try
+ {
+ var sql = $"SELECT columnname, external_type, columnnum FROM svv_external_columns WHERE schemaname in ({schemas}) AND tablename = '{table}';";
+
+ using var command = new NpgsqlCommand(sql, connection);
+ using var reader = command.ExecuteReader();
+ var ddl = $"Table {table} contains below fields: \r\n";
+ while (reader.Read())
+ {
+ /*var result = reader.GetString(0);
+ tableDdls.Add(result);*/
+ var columnName = reader.GetString(0);
+ var dataType = reader.GetString(1);
+ ddl += $"{columnName} {dataType}\n";
+ }
+ tableDdls.Add(ddl);
+
+ reader.Close();
+ command.Dispose();
+ }
+ catch (Exception ex)
+ {
+ _logger.LogWarning($"Error when getting ddl statement of table {table}. {ex.Message}\r\n{ex.InnerException}");
+ }
+ }
+ connection.Close();
+ return tableDdls;
+ }
+}
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/UtilFunctions/SqlSelect.cs b/src/Plugins/BotSharp.Plugin.SqlDriver/UtilFunctions/SqlSelect.cs
new file mode 100644
index 000000000..5ece6ecfa
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/UtilFunctions/SqlSelect.cs
@@ -0,0 +1,88 @@
+using Microsoft.Data.SqlClient;
+using MySqlConnector;
+using Npgsql;
+using static Dapper.SqlMapper;
+
+namespace BotSharp.Plugin.SqlDriver.UtilFunctions;
+
+public class SqlSelect : IFunctionCallback
+{
+ public string Name => "util-db-sql_select";
+ private readonly IServiceProvider _services;
+
+ public SqlSelect(IServiceProvider services)
+ {
+ _services = services;
+ }
+
+ public async Task Execute(RoleDialogModel message)
+ {
+ var args = JsonSerializer.Deserialize(message.FunctionArgs);
+
+ if (args.GeneratedWithoutTableDefinition)
+ {
+ message.Content = $"Get the table definition first.";
+ return false;
+ }
+
+ // check if need to instantely
+ var dbHook = _services.GetRequiredService();
+ var dbType = dbHook.GetDatabaseType(message);
+
+ var result = dbType switch
+ {
+ "mysql" => RunQueryInMySql(args),
+ "sqlserver" => RunQueryInSqlServer(args),
+ "redshift" => RunQueryInRedshift(args),
+ _ => throw new NotImplementedException($"Database type {dbType} is not supported.")
+ };
+
+ if (result == null)
+ {
+ message.Content = "Record not found";
+ }
+ else
+ {
+ message.Content = JsonSerializer.Serialize(result);
+ args.Return.Value = message.Content;
+ }
+
+ return true;
+ }
+
+ private IEnumerable RunQueryInMySql(SqlStatement args)
+ {
+ var settings = _services.GetRequiredService();
+ using var connection = new MySqlConnection(settings.MySqlExecutionConnectionString);
+ var dictionary = new Dictionary();
+ foreach (var p in args.Parameters)
+ {
+ dictionary["@" + p.Name] = p.Value;
+ }
+ return connection.Query(args.Statement, dictionary);
+ }
+
+ private IEnumerable RunQueryInSqlServer(SqlStatement args)
+ {
+ var settings = _services.GetRequiredService();
+ using var connection = new SqlConnection(settings.SqlServerExecutionConnectionString ?? settings.SqlServerConnectionString);
+ var dictionary = new Dictionary();
+ foreach (var p in args.Parameters)
+ {
+ dictionary["@" + p.Name] = p.Value;
+ }
+ return connection.Query(args.Statement, dictionary);
+ }
+
+ private IEnumerable RunQueryInRedshift(SqlStatement args)
+ {
+ var settings = _services.GetRequiredService();
+ using var connection = new NpgsqlConnection(settings.RedshiftConnectionString);
+ var dictionary = new Dictionary();
+ foreach (var p in args.Parameters)
+ {
+ dictionary["@" + p.Name] = p.Value;
+ }
+ return connection.Query(args.Statement, dictionary);
+ }
+}
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/UtilFunctions/VerifyDictionaryTerm.cs b/src/Plugins/BotSharp.Plugin.SqlDriver/UtilFunctions/VerifyDictionaryTerm.cs
new file mode 100644
index 000000000..2e6dbe72c
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/UtilFunctions/VerifyDictionaryTerm.cs
@@ -0,0 +1,130 @@
+using BotSharp.Core.Infrastructures;
+using MySqlConnector;
+using static Dapper.SqlMapper;
+
+namespace BotSharp.Plugin.SqlDriver.UtilFunctions;
+
+public class VerifyDictionaryTerm : IFunctionCallback
+{
+ public string Name => "util-db-verify_dictionary_term";
+ public string Indication => "Verifying dictionary term";
+
+
+ private readonly IServiceProvider _services;
+
+ public VerifyDictionaryTerm(IServiceProvider services)
+ {
+ _services = services;
+ }
+
+ public async Task Execute(RoleDialogModel message)
+ {
+ var args = JsonSerializer.Deserialize(message.FunctionArgs);
+
+ // get table DDL
+ var fn = _services.GetRequiredService();
+ var msgCopy = RoleDialogModel.From(message);
+ await fn.InvokeFunction("sql_table_definition", msgCopy);
+
+ // refine SQL
+ var agentService = _services.GetRequiredService();
+ var currentAgent = await agentService.LoadAgent(message.CurrentAgentId);
+ var dictionarySqlPrompt = await GetDictionarySQLPrompt(args.SqlStatement, msgCopy.Content);
+ var agent = new Agent
+ {
+ Id = message.CurrentAgentId ?? string.Empty,
+ Name = "sqlDriver_DictionarySearch",
+ Instruction = dictionarySqlPrompt,
+ TemplateDict = new Dictionary(),
+ LlmConfig = currentAgent.LlmConfig
+ };
+
+ var response = await GetAiResponse(agent);
+ args = response.Content.JsonContent();
+
+ // check if need to instantely
+ IEnumerable? result = null;
+ if (!string.IsNullOrWhiteSpace(args.SqlStatement))
+ {
+ var settings = _services.GetRequiredService();
+ using var connection = new MySqlConnection(settings.MySqlExecutionConnectionString);
+ result = connection.Query(args.SqlStatement);
+ }
+
+ if (result.IsNullOrEmpty())
+ {
+ message.Content = "Record not found";
+ }
+ else
+ {
+ message.Content = JsonSerializer.Serialize(result);
+ }
+
+ var states = _services.GetRequiredService();
+ var dictionaryItems = states.GetState("dictionary_items", "");
+ var newItem = BuildDictionaryItem(args.Table, args.Reason, message.Content);
+ dictionaryItems += !string.IsNullOrWhiteSpace(newItem) ? $"\r\n{newItem}\r\n" : string.Empty;
+ states.SetState("dictionary_items", dictionaryItems);
+
+ return true;
+ }
+
+ private async Task GetDictionarySQLPrompt(string originalSql, string tableStructure)
+ {
+ var agentService = _services.GetRequiredService();
+ var render = _services.GetRequiredService();
+ var knowledgeHooks = _services.GetServices();
+
+ var agent = await agentService.GetAgent(BuiltInAgentId.SqlDriver);
+ var template = agent.Templates.FirstOrDefault(x => x.Name == "database.dictionary.sql")?.Content ?? string.Empty;
+ var responseFormat = JsonSerializer.Serialize(new LookupDictionary{ });
+
+ return render.Render(template, new Dictionary
+ {
+ { "original_sql", originalSql },
+ { "table_structure", tableStructure },
+ { "response_format", responseFormat }
+ });
+ }
+
+ private async Task GetAiResponse(Agent agent)
+ {
+ var text = "Check and correct the SQL statement.";
+ var message = new RoleDialogModel(AgentRole.User, text);
+
+ var completion = CompletionProvider.GetChatCompletion(_services,
+ provider: agent.LlmConfig.Provider,
+ model: agent.LlmConfig.Model);
+
+ return await completion.GetChatCompletions(agent, new List { message });
+ }
+
+ private string BuildDictionaryItem(string? table, string? reason, string? result)
+ {
+ var res = string.Empty;
+ if (!string.IsNullOrWhiteSpace(table))
+ {
+ res += $"Table: {table}";
+ }
+
+ if (!string.IsNullOrWhiteSpace(reason))
+ {
+ if (!string.IsNullOrWhiteSpace(res))
+ {
+ res += "\r\n";
+ }
+ res += $"Reason: {reason}";
+ }
+
+ if (!string.IsNullOrWhiteSpace(result))
+ {
+ if (!string.IsNullOrWhiteSpace(res))
+ {
+ res += "\r\n";
+ }
+ res += $"Result: {result}";
+ }
+
+ return res;
+ }
+}
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/sql_select.json b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-db-sql_select.json
similarity index 98%
rename from src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/sql_select.json
rename to src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-db-sql_select.json
index 1bcf76a32..29f04789d 100644
--- a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/sql_select.json
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-db-sql_select.json
@@ -1,5 +1,5 @@
{
- "name": "sql_select",
+ "name": "util-db-sql_select",
"description": "Get the specific value from table",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/sql_table_definition.json b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-db-sql_table_definition.json
similarity index 90%
rename from src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/sql_table_definition.json
rename to src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-db-sql_table_definition.json
index e973feb89..6e4b946c1 100644
--- a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/sql_table_definition.json
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-db-sql_table_definition.json
@@ -1,5 +1,5 @@
{
- "name": "sql_table_definition",
+ "name": "util-db-sql_table_definition",
"description": "Get table structure from database by table name",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/verify_dictionary_term.json b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-db-verify_dictionary_term.json
similarity index 96%
rename from src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/verify_dictionary_term.json
rename to src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-db-verify_dictionary_term.json
index 64502c628..c354c1054 100644
--- a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/verify_dictionary_term.json
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-db-verify_dictionary_term.json
@@ -1,5 +1,5 @@
{
- "name": "verify_dictionary_term",
+ "name": "util-db-verify_dictionary_term",
"description": "Get id from dictionary table by keyword. Call this function only if need_lookup_dictionary is true, is_table_from_knowledge is true and is_insert is false. You can only query one table at a time. The table name must come from the global/domain knowledge.",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/sql_table_definition.fn.liquid b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/sql_table_definition.fn.liquid
deleted file mode 100644
index 9a8dee70f..000000000
--- a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/sql_table_definition.fn.liquid
+++ /dev/null
@@ -1 +0,0 @@
-Call sql_table_definition to get the table definition of the table.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/sql_executor.fn.liquid b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-db-sql_executor.fn.liquid
similarity index 78%
rename from src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/sql_executor.fn.liquid
rename to src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-db-sql_executor.fn.liquid
index edcb4befd..f3dd7faf6 100644
--- a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/sql_executor.fn.liquid
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-db-sql_executor.fn.liquid
@@ -1,6 +1,6 @@
You are connecting to {{ db_type }} database. You can run provided SQL statements by following {{ db_type }} rules.
-Please call function sql_select if user wants to get or retrieve data from data tables.
+Please call function util-db-sql_select if user wants to get or retrieve data from data tables.
If there are any parameters, please add them in the WHERE clause, each of which starts with "@".
Avoid returning the entire record and only return the fields you need.
For example, SELECT Id FROM table WHERE Id=@Id AND Name=@Name
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-db-sql_table_definition.fn.liquid b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-db-sql_table_definition.fn.liquid
new file mode 100644
index 000000000..3d8ad563d
--- /dev/null
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-db-sql_table_definition.fn.liquid
@@ -0,0 +1 @@
+Call util-db-sql_table_definition to get the table definition of the table.
\ No newline at end of file
diff --git a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/verify_dictionary_term.fn.liquid b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-db-verify_dictionary_term.fn.liquid
similarity index 92%
rename from src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/verify_dictionary_term.fn.liquid
rename to src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-db-verify_dictionary_term.fn.liquid
index 6a9b06e87..127122155 100644
--- a/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/verify_dictionary_term.fn.liquid
+++ b/src/Plugins/BotSharp.Plugin.SqlDriver/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-db-verify_dictionary_term.fn.liquid
@@ -1,4 +1,4 @@
-Rules to call verify_dictionary_term:
+Rules to call util-db-verify_dictionary_term:
=====
1. The table name must come from the planning in conversation.
2. You must return the id and name/code for existing dictionary.
diff --git a/src/Plugins/BotSharp.Plugin.Twilio/BotSharp.Plugin.Twilio.csproj b/src/Plugins/BotSharp.Plugin.Twilio/BotSharp.Plugin.Twilio.csproj
index 662bf3449..aff07e81b 100644
--- a/src/Plugins/BotSharp.Plugin.Twilio/BotSharp.Plugin.Twilio.csproj
+++ b/src/Plugins/BotSharp.Plugin.Twilio/BotSharp.Plugin.Twilio.csproj
@@ -7,17 +7,17 @@
$(GeneratePackageOnBuild)
$(SolutionDir)packages
-
+
-
-
+
+
-
+
-
+
PreserveNewest
-
+
PreserveNewest
diff --git a/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Enums/UtilityName.cs b/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Enums/UtilityName.cs
index 66abcd3a3..63252a57d 100644
--- a/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Enums/UtilityName.cs
+++ b/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Enums/UtilityName.cs
@@ -2,6 +2,6 @@ namespace BotSharp.Plugin.Twilio.OutboundPhoneCallHandler.Enums
{
public class UtilityName
{
- public const string OutboundPhoneCall = "twilio-outbound-phone-call";
+ public const string OutboundPhoneCall = "twilio.twilio-outbound-phone-call";
}
}
diff --git a/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Functions/HandleOutboundPhoneCallFn.cs b/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Functions/HandleOutboundPhoneCallFn.cs
index b9c77a717..a14564baf 100644
--- a/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Functions/HandleOutboundPhoneCallFn.cs
+++ b/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Functions/HandleOutboundPhoneCallFn.cs
@@ -16,7 +16,7 @@ public class HandleOutboundPhoneCallFn : IFunctionCallback
private readonly BotSharpOptions _options;
private readonly TwilioSetting _twilioSetting;
- public string Name => "twilio_outbound_phone_call";
+ public string Name => "util-twilio-twilio_outbound_phone_call";
public string Indication => "Dialing the number";
public HandleOutboundPhoneCallFn(
diff --git a/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Hooks/OutboundPhoneCallHandlerUtilityHook.cs b/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Hooks/OutboundPhoneCallHandlerUtilityHook.cs
index 09e8a9e4f..32639c9a2 100644
--- a/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Hooks/OutboundPhoneCallHandlerUtilityHook.cs
+++ b/src/Plugins/BotSharp.Plugin.Twilio/OutboundPhoneCallHandler/Hooks/OutboundPhoneCallHandlerUtilityHook.cs
@@ -5,14 +5,15 @@ namespace BotSharp.Plugin.Twilio.OutboundPhoneCallHandler.Hooks;
public class OutboundPhoneCallHandlerUtilityHook : IAgentUtilityHook
{
- private static string OUTBOUND_PHONE_CALL_FN = "twilio_outbound_phone_call";
+ private static string PREFIX = "util-twilio-";
+ private static string OUTBOUND_PHONE_CALL_FN = $"{PREFIX}twilio_outbound_phone_call";
public void AddUtilities(List utilities)
{
var utility = new AgentUtility
{
Name = UtilityName.OutboundPhoneCall,
- Functions = [new(OUTBOUND_PHONE_CALL_FN)],
+ Functions = [new($"{OUTBOUND_PHONE_CALL_FN}")],
Templates = [new($"{OUTBOUND_PHONE_CALL_FN}.fn")]
};
diff --git a/src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/twilio_outbound_phone_call.json b/src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-twilio-twilio_outbound_phone_call.json
similarity index 92%
rename from src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/twilio_outbound_phone_call.json
rename to src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-twilio-twilio_outbound_phone_call.json
index 8a49f441b..768c6fdee 100644
--- a/src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/twilio_outbound_phone_call.json
+++ b/src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/functions/util-twilio-twilio_outbound_phone_call.json
@@ -1,5 +1,5 @@
{
- "name": "twilio_outbound_phone_call",
+ "name": "util-twilio-twilio_outbound_phone_call",
"description": "If the user wants to initiate a phone call, you need to capture the phone number and compose the message the users wants to send. Then call this function to make an outbound call via Twilio.",
"parameters": {
"type": "object",
diff --git a/src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/twilio_outbound_phone_call.fn.liquid b/src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-twilio-twilio_outbound_phone_call.fn.liquid
similarity index 51%
rename from src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/twilio_outbound_phone_call.fn.liquid
rename to src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-twilio-twilio_outbound_phone_call.fn.liquid
index 55210a344..3bfb7dc22 100644
--- a/src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/twilio_outbound_phone_call.fn.liquid
+++ b/src/Plugins/BotSharp.Plugin.Twilio/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-twilio-twilio_outbound_phone_call.fn.liquid
@@ -1,2 +1,2 @@
** Please take a look at the conversation and decide whether user wants to make an outbound call.
-** Please call handle_outbound_call if user wants to make an outbound call.
\ No newline at end of file
+** Please call util-twilio-twilio_outbound_phone_call if user wants to make an outbound call.
\ No newline at end of file