From 3eb351563461446deacf1e77fa670aecce697c5a Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 13 Jan 2026 20:03:31 +0100 Subject: [PATCH] Enforced model validation --- .../Assistants/I18N/allTexts.lua | 3 ++ .../Dialogs/TranscriptionProviderDialog.razor | 2 +- .../TranscriptionProviderDialog.razor.cs | 34 +++++++++++++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua index 1ec8c022..3ec67fab 100644 --- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua +++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua @@ -4636,6 +4636,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T3703662664"] = -- Model selection UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T416738168"] = "Model selection" +-- Please select a transcription model. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T794751523"] = "Please select a transcription model." + -- Host UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T808120719"] = "Host" diff --git a/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor index 0a2aa3bb..8fdb5616 100644 --- a/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor +++ b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor @@ -90,7 +90,7 @@ + Validation="@this.ValidateSelectedModel"> @foreach (var model in this.availableModels) { diff --git a/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs index e2f4110d..964138bf 100644 --- a/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs @@ -216,7 +216,16 @@ public partial class TranscriptionProviderDialog : MSGComponentBase, ISecretId { await this.form.Validate(); this.dataAPIKeyStorageIssue = string.Empty; - + + // Manually validate the model selection (needed when no models are loaded + // and the MudSelect is not rendered): + var modelValidationError = this.ValidateSelectedModel(this.DataModel); + if (!string.IsNullOrWhiteSpace(modelValidationError)) + { + this.dataIssues = [..this.dataIssues, modelValidationError]; + this.dataIsValid = false; + } + // When the data is not valid, we don't store it: if (!this.dataIsValid) return; @@ -243,7 +252,28 @@ public partial class TranscriptionProviderDialog : MSGComponentBase, ISecretId { if (this.DataLLMProvider is LLMProviders.SELF_HOSTED && string.IsNullOrWhiteSpace(manuallyModel)) return T("Please enter a transcription model name."); - + + return null; + } + + private string? ValidateSelectedModel(Model model) + { + // Exception for self-hosted whisper.cpp - no model selection needed: + if (this.DataLLMProvider is LLMProviders.SELF_HOSTED && this.DataHost is Host.WHISPER_CPP) + return null; + + // For manually entered models, this validation doesn't apply: + if (this.DataLLMProvider.IsTranscriptionModelProvidedManually(this.DataHost)) + return null; + + // For NONE providers, no validation is needed yet: + if (this.DataLLMProvider is LLMProviders.NONE) + return null; + + // Check if a model is selected: + if (model == default) + return T("Please select a transcription model."); + return null; }