diff --git a/src/renderer/src/assets/images/providers/o3.png b/src/renderer/src/assets/images/providers/o3.png new file mode 100644 index 0000000000..2fdc1100a4 Binary files /dev/null and b/src/renderer/src/assets/images/providers/o3.png differ diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 1a4bdeb8f0..78b6529d3c 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -331,6 +331,134 @@ export const SYSTEM_MODELS: Record = { group: 'Qwen' } ], + o3: [ + { + id: 'gpt-4o', + provider: 'o3', + name: 'GPT-4o', + group: 'OpenAI' + }, + { + id: 'o1-mini', + provider: 'o3', + name: 'o1-mini', + group: 'OpenAI' + }, + { + id: 'o1-preview', + provider: 'o3', + name: 'o1-preview', + group: 'OpenAI' + }, + { + id: 'o3-mini', + provider: 'o3', + name: 'o3-mini', + group: 'OpenAI' + }, + { + id: 'o3-mini-high', + provider: 'o3', + name: 'o3-mini-high', + group: 'OpenAI' + }, + { + id: 'claude-3-7-sonnet-20250219', + provider: 'o3', + name: 'claude-3-7-sonnet-20250219', + group: 'Anthropic' + }, + { + id: 'claude-3-5-sonnet-20241022', + provider: 'o3', + name: 'claude-3-5-sonnet-20241022', + group: 'Anthropic' + }, + { + id: 'claude-3-5-haiku-20241022', + provider: 'o3', + name: 'claude-3-5-haiku-20241022', + group: 'Anthropic' + }, + { + id: 'claude-3-opus-20240229', + provider: 'o3', + name: 'claude-3-opus-20240229', + group: 'Anthropic' + }, + { + id: 'claude-3-haiku-20240307', + provider: 'o3', + name: 'claude-3-haiku-20240307', + group: 'Anthropic' + }, + { + id: 'claude-3-5-sonnet-20240620', + provider: 'o3', + name: 'claude-3-5-sonnet-20240620', + group: 'Anthropic' + }, + { + id: 'deepseek-ai/Deepseek-R1', + provider: 'o3', + name: 'DeepSeek R1', + group: 'DeepSeek' + }, + { + id: 'deepseek-reasoner', + provider: 'o3', + name: 'deepseek-reasoner', + group: 'DeepSeek' + }, + { + id: 'deepseek-chat', + provider: 'o3', + name: 'deepseek-chat', + group: 'DeepSeek' + }, + { + id: 'deepseek-ai/DeepSeek-V3', + provider: 'o3', + name: 'DeepSeek V3', + group: 'DeepSeek' + }, + { + id: 'text-embedding-3-small', + provider: 'o3', + name: 'text-embedding-3-small', + group: '嵌入模型' + }, + { + id: 'text-embedding-3-small', + provider: 'o3', + name: 'text-embedding-3-small', + group: '嵌入模型' + }, + { + id: 'text-embedding-ada-002', + provider: 'o3', + name: 'text-embedding-ada-002', + group: '嵌入模型' + }, + { + id: 'text-embedding-v2', + provider: 'o3', + name: 'text-embedding-v2', + group: '嵌入模型' + }, + { + id: 'Doubao-embedding', + provider: 'o3', + name: 'Doubao-embedding', + group: '嵌入模型' + }, + { + id: 'Doubao-embedding-large', + provider: 'o3', + name: 'Doubao-embedding-large', + group: '嵌入模型' + } + ], ollama: [], lmstudio: [], silicon: [ diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index a05900456c..5d49669ae8 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -24,6 +24,7 @@ import MistralProviderLogo from '@renderer/assets/images/providers/mistral.png' import ModelScopeProviderLogo from '@renderer/assets/images/providers/modelscope.png' import MoonshotProviderLogo from '@renderer/assets/images/providers/moonshot.png' import NvidiaProviderLogo from '@renderer/assets/images/providers/nvidia.png' +import O3ProviderLogo from '@renderer/assets/images/providers/o3.png' import OcoolAiProviderLogo from '@renderer/assets/images/providers/ocoolai.png' import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png' import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.png' @@ -114,6 +115,8 @@ export function getProviderLogo(providerId: string) { return PerplexityProviderLogo case 'infini': return InfiniProviderLogo + case 'o3': + return O3ProviderLogo default: return undefined } @@ -131,6 +134,17 @@ export const PROVIDER_CONFIG = { models: 'https://platform.openai.com/docs/models' } }, + o3: { + api: { + url: 'https://api.o3.fan' + }, + websites: { + official: 'https://o3.fan', + apiKey: 'https://o3.fan/token', + docs: 'https://docs.o3.fan', + models: 'https://docs.o3.fan/models' + } + }, ppio: { api: { url: 'https://api.ppinfra.com/v3/openai' diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 17e137bb02..0524006c09 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -519,6 +519,7 @@ "title": "You are an assistant who is good at conversation. You need to summarize the user's conversation into a title of 10 characters or less, ensuring it matches the user's primary language without using punctuation or other special symbols." }, "provider": { + "o3": "O3", "aihubmix": "AiHubMix", "anthropic": "Anthropic", "azure-openai": "Azure OpenAI", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 0ed5b07852..110cb92ecc 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -519,6 +519,7 @@ "title": "あなたは会話を得意とするアシスタントです。ユーザーの会話を10文字以内のタイトルに要約し、ユーザーの主言語と一致していることを確認してください。句読点や特殊記号は使用しないでください。" }, "provider": { + "o3": "O3", "aihubmix": "AiHubMix", "anthropic": "Anthropic", "azure-openai": "Azure OpenAI", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 256513e3f7..3adf4dc8f7 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -519,6 +519,7 @@ "title": "Вы - эксперт в общении, который суммирует разговоры пользователя в 10-символьном заголовке, совпадающем с языком пользователя, без использования знаков препинания и других специальных символов" }, "provider": { + "o3": "O3", "aihubmix": "AiHubMix", "anthropic": "Anthropic", "azure-openai": "Azure OpenAI", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 2cd0065165..3991331fc7 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -203,9 +203,9 @@ "http": { "400": "请求错误,请检查请求参数是否正确。如果修改了模型设置,请重置到默认设置", "401": "身份验证失败,请检查 API 密钥是否正确", - "403": "禁止访问,请检查是否实名认证,或联系服务商询问被禁止原因", + "403": "禁止访问,请翻译具体报错信息查看原因,或联系服务商询问被禁止原因", "404": "模型不存在或者请求路径错误", - "429": "请求过多,请稍后再试", + "429": "请求速率超过限制,请稍后再试", "500": "服务器错误,请稍后再试", "502": "网关错误,请稍后再试", "503": "服务不可用,请稍后再试", @@ -519,6 +519,7 @@ "title": "你是一名擅长会话的助理,你需要将用户的会话总结为 10 个字以内的标题,标题语言与用户的首要语言一致,不要使用标点符号和其他特殊符号" }, "provider": { + "o3": "O3", "aihubmix": "AiHubMix", "anthropic": "Anthropic", "azure-openai": "Azure OpenAI", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 2e300a4f59..8ac8eba499 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -519,6 +519,7 @@ "title": "你是一名擅長會話的助理,你需要將用戶的會話總結為 10 個字以內的標題,標題語言與用戶的首要語言一致,不要使用標點符號和其他特殊符號" }, "provider": { + "o3": "O3", "aihubmix": "AiHubMix", "anthropic": "Anthropic", "azure-openai": "Azure OpenAI", diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index d07366f1e1..5eff704c14 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -32,7 +32,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 73, + version: 74, blacklist: ['runtime'], migrate }, diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index 71dd400c5a..60f4477cf6 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -36,6 +36,16 @@ const initialState: LlmState = { isSystem: true, enabled: true }, + { + id: 'o3', + name: 'O3', + type: 'openai', + apiKey: '', + apiHost: 'https://api.o3.fan', + models: SYSTEM_MODELS.o3, + isSystem: true, + enabled: false + }, { id: 'aihubmix', name: 'AiHubMix', diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 34ffd2f74f..ecde9314d7 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -1161,6 +1161,26 @@ const migrateConfig = { .trim() } return state + }, + '74': (state: RootState) => { + return { + ...state, + llm: { + ...state.llm, + providers: [ + ...state.llm.providers, + { + id: 'o3', + name: 'O3', + apiKey: '', + apiHost: 'https://api.o3.fan', + models: SYSTEM_MODELS.o3, + isSystem: true, + enabled: false + } + ] + } + } } }