From 9bbc289d93e5255b125e34856f4c079bbc1cd799 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Fri, 13 Sep 2024 23:27:51 +0200 Subject: [PATCH] Added an option to enforce a minimum confidence level throughout the entire app --- .../ConfigurationProviderSelection.razor | 2 +- .../ConfigurationProviderSelection.razor.cs | 20 ++++++++++++++++++ .../Components/ProviderSelection.razor | 2 +- .../Components/ProviderSelection.razor.cs | 19 ++++++++++++++++- app/MindWork AI Studio/Pages/Settings.razor | 6 ++++++ .../Settings/ConfigurationSelectData.cs | 21 +++++++++++++++++++ .../Settings/DataModel/DataLLMProviders.cs | 10 +++++++++ .../Settings/SettingsManager.cs | 8 ++++--- .../wwwroot/changelog/v0.9.11.md | 1 + 9 files changed, 83 insertions(+), 6 deletions(-) diff --git a/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor b/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor index 2dc5bf8e..3f0978cc 100644 --- a/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor +++ b/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor @@ -1 +1 @@ - \ No newline at end of file + \ 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 87889b02..28f2b4b9 100644 --- a/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs +++ b/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs @@ -1,3 +1,4 @@ +using AIStudio.Provider; using AIStudio.Settings; using Microsoft.AspNetCore.Components; @@ -43,6 +44,25 @@ public partial class ConfigurationProviderSelection : ComponentBase, IMessageBus #endregion + private IEnumerable> FilteredData() + { + 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 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; + } + } + #region Implementation of IMessageBusReceiver public async Task ProcessMessage(ComponentBase? sendingComponent, Event triggeredEvent, T? data) diff --git a/app/MindWork AI Studio/Components/ProviderSelection.razor b/app/MindWork AI Studio/Components/ProviderSelection.razor index aebe6e5c..3ac64b96 100644 --- a/app/MindWork AI Studio/Components/ProviderSelection.razor +++ b/app/MindWork AI Studio/Components/ProviderSelection.razor @@ -1,7 +1,7 @@ @using AIStudio.Settings - @foreach (var provider in this.SettingsManager.ConfigurationData.Providers) + @foreach (var provider in this.GetAvailableProviders()) { } diff --git a/app/MindWork AI Studio/Components/ProviderSelection.razor.cs b/app/MindWork AI Studio/Components/ProviderSelection.razor.cs index ad2249fe..82ff2e73 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.Provider; using AIStudio.Settings; using Microsoft.AspNetCore.Components; @@ -16,11 +17,27 @@ public partial class ProviderSelection : ComponentBase public Func ValidateProvider { get; set; } = _ => null; [Inject] - protected SettingsManager SettingsManager { get; set; } = null!; + private SettingsManager SettingsManager { get; init; } = null!; private async Task SelectionChanged(Settings.Provider provider) { this.ProviderSettings = provider; await this.ProviderSettingsChanged.InvokeAsync(provider); } + + 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) + 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 faeda70a..50f40da0 100644 --- a/app/MindWork AI Studio/Pages/Settings.razor +++ b/app/MindWork AI Studio/Pages/Settings.razor @@ -80,6 +80,12 @@ Either you choose a common schema, or you configure the trust levels for each LLM provider yourself. + + @if(this.SettingsManager.ConfigurationData.LLMProviders.EnforceGlobalMinimumConfidence) + { + + } + @if (this.SettingsManager.ConfigurationData.LLMProviders.ShowProviderConfidence) { diff --git a/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs b/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs index c48ea6df..44b17afc 100644 --- a/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs +++ b/app/MindWork AI Studio/Settings/ConfigurationSelectData.cs @@ -4,6 +4,7 @@ using AIStudio.Assistants.IconFinder; using AIStudio.Assistants.RewriteImprove; using AIStudio.Assistants.TextSummarizer; using AIStudio.Assistants.EMail; +using AIStudio.Provider; using AIStudio.Settings.DataModel; using WritingStylesRewrite = AIStudio.Assistants.RewriteImprove.WritingStyles; @@ -142,4 +143,24 @@ public static class ConfigurationSelectDataFactory foreach (var scheme in Enum.GetValues()) yield return new(scheme.GetListDescription(), scheme); } + + public static IEnumerable> GetConfidenceLevelsData() + { + foreach (var level in Enum.GetValues()) + { + switch (level) + { + 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; + } + } + } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/DataModel/DataLLMProviders.cs b/app/MindWork AI Studio/Settings/DataModel/DataLLMProviders.cs index c7c9b66b..a716476a 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataLLMProviders.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataLLMProviders.cs @@ -4,6 +4,16 @@ namespace AIStudio.Settings.DataModel; public sealed class DataLLMProviders { + /// + /// Should we enforce a global minimum confidence level? + /// + public bool EnforceGlobalMinimumConfidence { get; set; } + + /// + /// The global minimum confidence level to enforce. + /// + public ConfidenceLevel GlobalMinimumConfidence { get; set; } = ConfidenceLevel.NONE; + /// /// Should we show the provider confidence level? /// diff --git a/app/MindWork AI Studio/Settings/SettingsManager.cs b/app/MindWork AI Studio/Settings/SettingsManager.cs index a568aff1..485d5502 100644 --- a/app/MindWork AI Studio/Settings/SettingsManager.cs +++ b/app/MindWork AI Studio/Settings/SettingsManager.cs @@ -114,7 +114,9 @@ public sealed class SettingsManager(ILogger logger) public Provider GetPreselectedProvider(Tools.Components component) { - if(this.ConfigurationData.Providers.Count == 1) + var minimumLevel = this.ConfigurationData.LLMProviders.EnforceGlobalMinimumConfidence ? this.ConfigurationData.LLMProviders.GlobalMinimumConfidence : ConfidenceLevel.NONE; + + if (this.ConfigurationData.Providers.Count == 1 && this.ConfigurationData.Providers[0].UsedLLMProvider.GetConfidence(this).Level >= minimumLevel) return this.ConfigurationData.Providers[0]; var preselection = component switch @@ -135,10 +137,10 @@ public sealed class SettingsManager(ILogger logger) _ => default, }; - if (preselection != default) + if(preselection != default && preselection.UsedLLMProvider.GetConfidence(this).Level >= minimumLevel) return preselection; - return this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.App.PreselectedProvider); + return this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.App.PreselectedProvider && x.UsedLLMProvider.GetConfidence(this).Level >= minimumLevel); } public Profile GetPreselectedProfile(Tools.Components component) 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 4c8c68a1..b9dd0a21 100644 --- a/app/MindWork AI Studio/wwwroot/changelog/v0.9.11.md +++ b/app/MindWork AI Studio/wwwroot/changelog/v0.9.11.md @@ -1,3 +1,4 @@ # 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. - Renamed the `Providers` enum to `LLMProviders` for better clarity. Renamed also all dependent variables and methods. \ No newline at end of file