mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-02-12 10:21:36 +00:00
Added configuration export for providers
This commit is contained in:
parent
7504c99fd7
commit
dcf6cd3728
@ -15,4 +15,7 @@ public abstract class SettingsPanelBase : MSGComponentBase
|
||||
|
||||
[Inject]
|
||||
protected RustService RustService { get; init; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected ISnackbar Snackbar { get; init; } = null!;
|
||||
}
|
||||
@ -53,6 +53,9 @@
|
||||
<MudTooltip Text="@T("Edit")">
|
||||
<MudIconButton Color="Color.Info" Icon="@Icons.Material.Filled.Edit" OnClick="@(() => this.EditEmbeddingProvider(context))"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Export configuration")">
|
||||
<MudIconButton Color="Color.Info" Icon="@Icons.Material.Filled.Dataset" OnClick="@(() => this.ExportEmbeddingProvider(context))"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Delete")">
|
||||
<MudIconButton Color="Color.Error" Icon="@Icons.Material.Filled.Delete" OnClick="@(() => this.DeleteEmbeddingProvider(context))"/>
|
||||
</MudTooltip>
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
using AIStudio.Dialogs;
|
||||
using AIStudio.Settings;
|
||||
using AIStudio.Tools.PluginSystem;
|
||||
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
@ -115,6 +116,18 @@ public partial class SettingsPanelEmbeddings : SettingsPanelBase
|
||||
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||
}
|
||||
|
||||
private async Task ExportEmbeddingProvider(EmbeddingProvider provider)
|
||||
{
|
||||
if (provider == EmbeddingProvider.NONE)
|
||||
return;
|
||||
|
||||
var luaCode = ConfigurationExport.ExportEmbeddingProvider(provider);
|
||||
if (string.IsNullOrWhiteSpace(luaCode))
|
||||
return;
|
||||
|
||||
await this.RustService.CopyText2Clipboard(this.Snackbar, luaCode);
|
||||
}
|
||||
|
||||
private async Task UpdateEmbeddingProviders()
|
||||
{
|
||||
this.AvailableEmbeddingProviders.Clear();
|
||||
|
||||
@ -45,6 +45,9 @@
|
||||
<MudTooltip Text="@T("Edit")">
|
||||
<MudIconButton Color="Color.Info" Icon="@Icons.Material.Filled.Edit" OnClick="@(() => this.EditLLMProvider(context))"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Export configuration")">
|
||||
<MudIconButton Color="Color.Info" Icon="@Icons.Material.Filled.Dataset" OnClick="@(() => this.ExportLLMProvider(context))"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Delete")">
|
||||
<MudIconButton Color="Color.Error" Icon="@Icons.Material.Filled.Delete" OnClick="@(() => this.DeleteLLMProvider(context))"/>
|
||||
</MudTooltip>
|
||||
|
||||
@ -3,6 +3,7 @@ using System.Diagnostics.CodeAnalysis;
|
||||
using AIStudio.Dialogs;
|
||||
using AIStudio.Provider;
|
||||
using AIStudio.Settings;
|
||||
using AIStudio.Tools.PluginSystem;
|
||||
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
@ -134,6 +135,18 @@ public partial class SettingsPanelProviders : SettingsPanelBase
|
||||
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||
}
|
||||
|
||||
private async Task ExportLLMProvider(AIStudio.Settings.Provider provider)
|
||||
{
|
||||
if (provider == AIStudio.Settings.Provider.NONE)
|
||||
return;
|
||||
|
||||
var luaCode = ConfigurationExport.ExportProvider(provider);
|
||||
if (string.IsNullOrWhiteSpace(luaCode))
|
||||
return;
|
||||
|
||||
await this.RustService.CopyText2Clipboard(this.Snackbar, luaCode);
|
||||
}
|
||||
|
||||
private string GetLLMProviderModelName(AIStudio.Settings.Provider provider)
|
||||
{
|
||||
// For system models, return localized text:
|
||||
|
||||
@ -50,6 +50,9 @@
|
||||
<MudTooltip Text="@T("Edit")">
|
||||
<MudIconButton Color="Color.Info" Icon="@Icons.Material.Filled.Edit" OnClick="@(() => this.EditTranscriptionProvider(context))"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Export configuration")">
|
||||
<MudIconButton Color="Color.Info" Icon="@Icons.Material.Filled.Dataset" OnClick="@(() => this.ExportTranscriptionProvider(context))"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Delete")">
|
||||
<MudIconButton Color="Color.Error" Icon="@Icons.Material.Filled.Delete" OnClick="@(() => this.DeleteTranscriptionProvider(context))"/>
|
||||
</MudTooltip>
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
using AIStudio.Dialogs;
|
||||
using AIStudio.Settings;
|
||||
using AIStudio.Tools.PluginSystem;
|
||||
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
@ -115,6 +116,18 @@ public partial class SettingsPanelTranscription : SettingsPanelBase
|
||||
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||
}
|
||||
|
||||
private async Task ExportTranscriptionProvider(TranscriptionProvider provider)
|
||||
{
|
||||
if (provider == TranscriptionProvider.NONE)
|
||||
return;
|
||||
|
||||
var luaCode = ConfigurationExport.ExportTranscriptionProvider(provider);
|
||||
if (string.IsNullOrWhiteSpace(luaCode))
|
||||
return;
|
||||
|
||||
await this.RustService.CopyText2Clipboard(this.Snackbar, luaCode);
|
||||
}
|
||||
|
||||
private async Task UpdateTranscriptionProviders()
|
||||
{
|
||||
this.AvailableTranscriptionProviders.Clear();
|
||||
|
||||
@ -0,0 +1,95 @@
|
||||
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");
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
# v26.2.2, build 234 (2026-02-xx xx:xx UTC)
|
||||
- Added a vector database (Qdrant) as a building block for our local RAG (retrieval-augmented generation) solution. Thank you very much, Paul (`PaulKoudelka`), for this major contribution. Note that our local RAG implementation remained in preview and has not yet been released; other building blocks are not yet ready.
|
||||
- Added an app setting to enable administration options for IT staff to configure and maintain organization-wide settings.
|
||||
- Added an option to export all provider types (LLMs, embeddings, transcriptions) for use in a configuration plugin. This feature appears only when administration options are enabled.
|
||||
- Improved the document analysis assistant (in beta) by hiding the export functionality by default. Enable the administration options in the app settings to show and use the export functionality. This streamlines the usage for regular users.
|
||||
Loading…
Reference in New Issue
Block a user