add get agent response

This commit is contained in:
Jicheng Lu 2023-09-02 23:54:22 -05:00
parent ca6f60695d
commit ba96bd81c0
6 changed files with 93 additions and 46 deletions

View file

@ -24,4 +24,6 @@ public interface IBotSharpRepository
List<RoutingProfileRecord> CreateRoutingProfiles(List<RoutingProfileRecord> profiles);
void DeleteRoutingItems();
void DeleteRoutingProfiles();
List<string> GetAgentResponses(string agentId);
}

View file

@ -68,6 +68,8 @@ public static class BotSharpServiceCollectionExtensions
services.AddScoped<Simulator>();
//services.AddScoped<IBotSharpRepository, FileRepository>();
return services;
}
@ -82,16 +84,16 @@ public static class BotSharpServiceCollectionExtensions
return services;
}
public static IServiceCollection UsingFileRepository(this IServiceCollection services, IConfiguration config)
{
services.AddScoped<IBotSharpRepository>(sp =>
{
var myDatabaseSettings = sp.GetRequiredService<BotSharpDatabaseSettings>();
return new FileRepository(myDatabaseSettings, sp);
});
//public static IServiceCollection UsingFileRepository(this IServiceCollection services, IConfiguration config)
//{
// services.AddScoped<IBotSharpRepository>(sp =>
// {
// var myDatabaseSettings = sp.GetRequiredService<BotSharpDatabaseSettings>();
// return new FileRepository(myDatabaseSettings, sp);
// });
return services;
}
// return services;
//}
public static IApplicationBuilder UseBotSharp(this IApplicationBuilder app)
{

View file

@ -96,4 +96,9 @@ public class BotSharpDbContext : Database, IBotSharpRepository
{
throw new NotImplementedException();
}
public List<string> GetAgentResponses(string agentId)
{
throw new NotImplementedException();
}
}

View file

@ -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<AgentSettings>();
var dir = Path.Combine(_dbSettings.FileRepository, agentSettings.DataDir);
//var agentSettings = _services.GetService<AgentSettings>();
var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir);
_agents = new List<AgentRecord>();
foreach (var d in Directory.GetDirectories(dir))
{
@ -102,8 +110,8 @@ public class FileRepository : IBotSharpRepository
return _conversations.AsQueryable();
}
var convSettings = _services.GetService<ConversationSetting>();
var dir = Path.Combine(_dbSettings.FileRepository, convSettings.DataDir);
//var convSettings = _services.GetService<ConversationSetting>();
var dir = Path.Combine(_dbSettings.FileRepository, _conversationSetting.DataDir);
_conversations = new List<ConversationRecord>();
foreach (var d in Directory.GetDirectories(dir))
{
@ -129,9 +137,9 @@ public class FileRepository : IBotSharpRepository
}
_routingItems = new List<RoutingItemRecord>();
var agentSettings = _services.GetRequiredService<AgentSettings>();
var dbSettings = _services.GetRequiredService<BotSharpDatabaseSettings>();
var filePath = Path.Combine(dbSettings.FileRepository, agentSettings.DataDir, "route.json");
//var agentSettings = _services.GetRequiredService<AgentSettings>();
//var dbSettings = _services.GetRequiredService<BotSharpDatabaseSettings>();
var filePath = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, "route.json");
if (File.Exists(filePath))
{
_routingItems = JsonSerializer.Deserialize<List<RoutingItemRecord>>(File.ReadAllText(filePath));
@ -152,9 +160,9 @@ public class FileRepository : IBotSharpRepository
}
_routingProfiles = new List<RoutingProfileRecord>();
var agentSettings = _services.GetRequiredService<AgentSettings>();
var dbSettings = _services.GetRequiredService<BotSharpDatabaseSettings>();
var filePath = Path.Combine(dbSettings.FileRepository, agentSettings.DataDir, "routing-profile.json");
//var agentSettings = _services.GetRequiredService<AgentSettings>();
//var dbSettings = _services.GetRequiredService<BotSharpDatabaseSettings>();
var filePath = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, "routing-profile.json");
if (File.Exists(filePath))
{
_routingProfiles = JsonSerializer.Deserialize<List<RoutingProfileRecord>>(File.ReadAllText(filePath));
@ -200,12 +208,12 @@ public class FileRepository : IBotSharpRepository
{
if (table == nameof(ConversationRecord))
{
var convSettings = _services.GetService<ConversationSetting>();
//var convSettings = _services.GetService<ConversationSetting>();
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<AgentSettings>();
//var agentSettings = _services.GetService<AgentSettings>();
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<BotSharpDatabaseSettings>();
var agentSettings = _services.GetRequiredService<AgentSettings>();
var dir = Path.Combine(dbSettings.FileRepository, agentSettings.DataDir, agentId);
//var dbSettings = _services.GetRequiredService<BotSharpDatabaseSettings>();
//var agentSettings = _services.GetRequiredService<AgentSettings>();
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<string> GetAgentResponses(string agentId)
{
var responses = new List<string>();
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;
}
}

View file

@ -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<string> RenderFunctionResponse(string agentId, RoleDialogModel message)
{
// Find response template
var agentService = _services.GetRequiredService<IAgentService>();
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<IAgentService>();
//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<IBotSharpRepository>();
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<ITemplateRender>();
@ -55,15 +60,18 @@ public class ResponseTemplateService : IResponseTemplateService
public async Task<string> RenderIntentResponse(string agentId, RoleDialogModel message)
{
// Find response template
var agentService = _services.GetRequiredService<IAgentService>();
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<IAgentService>();
//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<IBotSharpRepository>();
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<ITemplateRender>();

View file

@ -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<string> GetAgentResponses(string agentId)
{
var responses = new List<string>();
var agent = Agent.FirstOrDefault(x => x.Id == agentId);
if (agent == null) return responses;
return agent.Responses;
}
}