diff --git a/app/MindWork AI Studio/Settings/EmbeddingProvider.cs b/app/MindWork AI Studio/Settings/EmbeddingProvider.cs
index 8d6042df..dea55721 100644
--- a/app/MindWork AI Studio/Settings/EmbeddingProvider.cs
+++ b/app/MindWork AI Studio/Settings/EmbeddingProvider.cs
@@ -176,30 +176,36 @@ public sealed record EmbeddingProvider(
/// A Lua configuration section string.
public string ExportAsConfigurationSection(string? encryptedApiKey = null)
{
- var apiKeyLine = string.Empty;
- if (!string.IsNullOrWhiteSpace(encryptedApiKey))
+ var lines = new List
{
- apiKeyLine = $"""
- ["APIKey"] = "{LuaTools.EscapeLuaString(encryptedApiKey)}",
- """;
+ "CONFIG[\"EMBEDDING_PROVIDERS\"][#CONFIG[\"EMBEDDING_PROVIDERS\"]+1] = {",
+ $" [\"Id\"] = \"{Guid.NewGuid()}\",",
+ $" [\"Name\"] = \"{LuaTools.EscapeLuaString(this.Name)}\",",
+ $" [\"UsedLLMProvider\"] = \"{this.UsedLLMProvider}\",",
+ };
+
+ if (!string.IsNullOrWhiteSpace(this.TokenizerPath))
+ {
+ lines.Add(string.Empty);
+ lines.Add(" -- The tokenizer path shown is local to this model. To use it with the plugin:");
+ lines.Add(" -- 1. Copy the tokenizer into the zip.");
+ lines.Add(" -- 2. Update the path in the plugin file to be relative to the zip's root.");
+ lines.Add($" [\"TokenizerPath\"] = \"{LuaTools.EscapeLuaString(this.TokenizerPath)}\",");
}
- return $$"""
- CONFIG["EMBEDDING_PROVIDERS"][#CONFIG["EMBEDDING_PROVIDERS"]+1] = {
- ["Id"] = "{{Guid.NewGuid().ToString()}}",
- ["Name"] = "{{LuaTools.EscapeLuaString(this.Name)}}",
- ["UsedLLMProvider"] = "{{this.UsedLLMProvider}}",
-
- ["TokenizerPath"] = "{{this.TokenizerPath}}",
-
- ["Host"] = "{{this.Host}}",
- ["Hostname"] = "{{LuaTools.EscapeLuaString(this.Hostname)}}",
- {{apiKeyLine}}
- ["Model"] = {
- ["Id"] = "{{LuaTools.EscapeLuaString(this.Model.Id)}}",
- ["DisplayName"] = "{{LuaTools.EscapeLuaString(this.Model.DisplayName ?? string.Empty)}}",
- },
- }
- """;
+ lines.Add(string.Empty);
+ lines.Add($" [\"Host\"] = \"{this.Host}\",");
+ lines.Add($" [\"Hostname\"] = \"{LuaTools.EscapeLuaString(this.Hostname)}\",");
+
+ if (!string.IsNullOrWhiteSpace(encryptedApiKey))
+ lines.Add($" [\"APIKey\"] = \"{LuaTools.EscapeLuaString(encryptedApiKey)}\",");
+
+ lines.Add(" [\"Model\"] = {");
+ lines.Add($" [\"Id\"] = \"{LuaTools.EscapeLuaString(this.Model.Id)}\",");
+ lines.Add($" [\"DisplayName\"] = \"{LuaTools.EscapeLuaString(this.Model.DisplayName ?? string.Empty)}\",");
+ lines.Add(" },");
+ lines.Add("}");
+
+ return string.Join(Environment.NewLine, lines);
}
}
diff --git a/app/MindWork AI Studio/Settings/Provider.cs b/app/MindWork AI Studio/Settings/Provider.cs
index f7ac1a07..34717fe1 100644
--- a/app/MindWork AI Studio/Settings/Provider.cs
+++ b/app/MindWork AI Studio/Settings/Provider.cs
@@ -233,40 +233,40 @@ public sealed record Provider(
/// A Lua configuration section string.
public string ExportAsConfigurationSection(string? encryptedApiKey = null)
{
- var hfInferenceProviderLine = string.Empty;
+ var lines = new List
+ {
+ "CONFIG[\"LLM_PROVIDERS\"][#CONFIG[\"LLM_PROVIDERS\"]+1] = {",
+ $" [\"Id\"] = \"{Guid.NewGuid()}\",",
+ $" [\"InstanceName\"] = \"{LuaTools.EscapeLuaString(this.InstanceName)}\",",
+ $" [\"UsedLLMProvider\"] = \"{this.UsedLLMProvider}\",",
+ };
+
+ if (!string.IsNullOrWhiteSpace(this.TokenizerPath))
+ {
+ lines.Add(string.Empty);
+ lines.Add(" -- The tokenizer path shown is local to this model. To use it with the plugin:");
+ lines.Add(" -- 1. Copy the tokenizer into the zip.");
+ lines.Add(" -- 2. Update the path in the plugin file to be relative to the zip's root.");
+ lines.Add($" [\"TokenizerPath\"] = \"{LuaTools.EscapeLuaString(this.TokenizerPath)}\",");
+ }
+
+ lines.Add(string.Empty);
+ lines.Add($" [\"Host\"] = \"{this.Host}\",");
+ lines.Add($" [\"Hostname\"] = \"{LuaTools.EscapeLuaString(this.Hostname)}\",");
+
if (this.HFInferenceProvider is not HFInferenceProvider.NONE)
- {
- hfInferenceProviderLine = $"""
- ["HFInferenceProvider"] = "{this.HFInferenceProvider}",
- """;
- }
+ lines.Add($" [\"HFInferenceProvider\"] = \"{this.HFInferenceProvider}\",");
- var apiKeyLine = string.Empty;
if (!string.IsNullOrWhiteSpace(encryptedApiKey))
- {
- apiKeyLine = $"""
- ["APIKey"] = "{LuaTools.EscapeLuaString(encryptedApiKey)}",
- """;
- }
+ lines.Add($" [\"APIKey\"] = \"{LuaTools.EscapeLuaString(encryptedApiKey)}\",");
- return $$"""
- CONFIG["LLM_PROVIDERS"][#CONFIG["LLM_PROVIDERS"]+1] = {
- ["Id"] = "{{Guid.NewGuid().ToString()}}",
- ["InstanceName"] = "{{LuaTools.EscapeLuaString(this.InstanceName)}}",
- ["UsedLLMProvider"] = "{{this.UsedLLMProvider}}",
-
- ["TokenizerPath"] = "{{this.TokenizerPath}}",
+ lines.Add($" [\"AdditionalJsonApiParameters\"] = \"{LuaTools.EscapeLuaString(this.AdditionalJsonApiParameters)}\",");
+ lines.Add(" [\"Model\"] = {");
+ lines.Add($" [\"Id\"] = \"{LuaTools.EscapeLuaString(this.Model.Id)}\",");
+ lines.Add($" [\"DisplayName\"] = \"{LuaTools.EscapeLuaString(this.Model.DisplayName ?? this.Model.Id)}\",");
+ lines.Add(" },");
+ lines.Add("}");
- ["Host"] = "{{this.Host}}",
- ["Hostname"] = "{{LuaTools.EscapeLuaString(this.Hostname)}}",
- {{hfInferenceProviderLine}}
- {{apiKeyLine}}
- ["AdditionalJsonApiParameters"] = "{{LuaTools.EscapeLuaString(this.AdditionalJsonApiParameters)}}",
- ["Model"] = {
- ["Id"] = "{{LuaTools.EscapeLuaString(this.Model.Id)}}",
- ["DisplayName"] = "{{LuaTools.EscapeLuaString(this.Model.DisplayName ?? this.Model.Id)}}",
- },
- }
- """;
+ return string.Join(Environment.NewLine, lines);
}
}
diff --git a/app/MindWork AI Studio/Settings/TranscriptionProvider.cs b/app/MindWork AI Studio/Settings/TranscriptionProvider.cs
index 4c6ca871..d0da8012 100644
--- a/app/MindWork AI Studio/Settings/TranscriptionProvider.cs
+++ b/app/MindWork AI Studio/Settings/TranscriptionProvider.cs
@@ -167,28 +167,26 @@ public sealed record TranscriptionProvider(
/// A Lua configuration section string.
public string ExportAsConfigurationSection(string? encryptedApiKey = null)
{
- var apiKeyLine = string.Empty;
- if (!string.IsNullOrWhiteSpace(encryptedApiKey))
+ var lines = new List
{
- apiKeyLine = $"""
- ["APIKey"] = "{LuaTools.EscapeLuaString(encryptedApiKey)}",
- """;
- }
+ "CONFIG[\"TRANSCRIPTION_PROVIDERS\"][#CONFIG[\"TRANSCRIPTION_PROVIDERS\"]+1] = {",
+ $" [\"Id\"] = \"{Guid.NewGuid()}\",",
+ $" [\"Name\"] = \"{LuaTools.EscapeLuaString(this.Name)}\",",
+ $" [\"UsedLLMProvider\"] = \"{this.UsedLLMProvider}\",",
+ string.Empty,
+ $" [\"Host\"] = \"{this.Host}\",",
+ $" [\"Hostname\"] = \"{LuaTools.EscapeLuaString(this.Hostname)}\",",
+ };
- return $$"""
- CONFIG["TRANSCRIPTION_PROVIDERS"][#CONFIG["TRANSCRIPTION_PROVIDERS"]+1] = {
- ["Id"] = "{{Guid.NewGuid().ToString()}}",
- ["Name"] = "{{LuaTools.EscapeLuaString(this.Name)}}",
- ["UsedLLMProvider"] = "{{this.UsedLLMProvider}}",
+ if (!string.IsNullOrWhiteSpace(encryptedApiKey))
+ lines.Add($" [\"APIKey\"] = \"{LuaTools.EscapeLuaString(encryptedApiKey)}\",");
- ["Host"] = "{{this.Host}}",
- ["Hostname"] = "{{LuaTools.EscapeLuaString(this.Hostname)}}",
- {{apiKeyLine}}
- ["Model"] = {
- ["Id"] = "{{LuaTools.EscapeLuaString(this.Model.Id)}}",
- ["DisplayName"] = "{{LuaTools.EscapeLuaString(this.Model.DisplayName ?? string.Empty)}}",
- },
- }
- """;
+ lines.Add(" [\"Model\"] = {");
+ lines.Add($" [\"Id\"] = \"{LuaTools.EscapeLuaString(this.Model.Id)}\",");
+ lines.Add($" [\"DisplayName\"] = \"{LuaTools.EscapeLuaString(this.Model.DisplayName ?? string.Empty)}\",");
+ lines.Add(" },");
+ lines.Add("}");
+
+ return string.Join(Environment.NewLine, lines);
}
}