From 0775b03529a89f0664b4781f1a20b157e5e7b7e8 Mon Sep 17 00:00:00 2001 From: krut_ni Date: Tue, 11 Nov 2025 19:06:44 +0100 Subject: [PATCH] added a switch component for boolean user inputs --- .../Assistants/Dynamic/AssistantDynamic.razor | 7 ++- .../Dynamic/AssistantDynamic.razor.cs | 23 ++++++-- .../Assistants/AssistantComponentFactory.cs | 2 + .../Assistants/DataModel/AssistantSwitch.cs | 54 +++++++++++++++++++ .../DataModel/AssistantUiCompontentType.cs | 1 + .../DataModel/ComponentPropSpecs.cs | 4 ++ 6 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantSwitch.cs diff --git a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor index 7dbef4bc..a5b2feac 100644 --- a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor +++ b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor @@ -24,12 +24,17 @@ Icon="@Icons.Material.Filled.Translate"/> } break; - case AssistantUiCompontentType.PROVIDER_SELECTION: if (component is AssistantProviderSelection providerSelection) { } break; + case AssistantUiCompontentType.SWITCH: + if (component is AssistantSwitch assistantSwitch) + { + + } + break; } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs index f506cdfd..433afeb4 100644 --- a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs +++ b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs @@ -30,6 +30,7 @@ public partial class AssistantDynamic : AssistantBaseCore private Dictionary inputFields = new(); private Dictionary dropdownFields = new(); + private Dictionary switchFields = new(); protected override void OnInitialized() { @@ -61,6 +62,12 @@ public partial class AssistantDynamic : AssistantBaseCore this.dropdownFields.Add(dropdown.Name, dropdown.Default.Value); } break; + case AssistantUiCompontentType.SWITCH: + if (component is AssistantSwitch switchComponent) + { + this.switchFields.Add(switchComponent.Name, switchComponent.Value); + } + break; } } base.OnInitialized(); @@ -89,12 +96,13 @@ public partial class AssistantDynamic : AssistantBaseCore foreach (var component in this.RootComponent!.Children) { var userInput = string.Empty; + var userDecision = false; switch (component.Type) { case AssistantUiCompontentType.TEXT_AREA: if (component is AssistantTextArea textArea) { - prompt += $"context:{Environment.NewLine}{textArea.UserPrompt}{Environment.NewLine}{Environment.NewLine}---{Environment.NewLine}"; + prompt += $"context:{Environment.NewLine}{textArea.UserPrompt}{Environment.NewLine}---{Environment.NewLine}"; if (this.inputFields.TryGetValue(textArea.Name, out userInput)) { prompt += $"user prompt:{Environment.NewLine}{userInput}"; @@ -104,20 +112,29 @@ public partial class AssistantDynamic : AssistantBaseCore case AssistantUiCompontentType.DROPDOWN: if (component is AssistantDropdown dropdown) { - prompt += $"{Environment.NewLine}context:{Environment.NewLine}{dropdown.UserPrompt}{Environment.NewLine}{Environment.NewLine}---{Environment.NewLine}"; + prompt += $"{Environment.NewLine}context:{Environment.NewLine}{dropdown.UserPrompt}{Environment.NewLine}---{Environment.NewLine}"; if (this.dropdownFields.TryGetValue(dropdown.Name, out userInput)) { prompt += $"user prompt:{Environment.NewLine}{userInput}"; } } break; + case AssistantUiCompontentType.SWITCH: + if (component is AssistantSwitch switchComponent) + { + prompt += $"{Environment.NewLine}context:{Environment.NewLine}{switchComponent.UserPrompt}{Environment.NewLine}---{Environment.NewLine}"; + if (this.switchFields.TryGetValue(switchComponent.Name, out userDecision)) + { + prompt += $"user decision:{Environment.NewLine}{userDecision}"; + } + } + break; default: prompt += $"{userInput}{Environment.NewLine}"; break; } } - Console.WriteLine(prompt); return prompt; } diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs index c558d6b9..3efe0e48 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs @@ -23,6 +23,8 @@ public class AssistantComponentFactory return new AssistantDropdown { Props = props, Children = children }; case AssistantUiCompontentType.PROVIDER_SELECTION: return new AssistantProviderSelection { Props = props, Children = children }; + case AssistantUiCompontentType.SWITCH: + return new AssistantSwitch { Props = props, Children = children }; default: LOGGER.LogError($"Unknown assistant component type!\n{type} is not a supported assistant component type"); throw new Exception($"Unknown assistant component type: {type}"); diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantSwitch.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantSwitch.cs new file mode 100644 index 00000000..33082508 --- /dev/null +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantSwitch.cs @@ -0,0 +1,54 @@ +namespace AIStudio.Tools.PluginSystem.Assistants.DataModel; + +public class AssistantSwitch : AssistantComponentBase +{ + public override AssistantUiCompontentType Type => AssistantUiCompontentType.SWITCH; + public Dictionary Props { get; set; } = new(); + public List Children { get; set; } = new(); + + public string Name + { + get => this.Props.TryGetValue(nameof(this.Name), out var v) + ? v.ToString() ?? string.Empty + : string.Empty; + set => this.Props[nameof(this.Name)] = value; + } + + public string Label + { + get => this.Props.TryGetValue(nameof(this.Label), out var v) + ? v.ToString() ?? string.Empty + : string.Empty; + set => this.Props[nameof(this.Label)] = value; + } + + public bool Value + { + get => this.Props.TryGetValue(nameof(this.Value), out var val) && val is true; + set => this.Props[nameof(this.Value)] = value; + } + + public string UserPrompt + { + get => this.Props.TryGetValue(nameof(this.UserPrompt), out var val) + ? val.ToString() ?? string.Empty + : string.Empty; + set => this.Props[nameof(this.UserPrompt)] = value; + } + + public string LabelOn + { + get => this.Props.TryGetValue(nameof(this.LabelOn), out var v) + ? v.ToString() ?? string.Empty + : string.Empty; + set => this.Props[nameof(this.LabelOn)] = value; + } + + public string LabelOff + { + get => this.Props.TryGetValue(nameof(this.LabelOff), out var v) + ? v.ToString() ?? string.Empty + : string.Empty; + set => this.Props[nameof(this.LabelOff)] = value; + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs index 73973145..74254205 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs @@ -7,4 +7,5 @@ public enum AssistantUiCompontentType BUTTON, DROPDOWN, PROVIDER_SELECTION, + SWITCH, } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs index 7f15f35d..fe5b0328 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs @@ -25,5 +25,9 @@ public static class ComponentPropSpecs required: ["Name", "Label"], optional: [] ), + [AssistantUiCompontentType.SWITCH] = new( + required: ["Name", "Label", "LabelOn", "LabelOff", "Value"], + optional: ["UserPrompt"] + ), }; } \ No newline at end of file