From 0ad7b8d4dd163613c96ea9dc12a3f306cf74c3a7 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sat, 14 Sep 2024 19:20:33 +0200 Subject: [PATCH] Added options to enforce minimum confidence levels for each assistant (#147) --- .../Agenda/AssistantAgenda.razor.cs | 2 +- .../Assistants/AssistantBase.razor | 4 +- .../Assistants/AssistantBase.razor.cs | 2 +- .../Coding/AssistantCoding.razor.cs | 2 +- .../Assistants/EMail/AssistantEMail.razor.cs | 2 +- .../AssistantGrammarSpelling.razor.cs | 2 +- .../IconFinder/AssistantIconFinder.razor.cs | 2 +- .../LegalCheck/AssistantLegalCheck.razor.cs | 2 +- .../MyTasks/AssistantMyTasks.razor.cs | 2 +- .../AssistantRewriteImprove.razor.cs | 2 +- .../Synonym/AssistantSynonyms.razor.cs | 2 +- .../AssistantTextSummarizer.razor.cs | 2 +- .../Translation/AssistantTranslation.razor.cs | 2 +- .../ConfigurationMinConfidenceSelection.razor | 2 + ...nfigurationMinConfidenceSelection.razor.cs | 51 ++++++++++ .../ConfigurationProviderSelection.razor.cs | 21 ++--- .../Components/ProviderSelection.razor.cs | 18 ++-- app/MindWork AI Studio/Pages/Settings.razor | 35 ++++--- .../Settings/ConfigurationSelectData.cs | 17 +++- .../Settings/DataModel/DataAgenda.cs | 6 ++ .../Settings/DataModel/DataCoding.cs | 6 ++ .../Settings/DataModel/DataEMail.cs | 26 +++-- .../Settings/DataModel/DataGrammarSpelling.cs | 7 ++ .../Settings/DataModel/DataIconFinder.cs | 6 ++ .../Settings/DataModel/DataLegalCheck.cs | 7 ++ .../Settings/DataModel/DataMyTasks.cs | 7 ++ .../Settings/DataModel/DataRewriteImprove.cs | 6 ++ .../Settings/DataModel/DataSynonyms.cs | 7 ++ .../Settings/DataModel/DataTextSummarizer.cs | 6 ++ .../Settings/DataModel/DataTranslation.cs | 7 ++ .../Settings/SettingsManager.cs | 57 +++++------ .../Tools/ComponentsData.cs | 3 + .../Tools/ComponentsExtensions.cs | 94 +++++++++++++++++++ app/MindWork AI Studio/Tools/SendToData.cs | 3 - .../Tools/SendToExtensions.cs | 42 --------- .../wwwroot/changelog/v0.9.11.md | 3 +- 36 files changed, 321 insertions(+), 144 deletions(-) create mode 100644 app/MindWork AI Studio/Components/ConfigurationMinConfidenceSelection.razor create mode 100644 app/MindWork AI Studio/Components/ConfigurationMinConfidenceSelection.razor.cs create mode 100644 app/MindWork AI Studio/Tools/ComponentsData.cs create mode 100644 app/MindWork AI Studio/Tools/ComponentsExtensions.cs delete mode 100644 app/MindWork AI Studio/Tools/SendToData.cs delete mode 100644 app/MindWork AI Studio/Tools/SendToExtensions.cs diff --git a/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs b/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs index 310f070..00f0d26 100644 --- a/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs +++ b/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs @@ -6,7 +6,7 @@ namespace AIStudio.Assistants.Agenda; public partial class AssistantAgenda : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.AGENDA_ASSISTANT; + public override Tools.Components Component => Tools.Components.AGENDA_ASSISTANT; protected override string Title => "Agenda Planner"; diff --git a/app/MindWork AI Studio/Assistants/AssistantBase.razor b/app/MindWork AI Studio/Assistants/AssistantBase.razor index 6f94150..0a7fb3d 100644 --- a/app/MindWork AI Studio/Assistants/AssistantBase.razor +++ b/app/MindWork AI Studio/Assistants/AssistantBase.razor @@ -13,7 +13,9 @@ @if (this.Body is not null) { - @this.Body + + @this.Body + @this.SubmitText diff --git a/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs b/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs index b8274ac..da0ac6f 100644 --- a/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs +++ b/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs @@ -40,7 +40,7 @@ public abstract partial class AssistantBase : ComponentBase protected abstract string SystemPrompt { get; } - protected abstract Tools.Components Component { get; } + public abstract Tools.Components Component { get; } protected virtual Func Result2Copy => () => this.resultingContentBlock is null ? string.Empty : this.resultingContentBlock.Content switch { diff --git a/app/MindWork AI Studio/Assistants/Coding/AssistantCoding.razor.cs b/app/MindWork AI Studio/Assistants/Coding/AssistantCoding.razor.cs index b06a3d4..1c7f69d 100644 --- a/app/MindWork AI Studio/Assistants/Coding/AssistantCoding.razor.cs +++ b/app/MindWork AI Studio/Assistants/Coding/AssistantCoding.razor.cs @@ -4,7 +4,7 @@ namespace AIStudio.Assistants.Coding; public partial class AssistantCoding : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.CODING_ASSISTANT; + public override Tools.Components Component => Tools.Components.CODING_ASSISTANT; protected override string Title => "Coding Assistant"; diff --git a/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs b/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs index 2f9b6f3..59d5fec 100644 --- a/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs +++ b/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs @@ -6,7 +6,7 @@ namespace AIStudio.Assistants.EMail; public partial class AssistantEMail : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.EMAIL_ASSISTANT; + public override Tools.Components Component => Tools.Components.EMAIL_ASSISTANT; protected override string Title => "E-Mail"; diff --git a/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs b/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs index f90af67..38f8aa2 100644 --- a/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs +++ b/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs @@ -4,7 +4,7 @@ namespace AIStudio.Assistants.GrammarSpelling; public partial class AssistantGrammarSpelling : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.GRAMMAR_SPELLING_ASSISTANT; + public override Tools.Components Component => Tools.Components.GRAMMAR_SPELLING_ASSISTANT; protected override string Title => "Grammar & Spelling Checker"; diff --git a/app/MindWork AI Studio/Assistants/IconFinder/AssistantIconFinder.razor.cs b/app/MindWork AI Studio/Assistants/IconFinder/AssistantIconFinder.razor.cs index 5123b91..6b7ace7 100644 --- a/app/MindWork AI Studio/Assistants/IconFinder/AssistantIconFinder.razor.cs +++ b/app/MindWork AI Studio/Assistants/IconFinder/AssistantIconFinder.razor.cs @@ -2,7 +2,7 @@ namespace AIStudio.Assistants.IconFinder; public partial class AssistantIconFinder : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.ICON_FINDER_ASSISTANT; + public override Tools.Components Component => Tools.Components.ICON_FINDER_ASSISTANT; protected override string Title => "Icon Finder"; diff --git a/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs b/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs index b8dd0ef..b2695d3 100644 --- a/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs +++ b/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs @@ -2,7 +2,7 @@ namespace AIStudio.Assistants.LegalCheck; public partial class AssistantLegalCheck : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.LEGAL_CHECK_ASSISTANT; + public override Tools.Components Component => Tools.Components.LEGAL_CHECK_ASSISTANT; protected override string Title => "Legal Check"; diff --git a/app/MindWork AI Studio/Assistants/MyTasks/AssistantMyTasks.razor.cs b/app/MindWork AI Studio/Assistants/MyTasks/AssistantMyTasks.razor.cs index 1b3f5be..a5f3762 100644 --- a/app/MindWork AI Studio/Assistants/MyTasks/AssistantMyTasks.razor.cs +++ b/app/MindWork AI Studio/Assistants/MyTasks/AssistantMyTasks.razor.cs @@ -4,7 +4,7 @@ namespace AIStudio.Assistants.MyTasks; public partial class AssistantMyTasks : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.MY_TASKS_ASSISTANT; + public override Tools.Components Component => Tools.Components.MY_TASKS_ASSISTANT; protected override string Title => "My Tasks"; diff --git a/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs b/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs index 0274610..e4e4bb1 100644 --- a/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs +++ b/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs @@ -4,7 +4,7 @@ namespace AIStudio.Assistants.RewriteImprove; public partial class AssistantRewriteImprove : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.REWRITE_ASSISTANT; + public override Tools.Components Component => Tools.Components.REWRITE_ASSISTANT; protected override string Title => "Rewrite & Improve Text"; diff --git a/app/MindWork AI Studio/Assistants/Synonym/AssistantSynonyms.razor.cs b/app/MindWork AI Studio/Assistants/Synonym/AssistantSynonyms.razor.cs index 444c348..e99c6f3 100644 --- a/app/MindWork AI Studio/Assistants/Synonym/AssistantSynonyms.razor.cs +++ b/app/MindWork AI Studio/Assistants/Synonym/AssistantSynonyms.razor.cs @@ -4,7 +4,7 @@ namespace AIStudio.Assistants.Synonym; public partial class AssistantSynonyms : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.SYNONYMS_ASSISTANT; + public override Tools.Components Component => Tools.Components.SYNONYMS_ASSISTANT; protected override string Title => "Synonyms"; diff --git a/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs b/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs index 8e5b071..02c222d 100644 --- a/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs +++ b/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs @@ -4,7 +4,7 @@ namespace AIStudio.Assistants.TextSummarizer; public partial class AssistantTextSummarizer : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.TEXT_SUMMARIZER_ASSISTANT; + public override Tools.Components Component => Tools.Components.TEXT_SUMMARIZER_ASSISTANT; protected override string Title => "Text Summarizer"; diff --git a/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs b/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs index 3f2c37f..8263112 100644 --- a/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs +++ b/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs @@ -4,7 +4,7 @@ namespace AIStudio.Assistants.Translation; public partial class AssistantTranslation : AssistantBaseCore { - protected override Tools.Components Component => Tools.Components.TRANSLATION_ASSISTANT; + public override Tools.Components Component => Tools.Components.TRANSLATION_ASSISTANT; protected override string Title => "Translation"; diff --git a/app/MindWork AI Studio/Components/ConfigurationMinConfidenceSelection.razor b/app/MindWork AI Studio/Components/ConfigurationMinConfidenceSelection.razor new file mode 100644 index 0000000..75290ba --- /dev/null +++ b/app/MindWork AI Studio/Components/ConfigurationMinConfidenceSelection.razor @@ -0,0 +1,2 @@ +@using AIStudio.Settings + \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/ConfigurationMinConfidenceSelection.razor.cs b/app/MindWork AI Studio/Components/ConfigurationMinConfidenceSelection.razor.cs new file mode 100644 index 0000000..5271b8f --- /dev/null +++ b/app/MindWork AI Studio/Components/ConfigurationMinConfidenceSelection.razor.cs @@ -0,0 +1,51 @@ +using AIStudio.Provider; +using AIStudio.Settings; + +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Components; + +public partial class ConfigurationMinConfidenceSelection : ComponentBase +{ + /// + /// The selected value. + /// + [Parameter] + public Func SelectedValue { get; set; } = () => default!; + + /// + /// An action that is called when the selection changes. + /// + [Parameter] + public Action SelectionUpdate { get; set; } = _ => { }; + + /// + /// Is the selection component disabled? + /// + [Parameter] + public Func Disabled { get; set; } = () => false; + + /// + /// Boolean value indicating whether the selection is restricted to a global minimum confidence level. + /// + [Parameter] + public bool RestrictToGlobalMinimumConfidence { get; set; } + + [Inject] + private SettingsManager SettingsManager { get; init; } = null!; + + private ConfidenceLevel FilteredSelectedValue() + { + if (this.SelectedValue() is ConfidenceLevel.NONE) + return ConfidenceLevel.NONE; + + if(this.RestrictToGlobalMinimumConfidence && this.SettingsManager.ConfigurationData.LLMProviders.EnforceGlobalMinimumConfidence) + { + var minimumLevel = this.SettingsManager.ConfigurationData.LLMProviders.GlobalMinimumConfidence; + if(this.SelectedValue() < minimumLevel) + return minimumLevel; + } + + return this.SelectedValue(); + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs b/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs index 28f2b4b..7e93e76 100644 --- a/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs +++ b/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs @@ -24,6 +24,9 @@ public partial class ConfigurationProviderSelection : ComponentBase, IMessageBus [Parameter] public Func HelpText { get; set; } = () => "Select a provider that is preselected."; + + [Parameter] + public Tools.Components Component { get; set; } = Tools.Components.NONE; [Inject] private SettingsManager SettingsManager { get; init; } = null!; @@ -46,20 +49,12 @@ public partial class ConfigurationProviderSelection : ComponentBase, IMessageBus private IEnumerable> FilteredData() { - if (this.SettingsManager.ConfigurationData.LLMProviders is { EnforceGlobalMinimumConfidence: true, GlobalMinimumConfidence: not ConfidenceLevel.NONE and not ConfidenceLevel.UNKNOWN }) + var minimumLevel = this.SettingsManager.GetMinimumConfidenceLevel(this.Component); + foreach (var providerId in this.Data) { - var minimumLevel = this.SettingsManager.ConfigurationData.LLMProviders.GlobalMinimumConfidence; - foreach (var providerId in this.Data) - { - var provider = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == providerId.Value); - if (provider.UsedLLMProvider.GetConfidence(this.SettingsManager).Level >= minimumLevel) - yield return providerId; - } - } - else - { - foreach (var provider in this.Data) - yield return provider; + var provider = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == providerId.Value); + if (provider.UsedLLMProvider.GetConfidence(this.SettingsManager).Level >= minimumLevel) + yield return providerId; } } diff --git a/app/MindWork AI Studio/Components/ProviderSelection.razor.cs b/app/MindWork AI Studio/Components/ProviderSelection.razor.cs index 82ff2e7..a5e39e5 100644 --- a/app/MindWork AI Studio/Components/ProviderSelection.razor.cs +++ b/app/MindWork AI Studio/Components/ProviderSelection.razor.cs @@ -1,3 +1,4 @@ +using AIStudio.Assistants; using AIStudio.Provider; using AIStudio.Settings; @@ -7,6 +8,9 @@ namespace AIStudio.Components; public partial class ProviderSelection : ComponentBase { + [CascadingParameter] + public AssistantBase? AssistantBase { get; set; } + [Parameter] public Settings.Provider ProviderSettings { get; set; } @@ -27,17 +31,9 @@ public partial class ProviderSelection : ComponentBase private IEnumerable GetAvailableProviders() { - if (this.SettingsManager.ConfigurationData.LLMProviders is { EnforceGlobalMinimumConfidence: true, GlobalMinimumConfidence: not ConfidenceLevel.NONE and not ConfidenceLevel.UNKNOWN }) - { - var minimumLevel = this.SettingsManager.ConfigurationData.LLMProviders.GlobalMinimumConfidence; - foreach (var provider in this.SettingsManager.ConfigurationData.Providers) - if (provider.UsedLLMProvider.GetConfidence(this.SettingsManager).Level >= minimumLevel) - yield return provider; - } - else - { - foreach (var provider in this.SettingsManager.ConfigurationData.Providers) + var minimumLevel = this.SettingsManager.GetMinimumConfidenceLevel(this.AssistantBase?.Component ?? Tools.Components.NONE); + foreach (var provider in this.SettingsManager.ConfigurationData.Providers) + if (provider.UsedLLMProvider.GetConfidence(this.SettingsManager).Level >= minimumLevel) yield return provider; - } } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Pages/Settings.razor b/app/MindWork AI Studio/Pages/Settings.razor index 50f40da..1f4e20c 100644 --- a/app/MindWork AI Studio/Pages/Settings.razor +++ b/app/MindWork AI Studio/Pages/Settings.razor @@ -83,7 +83,7 @@ @if(this.SettingsManager.ConfigurationData.LLMProviders.EnforceGlobalMinimumConfidence) { - + } @@ -207,7 +207,8 @@ - + + @@ -224,7 +225,8 @@ { } - + + @@ -237,7 +239,8 @@ { } - + + @@ -258,7 +261,8 @@ { } - + + @@ -286,7 +290,8 @@ { } - + + @@ -299,7 +304,8 @@ { } - + + @@ -313,7 +319,8 @@ } - + + @@ -328,7 +335,8 @@ } - + + @@ -339,7 +347,8 @@ - + + @@ -352,7 +361,8 @@ { } - + + @@ -365,7 +375,8 @@ } - + + diff --git a/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs b/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs index 44b17af..2ba2a49 100644 --- a/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs +++ b/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs @@ -144,19 +144,26 @@ public static class ConfigurationSelectDataFactory yield return new(scheme.GetListDescription(), scheme); } - public static IEnumerable> GetConfidenceLevelsData() + public static IEnumerable> GetConfidenceLevelsData(SettingsManager settingsManager, bool restrictToGlobalMinimum = false) { + var minimumLevel = ConfidenceLevel.NONE; + if(restrictToGlobalMinimum && settingsManager.ConfigurationData.LLMProviders is { EnforceGlobalMinimumConfidence: true, GlobalMinimumConfidence: not ConfidenceLevel.NONE and not ConfidenceLevel.UNKNOWN }) + minimumLevel = settingsManager.ConfigurationData.LLMProviders.GlobalMinimumConfidence; + foreach (var level in Enum.GetValues()) { + if(level is ConfidenceLevel.NONE) + yield return new("No minimum confidence level chosen", level); + + if(level < minimumLevel) + continue; + switch (level) { + case ConfidenceLevel.NONE: case ConfidenceLevel.UNKNOWN: continue; - case ConfidenceLevel.NONE: - yield return new("No minimum confidence level chosen", level); - break; - default: yield return new(level.GetName(), level); break; diff --git a/app/MindWork AI Studio/Settings/DataModel/DataAgenda.cs b/app/MindWork AI Studio/Settings/DataModel/DataAgenda.cs index 3960274..52fe423 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataAgenda.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataAgenda.cs @@ -1,4 +1,5 @@ using AIStudio.Assistants.Agenda; +using AIStudio.Provider; namespace AIStudio.Settings.DataModel; @@ -51,6 +52,11 @@ public sealed class DataAgenda /// public string PreselectedOtherLanguage { get; set; } = string.Empty; + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// Preselect a agenda provider? /// diff --git a/app/MindWork AI Studio/Settings/DataModel/DataCoding.cs b/app/MindWork AI Studio/Settings/DataModel/DataCoding.cs index f83c616..15f9a45 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataCoding.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataCoding.cs @@ -1,4 +1,5 @@ using AIStudio.Assistants.Coding; +using AIStudio.Provider; namespace AIStudio.Settings.DataModel; @@ -24,6 +25,11 @@ public sealed class DataCoding /// public string PreselectedOtherProgrammingLanguage { get; set; } = string.Empty; + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// Which coding provider should be preselected? /// diff --git a/app/MindWork AI Studio/Settings/DataModel/DataEMail.cs b/app/MindWork AI Studio/Settings/DataModel/DataEMail.cs index a913c7f..d592d8b 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataEMail.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataEMail.cs @@ -1,4 +1,5 @@ using AIStudio.Assistants.EMail; +using AIStudio.Provider; namespace AIStudio.Settings.DataModel; @@ -23,16 +24,6 @@ public sealed class DataEMail /// Preselect any writing style? /// public WritingStyles PreselectedWritingStyle { get; set; } - - /// - /// Preselect a provider? - /// - public string PreselectedProvider { get; set; } = string.Empty; - - /// - /// Preselect a profile? - /// - public string PreselectedProfile { get; set; } = string.Empty; /// /// Preselect a greeting phrase? @@ -43,4 +34,19 @@ public sealed class DataEMail /// Preselect the sender name for the closing salutation? /// public string SenderName { get; set; } = string.Empty; + + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + + /// + /// Preselect a provider? + /// + public string PreselectedProvider { get; set; } = string.Empty; + + /// + /// Preselect a profile? + /// + public string PreselectedProfile { get; set; } = string.Empty; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/DataModel/DataGrammarSpelling.cs b/app/MindWork AI Studio/Settings/DataModel/DataGrammarSpelling.cs index 01cc0f6..b5483ee 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataGrammarSpelling.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataGrammarSpelling.cs @@ -1,3 +1,5 @@ +using AIStudio.Provider; + namespace AIStudio.Settings.DataModel; public sealed class DataGrammarSpelling @@ -17,6 +19,11 @@ public sealed class DataGrammarSpelling /// public string PreselectedOtherLanguage { get; set; } = string.Empty; + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// Preselect a provider? /// diff --git a/app/MindWork AI Studio/Settings/DataModel/DataIconFinder.cs b/app/MindWork AI Studio/Settings/DataModel/DataIconFinder.cs index 6a0257e..abf7976 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataIconFinder.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataIconFinder.cs @@ -1,4 +1,5 @@ using AIStudio.Assistants.IconFinder; +using AIStudio.Provider; namespace AIStudio.Settings.DataModel; @@ -14,6 +15,11 @@ public sealed class DataIconFinder /// public IconSources PreselectedSource { get; set; } + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// The preselected icon provider. /// diff --git a/app/MindWork AI Studio/Settings/DataModel/DataLegalCheck.cs b/app/MindWork AI Studio/Settings/DataModel/DataLegalCheck.cs index c72b157..5ead9bf 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataLegalCheck.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataLegalCheck.cs @@ -1,3 +1,5 @@ +using AIStudio.Provider; + namespace AIStudio.Settings.DataModel; public class DataLegalCheck @@ -22,6 +24,11 @@ public class DataLegalCheck /// public bool PreselectContentCleanerAgent { get; set; } + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// The preselected translator provider. /// diff --git a/app/MindWork AI Studio/Settings/DataModel/DataMyTasks.cs b/app/MindWork AI Studio/Settings/DataModel/DataMyTasks.cs index 9b848e4..dcadd60 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataMyTasks.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataMyTasks.cs @@ -1,3 +1,5 @@ +using AIStudio.Provider; + namespace AIStudio.Settings.DataModel; public sealed class DataMyTasks @@ -17,6 +19,11 @@ public sealed class DataMyTasks /// public string PreselectOtherLanguage { get; set; } = string.Empty; + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// The preselected provider. /// diff --git a/app/MindWork AI Studio/Settings/DataModel/DataRewriteImprove.cs b/app/MindWork AI Studio/Settings/DataModel/DataRewriteImprove.cs index 738d63a..d690d79 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataRewriteImprove.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataRewriteImprove.cs @@ -1,4 +1,5 @@ using AIStudio.Assistants.RewriteImprove; +using AIStudio.Provider; namespace AIStudio.Settings.DataModel; @@ -29,6 +30,11 @@ public sealed class DataRewriteImprove /// public SentenceStructure PreselectedSentenceStructure { get; set; } + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// Preselect a provider? /// diff --git a/app/MindWork AI Studio/Settings/DataModel/DataSynonyms.cs b/app/MindWork AI Studio/Settings/DataModel/DataSynonyms.cs index 1d1fdb8..f4736f8 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataSynonyms.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataSynonyms.cs @@ -1,3 +1,5 @@ +using AIStudio.Provider; + namespace AIStudio.Settings.DataModel; public sealed class DataSynonyms @@ -17,6 +19,11 @@ public sealed class DataSynonyms /// public string PreselectedOtherLanguage { get; set; } = string.Empty; + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// Preselect a provider? /// diff --git a/app/MindWork AI Studio/Settings/DataModel/DataTextSummarizer.cs b/app/MindWork AI Studio/Settings/DataModel/DataTextSummarizer.cs index 6074a77..c437551 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataTextSummarizer.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataTextSummarizer.cs @@ -1,4 +1,5 @@ using AIStudio.Assistants.TextSummarizer; +using AIStudio.Provider; namespace AIStudio.Settings.DataModel; @@ -45,6 +46,11 @@ public sealed class DataTextSummarizer /// public string PreselectedExpertInField { get; set; } = string.Empty; + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// Preselect a text summarizer provider? /// diff --git a/app/MindWork AI Studio/Settings/DataModel/DataTranslation.cs b/app/MindWork AI Studio/Settings/DataModel/DataTranslation.cs index a861dca..1af8abf 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataTranslation.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataTranslation.cs @@ -1,3 +1,5 @@ +using AIStudio.Provider; + namespace AIStudio.Settings.DataModel; public sealed class DataTranslation @@ -42,6 +44,11 @@ public sealed class DataTranslation /// public string PreselectOtherLanguage { get; set; } = string.Empty; + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// The preselected translator provider. /// diff --git a/app/MindWork AI Studio/Settings/SettingsManager.cs b/app/MindWork AI Studio/Settings/SettingsManager.cs index 485d550..8dee766 100644 --- a/app/MindWork AI Studio/Settings/SettingsManager.cs +++ b/app/MindWork AI Studio/Settings/SettingsManager.cs @@ -112,51 +112,40 @@ public sealed class SettingsManager(ILogger logger) public void InjectSpellchecking(Dictionary attributes) => attributes["spellcheck"] = this.ConfigurationData.App.EnableSpellchecking ? "true" : "false"; + public ConfidenceLevel GetMinimumConfidenceLevel(Tools.Components component) + { + var minimumLevel = ConfidenceLevel.NONE; + var enforceGlobalMinimumConfidence = this.ConfigurationData.LLMProviders is { EnforceGlobalMinimumConfidence: true, GlobalMinimumConfidence: not ConfidenceLevel.NONE and not ConfidenceLevel.UNKNOWN }; + if (enforceGlobalMinimumConfidence) + minimumLevel = this.ConfigurationData.LLMProviders.GlobalMinimumConfidence; + + var componentMinimumLevel = component.MinimumConfidence(this); + if (componentMinimumLevel > minimumLevel) + minimumLevel = componentMinimumLevel; + + return minimumLevel; + } + public Provider GetPreselectedProvider(Tools.Components component) { - var minimumLevel = this.ConfigurationData.LLMProviders.EnforceGlobalMinimumConfidence ? this.ConfigurationData.LLMProviders.GlobalMinimumConfidence : ConfidenceLevel.NONE; - + var minimumLevel = this.GetMinimumConfidenceLevel(component); + + // When there is only one provider, and it has a confidence level that is high enough, we return it: if (this.ConfigurationData.Providers.Count == 1 && this.ConfigurationData.Providers[0].UsedLLMProvider.GetConfidence(this).Level >= minimumLevel) return this.ConfigurationData.Providers[0]; - - var preselection = component switch - { - Tools.Components.CHAT => this.ConfigurationData.Chat.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Chat.PreselectedProvider) : default, - Tools.Components.GRAMMAR_SPELLING_ASSISTANT => this.ConfigurationData.GrammarSpelling.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.GrammarSpelling.PreselectedProvider) : default, - Tools.Components.ICON_FINDER_ASSISTANT => this.ConfigurationData.IconFinder.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.IconFinder.PreselectedProvider) : default, - Tools.Components.REWRITE_ASSISTANT => this.ConfigurationData.RewriteImprove.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.RewriteImprove.PreselectedProvider) : default, - Tools.Components.TRANSLATION_ASSISTANT => this.ConfigurationData.Translation.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Translation.PreselectedProvider) : default, - Tools.Components.AGENDA_ASSISTANT => this.ConfigurationData.Agenda.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Agenda.PreselectedProvider) : default, - Tools.Components.CODING_ASSISTANT => this.ConfigurationData.Coding.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Coding.PreselectedProvider) : default, - Tools.Components.TEXT_SUMMARIZER_ASSISTANT => this.ConfigurationData.TextSummarizer.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.TextSummarizer.PreselectedProvider) : default, - Tools.Components.EMAIL_ASSISTANT => this.ConfigurationData.EMail.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.EMail.PreselectedProvider) : default, - Tools.Components.LEGAL_CHECK_ASSISTANT => this.ConfigurationData.LegalCheck.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.LegalCheck.PreselectedProvider) : default, - Tools.Components.SYNONYMS_ASSISTANT => this.ConfigurationData.Synonyms.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Synonyms.PreselectedProvider) : default, - Tools.Components.MY_TASKS_ASSISTANT => this.ConfigurationData.MyTasks.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.MyTasks.PreselectedProvider) : default, - - _ => default, - }; - if(preselection != default && preselection.UsedLLMProvider.GetConfidence(this).Level >= minimumLevel) - return preselection; + // When there is a component-preselected provider, and it has a confidence level that is high enough, we return it: + var preselectedProvider = component.PreselectedProvider(this); + if(preselectedProvider != default && preselectedProvider.UsedLLMProvider.GetConfidence(this).Level >= minimumLevel) + return preselectedProvider; + // When there is an app-wide preselected provider, and it has a confidence level that is high enough, we return it: return this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.App.PreselectedProvider && x.UsedLLMProvider.GetConfidence(this).Level >= minimumLevel); } public Profile GetPreselectedProfile(Tools.Components component) { - var preselection = component switch - { - Tools.Components.CHAT => this.ConfigurationData.Chat.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.Chat.PreselectedProfile) : default, - Tools.Components.AGENDA_ASSISTANT => this.ConfigurationData.Agenda.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.Agenda.PreselectedProfile) : default, - Tools.Components.CODING_ASSISTANT => this.ConfigurationData.Coding.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.Coding.PreselectedProfile) : default, - Tools.Components.EMAIL_ASSISTANT => this.ConfigurationData.EMail.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.EMail.PreselectedProfile) : default, - Tools.Components.LEGAL_CHECK_ASSISTANT => this.ConfigurationData.LegalCheck.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.LegalCheck.PreselectedProfile) : default, - Tools.Components.MY_TASKS_ASSISTANT => this.ConfigurationData.MyTasks.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.MyTasks.PreselectedProfile) : default, - - _ => default, - }; - + var preselection = component.PreselectedProfile(this); if (preselection != default) return preselection; diff --git a/app/MindWork AI Studio/Tools/ComponentsData.cs b/app/MindWork AI Studio/Tools/ComponentsData.cs new file mode 100644 index 0000000..d44c153 --- /dev/null +++ b/app/MindWork AI Studio/Tools/ComponentsData.cs @@ -0,0 +1,3 @@ +namespace AIStudio.Tools; + +public readonly record struct ComponentsData(Event Event, string Route); \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/ComponentsExtensions.cs b/app/MindWork AI Studio/Tools/ComponentsExtensions.cs new file mode 100644 index 0000000..e2b4628 --- /dev/null +++ b/app/MindWork AI Studio/Tools/ComponentsExtensions.cs @@ -0,0 +1,94 @@ +using AIStudio.Provider; +using AIStudio.Settings; + +namespace AIStudio.Tools; + +public static class ComponentsExtensions +{ + public static string Name(this Components component) => component switch + { + Components.GRAMMAR_SPELLING_ASSISTANT => "Grammar & Spelling Assistant", + Components.TEXT_SUMMARIZER_ASSISTANT => "Text Summarizer Assistant", + Components.ICON_FINDER_ASSISTANT => "Icon Finder Assistant", + Components.TRANSLATION_ASSISTANT => "Translation Assistant", + Components.REWRITE_ASSISTANT => "Rewrite Assistant", + Components.AGENDA_ASSISTANT => "Agenda Assistant", + Components.CODING_ASSISTANT => "Coding Assistant", + Components.EMAIL_ASSISTANT => "E-Mail Assistant", + Components.LEGAL_CHECK_ASSISTANT => "Legal Check Assistant", + Components.SYNONYMS_ASSISTANT => "Synonym Assistant", + Components.MY_TASKS_ASSISTANT => "My Tasks Assistant", + + Components.CHAT => "New Chat", + + _ => Enum.GetName(typeof(Components), component)!, + }; + + public static ComponentsData GetData(this Components destination) => destination switch + { + Components.AGENDA_ASSISTANT => new(Event.SEND_TO_AGENDA_ASSISTANT, Routes.ASSISTANT_AGENDA), + Components.CODING_ASSISTANT => new(Event.SEND_TO_CODING_ASSISTANT, Routes.ASSISTANT_CODING), + Components.REWRITE_ASSISTANT => new(Event.SEND_TO_REWRITE_ASSISTANT, Routes.ASSISTANT_REWRITE), + Components.EMAIL_ASSISTANT => new(Event.SEND_TO_EMAIL_ASSISTANT, Routes.ASSISTANT_EMAIL), + Components.TRANSLATION_ASSISTANT => new(Event.SEND_TO_TRANSLATION_ASSISTANT, Routes.ASSISTANT_TRANSLATION), + Components.ICON_FINDER_ASSISTANT => new(Event.SEND_TO_ICON_FINDER_ASSISTANT, Routes.ASSISTANT_ICON_FINDER), + Components.GRAMMAR_SPELLING_ASSISTANT => new(Event.SEND_TO_GRAMMAR_SPELLING_ASSISTANT, Routes.ASSISTANT_GRAMMAR_SPELLING), + Components.TEXT_SUMMARIZER_ASSISTANT => new(Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT, Routes.ASSISTANT_SUMMARIZER), + Components.LEGAL_CHECK_ASSISTANT => new(Event.SEND_TO_LEGAL_CHECK_ASSISTANT, Routes.ASSISTANT_LEGAL_CHECK), + Components.SYNONYMS_ASSISTANT => new(Event.SEND_TO_SYNONYMS_ASSISTANT, Routes.ASSISTANT_SYNONYMS), + Components.MY_TASKS_ASSISTANT => new(Event.SEND_TO_MY_TASKS_ASSISTANT, Routes.ASSISTANT_MY_TASKS), + + Components.CHAT => new(Event.SEND_TO_CHAT, Routes.CHAT), + + _ => new(Event.NONE, Routes.ASSISTANTS), + }; + + public static ConfidenceLevel MinimumConfidence(this Components component, SettingsManager settingsManager) => component switch + { + Components.GRAMMAR_SPELLING_ASSISTANT => settingsManager.ConfigurationData.GrammarSpelling.PreselectOptions ? settingsManager.ConfigurationData.GrammarSpelling.MinimumProviderConfidence : default, + Components.ICON_FINDER_ASSISTANT => settingsManager.ConfigurationData.IconFinder.PreselectOptions ? settingsManager.ConfigurationData.IconFinder.MinimumProviderConfidence : default, + Components.REWRITE_ASSISTANT => settingsManager.ConfigurationData.RewriteImprove.PreselectOptions ? settingsManager.ConfigurationData.RewriteImprove.MinimumProviderConfidence : default, + Components.TRANSLATION_ASSISTANT => settingsManager.ConfigurationData.Translation.PreselectOptions ? settingsManager.ConfigurationData.Translation.MinimumProviderConfidence : default, + Components.AGENDA_ASSISTANT => settingsManager.ConfigurationData.Agenda.PreselectOptions ? settingsManager.ConfigurationData.Agenda.MinimumProviderConfidence : default, + Components.CODING_ASSISTANT => settingsManager.ConfigurationData.Coding.PreselectOptions ? settingsManager.ConfigurationData.Coding.MinimumProviderConfidence : default, + Components.TEXT_SUMMARIZER_ASSISTANT => settingsManager.ConfigurationData.TextSummarizer.PreselectOptions ? settingsManager.ConfigurationData.TextSummarizer.MinimumProviderConfidence : default, + Components.EMAIL_ASSISTANT => settingsManager.ConfigurationData.EMail.PreselectOptions ? settingsManager.ConfigurationData.EMail.MinimumProviderConfidence : default, + Components.LEGAL_CHECK_ASSISTANT => settingsManager.ConfigurationData.LegalCheck.PreselectOptions ? settingsManager.ConfigurationData.LegalCheck.MinimumProviderConfidence : default, + Components.SYNONYMS_ASSISTANT => settingsManager.ConfigurationData.Synonyms.PreselectOptions ? settingsManager.ConfigurationData.Synonyms.MinimumProviderConfidence : default, + Components.MY_TASKS_ASSISTANT => settingsManager.ConfigurationData.MyTasks.PreselectOptions ? settingsManager.ConfigurationData.MyTasks.MinimumProviderConfidence : default, + + _ => default, + }; + + public static Settings.Provider PreselectedProvider(this Components component, SettingsManager settingsManager) => component switch + { + Components.GRAMMAR_SPELLING_ASSISTANT => settingsManager.ConfigurationData.GrammarSpelling.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.GrammarSpelling.PreselectedProvider) : default, + Components.ICON_FINDER_ASSISTANT => settingsManager.ConfigurationData.IconFinder.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.IconFinder.PreselectedProvider) : default, + Components.REWRITE_ASSISTANT => settingsManager.ConfigurationData.RewriteImprove.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.RewriteImprove.PreselectedProvider) : default, + Components.TRANSLATION_ASSISTANT => settingsManager.ConfigurationData.Translation.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Translation.PreselectedProvider) : default, + Components.AGENDA_ASSISTANT => settingsManager.ConfigurationData.Agenda.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Agenda.PreselectedProvider) : default, + Components.CODING_ASSISTANT => settingsManager.ConfigurationData.Coding.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Coding.PreselectedProvider) : default, + Components.TEXT_SUMMARIZER_ASSISTANT => settingsManager.ConfigurationData.TextSummarizer.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.TextSummarizer.PreselectedProvider) : default, + Components.EMAIL_ASSISTANT => settingsManager.ConfigurationData.EMail.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.EMail.PreselectedProvider) : default, + Components.LEGAL_CHECK_ASSISTANT => settingsManager.ConfigurationData.LegalCheck.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.LegalCheck.PreselectedProvider) : default, + Components.SYNONYMS_ASSISTANT => settingsManager.ConfigurationData.Synonyms.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Synonyms.PreselectedProvider) : default, + Components.MY_TASKS_ASSISTANT => settingsManager.ConfigurationData.MyTasks.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.MyTasks.PreselectedProvider) : default, + + Components.CHAT => settingsManager.ConfigurationData.Chat.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Chat.PreselectedProvider) : default, + + _ => default, + }; + + public static Profile PreselectedProfile(this Components component, SettingsManager settingsManager) => component switch + { + Components.AGENDA_ASSISTANT => settingsManager.ConfigurationData.Agenda.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Agenda.PreselectedProfile) : default, + Components.CODING_ASSISTANT => settingsManager.ConfigurationData.Coding.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Coding.PreselectedProfile) : default, + Components.EMAIL_ASSISTANT => settingsManager.ConfigurationData.EMail.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.EMail.PreselectedProfile) : default, + Components.LEGAL_CHECK_ASSISTANT => settingsManager.ConfigurationData.LegalCheck.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.LegalCheck.PreselectedProfile) : default, + Components.MY_TASKS_ASSISTANT => settingsManager.ConfigurationData.MyTasks.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.MyTasks.PreselectedProfile) : default, + + Components.CHAT => settingsManager.ConfigurationData.Chat.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Chat.PreselectedProfile) : default, + + _ => default, + }; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/SendToData.cs b/app/MindWork AI Studio/Tools/SendToData.cs deleted file mode 100644 index 2200208..0000000 --- a/app/MindWork AI Studio/Tools/SendToData.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace AIStudio.Tools; - -public readonly record struct SendToData(Event Event, string Route); \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/SendToExtensions.cs b/app/MindWork AI Studio/Tools/SendToExtensions.cs deleted file mode 100644 index c8abe68..0000000 --- a/app/MindWork AI Studio/Tools/SendToExtensions.cs +++ /dev/null @@ -1,42 +0,0 @@ -namespace AIStudio.Tools; - -public static class SendToExtensions -{ - public static string Name(this Components assistant) => assistant switch - { - Components.GRAMMAR_SPELLING_ASSISTANT => "Grammar & Spelling Assistant", - Components.TEXT_SUMMARIZER_ASSISTANT => "Text Summarizer Assistant", - Components.ICON_FINDER_ASSISTANT => "Icon Finder Assistant", - Components.TRANSLATION_ASSISTANT => "Translation Assistant", - Components.REWRITE_ASSISTANT => "Rewrite Assistant", - Components.AGENDA_ASSISTANT => "Agenda Assistant", - Components.CODING_ASSISTANT => "Coding Assistant", - Components.EMAIL_ASSISTANT => "E-Mail Assistant", - Components.LEGAL_CHECK_ASSISTANT => "Legal Check Assistant", - Components.SYNONYMS_ASSISTANT => "Synonym Assistant", - Components.MY_TASKS_ASSISTANT => "My Tasks Assistant", - - Components.CHAT => "New Chat", - - _ => Enum.GetName(typeof(Components), assistant)!, - }; - - public static SendToData GetData(this Components destination) => destination switch - { - Components.AGENDA_ASSISTANT => new(Event.SEND_TO_AGENDA_ASSISTANT, Routes.ASSISTANT_AGENDA), - Components.CODING_ASSISTANT => new(Event.SEND_TO_CODING_ASSISTANT, Routes.ASSISTANT_CODING), - Components.REWRITE_ASSISTANT => new(Event.SEND_TO_REWRITE_ASSISTANT, Routes.ASSISTANT_REWRITE), - Components.EMAIL_ASSISTANT => new(Event.SEND_TO_EMAIL_ASSISTANT, Routes.ASSISTANT_EMAIL), - Components.TRANSLATION_ASSISTANT => new(Event.SEND_TO_TRANSLATION_ASSISTANT, Routes.ASSISTANT_TRANSLATION), - Components.ICON_FINDER_ASSISTANT => new(Event.SEND_TO_ICON_FINDER_ASSISTANT, Routes.ASSISTANT_ICON_FINDER), - Components.GRAMMAR_SPELLING_ASSISTANT => new(Event.SEND_TO_GRAMMAR_SPELLING_ASSISTANT, Routes.ASSISTANT_GRAMMAR_SPELLING), - Components.TEXT_SUMMARIZER_ASSISTANT => new(Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT, Routes.ASSISTANT_SUMMARIZER), - Components.LEGAL_CHECK_ASSISTANT => new(Event.SEND_TO_LEGAL_CHECK_ASSISTANT, Routes.ASSISTANT_LEGAL_CHECK), - Components.SYNONYMS_ASSISTANT => new(Event.SEND_TO_SYNONYMS_ASSISTANT, Routes.ASSISTANT_SYNONYMS), - Components.MY_TASKS_ASSISTANT => new(Event.SEND_TO_MY_TASKS_ASSISTANT, Routes.ASSISTANT_MY_TASKS), - - Components.CHAT => new(Event.SEND_TO_CHAT, Routes.CHAT), - - _ => new(Event.NONE, Routes.ASSISTANTS), - }; -} \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.9.11.md b/app/MindWork AI Studio/wwwroot/changelog/v0.9.11.md index b9dd0a2..538a925 100644 --- a/app/MindWork AI Studio/wwwroot/changelog/v0.9.11.md +++ b/app/MindWork AI Studio/wwwroot/changelog/v0.9.11.md @@ -1,4 +1,5 @@ # v0.9.11, build 186 -- Added a tooltip to the confidence card button. - Added an option to enforce a minimum confidence level throughout the entire app. +- Added options to enforce minimum confidence levels for each assistant individually. +- Added a tooltip to the confidence card button. - Renamed the `Providers` enum to `LLMProviders` for better clarity. Renamed also all dependent variables and methods. \ No newline at end of file