Merge pull request #170 from iceljc/features/relocate-agent-templates

Features/relocate agent templates
This commit is contained in:
Haiping 2023-10-16 10:39:42 -05:00 committed by GitHub
commit 60a2131214
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 24 deletions

View file

@ -22,4 +22,9 @@ public static class StringExtensions
{
return input.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
}
public static bool IsEqualTo(this string str1, string str2, StringComparison option = StringComparison.OrdinalIgnoreCase)
{
return str1.Equals(str2, option);
}
}

View file

@ -1,6 +1,7 @@
using BotSharp.Abstraction.Agents.Models;
using BotSharp.Abstraction.Functions.Models;
using BotSharp.Abstraction.Repositories;
using BotSharp.Abstraction.Utilities;
using System.IO;
namespace BotSharp.Core.Agents.Services;
@ -71,7 +72,7 @@ public partial class AgentService
{
var agentJson = File.ReadAllText(Path.Combine(dir, "agent.json"));
var agent = JsonSerializer.Deserialize<Agent>(agentJson, _options);
if (agent != null && agent.Name == agentName)
if (agent != null && agent.Name.IsEqualTo(agentName))
{
var functions = FetchFunctionsFromFile(dir);
var instruction = FetchInstructionFromFile(dir);
@ -99,13 +100,16 @@ public partial class AgentService
private List<AgentTemplate> FetchTemplatesFromFile(string fileDir)
{
var templates = new List<AgentTemplate>();
foreach (var file in Directory.GetFiles(fileDir))
var templateDir = Path.Combine(fileDir, "templates");
if (!Directory.Exists(templateDir)) return templates;
foreach (var file in Directory.GetFiles(templateDir))
{
var fileName = file.Split(Path.DirectorySeparatorChar).Last();
var splits = fileName.ToLower().Split('.');
var name = splits[0];
var extension = splits[1];
if (name != "instruction" && extension == _agentSettings.TemplateFormat)
if (extension.IsEqualTo(_agentSettings.TemplateFormat))
{
var content = File.ReadAllText(file);
templates.Add(new AgentTemplate(name, content));

View file

@ -399,23 +399,21 @@ public class FileRepository : IBotSharpRepository
var (agent, agentFile) = GetAgentFromFile(agentId);
if (agent == null) return;
var baseDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId);
var templateDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, "templates");
foreach (var file in Directory.GetFiles(baseDir))
if (!Directory.Exists(templateDir))
{
var fileName = file.Split(Path.DirectorySeparatorChar).Last();
var splits = fileName.ToLower().Split('.');
var name = splits[0];
var extension = splits[1];
if (name != "instruction" && extension == _agentSettings.TemplateFormat)
{
File.Delete(file);
}
Directory.CreateDirectory(templateDir);
}
foreach (var file in Directory.GetFiles(templateDir))
{
File.Delete(file);
}
foreach (var template in templates)
{
var file = Path.Combine(baseDir, $"{template.Name}.{_agentSettings.TemplateFormat}");
var file = Path.Combine(templateDir, $"{template.Name}.{_agentSettings.TemplateFormat}");
File.WriteAllText(file, template.Content);
}
}
@ -427,8 +425,7 @@ public class FileRepository : IBotSharpRepository
var (agent, agentFile) = GetAgentFromFile(agentId);
if (agent == null) return;
var baseDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId);
var responseDir = Path.Combine(baseDir, "responses");
var responseDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, "responses");
if (!Directory.Exists(responseDir))
{
Directory.CreateDirectory(responseDir);
@ -512,17 +509,16 @@ public class FileRepository : IBotSharpRepository
public string GetAgentTemplate(string agentId, string templateName)
{
var fileDir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId);
if (!Directory.Exists(fileDir)) return string.Empty;
var dir = Path.Combine(_dbSettings.FileRepository, _agentSettings.DataDir, agentId, "templates");
if (!Directory.Exists(dir)) return string.Empty;
var lowerTemplateName = templateName?.ToLower();
foreach (var file in Directory.GetFiles(fileDir))
foreach (var file in Directory.GetFiles(dir))
{
var fileName = file.Split(Path.DirectorySeparatorChar).Last();
var splits = fileName.ToLower().Split('.');
var name = splits[0];
var extension = splits[1];
if (name == lowerTemplateName && extension == _agentSettings.TemplateFormat)
if (name.IsEqualTo(templateName) && extension.IsEqualTo(_agentSettings.TemplateFormat))
{
return File.ReadAllText(file);
}
@ -742,14 +738,16 @@ public class FileRepository : IBotSharpRepository
private List<AgentTemplate> FetchTemplates(string fileDir)
{
var templates = new List<AgentTemplate>();
var templateDir = Path.Combine(fileDir, "templates");
if (!Directory.Exists(templateDir)) return templates;
foreach (var file in Directory.GetFiles(fileDir))
foreach (var file in Directory.GetFiles(templateDir))
{
var fileName = file.Split(Path.DirectorySeparatorChar).Last();
var splits = fileName.ToLower().Split('.');
var name = splits[0];
var extension = splits[1];
if (name != "instruction" && extension == _agentSettings.TemplateFormat)
if (extension.Equals(_agentSettings.TemplateFormat, StringComparison.OrdinalIgnoreCase))
{
var content = File.ReadAllText(file);
templates.Add(new AgentTemplate(name, content));

View file

@ -38,7 +38,7 @@ public class FunctionDefMongoElement
Parameters = new FunctionParametersDef
{
Type = mongoFunction.Parameters.Type,
Properties = JsonSerializer.Deserialize<JsonDocument>(mongoFunction.Parameters.Properties),
Properties = JsonSerializer.Deserialize<JsonDocument>(mongoFunction.Parameters.Properties.IfNullOrEmptyAs("{}")),
Required = mongoFunction.Parameters.Required,
}
};