diff --git a/app/MindWork AI Studio/Provider/BaseProvider.cs b/app/MindWork AI Studio/Provider/BaseProvider.cs index de8091a6..7b44eb9c 100644 --- a/app/MindWork AI Studio/Provider/BaseProvider.cs +++ b/app/MindWork AI Studio/Provider/BaseProvider.cs @@ -713,6 +713,7 @@ public abstract class BaseProvider : IProvider, ISecretId toolCall.Function.Name, toolCall.Function.Arguments, runnableTools, + this.Provider.GetConfidence(settingsManager).Level, toolCallCount, token); diff --git a/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolExecutionModels.cs b/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolExecutionModels.cs index 05f718c0..2472ec61 100644 --- a/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolExecutionModels.cs +++ b/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolExecutionModels.cs @@ -13,6 +13,8 @@ public sealed class ToolExecutionContext public required SettingsManager SettingsManager { get; init; } public required IReadOnlyDictionary SettingsValues { get; init; } + + public ConfidenceLevel ProviderConfidence { get; init; } = ConfidenceLevel.UNKNOWN; } public sealed class ToolExecutionResult @@ -30,6 +32,8 @@ public sealed class ToolExecutionResult } } +public sealed class ToolExecutionBlockedException(string message) : Exception(message); + public enum ToolInvocationTraceStatus { NONE = 0, diff --git a/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolExecutor.cs b/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolExecutor.cs index 4c8dd2f0..1fe9e403 100644 --- a/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolExecutor.cs +++ b/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolExecutor.cs @@ -1,5 +1,7 @@ using System.Text.Json; +using AIStudio.Provider; + using Microsoft.Extensions.DependencyInjection; namespace AIStudio.Tools.ToolCallingSystem; @@ -11,6 +13,7 @@ public sealed class ToolExecutor(ToolSettingsService toolSettingsService) string toolName, string argumentsJson, IReadOnlyList<(ToolDefinition Definition, IToolImplementation Implementation)> runnableTools, + ConfidenceLevel providerConfidence, int order, CancellationToken token = default) { @@ -40,6 +43,7 @@ public sealed class ToolExecutor(ToolSettingsService toolSettingsService) Definition = definition, SettingsManager = Program.SERVICE_PROVIDER.GetRequiredService(), SettingsValues = settingsValues, + ProviderConfidence = providerConfidence, }, token); return (result.ToModelContent(), new ToolInvocationTrace @@ -55,6 +59,31 @@ public sealed class ToolExecutor(ToolSettingsService toolSettingsService) Result = implementation.FormatTraceResult(result.ToModelContent()), }); } + catch (ToolExecutionBlockedException exception) + { + Dictionary formattedArguments = []; + try + { + using var document = JsonDocument.Parse(string.IsNullOrWhiteSpace(argumentsJson) ? "{}" : argumentsJson); + formattedArguments = FormatArguments(document.RootElement, implementation.SensitiveTraceArgumentNames); + } + catch + { + } + + return (exception.Message, new ToolInvocationTrace + { + Order = order, + ToolId = definition.Id, + ToolName = implementation.GetDisplayName(), + ToolIcon = implementation.Icon, + ToolCallId = toolCallId, + Status = ToolInvocationTraceStatus.BLOCKED, + StatusMessage = exception.Message, + Arguments = formattedArguments, + Result = exception.Message, + }); + } catch (Exception exception) { var error = $"Tool execution failed: {exception.Message}";