From 258fcb91c55a2533b4300534e40caf66df4cb62c Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Mon, 27 Nov 2023 19:20:46 -0600 Subject: [PATCH] add log index --- .../Repository/FileRepository.cs | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository.cs index 306acc4b..d03dd476 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository.cs @@ -560,7 +560,7 @@ public class FileRepository : IBotSharpRepository foreach (var file in Directory.GetFiles(dir)) { var fileName = file.Split(Path.DirectorySeparatorChar).Last(); - var splits = fileName.ToLower().Split('.'); + var splits = ParseFileNameByPath(fileName.ToLower()); var name = splits[0]; var extension = splits[1]; if (name.IsEqualTo(templateName) && extension.IsEqualTo(_agentSettings.TemplateFormat)) @@ -846,7 +846,7 @@ public class FileRepository : IBotSharpRepository #region LLM Completion Log public void SaveLlmCompletionLog(LlmCompletionLog log) { - var convDir = Path.Combine(_dbSettings.FileRepository, _conversationSettings.DataDir, log.ConversationId); + var convDir = FindConversationDirectory(log.ConversationId); if (!Directory.Exists(convDir)) return; var logDir = Path.Combine(convDir, "llm_prompt_log"); @@ -855,8 +855,8 @@ public class FileRepository : IBotSharpRepository Directory.CreateDirectory(logDir); } - var fileName = string.IsNullOrEmpty(log.Id) ? Guid.NewGuid().ToString() : log.Id; - var file = Path.Combine(logDir, $"{fileName}.log"); + var index = GetLlmCompletionLogIndex(logDir, log.MessageId); + var file = Path.Combine(logDir, $"{log.MessageId}.{index}.log"); File.WriteAllText(file, JsonSerializer.Serialize(log, _options)); } #endregion @@ -1008,5 +1008,30 @@ public class FileRepository : IBotSharpRepository } return states; } + + private int GetLlmCompletionLogIndex(string logDir, string id) + { + var files = Directory.GetFiles(logDir); + if (files.IsNullOrEmpty()) + return 0; + + var logIndexes = files.Where(file => + { + var fileName = ParseFileNameByPath(file); + return fileName[0].IsEqualTo(id); + }).Select(file => + { + var fileName = ParseFileNameByPath(file); + return int.Parse(fileName[1]); + }).ToList(); + + return logIndexes.IsNullOrEmpty() ? 0 : logIndexes.Max() + 1; + } + + private string[] ParseFileNameByPath(string path, string separator = ".") + { + var name = path.Split(Path.DirectorySeparatorChar).Last(); + return name.Split(separator); + } #endregion }