diff --git a/src/Infrastructure/BotSharp.Abstraction/Agents/Models/RoutingResult.cs b/src/Infrastructure/BotSharp.Abstraction/Agents/Models/RoutingResult.cs
deleted file mode 100644
index b8ecdf6b..00000000
--- a/src/Infrastructure/BotSharp.Abstraction/Agents/Models/RoutingResult.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace BotSharp.Abstraction.Agents.Models;
-
-public class RoutingResult
-{
- public string Result { get; set; }
-
- public RoutingResult(string result)
- {
- Result = result;
- }
-}
diff --git a/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/RoleDialogModel.cs b/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/RoleDialogModel.cs
index bc460159..b681c2c3 100644
--- a/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/RoleDialogModel.cs
+++ b/src/Infrastructure/BotSharp.Abstraction/Conversations/Models/RoleDialogModel.cs
@@ -30,11 +30,6 @@ public class RoleDialogModel
///
public object ExecutionData { get; set; }
- public bool IsConversationEnd { get; set; }
-
- public bool NeedReloadAgent { get; set; }
- public bool StopPropagate { get; set; }
-
///
/// Channel name
///
diff --git a/src/Infrastructure/BotSharp.Core/BotSharpServiceCollectionExtensions.cs b/src/Infrastructure/BotSharp.Core/BotSharpServiceCollectionExtensions.cs
index ae315146..9081ca05 100644
--- a/src/Infrastructure/BotSharp.Core/BotSharpServiceCollectionExtensions.cs
+++ b/src/Infrastructure/BotSharp.Core/BotSharpServiceCollectionExtensions.cs
@@ -37,7 +37,6 @@ public static class BotSharpServiceCollectionExtensions
services.AddScoped();
- services.AddScoped();
services.AddScoped();
return services;
diff --git a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.GetChatCompletionsAsyncRecursively.cs b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.GetChatCompletionsAsyncRecursively.cs
index c1fd2e30..3f56f97b 100644
--- a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.GetChatCompletionsAsyncRecursively.cs
+++ b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.GetChatCompletionsAsyncRecursively.cs
@@ -21,8 +21,8 @@ public partial class ConversationService
currentRecursiveDepth++;
if (currentRecursiveDepth > maxRecursiveDepth)
{
- _logger.LogError($"Exceed max current recursive depth.");
- await HandleAssistantMessage(new RoleDialogModel(AgentRole.Assistant, "System has exception, please try later.")
+ _logger.LogError($"Exceeded max recursive depth.");
+ await HandleAssistantMessage(new RoleDialogModel(AgentRole.Assistant, "I'm sorry, can you see it again?")
{
CurrentAgentId = agent.Id,
Channel = wholeDialogs.Last().Channel
diff --git a/src/Infrastructure/BotSharp.Core/Functions/GoToRouterFn.cs b/src/Infrastructure/BotSharp.Core/Functions/GoToRouterFn.cs
deleted file mode 100644
index e7a3455a..00000000
--- a/src/Infrastructure/BotSharp.Core/Functions/GoToRouterFn.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using BotSharp.Abstraction.Conversations.Models;
-using BotSharp.Abstraction.Functions;
-using BotSharp.Abstraction.Functions.Models;
-
-namespace BotSharp.Core.Functions;
-
-public class GoToRouterFn : IFunctionCallback
-{
- public string Name => "go_to_router";
- private readonly IServiceProvider _services;
-
- public GoToRouterFn(IServiceProvider services)
- {
- _services = services;
- }
-
- public async Task Execute(RoleDialogModel message)
- {
- var settings = _services.GetRequiredService();
- message.CurrentAgentId = settings.RouterId;
-
- var result = new FunctionExecutionValidationResult("true");
- message.ExecutionResult = JsonSerializer.Serialize(result);
-
- return true;
- }
-}
diff --git a/src/Infrastructure/BotSharp.Core/Functions/RouteToAgentFn.cs b/src/Infrastructure/BotSharp.Core/Functions/RouteToAgentFn.cs
index bae33c7e..4c6d1967 100644
--- a/src/Infrastructure/BotSharp.Core/Functions/RouteToAgentFn.cs
+++ b/src/Infrastructure/BotSharp.Core/Functions/RouteToAgentFn.cs
@@ -1,12 +1,13 @@
using BotSharp.Abstraction.Agents.Models;
using BotSharp.Abstraction.Conversations.Models;
using BotSharp.Abstraction.Functions;
-using BotSharp.Abstraction.Functions.Models;
-using Microsoft.Extensions.Logging;
using System.IO;
namespace BotSharp.Core.Functions;
+///
+/// Router calls this function to set the Active Agent according to the context
+///
public class RouteToAgentFn : IFunctionCallback
{
public string Name => "route_to_agent";
@@ -20,50 +21,67 @@ public class RouteToAgentFn : IFunctionCallback
public async Task Execute(RoleDialogModel message)
{
var args = JsonSerializer.Deserialize(message.FunctionArgs);
- var result = new RoutingResult($"Routed to {args.AgentName}");
if (string.IsNullOrEmpty(args.AgentName))
{
- result = new RoutingResult($"Can't find {args.AgentName}");
+ message.ExecutionResult = $"missing agent name";
}
else
{
- var agentSettings = _services.GetRequiredService();
- var dbSettings = _services.GetRequiredService();
- var filePath = Path.Combine(dbSettings.FileRepository, agentSettings.DataDir, agentSettings.RouterId, "route.json");
- var routes = JsonSerializer.Deserialize(File.ReadAllText(filePath));
-
- var agent = routes.FirstOrDefault(x => x.AgentName.ToLower() == args.AgentName.ToLower());
- if (agent == null)
+ if (!HasMissingRequiredField(message, out var agentId))
{
- result = new RoutingResult($"Can't find agent {args.AgentName}.");
+ message.CurrentAgentId = agentId;
+ message.ExecutionResult = $"Routed to {args.AgentName}";
}
- else
- {
- // Check required fields
- var jo = JsonSerializer.Deserialize