diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor.cs b/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor.cs index 76e4355a..14c69cd8 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor.cs +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor.cs @@ -1,6 +1,5 @@ using AIStudio.Dialogs; using AIStudio.Settings; -using AIStudio.Tools.PluginSystem; using Microsoft.AspNetCore.Components; @@ -121,7 +120,7 @@ public partial class SettingsPanelEmbeddings : SettingsPanelBase if (provider == EmbeddingProvider.NONE) return; - var luaCode = ConfigurationExport.ExportEmbeddingProvider(provider); + var luaCode = provider.ExportAsConfigurationSection(); if (string.IsNullOrWhiteSpace(luaCode)) return; @@ -136,4 +135,4 @@ public partial class SettingsPanelEmbeddings : SettingsPanelBase await this.AvailableEmbeddingProvidersChanged.InvokeAsync(this.AvailableEmbeddingProviders); } -} \ No newline at end of file +} diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor.cs b/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor.cs index 91518fab..b43801dc 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor.cs +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor.cs @@ -3,7 +3,6 @@ using System.Diagnostics.CodeAnalysis; using AIStudio.Dialogs; using AIStudio.Provider; using AIStudio.Settings; -using AIStudio.Tools.PluginSystem; using Microsoft.AspNetCore.Components; @@ -140,7 +139,7 @@ public partial class SettingsPanelProviders : SettingsPanelBase if (provider == AIStudio.Settings.Provider.NONE) return; - var luaCode = ConfigurationExport.ExportProvider(provider); + var luaCode = provider.ExportAsConfigurationSection(); if (string.IsNullOrWhiteSpace(luaCode)) return; @@ -189,4 +188,4 @@ public partial class SettingsPanelProviders : SettingsPanelBase this.SettingsManager.ConfigurationData.LLMProviders.CustomConfidenceScheme[llmProvider] = level; await this.SettingsManager.StoreSettings(); } -} \ No newline at end of file +} diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor.cs b/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor.cs index c4b76739..88e4ebbe 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor.cs +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor.cs @@ -1,6 +1,5 @@ using AIStudio.Dialogs; using AIStudio.Settings; -using AIStudio.Tools.PluginSystem; using Microsoft.AspNetCore.Components; @@ -121,7 +120,7 @@ public partial class SettingsPanelTranscription : SettingsPanelBase if (provider == TranscriptionProvider.NONE) return; - var luaCode = ConfigurationExport.ExportTranscriptionProvider(provider); + var luaCode = provider.ExportAsConfigurationSection(); if (string.IsNullOrWhiteSpace(luaCode)) return; @@ -136,4 +135,4 @@ public partial class SettingsPanelTranscription : SettingsPanelBase await this.AvailableTranscriptionProvidersChanged.InvokeAsync(this.AvailableTranscriptionProviders); } -} \ No newline at end of file +} diff --git a/app/MindWork AI Studio/Settings/EmbeddingProvider.cs b/app/MindWork AI Studio/Settings/EmbeddingProvider.cs index e88831f0..86b0eb3e 100644 --- a/app/MindWork AI Studio/Settings/EmbeddingProvider.cs +++ b/app/MindWork AI Studio/Settings/EmbeddingProvider.cs @@ -131,4 +131,42 @@ public sealed record EmbeddingProvider( model = new(id, displayName); return true; } -} \ No newline at end of file + + public string ExportAsConfigurationSection() + { + return $$""" + CONFIG["EMBEDDING_PROVIDERS"][#CONFIG["EMBEDDING_PROVIDERS"]+1] = { + ["Id"] = "{{EscapeLuaString(NormalizeId(this.Id))}}", + ["Name"] = "{{EscapeLuaString(this.Name)}}", + ["UsedLLMProvider"] = "{{this.UsedLLMProvider}}", + + ["Host"] = "{{this.Host}}", + ["Hostname"] = "{{EscapeLuaString(this.Hostname)}}", + ["Model"] = { + ["Id"] = "{{EscapeLuaString(this.Model.Id)}}", + ["DisplayName"] = "{{EscapeLuaString(this.Model.DisplayName ?? string.Empty)}}", + }, + } + """; + } + + private static string NormalizeId(string? id) + { + if (!string.IsNullOrWhiteSpace(id)) + return id; + + return Guid.NewGuid().ToString(); + } + + private static string EscapeLuaString(string? value) + { + if (string.IsNullOrEmpty(value)) + return string.Empty; + + return value + .Replace("\\", "\\\\") + .Replace("\"", "\\\"") + .Replace("\r", "\\r") + .Replace("\n", "\\n"); + } +} diff --git a/app/MindWork AI Studio/Settings/Provider.cs b/app/MindWork AI Studio/Settings/Provider.cs index 4f6c1b0b..ca878aac 100644 --- a/app/MindWork AI Studio/Settings/Provider.cs +++ b/app/MindWork AI Studio/Settings/Provider.cs @@ -188,4 +188,52 @@ public sealed record Provider( model = new(id, displayName); return true; } + + public string ExportAsConfigurationSection() + { + var hfInferenceProviderLine = string.Empty; + if (this.HFInferenceProvider is not HFInferenceProvider.NONE) + { + hfInferenceProviderLine = $""" + ["HFInferenceProvider"] = "{this.HFInferenceProvider}", + """; + } + + return $$""" + CONFIG["LLM_PROVIDERS"][#CONFIG["LLM_PROVIDERS"]+1] = { + ["Id"] = "{{EscapeLuaString(NormalizeId(this.Id))}}", + ["InstanceName"] = "{{EscapeLuaString(this.InstanceName)}}", + ["UsedLLMProvider"] = "{{this.UsedLLMProvider}}", + + ["Host"] = "{{this.Host}}", + ["Hostname"] = "{{EscapeLuaString(this.Hostname)}}", + {{hfInferenceProviderLine}} + ["AdditionalJsonApiParameters"] = "{{EscapeLuaString(this.AdditionalJsonApiParameters)}}", + ["Model"] = { + ["Id"] = "{{EscapeLuaString(this.Model.Id)}}", + ["DisplayName"] = "{{EscapeLuaString(this.Model.DisplayName ?? string.Empty)}}", + }, + } + """; + } + + private static string NormalizeId(string? id) + { + if (!string.IsNullOrWhiteSpace(id)) + return id; + + return Guid.NewGuid().ToString(); + } + + private static string EscapeLuaString(string? value) + { + if (string.IsNullOrEmpty(value)) + return string.Empty; + + return value + .Replace("\\", "\\\\") + .Replace("\"", "\\\"") + .Replace("\r", "\\r") + .Replace("\n", "\\n"); + } } diff --git a/app/MindWork AI Studio/Settings/TranscriptionProvider.cs b/app/MindWork AI Studio/Settings/TranscriptionProvider.cs index 7a5f2ef5..db137ca9 100644 --- a/app/MindWork AI Studio/Settings/TranscriptionProvider.cs +++ b/app/MindWork AI Studio/Settings/TranscriptionProvider.cs @@ -131,4 +131,42 @@ public sealed record TranscriptionProvider( model = new(id, displayName); return true; } -} \ No newline at end of file + + public string ExportAsConfigurationSection() + { + return $$""" + CONFIG["TRANSCRIPTION_PROVIDERS"][#CONFIG["TRANSCRIPTION_PROVIDERS"]+1] = { + ["Id"] = "{{EscapeLuaString(NormalizeId(this.Id))}}", + ["Name"] = "{{EscapeLuaString(this.Name)}}", + ["UsedLLMProvider"] = "{{this.UsedLLMProvider}}", + + ["Host"] = "{{this.Host}}", + ["Hostname"] = "{{EscapeLuaString(this.Hostname)}}", + ["Model"] = { + ["Id"] = "{{EscapeLuaString(this.Model.Id)}}", + ["DisplayName"] = "{{EscapeLuaString(this.Model.DisplayName ?? string.Empty)}}", + }, + } + """; + } + + private static string NormalizeId(string? id) + { + if (!string.IsNullOrWhiteSpace(id)) + return id; + + return Guid.NewGuid().ToString(); + } + + private static string EscapeLuaString(string? value) + { + if (string.IsNullOrEmpty(value)) + return string.Empty; + + return value + .Replace("\\", "\\\\") + .Replace("\"", "\\\"") + .Replace("\r", "\\r") + .Replace("\n", "\\n"); + } +} diff --git a/app/MindWork AI Studio/Tools/PluginSystem/ConfigurationExport.cs b/app/MindWork AI Studio/Tools/PluginSystem/ConfigurationExport.cs deleted file mode 100644 index fb0df8fe..00000000 --- a/app/MindWork AI Studio/Tools/PluginSystem/ConfigurationExport.cs +++ /dev/null @@ -1,95 +0,0 @@ -using AIStudio.Provider.HuggingFace; - -namespace AIStudio.Tools.PluginSystem; - -public static class ConfigurationExport -{ - public static string ExportProvider(AIStudio.Settings.Provider provider) - { - if (provider == Settings.Provider.NONE) - return string.Empty; - - var hfInferenceProviderLine = provider.HFInferenceProvider is not HFInferenceProvider.NONE - ? $" [\"HFInferenceProvider\"] = \"{provider.HFInferenceProvider}\",\n" - : string.Empty; - - return $$""" - CONFIG["LLM_PROVIDERS"][#CONFIG["LLM_PROVIDERS"]+1] = { - ["Id"] = "{{EscapeLuaString(NormalizeId(provider.Id))}}", - ["InstanceName"] = "{{EscapeLuaString(provider.InstanceName)}}", - ["UsedLLMProvider"] = "{{provider.UsedLLMProvider}}", - - ["Host"] = "{{provider.Host}}", - ["Hostname"] = "{{EscapeLuaString(provider.Hostname)}}", - {{hfInferenceProviderLine}} - ["AdditionalJsonApiParameters"] = "{{EscapeLuaString(provider.AdditionalJsonApiParameters)}}", - ["Model"] = { - ["Id"] = "{{EscapeLuaString(provider.Model.Id)}}", - ["DisplayName"] = "{{EscapeLuaString(provider.Model.DisplayName ?? string.Empty)}}", - }, - } - """; - } - - public static string ExportEmbeddingProvider(Settings.EmbeddingProvider provider) - { - if (provider == Settings.EmbeddingProvider.NONE) - return string.Empty; - - return $$""" - CONFIG["EMBEDDING_PROVIDERS"][#CONFIG["EMBEDDING_PROVIDERS"]+1] = { - ["Id"] = "{{EscapeLuaString(NormalizeId(provider.Id))}}", - ["Name"] = "{{EscapeLuaString(provider.Name)}}", - ["UsedLLMProvider"] = "{{provider.UsedLLMProvider}}", - - ["Host"] = "{{provider.Host}}", - ["Hostname"] = "{{EscapeLuaString(provider.Hostname)}}", - ["Model"] = { - ["Id"] = "{{EscapeLuaString(provider.Model.Id)}}", - ["DisplayName"] = "{{EscapeLuaString(provider.Model.DisplayName ?? string.Empty)}}", - }, - } - """; - } - - public static string ExportTranscriptionProvider(Settings.TranscriptionProvider provider) - { - if (provider == Settings.TranscriptionProvider.NONE) - return string.Empty; - - return $$""" - CONFIG["TRANSCRIPTION_PROVIDERS"][#CONFIG["TRANSCRIPTION_PROVIDERS"]+1] = { - ["Id"] = "{{EscapeLuaString(NormalizeId(provider.Id))}}", - ["Name"] = "{{EscapeLuaString(provider.Name)}}", - ["UsedLLMProvider"] = "{{provider.UsedLLMProvider}}", - - ["Host"] = "{{provider.Host}}", - ["Hostname"] = "{{EscapeLuaString(provider.Hostname)}}", - ["Model"] = { - ["Id"] = "{{EscapeLuaString(provider.Model.Id)}}", - ["DisplayName"] = "{{EscapeLuaString(provider.Model.DisplayName ?? string.Empty)}}", - }, - } - """; - } - - private static string NormalizeId(string? id) - { - if (!string.IsNullOrWhiteSpace(id)) - return id; - - return Guid.NewGuid().ToString(); - } - - private static string EscapeLuaString(string? value) - { - if (string.IsNullOrEmpty(value)) - return string.Empty; - - return value - .Replace("\\", "\\\\") - .Replace("\"", "\\\"") - .Replace("\r", "\\r") - .Replace("\n", "\\n"); - } -}