From de607afd9cb6d06da26f0f0d75089204d8b58a77 Mon Sep 17 00:00:00 2001 From: Rob Chambers Date: Tue, 3 Dec 2024 06:31:06 -0800 Subject: [PATCH] Improved GetOutputDataFileName with common refactored {id}, {pid}, {time}, {run.time} replacements... --- src/ai/commands/chat_command.cs | 46 ++++++++---- src/ai/helpers/output_helper_base.cs | 30 +------- src/clis/vz/commands/image_command.cs | 14 +--- src/common/details/commands/command.cs | 17 ----- src/common/details/helpers/file_helpers.cs | 33 ++++++--- src/common/details/helpers/log_helpers.cs | 9 --- .../commands/synthesize_command.cs | 2 +- .../helpers/config_helpers.cs | 15 +--- .../speech_extension/helpers/output_helper.cs | 73 +++---------------- 9 files changed, 67 insertions(+), 172 deletions(-) diff --git a/src/ai/commands/chat_command.cs b/src/ai/commands/chat_command.cs index 18ab34fa..d87e9db3 100644 --- a/src/ai/commands/chat_command.cs +++ b/src/ai/commands/chat_command.cs @@ -599,38 +599,30 @@ private async Task GetChatCompletionsAsync(ChatClient client, List saveChatHistoryToFile) { - var outputHistoryFile = OutputChatHistoryFileToken.Data().GetOrDefault(_values); - if (!string.IsNullOrEmpty(outputHistoryFile)) + if (!string.IsNullOrEmpty(_outputChatHistoryFileName)) { - var fileName = FileHelpers.GetOutputDataFileName(outputHistoryFile, _values); - await saveChatHistoryToFile(fileName); + await saveChatHistoryToFile(_outputChatHistoryFileName); } } private void CheckWriteChatHistoryOutputFile(Action saveChatHistoryToFile) { - var outputHistoryFile = OutputChatHistoryFileToken.Data().GetOrDefault(_values); - if (!string.IsNullOrEmpty(outputHistoryFile)) + if (!string.IsNullOrEmpty(_outputChatHistoryFileName)) { - var fileName = FileHelpers.GetOutputDataFileName(outputHistoryFile, _values); - saveChatHistoryToFile(fileName); + saveChatHistoryToFile(_outputChatHistoryFileName); } } @@ -1896,6 +1888,24 @@ private void StartCommand() // _output!.EnsureOutputAll("chat.input.id", id); // _output!.EnsureOutputEach("chat.input.id", id); + var outputHistoryFile = OutputChatHistoryFileToken.Data().GetOrDefault(_values); + if (!string.IsNullOrEmpty(outputHistoryFile)) + { + _outputChatHistoryFileName = FileHelpers.GetOutputDataFileName(outputHistoryFile, _values, "chat.input.id"); + } + + var outputAnswerFile = OutputChatAnswerFileToken.Data().GetOrDefault(_values); + if (!string.IsNullOrEmpty(outputAnswerFile)) + { + _outputAnswerFile = FileHelpers.GetOutputDataFileName(outputAnswerFile, _values); + } + + var outputAddAnswerFile = OutputAddChatAnswerFileToken.Data().GetOrDefault(_values); + if (!string.IsNullOrEmpty(outputAddAnswerFile)) + { + _outputAddAnswerFile = FileHelpers.GetOutputDataFileName(outputAddAnswerFile, _values); + } + _lock = new SpinLock(); _lock.StartLock(); } @@ -1936,5 +1946,9 @@ private float TryParse(string? s, float defaultValue) private const float _defaultTemperature = 0.7f; private const float _defaultFrequencyPenalty = 0.0f; private const float _defaultPresencePenalty = 0.0f; + + private string? _outputAnswerFile; + private string? _outputAddAnswerFile; + private string? _outputChatHistoryFileName; } } diff --git a/src/ai/helpers/output_helper_base.cs b/src/ai/helpers/output_helper_base.cs index af65ae14..c4cce50f 100644 --- a/src/ai/helpers/output_helper_base.cs +++ b/src/ai/helpers/output_helper_base.cs @@ -196,20 +196,7 @@ private void FlushOutputAllCache() private string GetOutputAllFileName() { var file = _values.GetOrDefault("output.all.file.name", "output.{run.time}." + GetOutputAllFileType()); - - var id = _values.GetOrEmpty("audio.input.id"); - if (file.Contains("{id}")) file = file.Replace("{id}", id); - - var pid = Process.GetCurrentProcess().Id.ToString(); - if (file.Contains("{pid}")) file = file.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - if (file.Contains("{time}")) file = file.Replace("{time}", time); - - var runTime = _values.GetOrEmpty("x.run.time"); - if (file.Contains("{run.time}")) file = file.Replace("{run.time}", runTime); - - return file.ReplaceValues(_values); + return FileHelpers.GetOutputDataFileName(file, _values, "audio.input.id"); } private string GetOutputAllFileType() @@ -360,20 +347,7 @@ private void FlushOutputEachCacheStage2(bool overwrite = false) private string GetOutputEachFileName() { var file = _values.GetOrDefault("output.each.file.name", "each.{run.time}." + GetOutputEachFileType()); - - var id = _values.GetOrEmpty("audio.input.id"); - if (file.Contains("{id}")) file = file.Replace("{id}", id); - - var pid = Process.GetCurrentProcess().Id.ToString(); - if (file.Contains("{pid}")) file = file.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - if (file.Contains("{time}")) file = file.Replace("{time}", time); - - var runTime = _values.GetOrEmpty("x.run.time"); - if (file.Contains("{run.time}")) file = file.Replace("{run.time}", runTime); - - return file.ReplaceValues(_values); + return FileHelpers.GetOutputDataFileName(file, _values, "audio.input.id"); } private string GetOutputEachFileType() diff --git a/src/clis/vz/commands/image_command.cs b/src/clis/vz/commands/image_command.cs index d8ae43b5..17cec420 100644 --- a/src/clis/vz/commands/image_command.cs +++ b/src/clis/vz/commands/image_command.cs @@ -408,19 +408,7 @@ public void EnsureStartLogFile() var log = _values["diagnostics.config.log.file"]; if (!string.IsNullOrEmpty(log)) { - var id = _values.GetOrEmpty("vision.input.id"); - if (log.Contains("{id}")) log = log.Replace("{id}", id); - - var pid = Process.GetCurrentProcess().Id.ToString(); - if (log.Contains("{pid}")) log = log.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - if (log.Contains("{time}")) log = log.Replace("{time}", time); - - var runTime = _values.GetOrEmpty("x.run.time"); - if (log.Contains("{run.time}")) log = log.Replace("{run.time}", runTime); - - log = FileHelpers.GetOutputDataFileName(log, _values); + log = FileHelpers.GetOutputDataFileName(log, _values, "vision.input.id"); FileLogger.Start(log); } } diff --git a/src/common/details/commands/command.cs b/src/common/details/commands/command.cs index 84d20119..883a37f9 100644 --- a/src/common/details/commands/command.cs +++ b/src/common/details/commands/command.cs @@ -447,23 +447,6 @@ protected string GetIdFromInputUrl(string url, string idValueName) return id; } - protected string ReplaceFileNameValues(string fileName, string idValueName) - { - var id = _values.GetOrEmpty(idValueName); - if (fileName.Contains("{id}")) fileName = fileName.Replace("{id}", id); - - var pid = Process.GetCurrentProcess().Id.ToString(); - if (fileName.Contains("{pid}")) fileName = fileName.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - if (fileName.Contains("{time}")) fileName = fileName.Replace("{time}", time); - - var runTime = _values.GetOrEmpty("x.run.time"); - if (fileName.Contains("{run.time}")) fileName = fileName.Replace("{run.time}", runTime); - - return fileName.ReplaceValues(_values); - } - protected void DisposeAfterStop() { try diff --git a/src/common/details/helpers/file_helpers.cs b/src/common/details/helpers/file_helpers.cs index 25631c93..d3a1319b 100644 --- a/src/common/details/helpers/file_helpers.cs +++ b/src/common/details/helpers/file_helpers.cs @@ -583,7 +583,7 @@ public static bool IsStandardOutputReference(string fileName) return fileName == "-" || fileName == "stdout"; } - public static string GetOutputDataFileName(string file, INamedValues? values = null) + public static string GetOutputDataFileName(string file, INamedValues? values = null, string? idValueName = null) { if (file.StartsWith("@")) return GetOutputConfigFileName(file, values); if (IsStandardOutputReference(file)) return file; @@ -598,11 +598,32 @@ public static string GetOutputDataFileName(string file, INamedValues? values = n ? PathHelpers.Combine(outputDir, file) ?? file : file; + outputFile = ReplaceFileNameValues(outputFile, values, idValueName); if (Program.Debug) Console.WriteLine($"DEBUG: Output DATA file '{file}'='{outputFile}'"); return outputFile; } + public static string ReplaceFileNameValues(string fileName, INamedValues? values = null, string? idValueName = null) + { + var id = idValueName != null ? values?.GetOrEmpty(idValueName) : null; + if (id != null && fileName.Contains("{id}")) fileName = fileName.Replace("{id}", id); + + var pid = Process.GetCurrentProcess().Id.ToString(); + if (fileName.Contains("{pid}")) fileName = fileName.Replace("{pid}", pid); + + var time = DateTime.Now.ToFileTime().ToString(); + if (fileName.Contains("{time}")) fileName = fileName.Replace("{time}", time); + + var runTime = values?.GetOrEmpty("x.run.time"); + if (fileName.Contains("{run.time}")) fileName = fileName.Replace("{run.time}", runTime); + + return values != null + ? fileName.ReplaceValues(values) + : fileName; + } + + public static Stream Create(string fileName) { return IsStandardOutputReference(fileName) @@ -862,16 +883,6 @@ public static FileInfo GetAssemblyFileInfo(Type type) public static void LogException(ICommandValues values, Exception ex) { var file = $"exception.{{run.time}}.{{pid}}.{{time}}.{Program.Name}.error.log"; - - var runTime = values.GetOrEmpty("x.run.time"); - file = file.Replace("{run.time}", runTime); - - var pid = Process.GetCurrentProcess().Id.ToString(); - file = file.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - file = file.Replace("{time}", time); - file = FileHelpers.GetOutputDataFileName(file, values); FileHelpers.WriteAllText(file, ex.ToString(), Encoding.UTF8); } diff --git a/src/common/details/helpers/log_helpers.cs b/src/common/details/helpers/log_helpers.cs index df39cf13..1476cc39 100644 --- a/src/common/details/helpers/log_helpers.cs +++ b/src/common/details/helpers/log_helpers.cs @@ -16,15 +16,6 @@ public static void EnsureStartLogFile(ICommandValues values) var log = values["diagnostics.config.log.file"]; if (!string.IsNullOrEmpty(log)) { - var pid = Process.GetCurrentProcess().Id.ToString(); - if (log.Contains("{pid}")) log = log.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - if (log.Contains("{time}")) log = log.Replace("{time}", time); - - var runTime = values.GetOrEmpty("x.run.time"); - if (log.Contains("{run.time}")) log = log.Replace("{run.time}", runTime); - try { log = FileHelpers.GetOutputDataFileName(log, values); diff --git a/src/extensions/speech_extension/commands/synthesize_command.cs b/src/extensions/speech_extension/commands/synthesize_command.cs index 6f85bdc7..0d6c7ebd 100644 --- a/src/extensions/speech_extension/commands/synthesize_command.cs +++ b/src/extensions/speech_extension/commands/synthesize_command.cs @@ -491,7 +491,7 @@ private string GetInputFileFromId(string id) } else if (output == "file" && !string.IsNullOrEmpty(file)) { - file = ReplaceFileNameValues(file, "synthesizer.input.id"); + file = FileHelpers.GetOutputDataFileName(file, _values, "synthesizer.input.id"); audioConfig = AudioOutputHelpers.CreateAudioConfigForFile(file); } else diff --git a/src/extensions/speech_extension/helpers/config_helpers.cs b/src/extensions/speech_extension/helpers/config_helpers.cs index 47251ec0..f342e2f0 100644 --- a/src/extensions/speech_extension/helpers/config_helpers.cs +++ b/src/extensions/speech_extension/helpers/config_helpers.cs @@ -138,22 +138,9 @@ public static void SetupLogFile(SpeechConfig config, ICommandValues values) var log = values["diagnostics.config.log.file"]; if (!string.IsNullOrEmpty(log)) { - var id = values.GetOrEmpty("audio.input.id"); - if (log.Contains("{id}")) log = log.Replace("{id}", id); - - var pid = Process.GetCurrentProcess().Id.ToString(); - if (log.Contains("{pid}")) log = log.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - if (log.Contains("{time}")) log = log.Replace("{time}", time); - - var runTime = values.GetOrEmpty("x.run.time"); - if (log.Contains("{run.time}")) log = log.Replace("{run.time}", runTime); - - log = FileHelpers.GetOutputDataFileName(log, values); + log = FileHelpers.GetOutputDataFileName(log, values, "audio.input.id"); config.SetProperty(PropertyId.Speech_LogFilename, log); } } - } } diff --git a/src/extensions/speech_extension/helpers/output_helper.cs b/src/extensions/speech_extension/helpers/output_helper.cs index b9ac7829..467d0963 100644 --- a/src/extensions/speech_extension/helpers/output_helper.cs +++ b/src/extensions/speech_extension/helpers/output_helper.cs @@ -38,21 +38,21 @@ public void StartOutput() { _overwriteEach = true; _outputEach = GetOutputEachColumns().Count() > 0; - _outputEachFileName = FileHelpers.GetOutputDataFileName(GetOutputEachFileName(), _values); + _outputEachFileName = GetOutputEachFileName(); _outputEachFileType = GetOutputEachFileType(); _outputAll = GetOutputAllColumns().Count() > 0; - _outputAllFileName = FileHelpers.GetOutputDataFileName(GetOutputAllFileName(), _values); + _outputAllFileName = GetOutputAllFileName(); _outputAllFileType = GetOutputAllFileType(); _outputBatch = _values.GetOrDefault("output.batch.json", false); - _outputBatchFileName = FileHelpers.GetOutputDataFileName(GetOutputBatchFileName(), _values); + _outputBatchFileName = GetOutputBatchFileName(); _outputSrt = _values.GetOrDefault("output.type.srt", false); - _outputSrtFileName = FileHelpers.GetOutputDataFileName(GetOutputSrtFileName(), _values); + _outputSrtFileName = GetOutputSrtFileName(); _outputVtt = _values.GetOrDefault("output.type.vtt", false); - _outputVttFileName = FileHelpers.GetOutputDataFileName(GetOutputVttFileName(), _values); + _outputVttFileName = GetOutputVttFileName(); _cacheResults = _values.Names.Any(s => s.StartsWith("check.result")) || _values.Names.Any(s => s.StartsWith("check.jmes")); @@ -390,46 +390,19 @@ private void FlushOutputResultCache() private string GetOutputBatchFileName() { var file = _values.GetOrDefault("output.batch.file.name", "output.{id}.{run.time}.json")!; - - var id = _values.GetOrEmpty("audio.input.id"); - if (file.Contains("{id}")) file = file.Replace("{id}", id); - - var pid = Process.GetCurrentProcess().Id.ToString(); - if (file.Contains("{pid}")) file = file.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - if (file.Contains("{time}")) file = file.Replace("{time}", time); - - var runTime = _values.GetOrEmpty("x.run.time"); - if (file.Contains("{run.time}")) file = file.Replace("{run.time}", runTime); - - return file.ReplaceValues(_values); + return FileHelpers.GetOutputDataFileName(file, _values, "audio.input.id"); } private string GetOutputSrtFileName() { var file = _values.GetOrDefault("output.srt.file.name", "output.{id}.{run.time}.srt")!; - - var id = _values.GetOrEmpty("audio.input.id"); - if (file.Contains("{id}")) file = file.Replace("{id}", id); - - var runTime = _values.GetOrEmpty("x.run.time"); - if (file.Contains("{run.time}")) file = file.Replace("{run.time}", runTime); - - return file.ReplaceValues(_values); + return FileHelpers.GetOutputDataFileName(file, _values, "audio.input.id"); } private string GetOutputVttFileName() { var file = _values.GetOrDefault("output.vtt.file.name", "output.{id}.{run.time}.vtt")!; - - var id = _values.GetOrEmpty("audio.input.id"); - if (file.Contains("{id}")) file = file.Replace("{id}", id); - - var runTime = _values.GetOrEmpty("x.run.time"); - if (file.Contains("{run.time}")) file = file.Replace("{run.time}", runTime); - - return file.ReplaceValues(_values); + return FileHelpers.GetOutputDataFileName(file, _values, "audio.input.id"); } private void OutputBatchJsonFile() @@ -963,20 +936,7 @@ private void FlushOutputAllCache() private string GetOutputAllFileName() { var file = _values.GetOrDefault("output.all.file.name", "output.{run.time}." + GetOutputAllFileType())!; - - var id = _values.GetOrEmpty("audio.input.id"); - if (file.Contains("{id}")) file = file.Replace("{id}", id); - - var pid = Process.GetCurrentProcess().Id.ToString(); - if (file.Contains("{pid}")) file = file.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - if (file.Contains("{time}")) file = file.Replace("{time}", time); - - var runTime = _values.GetOrEmpty("x.run.time"); - if (file.Contains("{run.time}")) file = file.Replace("{run.time}", runTime); - - return file.ReplaceValues(_values); + return FileHelpers.GetOutputDataFileName(file, _values, "audio.input.id"); } private string GetOutputAllFileType() @@ -1127,20 +1087,7 @@ private void FlushOutputEachCacheStage2(bool overwrite = false) private string GetOutputEachFileName() { var file = _values.GetOrDefault("output.each.file.name", "each.{run.time}." + GetOutputEachFileType())!; - - var id = _values.GetOrEmpty("audio.input.id"); - if (file.Contains("{id}")) file = file.Replace("{id}", id); - - var pid = Process.GetCurrentProcess().Id.ToString(); - if (file.Contains("{pid}")) file = file.Replace("{pid}", pid); - - var time = DateTime.Now.ToFileTime().ToString(); - if (file.Contains("{time}")) file = file.Replace("{time}", time); - - var runTime = _values.GetOrEmpty("x.run.time"); - if (file.Contains("{run.time}")) file = file.Replace("{run.time}", runTime); - - return file.ReplaceValues(_values); + return FileHelpers.GetOutputDataFileName(file, _values, "audio.input.id"); } private string GetOutputEachFileType()