diff --git a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor index 04364d4a..85795de9 100644 --- a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor +++ b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor @@ -7,7 +7,15 @@ @* ReSharper disable once CSharpWarnings::CS8974 *@ - + @foreach (LLMProviders provider in Enum.GetValues(typeof(LLMProviders))) { diff --git a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs index b77a128b..efa32f91 100644 --- a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs @@ -162,28 +162,13 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId { var cleanedHostname = this.DataHostname.Trim(); - // Determine the model based on the provider and host configuration: - Model model; - if (this.IsLLMModelSelectionHidden) - { - // Use system model placeholder for legacy hosts that don't support model selection: - model = Model.SYSTEM_MODEL; - } - else if (this.DataLLMProvider is LLMProviders.FIREWORKS or LLMProviders.HUGGINGFACE) - { - // These providers require manual model entry: - model = new Model(this.dataManuallyModel, null); - } - else - model = this.DataModel; - return new() { Num = this.DataNum, Id = this.DataId, InstanceName = this.DataInstanceName, UsedLLMProvider = this.DataLLMProvider, - Model = model, + Model = this.GetSelectedModel(), IsSelfHosted = this.DataLLMProvider is LLMProviders.SELF_HOSTED, IsEnterpriseConfiguration = false, Hostname = cleanedHostname.EndsWith('/') ? cleanedHostname[..^1] : cleanedHostname, @@ -194,6 +179,17 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId }; } + private Model GetSelectedModel() + { + if (this.IsLLMModelSelectionHidden) + return Model.SYSTEM_MODEL; + + if (this.DataLLMProvider.IsLLMModelProvidedManually()) + return new Model(this.dataManuallyModel, null); + + return this.DataModel; + } + #region Overrides of ComponentBase protected override async Task OnInitializedAsync() @@ -326,6 +322,17 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId } } + private void OnProviderChanged(LLMProviders selectedProvider) + { + this.DataLLMProvider = selectedProvider; + this.DataModel = default; + this.dataManuallyModel = string.Empty; + this.capabilityOverrides = new(); + this.availableModels.Clear(); + this.dataLoadingModelsIssue = string.Empty; + this.usesLegacySystemModelFallback = false; + } + private void OnHostChanged(Host selectedHost) { // When the host changes, reset the model selection state: @@ -535,7 +542,7 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId return currentProviderSettings.GetModelCapabilities(); } - private List GetAutomaticModelCapabilities() => this.DataLLMProvider.GetModelCapabilities(this.DataModel); + private List GetAutomaticModelCapabilities() => this.DataLLMProvider.GetModelCapabilities(this.GetSelectedModel()); private string GetCurrentModelApiLabel() { diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.cs index ca0bf8f6..c1aa43b3 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.cs @@ -21,27 +21,33 @@ public static partial class ProviderExtensions /// The LLM provider. /// The model to get the capabilities for. /// >The capabilities of the model. - public static List GetModelCapabilities(this LLMProviders provider, Model model) => provider switch + public static List GetModelCapabilities(this LLMProviders provider, Model model) { - LLMProviders.OPEN_AI => GetModelCapabilitiesOpenAI(model), - LLMProviders.MISTRAL => GetModelCapabilitiesMistral(model), - LLMProviders.ANTHROPIC => GetModelCapabilitiesAnthropic(model), - LLMProviders.GOOGLE => GetModelCapabilitiesGoogle(model), - LLMProviders.X => GetModelCapabilitiesOpenSource(model), - LLMProviders.DEEP_SEEK => GetModelCapabilitiesDeepSeek(model), - LLMProviders.ALIBABA_CLOUD => GetModelCapabilitiesAlibaba(model), - LLMProviders.PERPLEXITY => GetModelCapabilitiesPerplexity(model), - LLMProviders.OPEN_ROUTER => GetModelCapabilitiesOpenRouter(model), + if (string.IsNullOrWhiteSpace(model.Id)) + return []; - LLMProviders.GROQ => GetModelCapabilitiesOpenSource(model), - LLMProviders.FIREWORKS => GetModelCapabilitiesOpenSource(model), - LLMProviders.HUGGINGFACE => GetModelCapabilitiesOpenSource(model), + return provider switch + { + LLMProviders.OPEN_AI => GetModelCapabilitiesOpenAI(model), + LLMProviders.MISTRAL => GetModelCapabilitiesMistral(model), + LLMProviders.ANTHROPIC => GetModelCapabilitiesAnthropic(model), + LLMProviders.GOOGLE => GetModelCapabilitiesGoogle(model), + LLMProviders.X => GetModelCapabilitiesOpenSource(model), + LLMProviders.DEEP_SEEK => GetModelCapabilitiesDeepSeek(model), + LLMProviders.ALIBABA_CLOUD => GetModelCapabilitiesAlibaba(model), + LLMProviders.PERPLEXITY => GetModelCapabilitiesPerplexity(model), + LLMProviders.OPEN_ROUTER => GetModelCapabilitiesOpenRouter(model), + + LLMProviders.GROQ => GetModelCapabilitiesOpenSource(model), + LLMProviders.FIREWORKS => GetModelCapabilitiesOpenSource(model), + LLMProviders.HUGGINGFACE => GetModelCapabilitiesOpenSource(model), - LLMProviders.HELMHOLTZ => GetModelCapabilitiesOpenSource(model), - LLMProviders.GWDG => GetModelCapabilitiesOpenSource(model), + LLMProviders.HELMHOLTZ => GetModelCapabilitiesOpenSource(model), + LLMProviders.GWDG => GetModelCapabilitiesOpenSource(model), - LLMProviders.SELF_HOSTED => GetModelCapabilitiesOpenSource(model), + LLMProviders.SELF_HOSTED => GetModelCapabilitiesOpenSource(model), - _ => [] - }; + _ => [] + }; + } } \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/changelog/v26.7.2.md b/app/MindWork AI Studio/wwwroot/changelog/v26.7.2.md index 7e4f0c11..a3e9356c 100644 --- a/app/MindWork AI Studio/wwwroot/changelog/v26.7.2.md +++ b/app/MindWork AI Studio/wwwroot/changelog/v26.7.2.md @@ -1 +1,2 @@ # v26.7.2, build 244 (2026-07-xx xx:xx UTC) +- Fixed the dialog for adding providers. Selecting an option could previously prevent the setup from continuing. Thanks, Dominic Neuburg (`donework`), for reporting this issue. \ No newline at end of file