diff --git a/app/MindWork AI Studio/Plugins/configuration/plugin.lua b/app/MindWork AI Studio/Plugins/configuration/plugin.lua index 03a9b0f4..ffe1a019 100644 --- a/app/MindWork AI Studio/Plugins/configuration/plugin.lua +++ b/app/MindWork AI Studio/Plugins/configuration/plugin.lua @@ -212,6 +212,16 @@ CONFIG["SETTINGS"] = {} -- Examples are: "CmdOrControl+Shift+D", "Alt+F9", "F8" -- CONFIG["SETTINGS"]["DataApp.ShortcutVoiceRecording"] = "CmdOrControl+1" +-- Configure the minimum provider confidence level required for individual tools. +-- Tool IDs include: web_search, read_web_page, get_current_weather +-- Allowed values are: NONE, UNTRUSTED, VERY_LOW, LOW, MODERATE, MEDIUM, HIGH +-- Defaults: web_search = MEDIUM, read_web_page = MEDIUM, get_current_weather = NONE +-- CONFIG["SETTINGS"]["DataTools.MinimumProviderConfidenceByToolId"] = { +-- ["web_search"] = "MEDIUM", +-- ["read_web_page"] = "MEDIUM", +-- ["get_current_weather"] = "NONE" +-- } + -- Example chat templates for this configuration: CONFIG["CHAT_TEMPLATES"] = {} diff --git a/app/MindWork AI Studio/Settings/DataModel/Data.cs b/app/MindWork AI Studio/Settings/DataModel/Data.cs index 6affb20a..7dd8ce80 100644 --- a/app/MindWork AI Studio/Settings/DataModel/Data.cs +++ b/app/MindWork AI Studio/Settings/DataModel/Data.cs @@ -137,5 +137,5 @@ public sealed class Data public DataI18N I18N { get; init; } = new(); - public DataTools Tools { get; init; } = new(); -} \ No newline at end of file + public DataTools Tools { get; init; } = new(x => x.Tools); +} diff --git a/app/MindWork AI Studio/Settings/DataModel/DataTools.cs b/app/MindWork AI Studio/Settings/DataModel/DataTools.cs index 773ada7e..1ace1059 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataTools.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataTools.cs @@ -1,10 +1,23 @@ +using System.Linq.Expressions; + +using AIStudio.Settings; + namespace AIStudio.Settings.DataModel; -public sealed class DataTools +public sealed class DataTools(Expression>? configSelection = null) { + public DataTools() : this(null) + { + } + public Dictionary> Settings { get; set; } = []; public Dictionary> DefaultToolIdsByComponent { get; set; } = []; public HashSet VisibleToolSelectionComponents { get; set; } = []; + + public Dictionary MinimumProviderConfidenceByToolId { get; set; } = ManagedConfiguration.Register>( + configSelection, + x => x.MinimumProviderConfidenceByToolId, + new Dictionary(StringComparer.Ordinal)); } diff --git a/app/MindWork AI Studio/Settings/SettingsManager.cs b/app/MindWork AI Studio/Settings/SettingsManager.cs index 25678efe..f162d9c9 100644 --- a/app/MindWork AI Studio/Settings/SettingsManager.cs +++ b/app/MindWork AI Studio/Settings/SettingsManager.cs @@ -373,6 +373,30 @@ public sealed class SettingsManager this.ConfigurationData.Tools.VisibleToolSelectionComponents.Remove(key); } + public ConfidenceLevel GetMinimumProviderConfidenceForTool(string toolId) + { + if (this.ConfigurationData.Tools.MinimumProviderConfidenceByToolId.TryGetValue(toolId, out var configuredLevel) && + Enum.TryParse(configuredLevel, true, out var confidenceLevel) && + confidenceLevel is not ConfidenceLevel.UNKNOWN) + { + return confidenceLevel; + } + + return ToolSelectionRules.GetDefaultMinimumProviderConfidence(toolId); + } + + public void SetMinimumProviderConfidenceForTool(string toolId, ConfidenceLevel confidenceLevel) + { + var defaultLevel = ToolSelectionRules.GetDefaultMinimumProviderConfidence(toolId); + if (confidenceLevel == defaultLevel) + { + this.ConfigurationData.Tools.MinimumProviderConfidenceByToolId.Remove(toolId); + return; + } + + this.ConfigurationData.Tools.MinimumProviderConfidenceByToolId[toolId] = confidenceLevel.ToString(); + } + public ConfidenceLevel GetConfiguredConfidenceLevel(LLMProviders llmProvider) { if(llmProvider is LLMProviders.NONE) diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs index 99031624..8d409c31 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs @@ -132,6 +132,9 @@ public sealed class PluginConfiguration(bool isInternal, LuaState state, PluginT // Config: global voice recording shortcut ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.ShortcutVoiceRecording, this.Id, settingsTable, dryRun); + + // Config: minimum provider confidence per tool + ManagedConfiguration.TryProcessConfiguration(x => x.Tools, x => x.MinimumProviderConfidenceByToolId, this.Id, settingsTable, dryRun); // Handle configured LLM providers: PluginConfigurationObject.TryParse(PluginConfigurationObjectType.LLM_PROVIDER, x => x.Providers, x => x.NextProviderNum, mainTable, this.Id, ref this.configObjects, dryRun); diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs index f110e766..e4f290b9 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs @@ -237,6 +237,10 @@ public static partial class PluginFactory // Check for the voice recording shortcut: if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.ShortcutVoiceRecording, AVAILABLE_PLUGINS)) wasConfigurationChanged = true; + + // Check for minimum provider confidence per tool: + if(ManagedConfiguration.IsConfigurationLeftOver(x => x.Tools, x => x.MinimumProviderConfidenceByToolId, AVAILABLE_PLUGINS)) + wasConfigurationChanged = true; if (wasConfigurationChanged) {