From e6d9758ab76d0d9ef98d33ff255c4856e39d9aea Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Mon, 3 Nov 2025 13:28:31 +0800 Subject: [PATCH] feat: add SophNet LLM provider --- .../src/assets/images/providers/sophnet.svg | 13 ++++++++++ src/renderer/src/config/models/default.ts | 1 + src/renderer/src/config/providers.ts | 25 ++++++++++++++++++- src/renderer/src/i18n/label.ts | 3 ++- src/renderer/src/i18n/locales/en-us.json | 1 + src/renderer/src/i18n/locales/zh-cn.json | 1 + src/renderer/src/i18n/locales/zh-tw.json | 1 + src/renderer/src/i18n/translate/el-gr.json | 3 ++- src/renderer/src/i18n/translate/es-es.json | 3 ++- src/renderer/src/i18n/translate/fr-fr.json | 3 ++- src/renderer/src/i18n/translate/ja-jp.json | 1 + src/renderer/src/i18n/translate/pt-pt.json | 3 ++- src/renderer/src/i18n/translate/ru-ru.json | 1 + src/renderer/src/store/index.ts | 2 +- src/renderer/src/store/migrate.ts | 10 ++++++++ src/renderer/src/types/index.ts | 3 ++- 16 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 src/renderer/src/assets/images/providers/sophnet.svg diff --git a/src/renderer/src/assets/images/providers/sophnet.svg b/src/renderer/src/assets/images/providers/sophnet.svg new file mode 100644 index 0000000000..aae1e03239 --- /dev/null +++ b/src/renderer/src/assets/images/providers/sophnet.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/renderer/src/config/models/default.ts b/src/renderer/src/config/models/default.ts index c3a40e6ef7..02d760f361 100644 --- a/src/renderer/src/config/models/default.ts +++ b/src/renderer/src/config/models/default.ts @@ -27,6 +27,7 @@ export const SYSTEM_MODELS: Record = ], cherryin: [], vertexai: [], + sophnet: [], '302ai': [ { id: 'deepseek-chat', diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index 3c3af7771b..dc59e33920 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -45,6 +45,7 @@ import Ph8ProviderLogo from '@renderer/assets/images/providers/ph8.png' import PPIOProviderLogo from '@renderer/assets/images/providers/ppio.png' import QiniuProviderLogo from '@renderer/assets/images/providers/qiniu.webp' import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.png' +import SophnetProviderLogo from '@renderer/assets/images/providers/sophnet.svg' import StepProviderLogo from '@renderer/assets/images/providers/step.png' import TencentCloudProviderLogo from '@renderer/assets/images/providers/tencent-cloud-ti.png' import TogetherProviderLogo from '@renderer/assets/images/providers/together.png' @@ -240,6 +241,16 @@ export const SYSTEM_PROVIDERS_CONFIG: Record = isSystem: true, enabled: false }, + sophnet: { + id: 'sophnet', + name: 'SophNet', + type: 'openai', + apiKey: '', + apiHost: 'https://www.sophnet.com/api/open-apis/v1', + models: [], + isSystem: true, + enabled: false + }, ppio: { id: 'ppio', name: 'PPIO', @@ -708,7 +719,8 @@ export const PROVIDER_LOGO_MAP: AtLeast = { 'aws-bedrock': AwsProviderLogo, poe: 'poe', // use svg icon component aionly: AiOnlyProviderLogo, - longcat: LongCatProviderLogo + longcat: LongCatProviderLogo, + sophnet: SophnetProviderLogo } as const export function getProviderLogo(providerId: string) { @@ -787,6 +799,17 @@ export const PROVIDER_URLS: Record = { models: 'https://ai.burncloud.com/pricing' } }, + sophnet: { + api: { + url: 'https://www.sophnet.com/api/open-apis/v1' + }, + websites: { + official: 'https://sophnet.com', + apiKey: 'https://sophnet.com/#/project/key', + docs: 'https://sophnet.com/docs/component/introduce.html', + models: 'https://sophnet.com/#/model/list' + } + }, ppio: { api: { url: 'https://api.ppinfra.com/v3/openai' diff --git a/src/renderer/src/i18n/label.ts b/src/renderer/src/i18n/label.ts index 1f8615fea9..126c8e8f49 100644 --- a/src/renderer/src/i18n/label.ts +++ b/src/renderer/src/i18n/label.ts @@ -82,7 +82,8 @@ const providerKeyMap = { zhinao: 'provider.zhinao', zhipu: 'provider.zhipu', poe: 'provider.poe', - aionly: 'provider.aionly' + aionly: 'provider.aionly', + sophnet: 'provider.sophnet' } as const /** diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 5d7cd340eb..3d19f9d6a3 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -2137,6 +2137,7 @@ "qiniu": "Qiniu AI", "qwenlm": "QwenLM", "silicon": "SiliconFlow", + "sophnet": "SophNet", "stepfun": "StepFun", "tencent-cloud-ti": "Tencent Cloud TI", "together": "Together", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 47bfbe736b..8b7ff95d6e 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -2137,6 +2137,7 @@ "qiniu": "七牛云 AI 推理", "qwenlm": "QwenLM", "silicon": "硅基流动", + "sophnet": "SophNet", "stepfun": "阶跃星辰", "tencent-cloud-ti": "腾讯云 TI", "together": "Together", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 741e637c52..1bebb1c05b 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -2137,6 +2137,7 @@ "qiniu": "七牛雲 AI 推理", "qwenlm": "QwenLM", "silicon": "SiliconFlow", + "sophnet": "SophNet", "stepfun": "StepFun", "tencent-cloud-ti": "騰訊雲 TI", "together": "Together", diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json index e858645f9b..716e601a9f 100644 --- a/src/renderer/src/i18n/translate/el-gr.json +++ b/src/renderer/src/i18n/translate/el-gr.json @@ -2121,12 +2121,13 @@ "openrouter": "OpenRouter", "ovms": "Intel OVMS", "perplexity": "Perplexity", - "ph8": "Πλατφόρμα Ανοιχτής Μεγάλης Μοντέλου PH8", + "ph8": "PH8", "poe": "Poe", "ppio": "PPIO Piao Yun", "qiniu": "Qiniu AI", "qwenlm": "QwenLM", "silicon": "Σιδηρική Παρουσία", + "sophnet": "SophNet", "stepfun": "Βήμα Ουράς", "tencent-cloud-ti": "Tencent Cloud TI", "together": "Together", diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json index 52806af3da..f8dc186923 100644 --- a/src/renderer/src/i18n/translate/es-es.json +++ b/src/renderer/src/i18n/translate/es-es.json @@ -2121,12 +2121,13 @@ "openrouter": "OpenRouter", "ovms": "Intel OVMS", "perplexity": "Perplejidad", - "ph8": "Plataforma Abierta de Grandes Modelos PH8", + "ph8": "PH8", "poe": "Poe", "ppio": "PPIO Cloud Piao", "qiniu": "Qiniu AI", "qwenlm": "QwenLM", "silicon": "Silicio Fluido", + "sophnet": "SophNet", "stepfun": "Función Salto", "tencent-cloud-ti": "Tencent Nube TI", "together": "Juntos", diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json index 83c495e759..126dce99fb 100644 --- a/src/renderer/src/i18n/translate/fr-fr.json +++ b/src/renderer/src/i18n/translate/fr-fr.json @@ -2121,12 +2121,13 @@ "openrouter": "OpenRouter", "ovms": "Intel OVMS", "perplexity": "Perplexité", - "ph8": "Plateforme ouverte de grands modèles PH8", + "ph8": "PH8", "poe": "Poe", "ppio": "PPIO Cloud Piou", "qiniu": "Qiniu AI", "qwenlm": "QwenLM", "silicon": "Silicium Fluide", + "sophnet": "SophNet", "stepfun": "Échelon Étoile", "tencent-cloud-ti": "Tencent Cloud TI", "together": "Ensemble", diff --git a/src/renderer/src/i18n/translate/ja-jp.json b/src/renderer/src/i18n/translate/ja-jp.json index e2eaeb1ef9..4d71d89de8 100644 --- a/src/renderer/src/i18n/translate/ja-jp.json +++ b/src/renderer/src/i18n/translate/ja-jp.json @@ -2127,6 +2127,7 @@ "qiniu": "七牛云 AI 推理", "qwenlm": "QwenLM", "silicon": "SiliconFlow", + "sophnet": "SophNet", "stepfun": "StepFun", "tencent-cloud-ti": "Tencent Cloud TI", "together": "Together", diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json index 6a0551357f..55dc8cd318 100644 --- a/src/renderer/src/i18n/translate/pt-pt.json +++ b/src/renderer/src/i18n/translate/pt-pt.json @@ -2121,12 +2121,13 @@ "openrouter": "OpenRouter", "ovms": "Intel OVMS", "perplexity": "Perplexidade", - "ph8": "Plataforma Aberta de Grandes Modelos PH8", + "ph8": "PH8", "poe": "Poe", "ppio": "PPIO Nuvem Piao", "qiniu": "Qiniu AI", "qwenlm": "QwenLM", "silicon": "Silício em Fluxo", + "sophnet": "SophNet", "stepfun": "Função de Passo Estelar", "tencent-cloud-ti": "Nuvem TI da Tencent", "together": "Juntos", diff --git a/src/renderer/src/i18n/translate/ru-ru.json b/src/renderer/src/i18n/translate/ru-ru.json index 66c8bc28b7..ee3d3ba613 100644 --- a/src/renderer/src/i18n/translate/ru-ru.json +++ b/src/renderer/src/i18n/translate/ru-ru.json @@ -2127,6 +2127,7 @@ "qiniu": "Qiniu AI", "qwenlm": "QwenLM", "silicon": "SiliconFlow", + "sophnet": "SophNet", "stepfun": "StepFun", "tencent-cloud-ti": "Tencent Cloud TI", "together": "Together", diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index 6f06bdd749..3348a64044 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -67,7 +67,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 163, + version: 164, blacklist: ['runtime', 'messages', 'messageBlocks', 'tabs'], migrate }, diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index f682b135de..53bad6775d 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -2609,6 +2609,16 @@ const migrateConfig = { logger.error('migrate 169 error', error as Error) return state } + }, + '164': (state: RootState) => { + try { + addProvider(state, 'sophnet') + state.llm.providers = moveProvider(state.llm.providers, 'sophnet', 17) + return state + } catch (error) { + logger.error('migrate 164 error', error as Error) + return state + } } } diff --git a/src/renderer/src/types/index.ts b/src/renderer/src/types/index.ts index a29e37b26d..96d3e0fc7f 100644 --- a/src/renderer/src/types/index.ts +++ b/src/renderer/src/types/index.ts @@ -327,7 +327,8 @@ export const SystemProviderIds = { 'aws-bedrock': 'aws-bedrock', poe: 'poe', aionly: 'aionly', - longcat: 'longcat' + longcat: 'longcat', + sophnet: 'sophnet' } as const export type SystemProviderId = keyof typeof SystemProviderIds