From f23c4a0afa52502109431e8aaa6789afbef01c61 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Fri, 19 Jul 2024 10:31:01 +0800 Subject: [PATCH] feat: add DashScope provider --- src/main/index.ts | 3 +- .../src/assets/images/providers/dashscope.png | Bin 0 -> 20690 bytes src/renderer/src/config/models.ts | 239 ++++++++++-------- src/renderer/src/config/provider.ts | 101 +++++++- src/renderer/src/i18n/index.ts | 8 +- .../src/pages/home/components/Message.tsx | 2 +- .../src/pages/settings/ProviderSettings.tsx | 4 +- .../settings/components/EditModelsPopup.tsx | 2 +- .../settings/components/ProviderSetting.tsx | 2 +- src/renderer/src/services/provider.ts | 73 ------ src/renderer/src/store/index.ts | 2 +- src/renderer/src/store/llm.ts | 43 ++-- src/renderer/src/store/migrate.ts | 33 ++- 13 files changed, 290 insertions(+), 222 deletions(-) create mode 100644 src/renderer/src/assets/images/providers/dashscope.png delete mode 100644 src/renderer/src/services/provider.ts diff --git a/src/main/index.ts b/src/main/index.ts index 1888d7cc..4af33c61 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -30,7 +30,8 @@ function createWindow() { webPreferences: { preload: join(__dirname, '../preload/index.js'), sandbox: false, - devTools: !app.isPackaged + devTools: !app.isPackaged, + webSecurity: false } }) diff --git a/src/renderer/src/assets/images/providers/dashscope.png b/src/renderer/src/assets/images/providers/dashscope.png new file mode 100644 index 0000000000000000000000000000000000000000..bf55dfacdb905e92fff8d01c5e13cd9f0d61dddb GIT binary patch literal 20690 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 literal 0 HcmV?d00001 diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 958527ac..33d1503e 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -1,6 +1,6 @@ import { Model } from '@renderer/types' -type SystemModel = Model & { defaultEnabled: boolean } +type SystemModel = Model & { enabled: boolean } export const SYSTEM_MODELS: Record = { openai: [ @@ -9,28 +9,28 @@ export const SYSTEM_MODELS: Record = { provider: 'openai', name: 'GPT-3.5 Turbo', group: 'GPT 3.5', - defaultEnabled: true + enabled: true }, { id: 'gpt-4-turbo', provider: 'openai', name: ' GPT-4 Turbo', group: 'GPT 4', - defaultEnabled: true + enabled: true }, { id: 'gpt-4', provider: 'openai', name: ' GPT-4', group: 'GPT 4', - defaultEnabled: true + enabled: true }, { id: 'gpt-4o', provider: 'openai', name: ' GPT-4o', group: 'GPT 4o', - defaultEnabled: true + enabled: true } ], silicon: [ @@ -39,112 +39,112 @@ export const SYSTEM_MODELS: Record = { provider: 'silicon', name: 'Qwen2-7B-Instruct', group: 'Qwen2', - defaultEnabled: true + enabled: true }, { id: 'Qwen/Qwen2-1.5B-Instruct', provider: 'silicon', name: 'Qwen2-1.5B-Instruct', group: 'Qwen2', - defaultEnabled: false + enabled: false }, { id: 'Qwen/Qwen1.5-7B-Chat', provider: 'silicon', name: 'Qwen1.5-7B-Chat', group: 'Qwen1.5', - defaultEnabled: false + enabled: false }, { id: 'Qwen/Qwen2-72B-Instruct', provider: 'silicon', name: 'Qwen2-72B-Instruct', group: 'Qwen2', - defaultEnabled: true + enabled: true }, { id: 'Qwen/Qwen2-57B-A14B-Instruct', provider: 'silicon', name: 'Qwen2-57B-A14B-Instruct', group: 'Qwen2', - defaultEnabled: false + enabled: false }, { id: 'Qwen/Qwen1.5-110B-Chat', provider: 'silicon', name: 'Qwen1.5-110B-Chat', group: 'Qwen1.5', - defaultEnabled: false + enabled: false }, { id: 'Qwen/Qwen1.5-32B-Chat', provider: 'silicon', name: 'Qwen1.5-32B-Chat', group: 'Qwen1.5', - defaultEnabled: false + enabled: false }, { id: 'Qwen/Qwen1.5-14B-Chat', provider: 'silicon', name: 'Qwen1.5-14B-Chat', group: 'Qwen1.5', - defaultEnabled: false + enabled: false }, { id: 'deepseek-ai/DeepSeek-V2-Chat', provider: 'silicon', name: 'DeepSeek-V2-Chat', group: 'DeepSeek', - defaultEnabled: false + enabled: false }, { id: 'deepseek-ai/DeepSeek-Coder-V2-Instruct', provider: 'silicon', name: 'DeepSeek-Coder-V2-Instruct', group: 'DeepSeek', - defaultEnabled: false + enabled: false }, { id: 'deepseek-ai/deepseek-llm-67b-chat', provider: 'silicon', name: 'Deepseek-LLM-67B-Chat', group: 'DeepSeek', - defaultEnabled: false + enabled: false }, { id: 'THUDM/glm-4-9b-chat', provider: 'silicon', name: 'GLM-4-9B-Chat', group: 'GLM', - defaultEnabled: true + enabled: true }, { id: 'THUDM/chatglm3-6b', provider: 'silicon', name: 'GhatGLM3-6B', group: 'GLM', - defaultEnabled: false + enabled: false }, { id: '01-ai/Yi-1.5-9B-Chat-16K', provider: 'silicon', name: 'Yi-1.5-9B-Chat-16K', group: 'Yi', - defaultEnabled: false + enabled: false }, { id: '01-ai/Yi-1.5-6B-Chat', provider: 'silicon', name: 'Yi-1.5-6B-Chat', group: 'Yi', - defaultEnabled: false + enabled: false }, { id: '01-ai/Yi-1.5-34B-Chat-16K', provider: 'silicon', name: 'Yi-1.5-34B-Chat-16K', group: 'Yi', - defaultEnabled: false + enabled: false } ], deepseek: [ @@ -153,14 +153,14 @@ export const SYSTEM_MODELS: Record = { provider: 'deepseek', name: 'DeepSeek Chat', group: 'DeepSeek Chat', - defaultEnabled: true + enabled: true }, { id: 'deepseek-coder', provider: 'deepseek', name: 'DeepSeek Coder', group: 'DeepSeek Coder', - defaultEnabled: true + enabled: true } ], yi: [ @@ -169,42 +169,42 @@ export const SYSTEM_MODELS: Record = { provider: 'yi', name: 'Yi-Large', group: 'Yi', - defaultEnabled: false + enabled: false }, { id: 'yi-large-turbo', provider: 'yi', name: 'Yi-Large-Turbo', group: 'Yi', - defaultEnabled: true + enabled: true }, { id: 'yi-large-rag', provider: 'yi', name: 'Yi-Large-Rag', group: 'Yi', - defaultEnabled: false + enabled: false }, { id: 'yi-medium', provider: 'yi', name: 'Yi-Medium', group: 'Yi', - defaultEnabled: true + enabled: true }, { id: 'yi-medium-200k', provider: 'yi', name: 'Yi-Medium-200k', group: 'Yi', - defaultEnabled: false + enabled: false }, { id: 'yi-spark', provider: 'yi', name: 'Yi-Spark', group: 'Yi', - defaultEnabled: false + enabled: false } ], zhipu: [ @@ -213,42 +213,42 @@ export const SYSTEM_MODELS: Record = { provider: 'zhipu', name: 'GLM-4-0520', group: 'GLM', - defaultEnabled: true + enabled: true }, { id: 'glm-4', provider: 'zhipu', name: 'GLM-4', group: 'GLM', - defaultEnabled: false + enabled: false }, { id: 'glm-4-airx', provider: 'zhipu', name: 'GLM-4-AirX', group: 'GLM', - defaultEnabled: false + enabled: false }, { id: 'glm-4-air', provider: 'zhipu', name: 'GLM-4-Air', group: 'GLM', - defaultEnabled: true + enabled: true }, { id: 'glm-4v', provider: 'zhipu', name: 'GLM-4V', group: 'GLM', - defaultEnabled: false + enabled: false }, { id: 'glm-4-alltools', provider: 'zhipu', name: 'GLM-4-AllTools', group: 'GLM', - defaultEnabled: false + enabled: false } ], moonshot: [ @@ -257,88 +257,21 @@ export const SYSTEM_MODELS: Record = { provider: 'moonshot', name: 'Moonshot V1 8k', group: 'Moonshot V1', - defaultEnabled: true + enabled: true }, { id: 'moonshot-v1-32k', provider: 'moonshot', name: 'Moonshot V1 32k', group: 'Moonshot V1', - defaultEnabled: true + enabled: true }, { id: 'moonshot-v1-128k', provider: 'moonshot', name: 'Moonshot V1 128k', group: 'Moonshot V1', - defaultEnabled: true - } - ], - openrouter: [ - { - id: 'google/gemma-2-9b-it:free', - provider: 'openrouter', - name: 'Google: Gemma 2 9B', - group: 'Gemma', - defaultEnabled: true - }, - { - id: 'microsoft/phi-3-mini-128k-instruct:free', - provider: 'openrouter', - name: 'Phi-3 Mini 128K Instruct', - group: 'Phi', - defaultEnabled: true - }, - { - id: 'microsoft/phi-3-medium-128k-instruct:free', - provider: 'openrouter', - name: 'Phi-3 Medium 128K Instruct', - group: 'Phi', - defaultEnabled: true - }, - { - id: 'meta-llama/llama-3-8b-instruct:free', - provider: 'openrouter', - name: 'Meta: Llama 3 8B Instruct', - group: 'Llama3', - defaultEnabled: true - }, - { - id: 'mistralai/mistral-7b-instruct:free', - provider: 'openrouter', - name: 'Mistral: Mistral 7B Instruct', - group: 'Mistral', - defaultEnabled: true - } - ], - groq: [ - { - id: 'llama3-8b-8192', - provider: 'groq', - name: 'LLaMA3 8B', - group: 'Llama3', - defaultEnabled: false - }, - { - id: 'llama3-70b-8192', - provider: 'groq', - name: 'LLaMA3 70B', - group: 'Llama3', - defaultEnabled: true - }, - { - id: 'mixtral-8x7b-32768', - provider: 'groq', - name: 'Mixtral 8x7B', - group: 'Mixtral', - defaultEnabled: false - }, - { - id: 'gemma-7b-it', - provider: 'groq', - name: 'Gemma 7B', - group: 'Gemma', - defaultEnabled: false + enabled: true } ], baichuan: [ @@ -347,21 +280,111 @@ export const SYSTEM_MODELS: Record = { provider: 'baichuan', name: 'Baichuan4', group: 'Baichuan4', - defaultEnabled: true + enabled: true }, { id: 'Baichuan3-Turbo', provider: 'baichuan', name: 'Baichuan3 Turbo', group: 'Baichuan3', - defaultEnabled: true + enabled: true }, { id: 'Baichuan3-Turbo-128k', provider: 'baichuan', name: 'Baichuan3 Turbo 128k', group: 'Baichuan3', - defaultEnabled: true + enabled: true + } + ], + dashscope: [ + { + id: 'qwen-turbo', + provider: 'dashscope', + name: 'Qwen Turbo', + group: 'Qwen', + enabled: true + }, + { + id: 'qwen-plus', + provider: 'dashscope', + name: 'Qwen Plus', + group: 'Qwen', + enabled: true + }, + { + id: 'qwen-max', + provider: 'dashscope', + name: 'Qwen Max', + group: 'Qwen', + enabled: true + } + ], + openrouter: [ + { + id: 'google/gemma-2-9b-it:free', + provider: 'openrouter', + name: 'Google: Gemma 2 9B', + group: 'Gemma', + enabled: true + }, + { + id: 'microsoft/phi-3-mini-128k-instruct:free', + provider: 'openrouter', + name: 'Phi-3 Mini 128K Instruct', + group: 'Phi', + enabled: true + }, + { + id: 'microsoft/phi-3-medium-128k-instruct:free', + provider: 'openrouter', + name: 'Phi-3 Medium 128K Instruct', + group: 'Phi', + enabled: true + }, + { + id: 'meta-llama/llama-3-8b-instruct:free', + provider: 'openrouter', + name: 'Meta: Llama 3 8B Instruct', + group: 'Llama3', + enabled: true + }, + { + id: 'mistralai/mistral-7b-instruct:free', + provider: 'openrouter', + name: 'Mistral: Mistral 7B Instruct', + group: 'Mistral', + enabled: true + } + ], + groq: [ + { + id: 'llama3-8b-8192', + provider: 'groq', + name: 'LLaMA3 8B', + group: 'Llama3', + enabled: false + }, + { + id: 'llama3-70b-8192', + provider: 'groq', + name: 'LLaMA3 70B', + group: 'Llama3', + enabled: true + }, + { + id: 'mixtral-8x7b-32768', + provider: 'groq', + name: 'Mixtral 8x7B', + group: 'Mixtral', + enabled: false + }, + { + id: 'gemma-7b-it', + provider: 'groq', + name: 'Gemma 7B', + group: 'Gemma', + enabled: false } ] } diff --git a/src/renderer/src/config/provider.ts b/src/renderer/src/config/provider.ts index 969659e8..c271ddcd 100644 --- a/src/renderer/src/config/provider.ts +++ b/src/renderer/src/config/provider.ts @@ -1,3 +1,80 @@ +import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.jpeg' +import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.png' +import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png' +import YiProviderLogo from '@renderer/assets/images/providers/yi.svg' +import GroqProviderLogo from '@renderer/assets/images/providers/groq.png' +import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png' +import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png' +import MoonshotProviderLogo from '@renderer/assets/images/providers/moonshot.jpeg' +import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png' +import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png' +import DashScopeProviderLogo from '@renderer/assets/images/providers/dashscope.png' +import ChatGPTModelLogo from '@renderer/assets/images/models/chatgpt.jpeg' +import ChatGLMModelLogo from '@renderer/assets/images/models/chatglm.jpeg' +import DeepSeekModelLogo from '@renderer/assets/images/models/deepseek.png' +import GemmaModelLogo from '@renderer/assets/images/models/gemma.jpeg' +import QwenModelLogo from '@renderer/assets/images/models/qwen.jpeg' +import YiModelLogo from '@renderer/assets/images/models/yi.svg' +import LlamaModelLogo from '@renderer/assets/images/models/llama.jpeg' +import MixtralModelLogo from '@renderer/assets/images/models/mixtral.jpeg' +import MoonshotModelLogo from '@renderer/assets/images/providers/moonshot.jpeg' +import MicrosoftModelLogo from '@renderer/assets/images/models/microsoft.png' +import BaichuanModelLogo from '@renderer/assets/images/models/baichuan.png' + +export function getProviderLogo(providerId: string) { + switch (providerId) { + case 'openai': + return OpenAiProviderLogo + case 'silicon': + return SiliconFlowProviderLogo + case 'deepseek': + return DeepSeekProviderLogo + case 'yi': + return YiProviderLogo + case 'groq': + return GroqProviderLogo + case 'zhipu': + return ZhipuProviderLogo + case 'ollama': + return OllamaProviderLogo + case 'moonshot': + return MoonshotProviderLogo + case 'openrouter': + return OpenRouterProviderLogo + case 'baichuan': + return BaichuanProviderLogo + case 'dashscope': + return DashScopeProviderLogo + default: + return undefined + } +} + +export function getModelLogo(modelId: string) { + const logoMap = { + gpt: ChatGPTModelLogo, + glm: ChatGLMModelLogo, + deepseek: DeepSeekModelLogo, + qwen: QwenModelLogo, + gemma: GemmaModelLogo, + 'yi-': YiModelLogo, + llama: LlamaModelLogo, + mixtral: MixtralModelLogo, + mistral: MixtralModelLogo, + moonshot: MoonshotModelLogo, + phi: MicrosoftModelLogo, + baichuan: BaichuanModelLogo + } + + for (const key in logoMap) { + if (modelId.toLowerCase().includes(key)) { + return logoMap[key] + } + } + + return undefined +} + export const PROVIDER_CONFIG = { openai: { websites: { @@ -47,6 +124,22 @@ export const PROVIDER_CONFIG = { models: 'https://platform.moonshot.cn/docs/intro#%E6%A8%A1%E5%9E%8B%E5%88%97%E8%A1%A8' } }, + baichuan: { + websites: { + official: 'https://www.baichuan-ai.com/', + apiKey: 'https://platform.baichuan-ai.com/console/apikey', + docs: 'https://platform.baichuan-ai.com/docs', + models: 'https://platform.baichuan-ai.com/price' + } + }, + dashscope: { + websites: { + official: 'https://dashscope.aliyun.com/', + apiKey: 'https://help.aliyun.com/zh/dashscope/developer-reference/acquisition-and-configuration-of-api-key', + docs: 'https://help.aliyun.com/zh/dashscope/', + models: 'https://dashscope.console.aliyun.com/model' + } + }, openrouter: { websites: { official: 'https://openrouter.ai/', @@ -69,13 +162,5 @@ export const PROVIDER_CONFIG = { docs: 'https://github.com/ollama/ollama/tree/main/docs', models: 'https://ollama.com/library' } - }, - baichuan: { - websites: { - official: 'https://www.baichuan-ai.com/', - apiKey: 'https://platform.baichuan-ai.com/console/apikey', - docs: 'https://platform.baichuan-ai.com/docs', - models: 'https://platform.baichuan-ai.com/price' - } } } diff --git a/src/renderer/src/i18n/index.ts b/src/renderer/src/i18n/index.ts index d249e53a..a51118d0 100644 --- a/src/renderer/src/i18n/index.ts +++ b/src/renderer/src/i18n/index.ts @@ -79,7 +79,8 @@ const resources = { zhipu: 'ZHIPU AI', groq: 'Groq', ollama: 'Ollama', - baichuan: 'Baichuan' + baichuan: 'Baichuan', + dashscope: 'DashScope' }, settings: { title: 'Settings', @@ -156,7 +157,7 @@ const resources = { 'error.enter.api.host': '请输入您的 API 地址', 'error.enter.model': '请选择一个模型', 'api.connection.failed': '连接失败', - 'api.connection.successful': '连接成功', + 'api.connection.success': '连接成功', 'chat.completion.paused': '会话已停止' }, assistant: { @@ -195,7 +196,8 @@ const resources = { zhipu: '智谱AI', groq: 'Groq', ollama: 'Ollama', - baichuan: '百川' + baichuan: '百川', + dashscope: '阿里云灵积' }, settings: { title: '设置', diff --git a/src/renderer/src/pages/home/components/Message.tsx b/src/renderer/src/pages/home/components/Message.tsx index 47dbd6fc..068ae323 100644 --- a/src/renderer/src/pages/home/components/Message.tsx +++ b/src/renderer/src/pages/home/components/Message.tsx @@ -7,7 +7,7 @@ import { CopyOutlined, DeleteOutlined, EditOutlined } from '@ant-design/icons' import Markdown from 'react-markdown' import CodeBlock from './CodeBlock' import { EVENT_NAMES, EventEmitter } from '@renderer/services/event' -import { getModelLogo } from '@renderer/services/provider' +import { getModelLogo } from '@renderer/config/provider' import Logo from '@renderer/assets/images/logo.png' import { SyncOutlined } from '@ant-design/icons' import { firstLetter } from '@renderer/utils' diff --git a/src/renderer/src/pages/settings/ProviderSettings.tsx b/src/renderer/src/pages/settings/ProviderSettings.tsx index dd73a229..62fc56cf 100644 --- a/src/renderer/src/pages/settings/ProviderSettings.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings.tsx @@ -1,6 +1,6 @@ import { DragDropContext, Draggable, Droppable, DropResult } from '@hello-pangea/dnd' import { useProviders, useSystemProviders } from '@renderer/hooks/useProvider' -import { getProviderLogo } from '@renderer/services/provider' +import { getProviderLogo } from '@renderer/config/provider' import { Provider } from '@renderer/types' import { droppableReorder } from '@renderer/utils' import { Avatar, Tag } from 'antd' @@ -39,7 +39,7 @@ const ProviderSettings: FC = () => { key={JSON.stringify(provider)} className={provider.id === selectedProvider?.id ? 'active' : ''} onClick={() => setSelectedProvider(provider)}> - + {t(`provider.${provider.id}`)} {provider.enabled && ( diff --git a/src/renderer/src/pages/settings/components/EditModelsPopup.tsx b/src/renderer/src/pages/settings/components/EditModelsPopup.tsx index 4621883f..28439edc 100644 --- a/src/renderer/src/pages/settings/components/EditModelsPopup.tsx +++ b/src/renderer/src/pages/settings/components/EditModelsPopup.tsx @@ -2,7 +2,7 @@ import { LoadingOutlined, MinusOutlined, PlusOutlined, QuestionCircleOutlined } import { SYSTEM_MODELS } from '@renderer/config/models' import { useProvider } from '@renderer/hooks/useProvider' import { fetchModels } from '@renderer/services/api' -import { getModelLogo } from '@renderer/services/provider' +import { getModelLogo } from '@renderer/config/provider' import { Model, Provider } from '@renderer/types' import { getDefaultGroupName, isFreeModel, runAsyncFunction } from '@renderer/utils' import { Avatar, Button, Empty, Flex, Modal, Tag } from 'antd' diff --git a/src/renderer/src/pages/settings/components/ProviderSetting.tsx b/src/renderer/src/pages/settings/components/ProviderSetting.tsx index fd5057b5..87ffb367 100644 --- a/src/renderer/src/pages/settings/components/ProviderSetting.tsx +++ b/src/renderer/src/pages/settings/components/ProviderSetting.tsx @@ -5,7 +5,7 @@ import { Avatar, Button, Card, Divider, Flex, Input, Space, Switch } from 'antd' import { useProvider } from '@renderer/hooks/useProvider' import { groupBy } from 'lodash' import { SettingContainer, SettingSubtitle, SettingTitle } from '.' -import { getModelLogo } from '@renderer/services/provider' +import { getModelLogo } from '@renderer/config/provider' import { CheckOutlined, EditOutlined, ExportOutlined, LoadingOutlined, PlusOutlined } from '@ant-design/icons' import AddModelPopup from './AddModelPopup' import EditModelsPopup from './EditModelsPopup' diff --git a/src/renderer/src/services/provider.ts b/src/renderer/src/services/provider.ts deleted file mode 100644 index 8f4c2642..00000000 --- a/src/renderer/src/services/provider.ts +++ /dev/null @@ -1,73 +0,0 @@ -import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.jpeg' -import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.png' -import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png' -import YiProviderLogo from '@renderer/assets/images/providers/yi.svg' -import GroqProviderLogo from '@renderer/assets/images/providers/groq.png' -import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png' -import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png' -import MoonshotProviderLogo from '@renderer/assets/images/providers/moonshot.jpeg' -import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png' -import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png' -import ChatGPTModelLogo from '@renderer/assets/images/models/chatgpt.jpeg' -import ChatGLMModelLogo from '@renderer/assets/images/models/chatglm.jpeg' -import DeepSeekModelLogo from '@renderer/assets/images/models/deepseek.png' -import GemmaModelLogo from '@renderer/assets/images/models/gemma.jpeg' -import QwenModelLogo from '@renderer/assets/images/models/qwen.jpeg' -import YiModelLogo from '@renderer/assets/images/models/yi.svg' -import LlamaModelLogo from '@renderer/assets/images/models/llama.jpeg' -import MixtralModelLogo from '@renderer/assets/images/models/mixtral.jpeg' -import MoonshotModelLogo from '@renderer/assets/images/providers/moonshot.jpeg' -import MicrosoftModelLogo from '@renderer/assets/images/models/microsoft.png' -import BaichuanModelLogo from '@renderer/assets/images/models/baichuan.png' - -export function getProviderLogo(providerId: string) { - switch (providerId) { - case 'openai': - return OpenAiProviderLogo - case 'silicon': - return SiliconFlowProviderLogo - case 'deepseek': - return DeepSeekProviderLogo - case 'yi': - return YiProviderLogo - case 'groq': - return GroqProviderLogo - case 'zhipu': - return ZhipuProviderLogo - case 'ollama': - return OllamaProviderLogo - case 'moonshot': - return MoonshotProviderLogo - case 'openrouter': - return OpenRouterProviderLogo - case 'baichuan': - return BaichuanProviderLogo - default: - return undefined - } -} - -export function getModelLogo(modelId: string) { - const logoMap = { - gpt: ChatGPTModelLogo, - glm: ChatGLMModelLogo, - deepseek: DeepSeekModelLogo, - qwen: QwenModelLogo, - gemma: GemmaModelLogo, - 'yi-': YiModelLogo, - llama: LlamaModelLogo, - mixtral: MixtralModelLogo, - mistral: MixtralModelLogo, - moonshot: MoonshotModelLogo, - phi: MicrosoftModelLogo, - baichuan: BaichuanModelLogo - } - - for (const key in logoMap) { - if (modelId.toLowerCase().includes(key)) { - return logoMap[key] - } - } - - return undefined -} diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index 5ee7b590..7e14d429 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -19,7 +19,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 10, + version: 11, blacklist: ['runtime'], migrate }, diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index 657549f4..fbe5fe7f 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -18,7 +18,7 @@ const initialState: LlmState = { name: 'OpenAI', apiKey: '', apiHost: 'https://api.openai.com', - models: SYSTEM_MODELS.openai.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.openai.filter((m) => m.enabled), isSystem: true, enabled: true }, @@ -27,7 +27,7 @@ const initialState: LlmState = { name: 'Silicon', apiKey: '', apiHost: 'https://api.siliconflow.cn', - models: SYSTEM_MODELS.silicon.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.silicon.filter((m) => m.enabled), isSystem: true, enabled: false }, @@ -36,7 +36,7 @@ const initialState: LlmState = { name: 'deepseek', apiKey: '', apiHost: 'https://api.deepseek.com', - models: SYSTEM_MODELS.deepseek.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.deepseek.filter((m) => m.enabled), isSystem: true, enabled: false }, @@ -45,7 +45,7 @@ const initialState: LlmState = { name: 'Yi', apiKey: '', apiHost: 'https://api.lingyiwanwu.com', - models: SYSTEM_MODELS.yi.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.yi.filter((m) => m.enabled), isSystem: true, enabled: false }, @@ -54,7 +54,7 @@ const initialState: LlmState = { name: 'ZhiPu', apiKey: '', apiHost: 'https://open.bigmodel.cn/api/paas/v4/', - models: SYSTEM_MODELS.zhipu.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.zhipu.filter((m) => m.enabled), isSystem: true, enabled: false }, @@ -63,7 +63,25 @@ const initialState: LlmState = { name: 'Moonshot AI', apiKey: '', apiHost: 'https://api.moonshot.cn', - models: SYSTEM_MODELS.moonshot.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.moonshot.filter((m) => m.enabled), + isSystem: true, + enabled: false + }, + { + id: 'baichuan', + name: 'BAICHUAN AI', + apiKey: '', + apiHost: 'https://api.baichuan-ai.com', + models: SYSTEM_MODELS.baichuan.filter((m) => m.enabled), + isSystem: true, + enabled: false + }, + { + id: 'dashscope', + name: 'DashScope', + apiKey: '', + apiHost: 'https://dashscope.aliyuncs.com/compatible-mode/v1/', + models: SYSTEM_MODELS.dashscope.filter((m) => m.enabled), isSystem: true, enabled: false }, @@ -72,7 +90,7 @@ const initialState: LlmState = { name: 'OpenRouter', apiKey: '', apiHost: 'https://openrouter.ai/api/v1/', - models: SYSTEM_MODELS.openrouter.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.openrouter.filter((m) => m.enabled), isSystem: true, enabled: false }, @@ -81,7 +99,7 @@ const initialState: LlmState = { name: 'Groq', apiKey: '', apiHost: 'https://api.groq.com/openai', - models: SYSTEM_MODELS.groq.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.groq.filter((m) => m.enabled), isSystem: true, enabled: false }, @@ -93,15 +111,6 @@ const initialState: LlmState = { models: [], isSystem: true, enabled: false - }, - { - id: 'baichuan', - name: 'BAICHUAN AI', - apiKey: '', - apiHost: 'https://api.baichuan-ai.com', - models: SYSTEM_MODELS.baichuan.filter((m) => m.defaultEnabled), - isSystem: true, - enabled: false } ] } diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 95554133..1a177601 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -20,7 +20,7 @@ const migrate = createMigrate({ apiKey: '', apiHost: 'https://api.lingyiwanwu.com', isSystem: true, - models: SYSTEM_MODELS.yi.filter((m) => m.defaultEnabled) + models: SYSTEM_MODELS.yi.filter((m) => m.enabled) } ] } @@ -40,7 +40,7 @@ const migrate = createMigrate({ apiKey: '', apiHost: 'https://open.bigmodel.cn/api/paas/v4/', isSystem: true, - models: SYSTEM_MODELS.zhipu.filter((m) => m.defaultEnabled) + models: SYSTEM_MODELS.zhipu.filter((m) => m.enabled) } ] } @@ -80,7 +80,7 @@ const migrate = createMigrate({ apiKey: '', apiHost: 'https://api.moonshot.cn', isSystem: true, - models: SYSTEM_MODELS.moonshot.filter((m) => m.defaultEnabled) + models: SYSTEM_MODELS.moonshot.filter((m) => m.enabled) } ] } @@ -99,7 +99,7 @@ const migrate = createMigrate({ name: 'OpenRouter', apiKey: '', apiHost: 'https://openrouter.ai/api/v1/', - models: SYSTEM_MODELS.openrouter.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.openrouter.filter((m) => m.enabled), isSystem: true } ] @@ -150,7 +150,7 @@ const migrate = createMigrate({ ...state.llm, providers: state.llm.providers.map((provider) => { if (provider.id === 'zhipu' && provider.models[0] && provider.models[0].id === 'llama3-70b-8192') { - provider.models = SYSTEM_MODELS.zhipu.filter((m) => m.defaultEnabled) + provider.models = SYSTEM_MODELS.zhipu.filter((m) => m.enabled) } return provider }) @@ -170,7 +170,28 @@ const migrate = createMigrate({ name: 'BAICHUAN AI', apiKey: '', apiHost: 'https://api.baichuan-ai.com', - models: SYSTEM_MODELS.baichuan.filter((m) => m.defaultEnabled), + models: SYSTEM_MODELS.baichuan.filter((m) => m.enabled), + isSystem: true, + enabled: false + } + ] + } + } + }, + // @ts-ignore store type is unknown + '11': (state: RootState) => { + return { + ...state, + llm: { + ...state.llm, + providers: [ + ...state.llm.providers, + { + id: 'dashscope', + name: 'DashScope', + apiKey: '', + apiHost: 'https://dashscope.aliyuncs.com/compatible-mode/v1/', + models: SYSTEM_MODELS.dashscope.filter((m) => m.enabled), isSystem: true, enabled: false }