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