Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,9 @@ public static string[] SplitByNewLine(this string input)
{
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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -71,7 +72,7 @@ private Agent FetchAgentFileByName(string agentName, string filePath)
{
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);
Expand Down Expand Up @@ -99,13 +100,16 @@ private string FetchInstructionFromFile(string fileDir)
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));
Expand Down
38 changes: 18 additions & 20 deletions src/Infrastructure/BotSharp.Core/Repository/FileRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -399,23 +399,21 @@ private void UpdateAgentTemplates(string agentId, List<AgentTemplate> templates)
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);
}
}
Expand All @@ -427,8 +425,7 @@ private void UpdateAgentResponses(string agentId, List<AgentResponse> responses)
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);
Expand Down Expand Up @@ -512,17 +509,16 @@ public Agent GetAgent(string agentId)

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);
}
Expand Down Expand Up @@ -742,14 +738,16 @@ private List<FunctionDef> FetchFunctions(string fileDir)
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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public static FunctionDef ToDomainElement(FunctionDefMongoElement mongoFunction)
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,
}
};
Expand Down