2023-08-17 04:04:23 +00:00
|
|
|
using BotSharp.Abstraction.Agents.Models;
|
|
|
|
|
|
|
|
|
|
namespace BotSharp.Core.Agents.Services;
|
|
|
|
|
|
|
|
|
|
public class AgentRouter : IAgentRouting
|
|
|
|
|
{
|
|
|
|
|
private readonly IServiceProvider _services;
|
|
|
|
|
private readonly ILogger _logger;
|
|
|
|
|
private readonly AgentSettings _settings;
|
|
|
|
|
|
|
|
|
|
public AgentRouter(IServiceProvider services,
|
|
|
|
|
ILogger<AgentRouter> logger,
|
|
|
|
|
AgentSettings settings)
|
|
|
|
|
{
|
|
|
|
|
_services = services;
|
|
|
|
|
_logger = logger;
|
|
|
|
|
_settings = settings;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task<Agent> LoadCurrentAgent()
|
|
|
|
|
{
|
|
|
|
|
// Load current agent from state
|
2023-08-18 04:27:07 +00:00
|
|
|
var state = _services.GetRequiredService<IConversationStateService>();
|
|
|
|
|
var currentAgentId = state.GetState("agentId");
|
2023-08-17 04:04:23 +00:00
|
|
|
if (string.IsNullOrEmpty(currentAgentId))
|
|
|
|
|
{
|
|
|
|
|
currentAgentId = _settings.RouterId;
|
|
|
|
|
}
|
|
|
|
|
var agentService = _services.GetRequiredService<IAgentService>();
|
|
|
|
|
var agent = await agentService.LoadAgent(currentAgentId);
|
|
|
|
|
|
|
|
|
|
// Set agent and trigger state changed
|
2023-08-18 04:27:07 +00:00
|
|
|
state.SetState("agentId", currentAgentId);
|
2023-08-17 04:04:23 +00:00
|
|
|
|
|
|
|
|
return agent;
|
|
|
|
|
}
|
|
|
|
|
}
|