diff --git a/src/renderer/src/assets/images/models/perplexity.png b/src/renderer/src/assets/images/models/perplexity.png new file mode 100644 index 00000000..decbd09c Binary files /dev/null and b/src/renderer/src/assets/images/models/perplexity.png differ diff --git a/src/renderer/src/assets/images/providers/DMXAPI.png b/src/renderer/src/assets/images/providers/DMXAPI.png new file mode 100644 index 00000000..9760ddd5 Binary files /dev/null and b/src/renderer/src/assets/images/providers/DMXAPI.png differ diff --git a/src/renderer/src/assets/images/providers/cohere.png b/src/renderer/src/assets/images/providers/cohere.png new file mode 100644 index 00000000..e26f46d1 Binary files /dev/null and b/src/renderer/src/assets/images/providers/cohere.png differ diff --git a/src/renderer/src/assets/images/providers/infini-ai.png b/src/renderer/src/assets/images/providers/infini.png similarity index 100% rename from src/renderer/src/assets/images/providers/infini-ai.png rename to src/renderer/src/assets/images/providers/infini.png diff --git a/src/renderer/src/assets/images/providers/perplexity.png b/src/renderer/src/assets/images/providers/perplexity.png index 91f0b30f..decbd09c 100644 Binary files a/src/renderer/src/assets/images/providers/perplexity.png and b/src/renderer/src/assets/images/providers/perplexity.png differ diff --git a/src/renderer/src/assets/images/providers/perplexity.webp b/src/renderer/src/assets/images/providers/perplexity.webp new file mode 100644 index 00000000..96d27485 Binary files /dev/null and b/src/renderer/src/assets/images/providers/perplexity.webp differ diff --git a/src/renderer/src/config/embedings.ts b/src/renderer/src/config/embedings.ts index c1bb22dd..369fd962 100644 --- a/src/renderer/src/config/embedings.ts +++ b/src/renderer/src/config/embedings.ts @@ -226,6 +226,18 @@ export const EMBEDDING_MODELS = [ { id: 'text-embedding-004', max_context: 2048 + }, + { + id: 'deepset-mxbai-embed-de-large-v1', + max_context: 512 + }, + { + id: 'mxbai-embed-large-v1', + max_context: 512 + }, + { + id: 'mxbai-embed-2d-large-v1', + max_context: 512 } ] diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 1b71bb54..3bc3870c 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -99,6 +99,8 @@ import NvidiaModelLogo from '@renderer/assets/images/models/nvidia.png' import NvidiaModelLogoDark from '@renderer/assets/images/models/nvidia_dark.png' import PalmModelLogo from '@renderer/assets/images/models/palm.png' import PalmModelLogoDark from '@renderer/assets/images/models/palm_dark.png' +import PerplexityModelLogo from '@renderer/assets/images/models/perplexity.png' +import PerplexityModelLogoDark from '@renderer/assets/images/models/perplexity.png' import PixtralModelLogo from '@renderer/assets/images/models/pixtral.png' import PixtralModelLogoDark from '@renderer/assets/images/models/pixtral_dark.png' import QwenModelLogo from '@renderer/assets/images/models/qwen.png' @@ -184,6 +186,8 @@ export function getModelLogo(modelId: string) { 'babbage-': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'sora-': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'omni-': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, + 'Embedding-V1': isLight ? WenxinModelLogo : WenxinModelLogoDark, + 'text-embedding-v': isLight ? QwenModelLogo : QwenModelLogoDark, 'text-embedding': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'davinci-': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, glm: isLight ? ChatGLMModelLogo : ChatGLMModelLogoDark, @@ -265,6 +269,8 @@ export function getModelLogo(modelId: string) { 'google/': isLight ? GoogleModelLogo : GoogleModelLogoDark, hugging: isLight ? HuggingfaceModelLogo : HuggingfaceModelLogoDark, embedding: isLight ? EmbeddingModelLogo : EmbeddingModelLogoDark, + perplexity: isLight ? PerplexityModelLogo : PerplexityModelLogoDark, + sonar: isLight ? PerplexityModelLogo : PerplexityModelLogoDark, 'bge-': BgeModelLogo } @@ -658,6 +664,42 @@ export const SYSTEM_MODELS: Record = { } ], ocoolai: [ + { + id: 'deepseek-chat', + provider: 'ocoolai', + name: 'deepseek-chat', + group: 'DeepSeek' + }, + { + id: 'deepseek-reasoner', + provider: 'ocoolai', + name: 'deepseek-reasoner', + group: 'DeepSeek' + }, + { + id: 'deepseek-ai/DeepSeek-R1', + provider: 'ocoolai', + name: 'deepseek-ai/DeepSeek-R1', + group: 'DeepSeek' + }, + { + id: 'HiSpeed/DeepSeek-R1', + provider: 'ocoolai', + name: 'HiSpeed/DeepSeek-R1', + group: 'DeepSeek' + }, + { + id: 'ocoolAI/DeepSeek-R1', + provider: 'ocoolai', + name: 'ocoolAI/DeepSeek-R1', + group: 'DeepSeek' + }, + { + id: 'Azure/DeepSeek-R1', + provider: 'ocoolai', + name: 'Azure/DeepSeek-R1', + group: 'DeepSeek' + }, { id: 'gpt-4o', provider: 'ocoolai', @@ -670,12 +712,6 @@ export const SYSTEM_MODELS: Record = { name: 'gpt-4o-all', group: 'OpenAI' }, - { - id: 'gpt-4-all', - provider: 'ocoolai', - name: 'gpt-4-all', - group: 'OpenAI' - }, { id: 'gpt-4o-mini', provider: 'ocoolai', @@ -688,12 +724,6 @@ export const SYSTEM_MODELS: Record = { name: 'gpt-4', group: 'OpenAI' }, - { - id: 'gpt-4-turbo', - provider: 'ocoolai', - name: 'gpt-4-turbo', - group: 'OpenAI' - }, { id: 'o1-preview', provider: 'ocoolai', @@ -706,12 +736,6 @@ export const SYSTEM_MODELS: Record = { name: 'o1-mini', group: 'OpenAI' }, - { - id: 'gpt-3.5-turbo', - provider: 'ocoolai', - name: 'gpt-3.5-turbo', - group: 'OpenAI' - }, { id: 'claude-3-5-sonnet-20240620', provider: 'ocoolai', @@ -719,21 +743,9 @@ export const SYSTEM_MODELS: Record = { group: 'Anthropic' }, { - id: 'claude-3-opus-20240229', + id: 'claude-3-5-haiku-20241022', provider: 'ocoolai', - name: 'claude-3-opus-20240229', - group: 'Anthropic' - }, - { - id: 'claude-3-sonnet-20240229', - provider: 'ocoolai', - name: 'claude-3-sonnet-20240229', - group: 'Anthropic' - }, - { - id: 'claude-3-haiku-20240307', - provider: 'ocoolai', - name: 'claude-3-haiku-20240307', + name: 'claude-3-5-haiku-20241022', group: 'Anthropic' }, { @@ -777,6 +789,30 @@ export const SYSTEM_MODELS: Record = { provider: 'ocoolai', name: 'gemma-2-9b-it', group: 'Gemma' + }, + { + id: 'Doubao-embedding', + provider: 'ocoolai', + name: 'Doubao-embedding', + group: 'Doubao' + }, + { + id: 'text-embedding-3-large', + provider: 'ocoolai', + name: 'text-embedding-3-large', + group: 'Embedding' + }, + { + id: 'text-embedding-3-small', + provider: 'ocoolai', + name: 'text-embedding-3-small', + group: 'Embedding' + }, + { + id: 'text-embedding-v2', + provider: 'ocoolai', + name: 'text-embedding-v2', + group: 'Embedding' } ], github: [ @@ -1253,6 +1289,78 @@ export const SYSTEM_MODELS: Record = { name: 'BGE Large EN', group: 'Embedding' } + ], + dmxapi: [ + { + id: 'gpt-3.5-turbo', + provider: 'dmxapi', + name: 'GPT-3.5-Turbo', + group: 'OpenAI' + }, + { + id: 'gpt-4o', + provider: 'dmxapi', + name: 'GPT-4o', + group: 'OpenAI' + }, + { + id: 'gpt-4o-mini', + provider: 'dmxapi', + name: 'GPT-4o-Mini', + group: 'OpenAI' + }, + { + id: 'deepseek-reasoner', + provider: 'dmxapi', + name: 'DeepSeek Reasoner', + group: 'DeepSeek' + }, + { + id: 'deepseek-chat', + provider: 'dmxapi', + name: 'DeepSeek Chat', + group: 'DeepSeek' + } + ], + perplexity: [ + { + id: 'sonar-reasoning-pro', + provider: 'perplexity', + name: 'sonar-reasoning-pro', + group: 'Sonar' + }, + { + id: 'sonar-reasoning', + provider: 'perplexity', + name: 'sonar-reasoning', + group: 'Sonar' + }, + { + id: 'sonar-pro', + provider: 'perplexity', + name: 'sonar-pro', + group: 'Sonar' + }, + { + id: 'sonar', + provider: 'perplexity', + name: 'sonar', + group: 'Sonar' + } + ], + infini: [ + { + id: 'deepseek-r1', + provider: 'infini', + name: 'deepseek-r1', + group: 'Deepseek' + }, + { + id: 'deepseek-v3', + provider: 'infini', + name: 'deepseek-v3', + group: 'Deepseek' + } ] } diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index 951b5dbb..9fa59ae7 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -6,8 +6,8 @@ import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.p import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png' import BaiduCloudProviderLogo from '@renderer/assets/images/providers/baidu-cloud.svg' import BailianProviderLogo from '@renderer/assets/images/providers/bailian.png' -import BytedanceProviderLogo from '@renderer/assets/images/providers/bytedance.png' import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png' +import DmxapiProviderLogo from '@renderer/assets/images/providers/DMXAPI.png' import FireworksProviderLogo from '@renderer/assets/images/providers/fireworks.png' import GiteeAIProviderLogo from '@renderer/assets/images/providers/gitee-ai.png' import GithubProviderLogo from '@renderer/assets/images/providers/github.png' @@ -16,6 +16,7 @@ import GraphRagProviderLogo from '@renderer/assets/images/providers/graph-rag.pn import GrokProviderLogo from '@renderer/assets/images/providers/grok.png' import GroqProviderLogo from '@renderer/assets/images/providers/groq.png' import HyperbolicProviderLogo from '@renderer/assets/images/providers/hyperbolic.png' +import InfiniProviderLogo from '@renderer/assets/images/providers/infini.png' import JinaProviderLogo from '@renderer/assets/images/providers/jina.png' import MinimaxProviderLogo from '@renderer/assets/images/providers/minimax.png' import MistralProviderLogo from '@renderer/assets/images/providers/mistral.png' @@ -25,13 +26,14 @@ import OcoolAiProviderLogo from '@renderer/assets/images/providers/ocoolai.png' import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png' import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.png' import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png' +import PerplexityProviderLogo from '@renderer/assets/images/providers/perplexity.png' import PPIOProviderLogo from '@renderer/assets/images/providers/ppio.png' import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.png' import StepProviderLogo from '@renderer/assets/images/providers/step.png' import TogetherProviderLogo from '@renderer/assets/images/providers/together.png' +import BytedanceProviderLogo from '@renderer/assets/images/providers/volcengine.png' import ZeroOneProviderLogo from '@renderer/assets/images/providers/zero-one.png' import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png' - export function getProviderLogo(providerId: string) { switch (providerId) { case 'openai': @@ -100,6 +102,12 @@ export function getProviderLogo(providerId: string) { return PPIOProviderLogo case 'baidu-cloud': return BaiduCloudProviderLogo + case 'dmxapi': + return DmxapiProviderLogo + case 'perplexity': + return PerplexityProviderLogo + case 'infini': + return InfiniProviderLogo default: return undefined } @@ -181,8 +189,8 @@ export const PROVIDER_CONFIG = { websites: { official: 'https://one.ocoolai.com/', apiKey: 'https://one.ocoolai.com/token', - docs: 'https://docs.ooo.cool/', - models: 'https://docs.ooo.cool/guides/jiage/' + docs: 'https://docs.ocoolai.com/', + models: 'https://api.ocoolai.com/info/models/' } }, together: { @@ -196,6 +204,39 @@ export const PROVIDER_CONFIG = { models: 'https://docs.together.ai/docs/chat-models' } }, + dmxapi: { + api: { + url: 'https://api.dmxapi.com' + }, + websites: { + official: 'https://dmxapi.com/', + apiKey: 'https://www.dmxapi.com/token', + docs: 'https://dmxapi.com/models.html#code-block', + models: 'https://www.dmxapi.com/pricing' + } + }, + perplexity: { + api: { + url: 'https://api.perplexity.ai/' + }, + websites: { + official: 'https://perplexity.ai/', + apiKey: 'https://www.perplexity.ai/settings/api', + docs: 'https://docs.perplexity.ai/home', + models: 'https://docs.perplexity.ai/guides/model-cards' + } + }, + infini: { + api: { + url: 'https://cloud.infini-ai.com' + }, + websites: { + official: 'https://cloud.infini-ai.com/', + apiKey: 'https://cloud.infini-ai.com/iam/secret/key', + docs: 'https://docs.infini-ai.com/gen-studio/api/maas.html#/operations/chatCompletions', + models: 'https://cloud.infini-ai.com/genstudio/model' + } + }, github: { api: { url: 'https://models.inference.ai.azure.com/' diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 6380a0e0..24b723c6 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -466,6 +466,9 @@ "title": "You are an assistant who is good at conversation. You need to summarize the user's conversation into a title of 10 characters or less, ensuring it matches the user's primary language without using punctuation or other special symbols." }, "provider": { + "infini": "Infini", + "perplexity": "Perplexity", + "dmxapi": "DMXAPI", "aihubmix": "AiHubMix", "anthropic": "Anthropic", "azure-openai": "Azure OpenAI", @@ -473,7 +476,7 @@ "baidu-cloud": "Baidu Cloud", "dashscope": "Alibaba Cloud", "deepseek": "DeepSeek", - "doubao": "Doubao", + "doubao": "Volcengine", "fireworks": "Fireworks", "gemini": "Gemini", "gitee-ai": "Gitee AI", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 25648cd1..50f4bf89 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -466,6 +466,9 @@ "title": "あなたは会話を得意とするアシスタントです。ユーザーの会話を10文字以内のタイトルに要約し、ユーザーの主言語と一致していることを確認してください。句読点や特殊記号は使用しないでください。" }, "provider": { + "infini": "Infini", + "perplexity": "Perplexity", + "dmxapi": "DMXAPI", "aihubmix": "AiHubMix", "anthropic": "Anthropic", "azure-openai": "Azure OpenAI", @@ -473,7 +476,7 @@ "baidu-cloud": "Baidu Cloud", "dashscope": "Alibaba Cloud", "deepseek": "DeepSeek", - "doubao": "豆包", + "doubao": "Volcengine", "fireworks": "Fireworks", "gemini": "Gemini", "gitee-ai": "Gitee AI", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 295206eb..110aee9c 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -466,6 +466,9 @@ "title": "Вы - эксперт в общении, который суммирует разговоры пользователя в 10-символьном заголовке, совпадающем с языком пользователя, без использования знаков препинания и других специальных символов" }, "provider": { + "infini": "Infini", + "perplexity": "Perplexity", + "dmxapi": "DMXAPI", "aihubmix": "AiHubMix", "anthropic": "Anthropic", "azure-openai": "Azure OpenAI", @@ -473,7 +476,7 @@ "baidu-cloud": "Baidu Cloud", "dashscope": "Alibaba Cloud", "deepseek": "DeepSeek", - "doubao": "Doubao", + "doubao": "Volcengine", "fireworks": "Fireworks", "gemini": "Gemini", "gitee-ai": "Gitee AI", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 0415f874..1e844b96 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -466,6 +466,9 @@ "title": "你是一名擅长会话的助理,你需要将用户的会话总结为 10 个字以内的标题,标题语言与用户的首要语言一致,不要使用标点符号和其他特殊符号" }, "provider": { + "infini": "无问芯穹", + "perplexity": "Perplexity", + "dmxapi": "DMXAPI", "aihubmix": "AiHubMix", "anthropic": "Anthropic", "azure-openai": "Azure OpenAI", @@ -473,7 +476,7 @@ "baidu-cloud": "百度云千帆", "dashscope": "阿里云百炼", "deepseek": "深度求索", - "doubao": "豆包", + "doubao": "火山引擎", "fireworks": "Fireworks", "gemini": "Gemini", "gitee-ai": "Gitee AI", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index af19184d..bacf5fcc 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -440,6 +440,9 @@ "title": "Ollama" }, "paintings": { + "infini": "無問芯穹", + "perplexity": "Perplexity", + "dmxapi": "DMXAPI", "button.delete.image": "刪除繪圖", "button.delete.image.confirm": "確定要刪除此繪圖嗎?", "button.new.image": "新繪圖", @@ -473,7 +476,7 @@ "baidu-cloud": "百度云千帆", "dashscope": "阿里雲百鍊", "deepseek": "深度求索", - "doubao": "豆包", + "doubao": "火山引擎", "fireworks": "Fireworks", "gemini": "Gemini", "gitee-ai": "Gitee AI", diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index b0690fba..fa11da90 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -30,7 +30,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 66, + version: 67, blacklist: ['runtime'], migrate }, diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index fc603db6..cec928cc 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -58,7 +58,7 @@ const initialState: LlmState = { name: 'ocoolAI', type: 'openai', apiKey: '', - apiHost: 'https://one.ooo.cool', + apiHost: 'https://api.ocoolai.com', models: SYSTEM_MODELS.ocoolai, isSystem: true, enabled: false @@ -134,6 +134,16 @@ const initialState: LlmState = { isSystem: true, enabled: false }, + { + id: 'dmxapi', + name: 'DMXAPI', + type: 'openai', + apiKey: '', + apiHost: 'https://api.dmxapi.com', + models: SYSTEM_MODELS.dmxapi, + isSystem: true, + enabled: false + }, { id: 'yi', name: 'Yi', @@ -343,6 +353,26 @@ const initialState: LlmState = { models: SYSTEM_MODELS.ppio, isSystem: true, enabled: false + }, + { + id: 'perplexity', + name: 'Perplexity', + type: 'openai', + apiKey: '', + apiHost: 'https://api.perplexity.ai/', + models: SYSTEM_MODELS.perplexity, + isSystem: true, + enabled: false + }, + { + id: 'infini', + name: 'Infini', + type: 'openai', + apiKey: '', + apiHost: 'https://cloud.infini-ai.com/maas', + models: SYSTEM_MODELS.infini, + isSystem: true, + enabled: false } ], settings: { diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index ccc8f30f..e5331d8e 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -959,6 +959,51 @@ const migrateConfig = { } } + return state + }, + '67': (state: RootState) => { + state.llm.providers.push( + { + id: 'perplexity', + name: 'Perplexity', + type: 'openai', + apiKey: '', + apiHost: 'https://api.perplexity.ai/', + models: SYSTEM_MODELS.perplexity, + isSystem: true, + enabled: false + }, + { + id: 'infini', + name: 'Infini', + type: 'openai', + apiKey: '', + apiHost: 'https://cloud.infini-ai.com/maas', + models: SYSTEM_MODELS.infini, + isSystem: true, + enabled: false + }, + { + id: 'dmxapi', + name: 'DMXAPI', + type: 'openai', + apiKey: '', + apiHost: 'https://api.dmxapi.com', + models: SYSTEM_MODELS.dmxapi, + isSystem: true, + enabled: false + } + ) + + state.llm.providers = state.llm.providers.filter((provider) => provider.id !== 'graphrag-kylin-mountain') + + if (state.minapps) { + const aistudio = DEFAULT_MIN_APPS.find((app) => app.id === 'aistudio') + if (aistudio) { + state.minapps.enabled.push(aistudio) + } + } + return state } }