diff --git a/src/renderer/src/assets/images/apps/paratera.ico b/src/renderer/src/assets/images/apps/paratera.ico new file mode 100644 index 0000000000..ff3958618c Binary files /dev/null and b/src/renderer/src/assets/images/apps/paratera.ico differ diff --git a/src/renderer/src/config/minapps.ts b/src/renderer/src/config/minapps.ts index 6a2f01df40..9debf6f555 100644 --- a/src/renderer/src/config/minapps.ts +++ b/src/renderer/src/config/minapps.ts @@ -1,4 +1,5 @@ import n8nLogo from '@renderer/assets/images/apps/n8n.ico?url' +import ParateraLogo from '@renderer/assets/images/apps/paratera.ico?url' import ApplicationLogo from '@renderer/assets/images/apps/application.png?url' import ThreeMinTopAppLogo from '@renderer/assets/images/apps/3mintop.png?url' import AbacusLogo from '@renderer/assets/images/apps/abacus.webp?url' @@ -450,6 +451,12 @@ const ORIGIN_DEFAULT_MIN_APPS: MinAppType[] = [ padding: 10 } }, + { + id: 'paratera', + name: 'ParateraAI', + logo: ParateraLogo, + url: 'https://ai.paratera.com/' + }, { id: 'n8n', name: 'n8n', diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 65ed25a04f..77d9efc615 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -2074,6 +2074,62 @@ export const SYSTEM_MODELS: Record = { name: 'Qwen2.5 72B Instruct', group: 'Qwen' } + ], + paratera: [ + { + id: 'GLM-Z1-Flash-P002', + provider: 'paratera', + name: 'GLM-Z1-Flash-P002', + group: 'GLM' + }, + { + id: 'GLM-Z1-AirX-P002', + provider: 'paratera', + name: 'GLM-Z1-AirX-P002', + group: 'GLM' + }, + { + id: 'DeepSeek-V3-250324-P001', + provider: 'paratera', + name: 'DeepSeek-V3-250324-P001', + group: 'DeepSeek' + }, + { + id: 'DeepSeek-R1', + provider: 'paratera', + name: 'DeepSeek-R1', + group: 'DeepSeek' + }, + { + id: 'QwQ-N011-32B', + provider: 'paratera', + name: 'QwQ-N011-32B', + group: 'Qwen' + }, + { + id: 'GLM-Embedding-2-P002', + provider: 'paratera', + name: 'GLM-Embedding-2-P002', + group: 'GLM' + }, + { + id: 'GLM-Embedding-3-P002', + provider: 'paratera', + name: 'GLM-Embedding-3-P002', + group: 'GLM' + }, + { + id: 'Doubao-Embedding-Text-P001', + provider: 'paratera', + name: 'Doubao-Embedding-Text-P001', + group: 'Doubao' + }, + { + id: 'Doubao-Embedding-Large-Text-P001', + provider: 'paratera', + name: 'Doubao-Embedding-Large-Text-P001', + group: 'Doubao' + } ] } diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index 81407a8ae2..48ca7c9cc7 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -42,6 +42,7 @@ import VoyageAIProviderLogo from '@renderer/assets/images/providers/voyageai.png import XirangProviderLogo from '@renderer/assets/images/providers/xirang.png' import ZeroOneProviderLogo from '@renderer/assets/images/providers/zero-one.png' import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png' +import ParateraLogo from '@renderer/assets/images/apps/paratera.ico' const PROVIDER_LOGO_MAP = { openai: OpenAiProviderLogo, @@ -88,7 +89,8 @@ const PROVIDER_LOGO_MAP = { gpustack: GPUStackProviderLogo, alayanew: AlayaNewProviderLogo, voyageai: VoyageAIProviderLogo, - qiniu: QiniuProviderLogo + qiniu: QiniuProviderLogo, + paratera: ParateraLogo } as const export function getProviderLogo(providerId: string) { @@ -583,5 +585,16 @@ export const PROVIDER_CONFIG = { docs: 'https://developer.qiniu.com/aitokenapi', models: 'https://developer.qiniu.com/aitokenapi/12883/model-list' } + }, + paratera: { + api: { + url: 'https://llmapi.paratera.com' + }, + websites: { + official: 'https://ai.paratera.com/', + apiKey: 'https://ai.paratera.com/#/lms/api', + docs: 'https://ai.paratera.com/document/llm/quickStart/useApi', + models: 'https://ai.paratera.com/#/lms/model' + } } } diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index e8f4c2ac32..df7af60f69 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -46,7 +46,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 98, + version: 99, blacklist: ['runtime', 'messages', 'messageBlocks'], migrate }, diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index 27a68b342b..293a8db50f 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -476,6 +476,16 @@ export const INITIAL_PROVIDERS: Provider[] = [ models: SYSTEM_MODELS.voyageai, isSystem: true, enabled: false + }, + { + id: 'paratera', + name: 'Paratera AI', + type: 'openai-compatible', + apiKey: '', + apiHost: 'https://llmapi.paratera.com', + models: SYSTEM_MODELS.paratera, + isSystem: true, + enabled: false } ] diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index f09ce39536..69abd39eb9 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -1248,6 +1248,15 @@ const migrateConfig = { provider.type = 'openai-compatible' } }) + return state + } catch (error) { + return state + } + }, + '99': (state: RootState) => { + try { + addProvider(state, 'paratera') + return state } catch (error) { return state