From 5fc82387859742f39dee39a5500f9276f674c007 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Wed, 26 Jun 2024 11:59:09 -0500 Subject: [PATCH] refine fetching agent function --- .../FileRepository/FileRepository.Agent.cs | 12 +++--- .../FileRepository.AgentTask.cs | 10 ++--- .../FileRepository.Transaction.cs | 4 +- .../FileRepository/FileRepository.User.cs | 8 ++-- .../FileRepository/FileRepository.cs | 40 ++++++++++++++----- 5 files changed, 48 insertions(+), 26 deletions(-) diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Agent.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Agent.cs index 89d5081d..da0f2030 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Agent.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Agent.cs @@ -208,7 +208,7 @@ namespace BotSharp.Core.Repository var (agent, agentFile) = GetAgentFromFile(agentId); if (agent == null) return; - var templateDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, "templates"); + var templateDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, AGENT_TEMPLATES_FOLDER); if (!Directory.Exists(templateDir)) { @@ -234,7 +234,7 @@ namespace BotSharp.Core.Repository var (agent, agentFile) = GetAgentFromFile(agentId); if (agent == null) return; - var responseDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, "responses"); + var responseDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, AGENT_RESPONSES_FOLDER); if (!Directory.Exists(responseDir)) { Directory.CreateDirectory(responseDir); @@ -305,7 +305,7 @@ namespace BotSharp.Core.Repository public List GetAgentResponses(string agentId, string prefix, string intent) { var responses = new List(); - var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, "responses"); + var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, AGENT_RESPONSES_FOLDER); if (!Directory.Exists(dir)) return responses; foreach (var file in Directory.GetFiles(dir)) @@ -399,7 +399,7 @@ namespace BotSharp.Core.Repository public string GetAgentTemplate(string agentId, string templateName) { - var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, "templates"); + var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, AGENT_TEMPLATES_FOLDER); if (!Directory.Exists(dir)) return string.Empty; foreach (var file in Directory.GetFiles(dir)) @@ -421,7 +421,7 @@ namespace BotSharp.Core.Repository { if (string.IsNullOrEmpty(agentId) || template == null) return false; - var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, "templates"); + var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, AGENT_TEMPLATES_FOLDER); if (!Directory.Exists(dir)) return false; var foundTemplate = Directory.GetFiles(dir).FirstOrDefault(f => @@ -460,7 +460,7 @@ namespace BotSharp.Core.Repository if (string.IsNullOrEmpty(agentDir)) return false; // Delete agent user relationships - var usersDir = Path.Combine(_dbSettings.FileRepository, "users"); + var usersDir = Path.Combine(_dbSettings.FileRepository, USERS_FOLDER); if (Directory.Exists(usersDir)) { foreach (var userDir in Directory.GetDirectories(usersDir)) diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.AgentTask.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.AgentTask.cs index d542b28b..776cf137 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.AgentTask.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.AgentTask.cs @@ -20,7 +20,7 @@ public partial class FileRepository foreach (var agentDir in Directory.GetDirectories(dir)) { - var taskDir = Path.Combine(agentDir, "tasks"); + var taskDir = Path.Combine(agentDir, AGENT_TASKS_FOLDER); if (!Directory.Exists(taskDir)) continue; var agentId = agentDir.Split(Path.DirectorySeparatorChar).Last(); @@ -84,7 +84,7 @@ public partial class FileRepository var agentDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId); if (!Directory.Exists(agentDir)) return null; - var taskDir = Path.Combine(agentDir, "tasks"); + var taskDir = Path.Combine(agentDir, AGENT_TASKS_FOLDER); if (!Directory.Exists(taskDir)) return null; var taskFile = FindTaskFileById(taskDir, taskId); @@ -106,7 +106,7 @@ public partial class FileRepository var agentDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, task.AgentId); if (!Directory.Exists(agentDir)) return; - var taskDir = Path.Combine(agentDir, "tasks"); + var taskDir = Path.Combine(agentDir, AGENT_TASKS_FOLDER); if (!Directory.Exists(taskDir)) { Directory.CreateDirectory(taskDir); @@ -140,7 +140,7 @@ public partial class FileRepository var agentDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, task.AgentId); if (!Directory.Exists(agentDir)) return; - var taskDir = Path.Combine(agentDir, "tasks"); + var taskDir = Path.Combine(agentDir, AGENT_TASKS_FOLDER); if (!Directory.Exists(taskDir)) return; var taskFile = FindTaskFileById(taskDir, task.Id); @@ -195,7 +195,7 @@ public partial class FileRepository var agentDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId); if (!Directory.Exists(agentDir) || taskIds.IsNullOrEmpty()) return false; - var taskDir = Path.Combine(agentDir, "tasks"); + var taskDir = Path.Combine(agentDir, AGENT_TASKS_FOLDER); if (!Directory.Exists(taskDir)) return false; var deletedTasks = new List(); diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Transaction.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Transaction.cs index d19db2b7..13152f93 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Transaction.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Transaction.cs @@ -51,7 +51,7 @@ public partial class FileRepository { foreach (var user in _users) { - var dir = Path.Combine(_dbSettings.FileRepository, "users", user.Id); + var dir = Path.Combine(_dbSettings.FileRepository, USERS_FOLDER, user.Id); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); @@ -69,7 +69,7 @@ public partial class FileRepository var agents = _userAgents.Where(x => x.UserId == uid).ToList(); if (agents.Any()) { - var dir = Path.Combine(_dbSettings.FileRepository, "users", uid); + var dir = Path.Combine(_dbSettings.FileRepository, USERS_FOLDER, uid); var path = Path.Combine(dir, USER_AGENT_FILE); File.WriteAllText(path, JsonSerializer.Serialize(agents, _options)); } diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.User.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.User.cs index e7566002..32a5127b 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.User.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.User.cs @@ -25,12 +25,12 @@ public partial class FileRepository { var userId = Guid.NewGuid().ToString(); user.Id = userId; - var dir = Path.Combine(_dbSettings.FileRepository, "users", userId); + var dir = Path.Combine(_dbSettings.FileRepository, USERS_FOLDER, userId); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } - var path = Path.Combine(dir, "user.json"); + var path = Path.Combine(dir, USER_FILE); File.WriteAllText(path, JsonSerializer.Serialize(user, _options)); } @@ -38,8 +38,8 @@ public partial class FileRepository { var user = GetUserById(userId); user.Verified = true; - var dir = Path.Combine(_dbSettings.FileRepository, "users", user.Id); - var path = Path.Combine(dir, "user.json"); + var dir = Path.Combine(_dbSettings.FileRepository, USERS_FOLDER, user.Id); + var path = Path.Combine(dir, USER_FILE); File.WriteAllText(path, JsonSerializer.Serialize(user, _options)); } } diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.cs index a30142be..c7b6462b 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.cs @@ -36,6 +36,11 @@ public partial class FileRepository : IBotSharpRepository private const string AGENT_TASK_PREFIX = "#metadata"; private const string AGENT_TASK_SUFFIX = "/metadata"; private const string TRANSLATION_MEMORY_FILE = "memory.json"; + private const string AGENT_FUNCTIONS_FOLDER = "functions"; + private const string AGENT_TEMPLATES_FOLDER = "templates"; + private const string AGENT_RESPONSES_FOLDER = "responses"; + private const string AGENT_TASKS_FOLDER = "tasks"; + private const string USERS_FOLDER = "users"; public FileRepository( IServiceProvider services, @@ -79,7 +84,7 @@ public partial class FileRepository : IBotSharpRepository return _users.AsQueryable(); } - var dir = Path.Combine(_dbSettings.FileRepository, "users"); + var dir = Path.Combine(_dbSettings.FileRepository, USERS_FOLDER); _users = new List(); if (Directory.Exists(dir)) { @@ -142,7 +147,7 @@ public partial class FileRepository : IBotSharpRepository return _userAgents.AsQueryable(); } - var dir = Path.Combine(_dbSettings.FileRepository, "users"); + var dir = Path.Combine(_dbSettings.FileRepository, USERS_FOLDER); _userAgents = new List(); if (Directory.Exists(dir)) { @@ -194,11 +199,28 @@ public partial class FileRepository : IBotSharpRepository private List FetchFunctions(string fileDir) { - var file = Path.Combine(fileDir, AGENT_FUNCTIONS_FILE); - if (!File.Exists(file)) return new List(); + var functions = new List(); + var functionDir = Path.Combine(fileDir, AGENT_FUNCTIONS_FOLDER); - var functionsJson = File.ReadAllText(file); - var functions = JsonSerializer.Deserialize>(functionsJson, _options); + if (!Directory.Exists(functionDir)) return functions; + + foreach ( var file in Directory.GetFiles(functionDir)) + { + try + { + var extension = Path.GetExtension(file).Substring(1); + if (extension != "json") continue; + + var json = File.ReadAllText(file); + var function = JsonSerializer.Deserialize(json, _options); + functions.Add(function); + } + catch + { + continue; + } + + } return functions; } @@ -213,7 +235,7 @@ public partial class FileRepository : IBotSharpRepository private List FetchTemplates(string fileDir) { var templates = new List(); - var templateDir = Path.Combine(fileDir, "templates"); + var templateDir = Path.Combine(fileDir, AGENT_TEMPLATES_FOLDER); if (!Directory.Exists(templateDir)) return templates; foreach (var file in Directory.GetFiles(templateDir)) @@ -235,7 +257,7 @@ public partial class FileRepository : IBotSharpRepository private List FetchTasks(string fileDir) { var tasks = new List(); - var taskDir = Path.Combine(fileDir, "tasks"); + var taskDir = Path.Combine(fileDir, AGENT_TASKS_FOLDER); if (!Directory.Exists(taskDir)) return tasks; foreach (var file in Directory.GetFiles(taskDir)) @@ -252,7 +274,7 @@ public partial class FileRepository : IBotSharpRepository private List FetchResponses(string fileDir) { var responses = new List(); - var responseDir = Path.Combine(fileDir, "responses"); + var responseDir = Path.Combine(fileDir, AGENT_RESPONSES_FOLDER); if (!Directory.Exists(responseDir)) return responses; foreach (var file in Directory.GetFiles(responseDir))