diff --git a/src/renderer/src/assets/images/models/xirang.png b/src/renderer/src/assets/images/models/xirang.png new file mode 100644 index 00000000..18bd06a5 Binary files /dev/null and b/src/renderer/src/assets/images/models/xirang.png differ diff --git a/src/renderer/src/assets/images/models/xirang_dark.png b/src/renderer/src/assets/images/models/xirang_dark.png new file mode 100644 index 00000000..9168c332 Binary files /dev/null and b/src/renderer/src/assets/images/models/xirang_dark.png differ diff --git a/src/renderer/src/assets/images/providers/xirang.png b/src/renderer/src/assets/images/providers/xirang.png new file mode 100644 index 00000000..18bd06a5 Binary files /dev/null and b/src/renderer/src/assets/images/providers/xirang.png differ diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index a01e90ef..6eae34a6 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -126,6 +126,8 @@ import WenxinModelLogo from '@renderer/assets/images/models/wenxin.png' import WenxinModelLogoDark from '@renderer/assets/images/models/wenxin_dark.png' import YiModelLogo from '@renderer/assets/images/models/yi.png' import YiModelLogoDark from '@renderer/assets/images/models/yi_dark.png' +import XirangModelLogo from '@renderer/assets/images/models/xirang.png' +import XirangModelLogoDark from '@renderer/assets/images/models/xirang_dark.png' import { getProviderByModel } from '@renderer/services/AssistantService' import { Assistant, Model } from '@renderer/types' import OpenAI from 'openai' @@ -276,6 +278,7 @@ export function getModelLogo(modelId: string) { rakutenai: isLight ? RakutenaiModelLogo : RakutenaiModelLogoDark, ibm: isLight ? IbmModelLogo : IbmModelLogoDark, 'google/': isLight ? GoogleModelLogo : GoogleModelLogoDark, + xirang: isLight ? XirangModelLogo : XirangModelLogoDark, hugging: isLight ? HuggingfaceModelLogo : HuggingfaceModelLogoDark, embedding: isLight ? EmbeddingModelLogo : EmbeddingModelLogoDark, perplexity: isLight ? PerplexityModelLogo : PerplexityModelLogoDark, @@ -1714,6 +1717,20 @@ export const SYSTEM_MODELS: Record = { name: 'jina-embeddings-v2-base-code', group: 'Jina' } + ], + xirang: [ + { + id: 'xirang-1', + name: 'DeepSeek-R1', + provider: 'xirang', + group: 'xirang' + }, + { + id: 'xirang-2', + name: 'DeepSeek-V3', + provider: 'xirang', + group: 'xirang' + } ] } diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index 5d49669a..2c839bd0 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -37,6 +37,7 @@ 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' +import XirangProviderLogo from '@renderer/assets/images/providers/xirang.png' export function getProviderLogo(providerId: string) { switch (providerId) { case 'openai': @@ -67,6 +68,8 @@ export function getProviderLogo(providerId: string) { return BailianProviderLogo case 'modelscope': return ModelScopeProviderLogo + case 'xirang': + return XirangProviderLogo case 'anthropic': return AnthropicProviderLogo case 'aihubmix': @@ -323,6 +326,17 @@ export const PROVIDER_CONFIG = { models: 'https://modelscope.cn/models' } }, + xirang: { + api: { + url: 'https://wishub-x1.ctyun.cn/v1/' + }, + websites: { + official: 'https://www.ctyun.cn', + apiKey: 'https://www.ctyun.cn/act/xirang/deepseek', + docs: 'https://www.ctyun.cn/document', + models: 'https://www.ctyun.cn/act/xirang/deepseek' + } + }, dashscope: { api: { url: 'https://dashscope.aliyuncs.com/compatible-mode/v1/' diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 0d9fa15f..804a9560 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -559,7 +559,8 @@ "together": "Together", "yi": "Yi", "zhinao": "360AI", - "zhipu": "ZHIPU AI" + "zhipu": "ZHIPU AI", + "xirang": "TyyCloud Xirang" }, "settings": { "about": "About & Feedback", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 65c46b2e..0893d722 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -559,7 +559,8 @@ "together": "Together", "yi": "零一万物", "zhinao": "360智脳", - "zhipu": "智譜AI" + "zhipu": "智譜AI", + "xirang": "天翼クラウド 息壤" }, "settings": { "about": "について", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 05a1c5bc..d26f1c46 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -559,7 +559,8 @@ "together": "Together", "yi": "Yi", "zhinao": "360AI", - "zhipu": "ZHIPU AI" + "zhipu": "ZHIPU AI", + "xirang": "TyyCloud Xirang" }, "settings": { "about": "О программе и обратная связь", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 75445164..1aac824b 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -559,7 +559,8 @@ "together": "Together", "yi": "零一万物", "zhinao": "360智脑", - "zhipu": "智谱AI" + "zhipu": "智谱AI", + "xirang": "天翼云 息壤" }, "settings": { "about": "关于我们", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index bedd6374..ec10c256 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -559,7 +559,8 @@ "together": "Together", "yi": "零一萬物", "zhinao": "360智腦", - "zhipu": "智譜AI" + "zhipu": "智譜AI", + "xirang": "天翼雲 息壤" }, "settings": { "about": "關於與回饋", diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index 1a6fe425..99db1feb 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -406,6 +406,16 @@ const initialState: LlmState = { models: SYSTEM_MODELS.modelscope, isSystem: true, enabled: false + }, + { + id: 'xirang', + name: 'Xirang', + type: 'openai', + apiKey: '', + apiHost: 'https://wishub-x1.ctyun.cn', + models: SYSTEM_MODELS.xirang, + isSystem: true, + enabled: false } ], settings: { diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 6a1552e1..505aa684 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -1122,6 +1122,29 @@ const migrateConfig = { return state }, '73': (state: RootState) => { + const tempProviders = state.llm.providers + const xirangProvider = tempProviders.find((provider) => provider.id === 'xirang') + if (!xirangProvider) { + tempProviders.unshift({ + id: 'xirang', + name: 'Xirang', + type: 'openai', + apiKey: '', + apiHost: 'https://wishub-x1.ctyun.cn', + models: SYSTEM_MODELS.xirang, + isSystem: true, + enabled: false + }) + } + return { + ...state, + llm: { + ...state.llm, + providers: tempProviders + } + } + }, + '74': (state: RootState) => { if (state.websearch) { state.websearch.searchWithTime = true state.websearch.maxResults = 5