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.