From 5574616160718e8280695f2d23546ba979a229af Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sat, 30 Aug 2025 11:26:56 +0200 Subject: [PATCH] Added known Perplexity models --- .../Dialogs/ProviderDialog.razor.cs | 6 +-- .../Provider/LLMProvidersExtensions.cs | 2 - .../Provider/Perplexity/ProviderPerplexity.cs | 40 ++++++------------- 3 files changed, 15 insertions(+), 33 deletions(-) diff --git a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs index e1a7bbc0..62008d86 100644 --- a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs @@ -126,13 +126,13 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId Id = this.DataId, InstanceName = this.DataInstanceName, UsedLLMProvider = this.DataLLMProvider, + Model = this.DataLLMProvider switch { - LLMProviders.FIREWORKS => new Model(this.dataManuallyModel, null), - LLMProviders.HUGGINGFACE => new Model(this.dataManuallyModel, null), - LLMProviders.PERPLEXITY => new Model(this.dataManuallyModel, null), + LLMProviders.FIREWORKS or LLMProviders.HUGGINGFACE => new Model(this.dataManuallyModel, null), _ => this.DataModel }, + IsSelfHosted = this.DataLLMProvider is LLMProviders.SELF_HOSTED, IsEnterpriseConfiguration = false, Hostname = cleanedHostname.EndsWith('/') ? cleanedHostname[..^1] : cleanedHostname, diff --git a/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs b/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs index e0932aa9..ad9a8f2f 100644 --- a/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs +++ b/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs @@ -250,7 +250,6 @@ public static class LLMProvidersExtensions { LLMProviders.FIREWORKS => "https://fireworks.ai/models?show=Serverless", LLMProviders.HUGGINGFACE => $"https://huggingface.co/models?inference_provider={inferenceProvider.EndpointsId()}", - LLMProviders.PERPLEXITY => "https://docs.perplexity.ai/api-reference/chat-completions-post#body-model", _ => string.Empty, }; @@ -258,7 +257,6 @@ public static class LLMProvidersExtensions { LLMProviders.FIREWORKS => true, LLMProviders.HUGGINGFACE => true, - LLMProviders.PERPLEXITY => true, _ => false, }; diff --git a/app/MindWork AI Studio/Provider/Perplexity/ProviderPerplexity.cs b/app/MindWork AI Studio/Provider/Perplexity/ProviderPerplexity.cs index abda0aa1..e578b7f0 100644 --- a/app/MindWork AI Studio/Provider/Perplexity/ProviderPerplexity.cs +++ b/app/MindWork AI Studio/Provider/Perplexity/ProviderPerplexity.cs @@ -11,6 +11,15 @@ namespace AIStudio.Provider.Perplexity; public sealed class ProviderPerplexity(ILogger logger) : BaseProvider("https://api.perplexity.ai/", logger) { + private static readonly Model[] KNOWN_MODELS = + [ + new("sonar", "Sonar"), + new("sonar-pro", "Sonar Pro"), + new("sonar-reasoning", "Sonar Reasoning"), + new("sonar-reasoning-pro", "Sonar Reasoning Pro"), + new("sonar-deep-research", "Sonar Deep Research"), + ]; + #region Implementation of IProvider /// @@ -91,7 +100,7 @@ public sealed class ProviderPerplexity(ILogger logger) : BaseProvider("https://a /// public override Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { - return this.LoadModels(token, apiKeyProvisional); + return this.LoadModels(); } /// @@ -132,33 +141,8 @@ public sealed class ProviderPerplexity(ILogger logger) : BaseProvider("https://a Capability.IMAGE_OUTPUT, ]; } - - + #endregion - private async Task> LoadModels(CancellationToken token, string? apiKeyProvisional = null) - { - var secretKey = apiKeyProvisional switch - { - not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch - { - { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), - _ => null, - } - }; - - if (secretKey is null) - return []; - - using var request = new HttpRequestMessage(HttpMethod.Get, "models"); - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secretKey); - - using var response = await this.httpClient.SendAsync(request, token); - if(!response.IsSuccessStatusCode) - return []; - - var modelResponse = await response.Content.ReadFromJsonAsync(token); - return modelResponse.Data; - } + private Task> LoadModels() => Task.FromResult>(KNOWN_MODELS); } \ No newline at end of file