From 7dc927bf3bb40150252950a5a37fa239214b412e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Peer=20Sch=C3=BCtt?=
<20603780+peerschuett@users.noreply.github.com>
Date: Fri, 3 Jul 2026 09:37:16 +0200
Subject: [PATCH] Added the icons for the capabilities to the provider dropdown
menu
---
.../Assistants/I18N/allTexts.lua | 12 +++++++++
.../Components/ProviderSelection.razor | 22 ++++++++++++++--
.../Components/ProviderSelection.razor.cs | 25 ++++++++++++++++++-
.../plugin.lua | 12 +++++++++
.../plugin.lua | 12 +++++++++
.../Settings/ProviderExtensions.OpenSource.cs | 20 +++++++++++++--
.../wwwroot/changelog/v26.6.3.md | 3 ++-
7 files changed, 100 insertions(+), 6 deletions(-)
diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
index bd5d8535..6df739f1 100644
--- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
+++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
@@ -2413,6 +2413,18 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROFILESELECTION::T3654011106"] = "Open P
-- You can switch between your profiles here
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROFILESELECTION::T918741365"] = "You can switch between your profiles here"
+-- Audio input possible
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T1742581112"] = "Audio input possible"
+
+-- Reasoning
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T2385384423"] = "Reasoning"
+
+-- Image input possible
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T2685487365"] = "Image input possible"
+
+-- Speech input possible
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T3005724142"] = "Speech input possible"
+
-- Provider
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Provider"
diff --git a/app/MindWork AI Studio/Components/ProviderSelection.razor b/app/MindWork AI Studio/Components/ProviderSelection.razor
index 793f87c7..b5fd13d6 100644
--- a/app/MindWork AI Studio/Components/ProviderSelection.razor
+++ b/app/MindWork AI Studio/Components/ProviderSelection.razor
@@ -3,6 +3,24 @@
@foreach (var provider in this.GetAvailableProviders())
{
-
+
+
+ @provider
+ @{
+ var capabilityIcons = this.GetCapabilityIcons(provider);
+ }
+ @if (capabilityIcons.Count > 0)
+ {
+
+ @foreach (var capabilityIcon in capabilityIcons)
+ {
+
+
+
+ }
+
+ }
+
+
}
-
\ No newline at end of file
+
diff --git a/app/MindWork AI Studio/Components/ProviderSelection.razor.cs b/app/MindWork AI Studio/Components/ProviderSelection.razor.cs
index 74bd75c9..20246ba4 100644
--- a/app/MindWork AI Studio/Components/ProviderSelection.razor.cs
+++ b/app/MindWork AI Studio/Components/ProviderSelection.razor.cs
@@ -1,6 +1,7 @@
using System.Diagnostics.CodeAnalysis;
using AIStudio.Provider;
+using AIStudio.Settings;
using Microsoft.AspNetCore.Components;
@@ -41,6 +42,26 @@ public partial class ProviderSelection : MSGComponentBase
this.ProviderSettings = provider;
await this.ProviderSettingsChanged.InvokeAsync(provider);
}
+
+ private IReadOnlyList GetCapabilityIcons(AIStudio.Settings.Provider provider)
+ {
+ var capabilities = provider.GetModelCapabilities();
+ List capabilityIcons = [];
+
+ if (capabilities.Contains(Capability.AUDIO_INPUT))
+ capabilityIcons.Add(new(Icons.Material.Filled.GraphicEq, this.T("Audio input possible")));
+
+ if (capabilities.Contains(Capability.SINGLE_IMAGE_INPUT) || capabilities.Contains(Capability.MULTIPLE_IMAGE_INPUT))
+ capabilityIcons.Add(new(Icons.Material.Filled.Image, this.T("Image input possible")));
+
+ if (capabilities.Contains(Capability.SPEECH_INPUT))
+ capabilityIcons.Add(new(Icons.Material.Filled.Mic, this.T("Speech input possible")));
+
+ if (capabilities.Contains(Capability.ALWAYS_REASONING))
+ capabilityIcons.Add(new(Icons.Material.Filled.Psychology, this.T("Reasoning")));
+
+ return capabilityIcons;
+ }
[SuppressMessage("Usage", "MWAIS0001:Direct access to `Providers` is not allowed")]
private IEnumerable GetAvailableProviders()
@@ -84,4 +105,6 @@ public partial class ProviderSelection : MSGComponentBase
}
#endregion
-}
\ No newline at end of file
+
+ private readonly record struct CapabilityIcon(string Icon, string Tooltip);
+}
diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
index eecc3ce3..618154f2 100644
--- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
@@ -2415,6 +2415,18 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROFILESELECTION::T3654011106"] = "Profil
-- You can switch between your profiles here
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROFILESELECTION::T918741365"] = "Hier können Sie zwischen ihren Profilen wechseln."
+-- Audio input possible
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T1742581112"] = "Audioeingabe möglich"
+
+-- Reasoning
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T2385384423"] = "Nachdenkend"
+
+-- Image input possible
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T2685487365"] = "Bildeingabe möglich"
+
+-- Speech input possible
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T3005724142"] = "Spracheingabe möglich"
+
-- Provider
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Anbieter"
diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
index c60b245a..1ef414dd 100644
--- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
@@ -2415,6 +2415,18 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROFILESELECTION::T3654011106"] = "Open P
-- You can switch between your profiles here
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROFILESELECTION::T918741365"] = "You can switch between your profiles here"
+-- Audio input possible
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T1742581112"] = "Audio input possible"
+
+-- Reasoning
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T2385384423"] = "Reasoning"
+
+-- Image input possible
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T2685487365"] = "Image input possible"
+
+-- Speech input possible
+UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T3005724142"] = "Speech input possible"
+
-- Provider
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Provider"
diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.OpenSource.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.OpenSource.cs
index 6c3480f7..287c2251 100644
--- a/app/MindWork AI Studio/Settings/ProviderExtensions.OpenSource.cs
+++ b/app/MindWork AI Studio/Settings/ProviderExtensions.OpenSource.cs
@@ -109,7 +109,7 @@ public static partial class ProviderExtensions
Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT,
Capability.TEXT_OUTPUT,
- Capability.ALWAYS_REASONING, Capability.FUNCTION_CALLING,
+ Capability.OPTIONAL_REASONING, Capability.FUNCTION_CALLING,
Capability.CHAT_COMPLETION_API,
];
@@ -121,7 +121,7 @@ public static partial class ProviderExtensions
Capability.MULTIPLE_IMAGE_INPUT,
Capability.TEXT_OUTPUT,
- Capability.ALWAYS_REASONING, Capability.FUNCTION_CALLING,
+ Capability.OPTIONAL_REASONING, Capability.FUNCTION_CALLING,
Capability.CHAT_COMPLETION_API,
];
@@ -158,6 +158,22 @@ public static partial class ProviderExtensions
Capability.CHAT_COMPLETION_API,
];
+
+ // Mistral medium 3.5:
+ if (modelName.IndexOf("mistral-medium-3.5") is not -1)
+ return
+ [
+ Capability.TEXT_INPUT,
+ Capability.MULTIPLE_IMAGE_INPUT,
+ Capability.TEXT_OUTPUT,
+
+ Capability.OPTIONAL_REASONING,
+
+ Capability.FUNCTION_CALLING,
+ Capability.CHAT_COMPLETION_API,
+ ];
+
+
if (modelName.IndexOf("mistral-3") is not -1 ||
modelName.IndexOf("mistral-large-3") is not -1)
return
diff --git a/app/MindWork AI Studio/wwwroot/changelog/v26.6.3.md b/app/MindWork AI Studio/wwwroot/changelog/v26.6.3.md
index 435b1554..3bd1108f 100644
--- a/app/MindWork AI Studio/wwwroot/changelog/v26.6.3.md
+++ b/app/MindWork AI Studio/wwwroot/changelog/v26.6.3.md
@@ -1,2 +1,3 @@
# v26.6.3, build 243 (2026-06-xx xx:xx UTC)
-- Improved the chat experience by automatically focusing the message composer again when it becomes available. Thanks, Dominic Neuburg (`donework`), for the contribution.
\ No newline at end of file
+- Improved the chat experience by automatically focusing the message composer again when it becomes available. Thanks, Dominic Neuburg (`donework`), for the contribution.
+- Improved the provider selection by showing small capability icons for supported audio, image, speech, and always_reasoning features of the selected model.