diff --git a/.env.example b/.env.example index 7306f3617..5baa3d4ac 100644 --- a/.env.example +++ b/.env.example @@ -70,6 +70,11 @@ LMSTUDIO_API_BASE_URL= # You only need this environment variable set if you want to use xAI models XAI_API_KEY= +# Get your Perplexity API Key here - +# https://www.perplexity.ai/settings/api +# You only need this environment variable set if you want to use Perplexity models +PERPLEXITY_API_KEY= + # Include this environment variable if you want more logging for debugging locally VITE_LOG_LEVEL=debug diff --git a/app/commit.json b/app/commit.json index beebd2bb2..ff64112c7 100644 --- a/app/commit.json +++ b/app/commit.json @@ -1 +1 @@ -{ "commit": "55094392cf4c5bc607aff796680ad50236a4cf20" } +{ "commit": "9666b2ab67d25345542722ab9d870b36ad06252e" } diff --git a/app/lib/.server/llm/api-key.ts b/app/lib/.server/llm/api-key.ts index 30cf2cd8e..e82d08eb8 100644 --- a/app/lib/.server/llm/api-key.ts +++ b/app/lib/.server/llm/api-key.ts @@ -39,6 +39,8 @@ export function getAPIKey(cloudflareEnv: Env, provider: string, userApiKeys?: Re return env.TOGETHER_API_KEY || cloudflareEnv.TOGETHER_API_KEY; case 'xAI': return env.XAI_API_KEY || cloudflareEnv.XAI_API_KEY; + case 'Perplexity': + return env.PERPLEXITY_API_KEY || cloudflareEnv.PERPLEXITY_API_KEY; case 'Cohere': return env.COHERE_API_KEY; case 'AzureOpenAI': diff --git a/app/lib/.server/llm/model.ts b/app/lib/.server/llm/model.ts index 2588c2be9..1a5aab7eb 100644 --- a/app/lib/.server/llm/model.ts +++ b/app/lib/.server/llm/model.ts @@ -128,6 +128,15 @@ export function getXAIModel(apiKey: OptionalApiKey, model: string) { return openai(model); } +export function getPerplexityModel(apiKey: OptionalApiKey, model: string) { + const perplexity = createOpenAI({ + baseURL: 'https://api.perplexity.ai/', + apiKey, + }); + + return perplexity(model); +} + export function getModel( provider: string, model: string, @@ -170,6 +179,8 @@ export function getModel( return getXAIModel(apiKey, model); case 'Cohere': return getCohereAIModel(apiKey, model); + case 'Perplexity': + return getPerplexityModel(apiKey, model); default: return getOllamaModel(baseURL, model); } diff --git a/app/utils/constants.ts b/app/utils/constants.ts index 3247fb293..f312c739a 100644 --- a/app/utils/constants.ts +++ b/app/utils/constants.ts @@ -292,6 +292,30 @@ const PROVIDER_LIST: ProviderInfo[] = [ ], getApiKeyLink: 'https://api.together.xyz/settings/api-keys', }, + { + name: 'Perplexity', + staticModels: [ + { + name: 'llama-3.1-sonar-small-128k-online', + label: 'Sonar Small Online', + provider: 'Perplexity', + maxTokenAllowed: 8192, + }, + { + name: 'llama-3.1-sonar-large-128k-online', + label: 'Sonar Large Online', + provider: 'Perplexity', + maxTokenAllowed: 8192, + }, + { + name: 'llama-3.1-sonar-huge-128k-online', + label: 'Sonar Huge Online', + provider: 'Perplexity', + maxTokenAllowed: 8192, + }, + ], + getApiKeyLink: 'https://www.perplexity.ai/settings/api', + }, ]; export const DEFAULT_PROVIDER = PROVIDER_LIST[0]; diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts index 4eaf21072..ed2afcac3 100644 --- a/worker-configuration.d.ts +++ b/worker-configuration.d.ts @@ -14,4 +14,5 @@ interface Env { GOOGLE_GENERATIVE_AI_API_KEY: string; MISTRAL_API_KEY: string; XAI_API_KEY: string; + PERPLEXITY_API_KEY: string; }