diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
index 202f179a..1c8362f3 100644
--- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
+++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
@@ -5788,6 +5788,12 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGWRITINGEMAILS::T3832
-- Save
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::TOOLSETTINGSDIALOG::T1294818664"] = "Save"
+-- Please configure the required settings: {0}
+UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::TOOLSETTINGSDIALOG::T2412603418"] = "Please configure the required settings: {0}"
+
+-- Not set
+UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::TOOLSETTINGSDIALOG::T3616903110"] = "Not set"
+
-- Tool Settings
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::TOOLSETTINGSDIALOG::T3730473128"] = "Tool Settings"
diff --git a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor
index 8d74d470..1e9e3d24 100644
--- a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor
+++ b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor
@@ -19,6 +19,11 @@
@this.implementation?.GetDescription()
+ @if (!string.IsNullOrWhiteSpace(this.validationMessage))
+ {
+ @this.validationMessage
+ }
+
@foreach (var property in this.toolDefinition.SettingsSchema.Properties)
{
@@ -27,6 +32,10 @@
if (field.EnumValues.Count > 0)
{
+ @if (!this.toolDefinition.SettingsSchema.Required.Contains(fieldName))
+ {
+ @T("Not set")
+ }
@foreach (var option in field.EnumValues)
{
@option
diff --git a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs
index 2cd90e5b..b7cfd7c4 100644
--- a/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs
+++ b/app/MindWork AI Studio/Dialogs/Settings/ToolSettingsDialog.razor.cs
@@ -19,6 +19,7 @@ public partial class ToolSettingsDialog : SettingsDialogBase
private ToolDefinition? toolDefinition;
private IToolImplementation? implementation;
private Dictionary values = new(StringComparer.Ordinal);
+ private string validationMessage = string.Empty;
protected override async Task OnInitializedAsync()
{
@@ -69,13 +70,26 @@ public partial class ToolSettingsDialog : SettingsDialogBase
private string GetFieldPlaceholder(string fieldName, ToolSettingsFieldDefinition fieldDefinition) =>
string.IsNullOrWhiteSpace(this.GetValue(fieldName)) ? this.GetFieldDefaultValue(fieldName, fieldDefinition) : string.Empty;
- private void UpdateValue(string fieldName, string? value) => this.values[fieldName] = value ?? string.Empty;
+ private void UpdateValue(string fieldName, string? value)
+ {
+ this.values[fieldName] = value ?? string.Empty;
+ this.validationMessage = string.Empty;
+ }
private async Task Save()
{
if (this.toolDefinition is null)
return;
+ var validationState = await this.ToolSettingsService.ValidateSettingsAsync(this.toolDefinition, this.values, this.implementation);
+ if (!validationState.IsConfigured)
+ {
+ this.validationMessage = !string.IsNullOrWhiteSpace(validationState.Message)
+ ? validationState.Message
+ : string.Format(T("Please configure the required settings: {0}"), string.Join(", ", validationState.MissingRequiredFields));
+ return;
+ }
+
await this.ToolSettingsService.SaveSettingsAsync(this.toolDefinition, this.values);
this.MudDialog.Close();
}
diff --git a/app/MindWork AI Studio/Pages/Settings.razor b/app/MindWork AI Studio/Pages/Settings.razor
index 11636bfe..47cff5f5 100644
--- a/app/MindWork AI Studio/Pages/Settings.razor
+++ b/app/MindWork AI Studio/Pages/Settings.razor
@@ -14,7 +14,7 @@
{
}
-
+
@if (PreviewFeatures.PRE_SPEECH_TO_TEXT_2026.IsEnabled(this.SettingsManager))
{
diff --git a/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs b/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs
index 5e45fcee..c4492224 100644
--- a/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs
+++ b/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs
@@ -18,9 +18,6 @@ public readonly record struct ChatRequest(
string System
)
{
- [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
- public IList