From f163ace86c707bb167937f1ec6a7473428bae7a3 Mon Sep 17 00:00:00 2001 From: littleRiceZhou <44719983+littleRiceZhou@users.noreply.github.com> Date: Thu, 3 Jul 2025 23:16:25 +0800 Subject: [PATCH] feat: add PH8 provider support (#7756) - Introduced PH8 provider with configuration and logo. - Updated SYSTEM_MODELS to include PH8 models. - Added PH8 to internationalization files for multiple languages. - Implemented migration logic to integrate PH8 into the existing provider structure. Co-authored-by: jack.li --- .../src/assets/images/providers/ph8.png | Bin 0 -> 8340 bytes src/renderer/src/config/models.ts | 16 +++++++++++++++- src/renderer/src/config/providers.ts | 13 +++++++++++++ src/renderer/src/i18n/locales/en-us.json | 3 ++- src/renderer/src/i18n/locales/ja-jp.json | 3 ++- src/renderer/src/i18n/locales/ru-ru.json | 3 ++- src/renderer/src/i18n/locales/zh-cn.json | 3 ++- src/renderer/src/i18n/locales/zh-tw.json | 3 ++- src/renderer/src/store/llm.ts | 10 ++++++++++ src/renderer/src/store/migrate.ts | 9 +++++++++ 10 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 src/renderer/src/assets/images/providers/ph8.png diff --git a/src/renderer/src/assets/images/providers/ph8.png b/src/renderer/src/assets/images/providers/ph8.png new file mode 100644 index 0000000000000000000000000000000000000000..a93a89d29a4b5801c9e202f7fc800cc9841ac618 GIT binary patch literal 8340 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 = { group: 'Jina AI' } ], + ph8: [ + { + id: 'deepseek-v3-241226', + name: 'deepseek-v3-241226', + provider: 'ph8', + group: 'DeepSeek' + }, + { + id: 'deepseek-r1-250120', + name: 'deepseek-r1-250120', + provider: 'ph8', + group: 'DeepSeek' + } + ], aihubmix: [ { id: 'o3', diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index 2de9ec4805..209eca2e84 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -35,6 +35,7 @@ import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png' import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.png' import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png' import PerplexityProviderLogo from '@renderer/assets/images/providers/perplexity.png' +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' @@ -52,6 +53,7 @@ import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png' import { TOKENFLUX_HOST } from './constant' const PROVIDER_LOGO_MAP = { + ph8: Ph8ProviderLogo, '302ai': Ai302ProviderLogo, openai: OpenAiProviderLogo, silicon: SiliconFlowProviderLogo, @@ -114,6 +116,17 @@ export const NOT_SUPPORTED_REANK_PROVIDERS = ['ollama'] export const ONLY_SUPPORTED_DIMENSION_PROVIDERS = ['ollama', 'infini'] export const PROVIDER_CONFIG = { + ph8: { + api: { + url: 'https://ph8.co' + }, + websites: { + official: 'https://ph8.co', + apiKey: 'https://ph8.co/apiKey', + docs: 'https://m1r239or5aw.feishu.cn/wiki/SegzwS4x1i2P4OksFY2cMvujn9f', + models: 'https://ph8.co/v1/models' + } + }, '302ai': { api: { url: 'https://api.302.ai' diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index bc63d6132c..3c48e82000 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -1060,7 +1060,8 @@ "tokenflux": "TokenFlux", "302ai": "302.AI", "lanyun": "LANYUN", - "vertexai": "Vertex AI" + "vertexai": "Vertex AI", + "ph8": "PH8" }, "restore": { "confirm": "Are you sure you want to restore data?", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 4180e7b20e..9ac68186d2 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -1060,7 +1060,8 @@ "302ai": "302.AI", "cephalon": "Cephalon", "lanyun": "LANYUN", - "vertexai": "Vertex AI" + "vertexai": "Vertex AI", + "ph8": "PH8" }, "restore": { "confirm": "データを復元しますか?", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 9efc0c7cc0..3f21cfbf73 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -1060,7 +1060,8 @@ "tokenflux": "TokenFlux", "302ai": "302.AI", "lanyun": "LANYUN", - "vertexai": "Vertex AI" + "vertexai": "Vertex AI", + "ph8": "PH8" }, "restore": { "confirm": "Вы уверены, что хотите восстановить данные?", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 76f1bfcee3..d56ee7a66a 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -1060,7 +1060,8 @@ "tokenflux": "TokenFlux", "302ai": "302.AI", "lanyun": "蓝耘科技", - "vertexai": "Vertex AI" + "vertexai": "Vertex AI", + "ph8": "PH8大模型开放平台" }, "restore": { "confirm": "确定要恢复数据吗?", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 531210b660..62413d3663 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -1060,7 +1060,8 @@ "tokenflux": "TokenFlux", "302ai": "302.AI", "lanyun": "藍耘", - "vertexai": "Vertex AI" + "vertexai": "Vertex AI", + "ph8": "PH8大模型開放平台" }, "restore": { "confirm": "確定要復原資料嗎?", diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index d42b4dc065..880770cbae 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -144,6 +144,16 @@ export const INITIAL_PROVIDERS: Provider[] = [ isSystem: true, enabled: false }, + { + id: 'ph8', + name: 'PH8', + type: 'openai', + apiKey: '', + apiHost: 'https://ph8.co', + models: SYSTEM_MODELS.ph8, + isSystem: true, + enabled: false + }, { id: 'cephalon', name: 'Cephalon', diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index a4e175429d..91c7051d8c 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -1754,6 +1754,15 @@ const migrateConfig = { } catch (error) { return state } + }, + '119': (state: RootState) => { + try { + addProvider(state, 'ph8') + state.llm.providers = moveProvider(state.llm.providers, 'ph8', 3) + return state + } catch (error) { + return state + } } }