BotSharp/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.RefreshAgents.cs

87 lines
3.1 KiB
C#
Raw Normal View History

2024-04-12 15:00:55 +00:00
using BotSharp.Abstraction.Repositories.Enums;
2023-10-17 20:29:40 +00:00
using System.IO;
namespace BotSharp.Core.Agents.Services;
public partial class AgentService
{
2024-04-11 07:00:17 +00:00
public async Task<string> RefreshAgents()
2023-10-17 20:29:40 +00:00
{
2024-04-12 15:00:55 +00:00
string refreshResult;
2023-10-17 20:29:40 +00:00
var dbSettings = _services.GetRequiredService<BotSharpDatabaseSettings>();
2024-04-12 15:00:55 +00:00
if (dbSettings.Default == RepositoryEnum.FileRepository)
{
refreshResult = $"Invalid database repository setting: {dbSettings.Default}";
_logger.LogWarning(refreshResult);
return refreshResult;
}
2024-01-16 03:26:18 +00:00
var agentDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
dbSettings.FileRepository,
_agentSettings.DataDir);
2024-04-11 07:00:17 +00:00
if (!Directory.Exists(agentDir))
{
refreshResult = $"Cannot find the directory: {agentDir}";
return refreshResult;
}
2024-11-12 20:00:25 +00:00
2024-04-11 07:00:17 +00:00
var refreshedAgents = new List<string>();
2023-10-17 20:29:40 +00:00
foreach (var dir in Directory.GetDirectories(agentDir))
{
2024-04-11 07:00:17 +00:00
try
{
var agentJson = File.ReadAllText(Path.Combine(dir, "agent.json"));
var agent = JsonSerializer.Deserialize<Agent>(agentJson, _options);
if (agent == null)
{
_logger.LogError($"Cannot find agent in file directory: {dir}");
continue;
}
2024-08-13 22:16:55 +00:00
var (defaultInstruction, channelInstructions) = GetInstructionsFromFile(dir);
var functions = GetFunctionsFromFile(dir);
var responses = GetResponsesFromFile(dir);
var templates = GetTemplatesFromFile(dir);
var samples = GetSamplesFromFile(dir);
2024-08-13 21:36:12 +00:00
agent.SetInstruction(defaultInstruction)
.SetChannelInstructions(channelInstructions)
2024-04-11 07:00:17 +00:00
.SetTemplates(templates)
.SetFunctions(functions)
.SetResponses(responses)
.SetSamples(samples);
2024-08-13 22:16:55 +00:00
var tasks = GetTasksFromFile(dir);
2024-04-11 07:00:17 +00:00
var isAgentDeleted = _db.DeleteAgent(agent.Id);
if (isAgentDeleted)
{
2024-04-11 15:19:57 +00:00
await Task.Delay(100);
2024-04-11 07:00:17 +00:00
_db.BulkInsertAgents(new List<Agent> { agent });
_db.BulkInsertAgentTasks(tasks);
refreshedAgents.Add(agent.Name);
2024-04-11 15:19:57 +00:00
_logger.LogInformation($"Agent {agent.Name} has been migrated.");
2024-04-11 07:00:17 +00:00
}
}
catch (Exception ex)
{
_logger.LogError($"Failed to migrate agent in file directory: {dir}\r\nError: {ex.Message}");
}
2023-10-17 20:29:40 +00:00
}
2024-04-11 07:00:17 +00:00
if (!refreshedAgents.IsNullOrEmpty())
{
Utilities.ClearCache();
2024-04-11 15:19:57 +00:00
refreshResult = $"Agents are migrated!\r\n{string.Join("\r\n", refreshedAgents)}";
2024-04-11 07:00:17 +00:00
}
else
{
refreshResult = "No agent gets refreshed!";
}
2023-12-27 15:33:03 +00:00
2024-04-11 07:00:17 +00:00
_logger.LogInformation(refreshResult);
return refreshResult;
2023-10-17 20:29:40 +00:00
}
}