Improve model selection by refining filters for non-text outputting models

This commit is contained in:
Thorsten Sommer 2025-04-24 12:44:48 +02:00
parent bafd62429d
commit 1b22b439a7
Signed by: tsommer
GPG Key ID: 371BBA77A02C0108
6 changed files with 19 additions and 10 deletions

View File

@ -98,7 +98,7 @@ public class ProviderGoogle(ILogger logger) : BaseProvider("https://generativela
return []; return [];
return modelResponse.Models.Where(model => return modelResponse.Models.Where(model =>
model.Name.StartsWith("models/gemini-", StringComparison.InvariantCultureIgnoreCase)) model.Name.StartsWith("models/gemini-", StringComparison.OrdinalIgnoreCase))
.Select(n => new Provider.Model(n.Name.Replace("models/", string.Empty), n.DisplayName)); .Select(n => new Provider.Model(n.Name.Replace("models/", string.Empty), n.DisplayName));
} }

View File

@ -136,7 +136,8 @@ public class ProviderGroq(ILogger logger) : BaseProvider("https://api.groq.com/o
var modelResponse = await response.Content.ReadFromJsonAsync<ModelsResponse>(token); var modelResponse = await response.Content.ReadFromJsonAsync<ModelsResponse>(token);
return modelResponse.Data.Where(n => return modelResponse.Data.Where(n =>
!n.Id.StartsWith("whisper-", StringComparison.InvariantCultureIgnoreCase) && !n.Id.StartsWith("whisper-", StringComparison.OrdinalIgnoreCase) &&
!n.Id.StartsWith("distil-", StringComparison.InvariantCultureIgnoreCase)); !n.Id.StartsWith("distil-", StringComparison.OrdinalIgnoreCase) &&
!n.Id.Contains("-tts", StringComparison.OrdinalIgnoreCase));
} }
} }

View File

@ -99,8 +99,9 @@ public sealed class ProviderMistral(ILogger logger) : BaseProvider("https://api.
return []; return [];
return modelResponse.Data.Where(n => return modelResponse.Data.Where(n =>
!n.Id.StartsWith("code", StringComparison.InvariantCulture) && !n.Id.StartsWith("code", StringComparison.OrdinalIgnoreCase) &&
!n.Id.Contains("embed", StringComparison.InvariantCulture)) !n.Id.Contains("embed", StringComparison.OrdinalIgnoreCase) &&
!n.Id.Contains("moderation", StringComparison.OrdinalIgnoreCase))
.Select(n => new Provider.Model(n.Id, null)); .Select(n => new Provider.Model(n.Id, null));
} }

View File

@ -120,15 +120,20 @@ public sealed class ProviderOpenAI(ILogger logger) : BaseProvider("https://api.o
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
/// <inheritdoc /> /// <inheritdoc />
public override Task<IEnumerable<Model>> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) public override async Task<IEnumerable<Model>> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default)
{ {
return this.LoadModels(["gpt-", "o1-", "o3-", "o4-"], token, apiKeyProvisional); var models = await this.LoadModels(["gpt-", "o1-", "o3-", "o4-"], token, apiKeyProvisional);
return models.Where(model => !model.Id.Contains("image", StringComparison.OrdinalIgnoreCase) &&
!model.Id.Contains("realtime", StringComparison.OrdinalIgnoreCase) &&
!model.Id.Contains("audio", StringComparison.OrdinalIgnoreCase) &&
!model.Id.Contains("tts", StringComparison.OrdinalIgnoreCase) &&
!model.Id.Contains("transcribe", StringComparison.OrdinalIgnoreCase));
} }
/// <inheritdoc /> /// <inheritdoc />
public override Task<IEnumerable<Model>> GetImageModels(string? apiKeyProvisional = null, CancellationToken token = default) public override Task<IEnumerable<Model>> GetImageModels(string? apiKeyProvisional = null, CancellationToken token = default)
{ {
return this.LoadModels(["dall-e-"], token, apiKeyProvisional); return this.LoadModels(["dall-e-", "gpt-image"], token, apiKeyProvisional);
} }
/// <inheritdoc /> /// <inheritdoc />

View File

@ -93,9 +93,10 @@ public sealed class ProviderX(ILogger logger) : BaseProvider("https://api.x.ai/v
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
/// <inheritdoc /> /// <inheritdoc />
public override Task<IEnumerable<Model>> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) public override async Task<IEnumerable<Model>> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default)
{ {
return this.LoadModels(["grok-"], token, apiKeyProvisional); var models = await this.LoadModels(["grok-"], token, apiKeyProvisional);
return models.Where(n => !n.Id.Contains("-image", StringComparison.OrdinalIgnoreCase));
} }
/// <inheritdoc /> /// <inheritdoc />

View File

@ -4,4 +4,5 @@
- Improved the hot reloading of the plugin system to prevent overlapping reloads. - Improved the hot reloading of the plugin system to prevent overlapping reloads.
- Improved the app behavior when the user system was waked up from sleep mode. - Improved the app behavior when the user system was waked up from sleep mode.
- Improved the provider dialog with better input handling for API keys and an optimized model selection. - Improved the provider dialog with better input handling for API keys and an optimized model selection.
- Improved provider's model selection by filtering added non-text outputting models, which are not supported yet.
- Fixed the color for the update notification button to match the color theme. - Fixed the color for the update notification button to match the color theme.