From a847b74c3236ca4def5031b749466fdbefd54039 Mon Sep 17 00:00:00 2001 From: jo1yne06 Date: Tue, 23 Sep 2025 19:49:24 +0800 Subject: [PATCH] feat: add new provider aionly (#10179) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add new provider aionly * fix(store): update migration to properly add 'aionly' provider in v156 Move 'aionly' provider addition from v155 to v156 migration to ensure proper state initialization --------- Co-authored-by: fengjunhao <765838796@qq.com> Co-authored-by: Phantom <59059173+EurFelux@users.noreply.github.com> Co-authored-by: icarus Co-authored-by: 亢奋猫 --- src/main/services/WindowService.ts | 3 +- .../src/assets/images/providers/aiOnly.png | Bin 0 -> 41426 bytes .../src/components/OAuth/OAuthButton.tsx | 5 +++ src/renderer/src/config/models/default.ts | 32 ++++++++++++++++++ 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 | 1 + src/renderer/src/i18n/translate/es-es.json | 1 + src/renderer/src/i18n/translate/fr-fr.json | 1 + src/renderer/src/i18n/translate/ja-jp.json | 1 + src/renderer/src/i18n/translate/pt-pt.json | 1 + src/renderer/src/i18n/translate/ru-ru.json | 1 + .../ProviderSettings/ProviderOAuth.tsx | 4 ++- src/renderer/src/services/ProviderService.ts | 2 +- src/renderer/src/store/migrate.ts | 1 + src/renderer/src/types/index.ts | 3 +- src/renderer/src/utils/oauth.ts | 31 +++++++++++++++++ 20 files changed, 112 insertions(+), 6 deletions(-) create mode 100644 src/renderer/src/assets/images/providers/aiOnly.png diff --git a/src/main/services/WindowService.ts b/src/main/services/WindowService.ts index 9b8a176a34..7cf01b9fc7 100644 --- a/src/main/services/WindowService.ts +++ b/src/main/services/WindowService.ts @@ -275,7 +275,8 @@ export class WindowService { 'https://aihubmix.com/topup', 'https://aihubmix.com/statistics', 'https://dash.302.ai/sso/login', - 'https://dash.302.ai/charge' + 'https://dash.302.ai/charge', + 'https://www.aiionly.com/login' ] if (oauthProviderUrls.some((link) => url.startsWith(link))) { diff --git a/src/renderer/src/assets/images/providers/aiOnly.png b/src/renderer/src/assets/images/providers/aiOnly.png new file mode 100644 index 0000000000000000000000000000000000000000..a521f3bcb87c1f352868fd3774bf3f16640e902c GIT binary patch literal 41426 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 SsFg2)e`-qFily>*L;gSV8mck? literal 0 HcmV?d00001 diff --git a/src/renderer/src/components/OAuth/OAuthButton.tsx b/src/renderer/src/components/OAuth/OAuthButton.tsx index fec3aae619..3368f60afe 100644 --- a/src/renderer/src/components/OAuth/OAuthButton.tsx +++ b/src/renderer/src/components/OAuth/OAuthButton.tsx @@ -3,6 +3,7 @@ import { Provider } from '@renderer/types' import { oauthWith302AI, oauthWithAihubmix, + oauthWithAiOnly, oauthWithPPIO, oauthWithSiliconFlow, oauthWithTokenFlux @@ -46,6 +47,10 @@ const OAuthButton: FC = ({ provider, onSuccess, ...buttonProps }) => { if (provider.id === '302ai') { oauthWith302AI(handleSuccess) } + + if (provider.id === 'aionly') { + oauthWithAiOnly(handleSuccess) + } } return ( diff --git a/src/renderer/src/config/models/default.ts b/src/renderer/src/config/models/default.ts index 1b8e9ad1bc..2f13a5e993 100644 --- a/src/renderer/src/config/models/default.ts +++ b/src/renderer/src/config/models/default.ts @@ -1785,5 +1785,37 @@ export const SYSTEM_MODELS: Record = provider: 'poe', group: 'poe' } + ], + aionly: [ + { + id: 'claude-opus-4.1', + name: 'claude-opus-4.1', + provider: 'aionly', + group: 'claude' + }, + { + id: 'claude-sonnet4', + name: 'claude-sonnet4', + provider: 'aionly', + group: 'claude' + }, + { + id: 'claude-3.5-sonnet-v2', + name: 'claude-3.5-sonnet-v2', + provider: 'aionly', + group: 'claude' + }, + { + id: 'gpt-4.1', + name: 'gpt-4.1', + provider: 'aionly', + group: 'gpt' + }, + { + id: 'gemini-2.5-flash', + name: 'gemini-2.5-flash', + provider: 'aionly', + group: 'gemini' + } ] } diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index a710605b64..e07414e2c2 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -3,6 +3,7 @@ import HunyuanProviderLogo from '@renderer/assets/images/models/hunyuan.png' import AzureProviderLogo from '@renderer/assets/images/models/microsoft.png' import Ai302ProviderLogo from '@renderer/assets/images/providers/302ai.webp' import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.webp' +import AiOnlyProviderLogo from '@renderer/assets/images/providers/aiOnly.png' import AlayaNewProviderLogo from '@renderer/assets/images/providers/alayanew.webp' import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.png' import AwsProviderLogo from '@renderer/assets/images/providers/aws-bedrock.webp' @@ -600,6 +601,16 @@ export const SYSTEM_PROVIDERS_CONFIG: Record = models: SYSTEM_MODELS['poe'], isSystem: true, enabled: false + }, + aionly: { + id: 'aionly', + name: 'AIOnly', + type: 'openai', + apiKey: '', + apiHost: 'https://api.aiionly.com', + models: SYSTEM_MODELS.aionly, + isSystem: true, + enabled: false } } as const @@ -661,7 +672,8 @@ export const PROVIDER_LOGO_MAP: AtLeast = { vertexai: VertexAIProviderLogo, 'new-api': NewAPIProviderLogo, 'aws-bedrock': AwsProviderLogo, - poe: 'poe' // use svg icon component + poe: 'poe', // use svg icon component + aionly: AiOnlyProviderLogo } as const export function getProviderLogo(providerId: string) { @@ -1255,6 +1267,17 @@ export const PROVIDER_URLS: Record = { docs: 'https://creator.poe.com/docs/external-applications/openai-compatible-api', models: 'https://poe.com/' } + }, + aionly: { + api: { + url: 'https://api.aiionly.com' + }, + websites: { + official: 'https://www.aiionly.com', + apiKey: 'https://www.aiionly.com/keyApi', + docs: 'https://www.aiionly.com/document', + models: 'https://www.aiionly.com' + } } } diff --git a/src/renderer/src/i18n/label.ts b/src/renderer/src/i18n/label.ts index 8d621f6517..a07daa975f 100644 --- a/src/renderer/src/i18n/label.ts +++ b/src/renderer/src/i18n/label.ts @@ -80,7 +80,8 @@ const providerKeyMap = { yi: 'provider.yi', zhinao: 'provider.zhinao', zhipu: 'provider.zhipu', - poe: 'provider.poe' + poe: 'provider.poe', + aionly: 'provider.aionly' } as const /** diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index d576d5544f..dfd09049ed 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -2018,6 +2018,7 @@ "provider": { "302ai": "302.AI", "aihubmix": "AiHubMix", + "aionly": "AiOnly", "alayanew": "Alaya NeW", "anthropic": "Anthropic", "aws-bedrock": "AWS Bedrock", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 28a53923e5..defbfe9dd6 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -2018,6 +2018,7 @@ "provider": { "302ai": "302.AI", "aihubmix": "AiHubMix", + "aionly": "唯一AI(AiOnly)", "alayanew": "Alaya NeW", "anthropic": "Anthropic", "aws-bedrock": "AWS Bedrock", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index e191e940c7..b5ac09bb7f 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -2018,6 +2018,7 @@ "provider": { "302ai": "302.AI", "aihubmix": "AiHubMix", + "aionly": "唯一AI(AiOnly)", "alayanew": "Alaya NeW", "anthropic": "Anthropic", "aws-bedrock": "AWS Bedrock", diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json index 8741347fcf..71aca53b82 100644 --- a/src/renderer/src/i18n/translate/el-gr.json +++ b/src/renderer/src/i18n/translate/el-gr.json @@ -2017,6 +2017,7 @@ "provider": { "302ai": "302.AI", "aihubmix": "AiHubMix", + "aionly": "AiOnly", "alayanew": "Alaya NeW", "anthropic": "Anthropic", "aws-bedrock": "AWS Bedrock", diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json index 7bbb64a11c..de3b5cb17f 100644 --- a/src/renderer/src/i18n/translate/es-es.json +++ b/src/renderer/src/i18n/translate/es-es.json @@ -2017,6 +2017,7 @@ "provider": { "302ai": "302.AI", "aihubmix": "AiHubMix", + "aionly": "AiOnly", "alayanew": "Alaya NeW", "anthropic": "Antropológico", "aws-bedrock": "AWS Bedrock", diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json index ab74489903..66a3a5b4ae 100644 --- a/src/renderer/src/i18n/translate/fr-fr.json +++ b/src/renderer/src/i18n/translate/fr-fr.json @@ -2017,6 +2017,7 @@ "provider": { "302ai": "302.AI", "aihubmix": "AiHubMix", + "aionly": "AiOnly", "alayanew": "Alaya NeW", "anthropic": "Anthropic", "aws-bedrock": "AWS Bedrock", diff --git a/src/renderer/src/i18n/translate/ja-jp.json b/src/renderer/src/i18n/translate/ja-jp.json index 04bac6fbd0..bee5f54470 100644 --- a/src/renderer/src/i18n/translate/ja-jp.json +++ b/src/renderer/src/i18n/translate/ja-jp.json @@ -2017,6 +2017,7 @@ "provider": { "302ai": "302.AI", "aihubmix": "AiHubMix", + "aionly": "AiOnly", "alayanew": "Alaya NeW", "anthropic": "Anthropic", "aws-bedrock": "AWS Bedrock", diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json index 4f18f55ef7..5c9bbf566e 100644 --- a/src/renderer/src/i18n/translate/pt-pt.json +++ b/src/renderer/src/i18n/translate/pt-pt.json @@ -2017,6 +2017,7 @@ "provider": { "302ai": "302.AI", "aihubmix": "AiHubMix", + "aionly": "AiOnly", "alayanew": "Alaya NeW", "anthropic": "Antropológico", "aws-bedrock": "AWS Bedrock", diff --git a/src/renderer/src/i18n/translate/ru-ru.json b/src/renderer/src/i18n/translate/ru-ru.json index 88ce796529..ec50afccd0 100644 --- a/src/renderer/src/i18n/translate/ru-ru.json +++ b/src/renderer/src/i18n/translate/ru-ru.json @@ -2017,6 +2017,7 @@ "provider": { "302ai": "302.AI", "aihubmix": "AiHubMix", + "aionly": "AiOnly", "alayanew": "Alaya NeW", "anthropic": "Anthropic", "aws-bedrock": "AWS Bedrock", diff --git a/src/renderer/src/pages/settings/ProviderSettings/ProviderOAuth.tsx b/src/renderer/src/pages/settings/ProviderSettings/ProviderOAuth.tsx index 5315110dc2..5fdafa5f23 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/ProviderOAuth.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/ProviderOAuth.tsx @@ -1,5 +1,6 @@ import AI302ProviderLogo from '@renderer/assets/images/providers/302ai.webp' import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.webp' +import AiOnlyProviderLogo from '@renderer/assets/images/providers/aiOnly.png' import PPIOProviderLogo from '@renderer/assets/images/providers/ppio.png' import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.png' import TokenFluxProviderLogo from '@renderer/assets/images/providers/tokenflux.png' @@ -25,7 +26,8 @@ const PROVIDER_LOGO_MAP = { silicon: SiliconFlowProviderLogo, aihubmix: AiHubMixProviderLogo, ppio: PPIOProviderLogo, - tokenflux: TokenFluxProviderLogo + tokenflux: TokenFluxProviderLogo, + aionly: AiOnlyProviderLogo } const ProviderOAuth: FC = ({ providerId }) => { diff --git a/src/renderer/src/services/ProviderService.ts b/src/renderer/src/services/ProviderService.ts index 7a6409c903..da6df82adc 100644 --- a/src/renderer/src/services/ProviderService.ts +++ b/src/renderer/src/services/ProviderService.ts @@ -33,7 +33,7 @@ export function getProviderByModel(model?: Model) { } export function isProviderSupportAuth(provider: Provider) { - const supportProviders = ['302ai', 'silicon', 'aihubmix', 'ppio', 'tokenflux'] + const supportProviders = ['302ai', 'silicon', 'aihubmix', 'ppio', 'tokenflux', 'aionly'] return supportProviders.includes(provider.id) } diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 41fa441945..f7fc92ee44 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -2479,6 +2479,7 @@ const migrateConfig = { }, '156': (state: RootState) => { try { + addProvider(state, 'aionly') state.llm.providers.forEach((provider) => { if (provider.id === SystemProviderIds.anthropic) { if (provider.apiHost.endsWith('/')) { diff --git a/src/renderer/src/types/index.ts b/src/renderer/src/types/index.ts index cd2562e55a..2d580c8e37 100644 --- a/src/renderer/src/types/index.ts +++ b/src/renderer/src/types/index.ts @@ -321,7 +321,8 @@ export const SystemProviderIds = { gpustack: 'gpustack', voyageai: 'voyageai', 'aws-bedrock': 'aws-bedrock', - poe: 'poe' + poe: 'poe', + aionly: 'aionly' } as const export type SystemProviderId = keyof typeof SystemProviderIds diff --git a/src/renderer/src/utils/oauth.ts b/src/renderer/src/utils/oauth.ts index 9fbb632a07..5d57547f69 100644 --- a/src/renderer/src/utils/oauth.ts +++ b/src/renderer/src/utils/oauth.ts @@ -172,6 +172,27 @@ export const oauthWith302AI = async (setKey) => { window.addEventListener('message', messageHandler) } +export const oauthWithAiOnly = async (setKey) => { + const authUrl = `https://www.aiionly.com/login?inviteCode=1755481173663DrZBBOC0&cherryCode=01` + + const popup = window.open( + authUrl, + 'login', + 'width=720,height=720,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,alwaysOnTop=yes,alwaysRaised=yes' + ) + + const messageHandler = (event) => { + if (event.data.length > 0 && event.data[0]['secretKey'] !== undefined) { + setKey(event.data[0]['secretKey']) + popup?.close() + window.removeEventListener('message', messageHandler) + } + } + + window.removeEventListener('message', messageHandler) + window.addEventListener('message', messageHandler) +} + export const providerCharge = async (provider: string) => { const chargeUrlMap = { silicon: { @@ -198,6 +219,11 @@ export const providerCharge = async (provider: string) => { url: 'https://dash.302.ai/charge', width: 900, height: 700 + }, + aionly: { + url: `https://www.aiionly.com/recharge`, + width: 900, + height: 700 } } @@ -236,6 +262,11 @@ export const providerBills = async (provider: string) => { url: 'https://dash.302.ai/charge', width: 900, height: 700 + }, + aionly: { + url: `https://www.aiionly.com/billManagement`, + width: 900, + height: 700 } }