From 5194d402c088d5aea5a176c6ae5726be1ff347b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peer=20Sch=C3=BCtt?= <20603780+peerschuett@users.noreply.github.com> Date: Thu, 11 Jun 2026 16:26:24 +0200 Subject: [PATCH] Made the ToolCallingAvailability class to check if model supports tool calling --- .../ToolCallingAvailability.cs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 app/MindWork AI Studio/Tools/ToolCallingSystem/ToolCallingAvailability.cs diff --git a/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolCallingAvailability.cs b/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolCallingAvailability.cs new file mode 100644 index 00000000..bb20c7ae --- /dev/null +++ b/app/MindWork AI Studio/Tools/ToolCallingSystem/ToolCallingAvailability.cs @@ -0,0 +1,32 @@ +using AIStudio.Provider; +using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; + +namespace AIStudio.Tools.ToolCallingSystem; + +public readonly record struct ToolCallingAvailability(bool IsAvailable, string Message) +{ + public static ToolCallingAvailability Available() => new(true, string.Empty); +} + +public static class ToolCallingAvailabilityExtensions +{ + public static ToolCallingAvailability GetToolCallingAvailability(this AIStudio.Settings.Provider provider) + { + if (provider == AIStudio.Settings.Provider.NONE || provider.UsedLLMProvider is LLMProviders.NONE) + return new(false, I18N.I.T("The selected model does not support tool calling.", typeof(ToolCallingAvailabilityExtensions).Namespace, nameof(ToolCallingAvailabilityExtensions))); + + if (provider.UsedLLMProvider is LLMProviders.ANTHROPIC) + return new(false, I18N.I.T("Tool calling for this provider is not implemented yet.", typeof(ToolCallingAvailabilityExtensions).Namespace, nameof(ToolCallingAvailabilityExtensions))); + + var modelCapabilities = provider.GetModelCapabilities(); + var supportsRequiredApis = + modelCapabilities.Contains(Capability.CHAT_COMPLETION_API) || + modelCapabilities.Contains(Capability.RESPONSES_API); + + if (!supportsRequiredApis || !modelCapabilities.Contains(Capability.FUNCTION_CALLING)) + return new(false, I18N.I.T("The selected model does not support tool calling.", typeof(ToolCallingAvailabilityExtensions).Namespace, nameof(ToolCallingAvailabilityExtensions))); + + return ToolCallingAvailability.Available(); + } +}