From 3f093a91beee9dc3d5ca04cbae1a5151715fad5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A6=96=E9=83=BD=E7=88=B1=E6=8A=A4=E5=8A=A8=E7=89=A9?= =?UTF-8?q?=E5=8D=8F=E4=BC=9A?= <87239270+1355873789@users.noreply.github.com> Date: Tue, 5 Nov 2024 15:56:36 +0800 Subject: [PATCH] Add Providers 1. Fix the naming error of the Grok model 2. Add new providers: Grok, Mistral, Jina, Hyperbolic --- src/renderer/src/config/models.ts | 58 ++++++++++++++++++++++-- src/renderer/src/config/providers.ts | 52 +++++++++++++++++++++ src/renderer/src/i18n/locales/en-us.json | 4 ++ src/renderer/src/i18n/locales/zh-cn.json | 4 ++ src/renderer/src/i18n/locales/zh-tw.json | 4 ++ src/renderer/src/store/index.ts | 2 +- src/renderer/src/store/llm.ts | 36 +++++++++++++++ src/renderer/src/store/migrate.ts | 47 +++++++++++++++++++ 8 files changed, 203 insertions(+), 4 deletions(-) diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 0b8d8dd5..72ac370f 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -44,8 +44,6 @@ import GemmaModelLogo from '@renderer/assets/images/models/gemma.png' import GemmaModelLogoDark from '@renderer/assets/images/models/gemma_dark.png' import GoogleModelLogo from '@renderer/assets/images/models/google.png' import GoogleModelLogoDark from '@renderer/assets/images/models/google.png' -import GorkModelLogo from '@renderer/assets/images/models/gork.png' -import GorkModelLogoDark from '@renderer/assets/images/models/gork_dark.png' import ChatGPT35ModelLogo from '@renderer/assets/images/models/gpt_3.5.png' import ChatGPT4ModelLogo from '@renderer/assets/images/models/gpt_4.png' import ChatGptModelLogoDakr from '@renderer/assets/images/models/gpt_dark.png' @@ -53,6 +51,8 @@ import ChatGPT35ModelLogoDark from '@renderer/assets/images/models/gpt_dark.png' import ChatGPT4ModelLogoDark from '@renderer/assets/images/models/gpt_dark.png' import ChatGPTo1ModelLogoDark from '@renderer/assets/images/models/gpt_dark.png' import ChatGPTo1ModelLogo from '@renderer/assets/images/models/gpt_o1.png' +import GrokModelLogo from '@renderer/assets/images/models/grok.png' +import GrokModelLogoDark from '@renderer/assets/images/models/grok_dark.png' import GrypheModelLogo from '@renderer/assets/images/models/gryphe.png' import GrypheModelLogoDark from '@renderer/assets/images/models/gryphe_dark.png' import HailuoModelLogo from '@renderer/assets/images/models/hailuo.png' @@ -65,6 +65,8 @@ import IbmModelLogo from '@renderer/assets/images/models/ibm.png' import IbmModelLogoDark from '@renderer/assets/images/models/ibm_dark.png' import InternlmModelLogo from '@renderer/assets/images/models/internlm.png' import InternlmModelLogoDark from '@renderer/assets/images/models/internlm_dark.png' +import JinaModelLogo from '@renderer/assets/images/models/jina.png' +import JinaModelLogoDark from '@renderer/assets/images/models/jina_dark.png' import KeLingModelLogo from '@renderer/assets/images/models/keling.png' import KeLingModelLogoDark from '@renderer/assets/images/models/keling_dark.png' import LlamaModelLogo from '@renderer/assets/images/models/llama.png' @@ -154,6 +156,7 @@ export function getModelLogo(modelId: string) { } const logoMap = { + jina: isLight ? JinaModelLogo : JinaModelLogoDark, abab: isLight ? MinimaxModelLogo : MinimaxModelLogoDark, 'o1-': isLight ? ChatGPTo1ModelLogo : ChatGPTo1ModelLogoDark, 'gpt-3': isLight ? ChatGPT35ModelLogo : ChatGPT35ModelLogoDark, @@ -197,7 +200,7 @@ export function getModelLogo(modelId: string) { dbrx: isLight ? DbrxModelLogo : DbrxModelLogo, flashaudio: isLight ? FlashaudioModelLogo : FlashaudioModelLogoDark, flux: isLight ? FluxModelLogo : FluxModelLogoDark, - gork: isLight ? GorkModelLogo : GorkModelLogoDark, + grok: isLight ? GrokModelLogo : GrokModelLogoDark, hunyuan: isLight ? HunyuanModelLogo : HunyuanModelLogoDark, internlm: isLight ? InternlmModelLogo : InternlmModelLogoDark, llava: isLight ? LLavaModelLogo : LLavaModelLogoDark, @@ -764,6 +767,55 @@ export const SYSTEM_MODELS: Record = { group: 'abab5' } ], + hyperbolic: [ + { + id: 'Qwen/Qwen2-VL-72B-Instruct', + provider: 'hyperbolic', + name: 'Qwen2-VL-72B-Instruct', + group: 'Qwen2-VL' + }, + { + id: 'Qwen/Qwen2-VL-7B-Instruct', + provider: 'hyperbolic', + name: 'Qwen2-VL-7B-Instruct', + group: 'Qwen2-VL' + }, + { + id: 'mistralai/Pixtral-12B-2409', + provider: 'hyperbolic', + name: 'Pixtral-12B-2409', + group: 'Pixtral' + }, + { + id: 'meta-llama/Meta-Llama-3.1-405B', + provider: 'hyperbolic', + name: 'Meta-Llama-3.1-405B', + group: 'Meta-Llama-3.1' + } + ], + grok: [ + { + id: 'grok-beta', + provider: 'grok', + name: 'Grok Beta', + group: 'Grok' + } + ], + mistral: [ + { + id: 'pixtral-12b-2409', + provider: 'mistral', + name: 'Pixtral-12B-2409', + group: 'Pixtral' + }, + { + id: 'open-mistral-nemo', + provider: 'mistral', + name: 'Open-Mistral-Nemo', + group: 'Mistral' + } + ], + jina: [], aihubmix: [ { id: 'gpt-4o-mini', diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index f3b9fb8b..5e47714d 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -24,6 +24,10 @@ import StepProviderLogo from '@renderer/assets/images/providers/step.png' import TogetherProviderLogo from '@renderer/assets/images/providers/together.png' import ZeroOneProviderLogo from '@renderer/assets/images/providers/zero-one.png' import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png' +import GrokProviderLogo from '@renderer/assets/images/providers/grok.png' +import HyperbolicProviderLogo from '@renderer/assets/images/providers/hyperbolic.png' +import MistralProviderLogo from '@renderer/assets/images/providers/mistral.png' +import JinaProviderLogo from '@renderer/assets/images/providers/jina.png' export function getProviderLogo(providerId: string) { switch (providerId) { @@ -79,6 +83,14 @@ export function getProviderLogo(providerId: string) { return AzureProviderLogo case 'hunyuan': return HunyuanProviderLogo + case 'grok': + return GrokProviderLogo + case 'hyperbolic': + return HyperbolicProviderLogo + case 'mistral': + return MistralProviderLogo + case 'jina': + return JinaProviderLogo default: return undefined } @@ -298,6 +310,46 @@ export const PROVIDER_CONFIG = { models: 'https://docs.anthropic.com/en/docs/about-claude/models' } }, + grok: { + api: { + url: 'https://api.x.ai' + }, + websites: { + official: 'https://x.ai/', + docs: 'https://docs.x.ai/', + models: 'https://docs.x.ai/docs#getting-started' + } + }, + hyperbolic: { + api: { + url: 'https://api.hyperbolic.xyz' + }, + websites: { + official: 'https://app.hyperbolic.xyz', + docs: 'https://docs.hyperbolic.xyz', + models: 'https://app.hyperbolic.xyz/models' + } + }, + mistral: { + api: { + url: 'https://api.mistral.ai' + }, + websites: { + official: 'https://mistral.ai', + docs: 'https://docs.mistral.ai', + models: 'https://docs.mistral.ai/getting-started/models/models_overview' + } + }, + jina: { + api: { + url: 'https://api.jina.ai' + }, + websites: { + official: 'https://jina.ai', + docs: 'https://jina.ai', + models: 'https://jina.ai' + } + }, aihubmix: { api: { url: 'https://aihubmix.com' diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index b1762cea..da3f0658 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -215,6 +215,10 @@ "locate.message": "Locate the message" }, "provider": { + "jina": "Jina", + "mistral": "Mistral", + "hyperbolic": "Hyperbolic", + "grok": "Grok", "nvidia": "Nvidia", "hunyuan": "Tencent Hunyuan", "zhinao": "360AI", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index c1ba3d7f..86d5305b 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -215,6 +215,10 @@ "locate.message": "定位到消息" }, "provider": { + "jina": "Jina", + "mistral": "Mistral", + "hyperbolic": "Hyperbolic", + "grok": "Grok", "nvidia": "英伟达", "hunyuan": "腾讯混元", "zhinao": "360智脑", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 27ff408b..c6ab1fd7 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -215,6 +215,10 @@ "locate.message": "定位到訊息" }, "provider": { + "jina": "Jina", + "mistral": "Mistral", + "hyperbolic": "Hyperbolic", + "grok": "Grok", "nvidia": "輝達", "zhinao": "360智腦", "hunyuan": "騰訊混元", diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index df2d6a56..32157109 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -24,7 +24,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 37, + version: 38, blacklist: ['runtime'], migrate }, diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index 39912f9d..66966001 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -249,6 +249,42 @@ const initialState: LlmState = { isSystem: true, enabled: false }, + { + id: 'grok', + name: 'Grok', + apiKey: '', + apiHost: 'https://api.x.ai', + models: SYSTEM_MODELS.grok, + isSystem: true, + enabled: false + }, + { + id: 'hyperbolic', + name: 'Hyperbolic', + apiKey: '', + apiHost: 'https://api.hyperbolic.xyz', + models: SYSTEM_MODELS.hyperbolic, + isSystem: true, + enabled: false + }, + { + id: 'mistral', + name: 'Mistral', + apiKey: '', + apiHost: 'https://api.mistral.ai', + models: SYSTEM_MODELS.mistral, + isSystem: true, + enabled: false + }, + { + id: 'jina', + name: 'Jina', + apiKey: '', + apiHost: 'https://api.jina.ai', + models: SYSTEM_MODELS.jina, + isSystem: true, + enabled: false + }, { id: 'aihubmix', name: 'AiHubMix', diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 773005b2..784ad5b7 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -622,6 +622,53 @@ const migrateConfig = { '37': (state: RootState) => { state.settings.messageStyle = 'plain' return state + }, + '38': (state: RootState) => { + return { + ...state, + llm: { + ...state.llm, + providers: [ + ...state.llm.providers, + { + id: 'grok', + name: 'Grok', + apiKey: '', + apiHost: 'https://api.x.ai', + models: SYSTEM_MODELS.grok, + isSystem: true, + enabled: false + }, + { + id: 'hyperbolic', + name: 'Hyperbolic', + apiKey: '', + apiHost: 'https://api.hyperbolic.xyz', + models: SYSTEM_MODELS.hyperbolic, + isSystem: true, + enabled: false + }, + { + id: 'mistral', + name: 'Mistral', + apiKey: '', + apiHost: 'https://api.mistral.ai', + models: SYSTEM_MODELS.mistral, + isSystem: true, + enabled: false + }, + { + id: 'jina', + name: 'Jina', + apiKey: '', + apiHost: 'https://api.jina.ai', + models: SYSTEM_MODELS.jina, + isSystem: true, + enabled: false + } + ] + } + } } }