added a switch component for boolean user inputs

This commit is contained in:
krut_ni 2025-11-11 19:06:44 +01:00
parent 4fd21ad45b
commit 0775b03529
6 changed files with 87 additions and 4 deletions

View File

@ -24,12 +24,17 @@
Icon="@Icons.Material.Filled.Translate"/> Icon="@Icons.Material.Filled.Translate"/>
} }
break; break;
case AssistantUiCompontentType.PROVIDER_SELECTION: case AssistantUiCompontentType.PROVIDER_SELECTION:
if (component is AssistantProviderSelection providerSelection) if (component is AssistantProviderSelection providerSelection)
{ {
<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/> <ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
} }
break; break;
case AssistantUiCompontentType.SWITCH:
if (component is AssistantSwitch assistantSwitch)
{
<MudTextSwitch Label="@assistantSwitch.Label" @bind-Value="@this.switchFields[assistantSwitch.Name]" LabelOn="@assistantSwitch.LabelOn" LabelOff="@assistantSwitch.LabelOff" />
}
break;
} }
} }

View File

@ -30,6 +30,7 @@ public partial class AssistantDynamic : AssistantBaseCore<SettingsDialogDynamic>
private Dictionary<string, string> inputFields = new(); private Dictionary<string, string> inputFields = new();
private Dictionary<string, string> dropdownFields = new(); private Dictionary<string, string> dropdownFields = new();
private Dictionary<string, bool> switchFields = new();
protected override void OnInitialized() protected override void OnInitialized()
{ {
@ -61,6 +62,12 @@ public partial class AssistantDynamic : AssistantBaseCore<SettingsDialogDynamic>
this.dropdownFields.Add(dropdown.Name, dropdown.Default.Value); this.dropdownFields.Add(dropdown.Name, dropdown.Default.Value);
} }
break; break;
case AssistantUiCompontentType.SWITCH:
if (component is AssistantSwitch switchComponent)
{
this.switchFields.Add(switchComponent.Name, switchComponent.Value);
}
break;
} }
} }
base.OnInitialized(); base.OnInitialized();
@ -89,12 +96,13 @@ public partial class AssistantDynamic : AssistantBaseCore<SettingsDialogDynamic>
foreach (var component in this.RootComponent!.Children) foreach (var component in this.RootComponent!.Children)
{ {
var userInput = string.Empty; var userInput = string.Empty;
var userDecision = false;
switch (component.Type) switch (component.Type)
{ {
case AssistantUiCompontentType.TEXT_AREA: case AssistantUiCompontentType.TEXT_AREA:
if (component is AssistantTextArea textArea) 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)) if (this.inputFields.TryGetValue(textArea.Name, out userInput))
{ {
prompt += $"user prompt:{Environment.NewLine}{userInput}"; prompt += $"user prompt:{Environment.NewLine}{userInput}";
@ -104,20 +112,29 @@ public partial class AssistantDynamic : AssistantBaseCore<SettingsDialogDynamic>
case AssistantUiCompontentType.DROPDOWN: case AssistantUiCompontentType.DROPDOWN:
if (component is AssistantDropdown 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)) if (this.dropdownFields.TryGetValue(dropdown.Name, out userInput))
{ {
prompt += $"user prompt:{Environment.NewLine}{userInput}"; prompt += $"user prompt:{Environment.NewLine}{userInput}";
} }
} }
break; 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: default:
prompt += $"{userInput}{Environment.NewLine}"; prompt += $"{userInput}{Environment.NewLine}";
break; break;
} }
} }
Console.WriteLine(prompt);
return prompt; return prompt;
} }

View File

@ -23,6 +23,8 @@ public class AssistantComponentFactory
return new AssistantDropdown { Props = props, Children = children }; return new AssistantDropdown { Props = props, Children = children };
case AssistantUiCompontentType.PROVIDER_SELECTION: case AssistantUiCompontentType.PROVIDER_SELECTION:
return new AssistantProviderSelection { Props = props, Children = children }; return new AssistantProviderSelection { Props = props, Children = children };
case AssistantUiCompontentType.SWITCH:
return new AssistantSwitch { Props = props, Children = children };
default: default:
LOGGER.LogError($"Unknown assistant component type!\n{type} is not a supported assistant component type"); LOGGER.LogError($"Unknown assistant component type!\n{type} is not a supported assistant component type");
throw new Exception($"Unknown assistant component type: {type}"); throw new Exception($"Unknown assistant component type: {type}");

View File

@ -0,0 +1,54 @@
namespace AIStudio.Tools.PluginSystem.Assistants.DataModel;
public class AssistantSwitch : AssistantComponentBase
{
public override AssistantUiCompontentType Type => AssistantUiCompontentType.SWITCH;
public Dictionary<string, object> Props { get; set; } = new();
public List<IAssistantComponent> 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;
}
}

View File

@ -7,4 +7,5 @@ public enum AssistantUiCompontentType
BUTTON, BUTTON,
DROPDOWN, DROPDOWN,
PROVIDER_SELECTION, PROVIDER_SELECTION,
SWITCH,
} }

View File

@ -25,5 +25,9 @@ public static class ComponentPropSpecs
required: ["Name", "Label"], required: ["Name", "Label"],
optional: [] optional: []
), ),
[AssistantUiCompontentType.SWITCH] = new(
required: ["Name", "Label", "LabelOn", "LabelOff", "Value"],
optional: ["UserPrompt"]
),
}; };
} }