diff --git a/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs b/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs index cbace0c2..f8610c03 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs @@ -24,4 +24,6 @@ public interface IBotSharpRepository List CreateRoutingProfiles(List profiles); void DeleteRoutingItems(); void DeleteRoutingProfiles(); + + List GetAgentResponses(string agentId); } diff --git a/src/Infrastructure/BotSharp.Core/BotSharpServiceCollectionExtensions.cs b/src/Infrastructure/BotSharp.Core/BotSharpServiceCollectionExtensions.cs index 0aa9d850..00d6ec67 100644 --- a/src/Infrastructure/BotSharp.Core/BotSharpServiceCollectionExtensions.cs +++ b/src/Infrastructure/BotSharp.Core/BotSharpServiceCollectionExtensions.cs @@ -68,6 +68,8 @@ public static class BotSharpServiceCollectionExtensions services.AddScoped(); + //services.AddScoped(); + return services; } @@ -82,16 +84,16 @@ public static class BotSharpServiceCollectionExtensions return services; } - public static IServiceCollection UsingFileRepository(this IServiceCollection services, IConfiguration config) - { - services.AddScoped(sp => - { - var myDatabaseSettings = sp.GetRequiredService(); - return new FileRepository(myDatabaseSettings, sp); - }); + //public static IServiceCollection UsingFileRepository(this IServiceCollection services, IConfiguration config) + //{ + // services.AddScoped(sp => + // { + // var myDatabaseSettings = sp.GetRequiredService(); + // return new FileRepository(myDatabaseSettings, sp); + // }); - return services; - } + // return services; + //} public static IApplicationBuilder UseBotSharp(this IApplicationBuilder app) { diff --git a/src/Infrastructure/BotSharp.Core/Repository/BotSharpDbContext.cs b/src/Infrastructure/BotSharp.Core/Repository/BotSharpDbContext.cs index d1600b04..445cf555 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/BotSharpDbContext.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/BotSharpDbContext.cs @@ -96,4 +96,9 @@ public class BotSharpDbContext : Database, IBotSharpRepository { throw new NotImplementedException(); } + + public List GetAgentResponses(string agentId) + { + throw new NotImplementedException(); + } } diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository.cs index e9c657c9..182f7c28 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository.cs @@ -8,13 +8,21 @@ namespace BotSharp.Core.Repository; public class FileRepository : IBotSharpRepository { private readonly BotSharpDatabaseSettings _dbSettings; + private readonly AgentSettings _agentSettings; + private readonly ConversationSetting _conversationSetting; private readonly IServiceProvider _services; private JsonSerializerOptions _options; - public FileRepository(BotSharpDatabaseSettings dbSettings, IServiceProvider services) + public FileRepository( + IServiceProvider services, + BotSharpDatabaseSettings dbSettings, + AgentSettings agentSettings, + ConversationSetting conversationSetting) { - _dbSettings = dbSettings; _services = services; + _dbSettings = dbSettings; + _agentSettings = agentSettings; + _conversationSetting = conversationSetting; _options = new JsonSerializerOptions { @@ -55,8 +63,8 @@ public class FileRepository : IBotSharpRepository return _agents.AsQueryable(); } - var agentSettings = _services.GetService(); - var dir = Path.Combine(_dbSettings.FileRepository, agentSettings.DataDir); + //var agentSettings = _services.GetService(); + var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir); _agents = new List(); foreach (var d in Directory.GetDirectories(dir)) { @@ -102,8 +110,8 @@ public class FileRepository : IBotSharpRepository return _conversations.AsQueryable(); } - var convSettings = _services.GetService(); - var dir = Path.Combine(_dbSettings.FileRepository, convSettings.DataDir); + //var convSettings = _services.GetService(); + var dir = Path.Combine(_dbSettings.FileRepository, _conversationSetting.DataDir); _conversations = new List(); foreach (var d in Directory.GetDirectories(dir)) { @@ -129,9 +137,9 @@ public class FileRepository : IBotSharpRepository } _routingItems = new List(); - var agentSettings = _services.GetRequiredService(); - var dbSettings = _services.GetRequiredService(); - var filePath = Path.Combine(dbSettings.FileRepository, agentSettings.DataDir, "route.json"); + //var agentSettings = _services.GetRequiredService(); + //var dbSettings = _services.GetRequiredService(); + var filePath = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, "route.json"); if (File.Exists(filePath)) { _routingItems = JsonSerializer.Deserialize>(File.ReadAllText(filePath)); @@ -152,9 +160,9 @@ public class FileRepository : IBotSharpRepository } _routingProfiles = new List(); - var agentSettings = _services.GetRequiredService(); - var dbSettings = _services.GetRequiredService(); - var filePath = Path.Combine(dbSettings.FileRepository, agentSettings.DataDir, "routing-profile.json"); + //var agentSettings = _services.GetRequiredService(); + //var dbSettings = _services.GetRequiredService(); + var filePath = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, "routing-profile.json"); if (File.Exists(filePath)) { _routingProfiles = JsonSerializer.Deserialize>(File.ReadAllText(filePath)); @@ -200,12 +208,12 @@ public class FileRepository : IBotSharpRepository { if (table == nameof(ConversationRecord)) { - var convSettings = _services.GetService(); + //var convSettings = _services.GetService(); foreach (var conversation in _conversations) { var dir = Path.Combine(_dbSettings.FileRepository, - convSettings.DataDir, + _conversationSetting.DataDir, conversation.Id); if (!Directory.Exists(dir)) { @@ -217,12 +225,12 @@ public class FileRepository : IBotSharpRepository } else if (table == nameof(AgentRecord)) { - var agentSettings = _services.GetService(); + //var agentSettings = _services.GetService(); foreach (var agent in _agents) { var dir = Path.Combine(_dbSettings.FileRepository, - agentSettings.DataDir, + _agentSettings.DataDir, agent.Id); if (!Directory.Exists(dir)) { @@ -313,9 +321,9 @@ public class FileRepository : IBotSharpRepository private string GetAgentDataDir(string agentId) { - var dbSettings = _services.GetRequiredService(); - var agentSettings = _services.GetRequiredService(); - var dir = Path.Combine(dbSettings.FileRepository, agentSettings.DataDir, agentId); + //var dbSettings = _services.GetRequiredService(); + //var agentSettings = _services.GetRequiredService(); + var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); @@ -342,4 +350,18 @@ public class FileRepository : IBotSharpRepository { throw new NotImplementedException(); } + + public List GetAgentResponses(string agentId) + { + var responses = new List(); + var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, "responses"); + if (!Directory.Exists(dir)) return responses; + + foreach (var file in Directory.GetFiles(dir)) + { + responses.Add(File.ReadAllText(file)); + } + + return responses; + } } diff --git a/src/Infrastructure/BotSharp.Core/Templating/ResponseTemplateService.cs b/src/Infrastructure/BotSharp.Core/Templating/ResponseTemplateService.cs index cac30ff7..4bdcb30a 100644 --- a/src/Infrastructure/BotSharp.Core/Templating/ResponseTemplateService.cs +++ b/src/Infrastructure/BotSharp.Core/Templating/ResponseTemplateService.cs @@ -1,3 +1,4 @@ +using BotSharp.Abstraction.Repositories; using BotSharp.Abstraction.Templating; using System.IO; using System.Reflection; @@ -18,11 +19,14 @@ public class ResponseTemplateService : IResponseTemplateService public async Task RenderFunctionResponse(string agentId, RoleDialogModel message) { // Find response template - var agentService = _services.GetRequiredService(); - var dir = Path.Combine(agentService.GetAgentDataDir(agentId), "responses"); - var responses = Directory.GetFiles(dir) - .Where(f => f.Split(Path.DirectorySeparatorChar).Last().Split('.')[1] == message.FunctionName) - .ToList(); + //var agentService = _services.GetRequiredService(); + //var dir = Path.Combine(agentService.GetAgentDataDir(agentId), "responses"); + //var responses = Directory.GetFiles(dir) + // .Where(f => f.Split(Path.DirectorySeparatorChar).Last().Split('.')[1] == message.FunctionName) + // .ToList(); + + var db = _services.GetRequiredService(); + var responses = db.GetAgentResponses(agentId); if (responses.Count == 0) { @@ -30,7 +34,8 @@ public class ResponseTemplateService : IResponseTemplateService } var randomIndex = new Random().Next(0, responses.Count); - var template = File.ReadAllText(responses[randomIndex]); + //var template = File.ReadAllText(responses[randomIndex]); + var template = responses[randomIndex]; var render = _services.GetRequiredService(); @@ -55,15 +60,18 @@ public class ResponseTemplateService : IResponseTemplateService public async Task RenderIntentResponse(string agentId, RoleDialogModel message) { // Find response template - var agentService = _services.GetRequiredService(); - var dir = Path.Combine(agentService.GetAgentDataDir(agentId), "responses"); - if (!Directory.Exists(dir)) - { - return string.Empty; - } - var responses = Directory.GetFiles(dir) - .Where(f => f.Split(Path.DirectorySeparatorChar).Last().Split('.')[1] == message.IntentName) - .ToList(); + //var agentService = _services.GetRequiredService(); + //var dir = Path.Combine(agentService.GetAgentDataDir(agentId), "responses"); + //if (!Directory.Exists(dir)) + //{ + // return string.Empty; + //} + //var responses = Directory.GetFiles(dir) + // .Where(f => f.Split(Path.DirectorySeparatorChar).Last().Split('.')[1] == message.IntentName) + // .ToList(); + + var db = _services.GetRequiredService(); + var responses = db.GetAgentResponses(agentId); if (responses.Count == 0) { @@ -71,7 +79,8 @@ public class ResponseTemplateService : IResponseTemplateService } var randomIndex = new Random().Next(0, responses.Count); - var template = File.ReadAllText(responses[randomIndex]); + //var template = File.ReadAllText(responses[randomIndex]); + var template = responses[randomIndex]; var render = _services.GetRequiredService(); diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.cs index 657d7bb7..d8244c7c 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.cs @@ -1,5 +1,3 @@ -using BotSharp.Abstraction.Routing.Models; -using BotSharp.Abstraction.Users.Models; using BotSharp.Plugin.MongoStorage.Collections; namespace BotSharp.Plugin.MongoStorage.Repository; @@ -437,4 +435,13 @@ public class MongoRepository : IBotSharpRepository AgentIds = x.AgentIds.Select(x => x.ToString()).ToList() }).ToList(); } + + public List GetAgentResponses(string agentId) + { + var responses = new List(); + var agent = Agent.FirstOrDefault(x => x.Id == agentId); + if (agent == null) return responses; + + return agent.Responses; + } }