diff --git a/src/config/claudeDesktopProviderPresets.ts b/src/config/claudeDesktopProviderPresets.ts index 449633e5f..1886e18aa 100644 --- a/src/config/claudeDesktopProviderPresets.ts +++ b/src/config/claudeDesktopProviderPresets.ts @@ -529,6 +529,22 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ icon: "aihubmix", iconColor: "#006FFB", }, + { + name: "CherryIN", + websiteUrl: "https://open.cherryin.ai", + apiKeyUrl: "https://open.cherryin.ai/console/token", + category: "aggregator", + baseUrl: "https://open.cherryin.net", + mode: "direct", + apiFormat: "anthropic", + modelRoutes: mappedRoutes( + "anthropic/claude-sonnet-4.6", + "anthropic/claude-opus-4.8", + "anthropic/claude-haiku-4.5", + ), + endpointCandidates: ["https://open.cherryin.net"], + icon: "cherryin", + }, { name: "SiliconFlow", websiteUrl: "https://siliconflow.cn", diff --git a/src/config/claudeProviderPresets.ts b/src/config/claudeProviderPresets.ts index d61ef00c1..74f40baee 100644 --- a/src/config/claudeProviderPresets.ts +++ b/src/config/claudeProviderPresets.ts @@ -551,6 +551,24 @@ export const providerPresets: ProviderPreset[] = [ icon: "aihubmix", iconColor: "#006FFB", }, + { + name: "CherryIN", + websiteUrl: "https://open.cherryin.ai", + apiKeyUrl: "https://open.cherryin.ai/console/token", + settingsConfig: { + env: { + ANTHROPIC_BASE_URL: "https://open.cherryin.net", + ANTHROPIC_AUTH_TOKEN: "", + ANTHROPIC_MODEL: "anthropic/claude-sonnet-4.6", + ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5", + ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-4.6", + ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-4.8", + }, + }, + category: "aggregator", + endpointCandidates: ["https://open.cherryin.net"], + icon: "cherryin", + }, { name: "SiliconFlow", websiteUrl: "https://siliconflow.cn", diff --git a/src/config/codexProviderPresets.ts b/src/config/codexProviderPresets.ts index 4e906ada8..d76e84047 100644 --- a/src/config/codexProviderPresets.ts +++ b/src/config/codexProviderPresets.ts @@ -799,6 +799,20 @@ requires_openai_auth = true`, "https://api.aihubmix.com/v1", ], }, + { + name: "CherryIN", + websiteUrl: "https://open.cherryin.ai", + apiKeyUrl: "https://open.cherryin.ai/console/token", + auth: generateThirdPartyAuth(""), + config: generateThirdPartyConfig( + "cherryin", + "https://open.cherryin.net/v1", + "openai/gpt-5.5", + ), + endpointCandidates: ["https://open.cherryin.net/v1"], + category: "aggregator", + icon: "cherryin", + }, { name: "DMXAPI", websiteUrl: "https://www.dmxapi.cn", diff --git a/src/config/geminiProviderPresets.ts b/src/config/geminiProviderPresets.ts index 1771cefd8..f3e16fc0c 100644 --- a/src/config/geminiProviderPresets.ts +++ b/src/config/geminiProviderPresets.ts @@ -337,6 +337,24 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ endpointCandidates: ["https://api.lemondata.cc"], icon: "lemondata", }, + { + name: "CherryIN", + websiteUrl: "https://open.cherryin.ai", + apiKeyUrl: "https://open.cherryin.ai/console/token", + settingsConfig: { + env: { + GOOGLE_GEMINI_BASE_URL: "https://open.cherryin.net", + GEMINI_API_KEY: "", + GEMINI_MODEL: "google/gemini-3.5-flash", + }, + }, + baseURL: "https://open.cherryin.net", + model: "google/gemini-3.5-flash", + description: "CherryIN", + category: "aggregator", + endpointCandidates: ["https://open.cherryin.net"], + icon: "cherryin", + }, { name: "OpenRouter", websiteUrl: "https://openrouter.ai", diff --git a/src/config/hermesProviderPresets.ts b/src/config/hermesProviderPresets.ts index 31e9f3658..8746aefeb 100644 --- a/src/config/hermesProviderPresets.ts +++ b/src/config/hermesProviderPresets.ts @@ -654,6 +654,26 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ model: { default: "gpt-5.5", provider: "aihubmix" }, }, }, + { + name: "CherryIN", + websiteUrl: "https://open.cherryin.ai", + apiKeyUrl: "https://open.cherryin.ai/console/token", + settingsConfig: { + name: "cherryin", + base_url: "https://open.cherryin.net", + api_key: "", + api_mode: "anthropic_messages", + models: [ + { id: "anthropic/claude-opus-4.8", name: "Claude Opus 4.8" }, + { id: "anthropic/claude-sonnet-4.6", name: "Claude Sonnet 4.6" }, + ], + }, + category: "aggregator", + icon: "cherryin", + suggestedDefaults: { + model: { default: "anthropic/claude-opus-4.8", provider: "cherryin" }, + }, + }, { name: "SiliconFlow", websiteUrl: "https://siliconflow.cn", diff --git a/src/config/openclawProviderPresets.ts b/src/config/openclawProviderPresets.ts index 9fc704e94..a67f58cea 100644 --- a/src/config/openclawProviderPresets.ts +++ b/src/config/openclawProviderPresets.ts @@ -900,6 +900,47 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ }, }, }, + { + name: "CherryIN", + websiteUrl: "https://open.cherryin.ai", + apiKeyUrl: "https://open.cherryin.ai/console/token", + settingsConfig: { + baseUrl: "https://open.cherryin.net", + apiKey: "", + api: "anthropic-messages", + models: [ + { + id: "anthropic/claude-opus-4.8", + name: "Claude Opus 4.8", + contextWindow: 1000000, + }, + { + id: "anthropic/claude-sonnet-4.6", + name: "Claude Sonnet 4.6", + contextWindow: 1000000, + }, + ], + }, + category: "aggregator", + icon: "cherryin", + templateValues: { + apiKey: { + label: "API Key", + placeholder: "", + editorValue: "", + }, + }, + suggestedDefaults: { + model: { + primary: "cherryin/anthropic/claude-opus-4.8", + fallbacks: ["cherryin/anthropic/claude-sonnet-4.6"], + }, + modelCatalog: { + "cherryin/anthropic/claude-opus-4.8": { alias: "Opus" }, + "cherryin/anthropic/claude-sonnet-4.6": { alias: "Sonnet" }, + }, + }, + }, { name: "DMXAPI", websiteUrl: "https://www.dmxapi.cn", diff --git a/src/config/opencodeProviderPresets.ts b/src/config/opencodeProviderPresets.ts index 8e043e8c2..6332d5a7a 100644 --- a/src/config/opencodeProviderPresets.ts +++ b/src/config/opencodeProviderPresets.ts @@ -989,6 +989,33 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ }, }, }, + { + name: "CherryIN", + websiteUrl: "https://open.cherryin.ai", + apiKeyUrl: "https://open.cherryin.ai/console/token", + settingsConfig: { + npm: "@ai-sdk/anthropic", + name: "CherryIN", + options: { + baseURL: "https://open.cherryin.net/v1", + apiKey: "", + setCacheKey: true, + }, + models: { + "anthropic/claude-sonnet-4.6": { name: "Claude Sonnet 4.6" }, + "anthropic/claude-opus-4.8": { name: "Claude Opus 4.8" }, + }, + }, + category: "aggregator", + icon: "cherryin", + templateValues: { + apiKey: { + label: "API Key", + placeholder: "", + editorValue: "", + }, + }, + }, { name: "DMXAPI", websiteUrl: "https://www.dmxapi.cn", diff --git a/src/icons/extracted/cherryin.png b/src/icons/extracted/cherryin.png new file mode 100644 index 000000000..ff4a6c079 Binary files /dev/null and b/src/icons/extracted/cherryin.png differ diff --git a/src/icons/extracted/index.ts b/src/icons/extracted/index.ts index d11976b52..80ec6a43d 100644 --- a/src/icons/extracted/index.ts +++ b/src/icons/extracted/index.ts @@ -7,6 +7,7 @@ import _atlascloud from "./atlascloud_icon.png"; import _claudeapi from "./ClaudeApi.png"; import _byteplus from "./byteplus.png"; import _claudecn from "./claudecn.png"; +import _cherryin from "./cherryin.png"; import _eflowcode from "./eflowcode.png"; import _hermes from "./hermes.png"; import _huoshan from "./huoshan.png"; @@ -98,6 +99,7 @@ export const iconUrls: Record = { byteplus: _byteplus, claudeapi: _claudeapi, claudecn: _claudecn, + cherryin: _cherryin, eflowcode: _eflowcode, hermes: _hermes, huoshan: _huoshan, diff --git a/src/icons/extracted/metadata.ts b/src/icons/extracted/metadata.ts index b589dc691..eb979496e 100644 --- a/src/icons/extracted/metadata.ts +++ b/src/icons/extracted/metadata.ts @@ -147,6 +147,21 @@ export const iconMetadata: Record = { keywords: ["anthropic"], defaultColor: "#D4915D", }, + cherryin: { + name: "cherryin", + displayName: "CherryIN", + category: "ai-provider", + keywords: [ + "cherryin", + "cherry", + "gateway", + "relay", + "newapi", + "claude", + "codex", + ], + defaultColor: "#FB6354", + }, claudeapi: { name: "claudeapi", displayName: "ClaudeAPI",