feat: add CherryIN preset provider for Claude Code and Codex (#3643)

* feat: add CherryIN preset provider for Claude Code and Codex

CherryIN (open.cherryin.net) is an API aggregator gateway. Add it as a quick-config preset for both Claude Code (Anthropic format) and Codex (OpenAI-compatible), placed next to AiHubMix, with the official brand icon. Endpoints and model IDs verified against CherryIN's live pricing API.

* feat: add CherryIN preset to Gemini, Claude Desktop, OpenCode, OpenClaw, Hermes

Extend CherryIN coverage to all remaining apps, each placed next to AiHubMix. Anthropic-native (open.cherryin.net) for Claude Desktop/OpenClaw/Hermes, @ai-sdk/anthropic (/v1) for OpenCode, Gemini-compatible endpoint for Gemini CLI. Model IDs verified against CherryIN's live pricing API.
This commit is contained in:
zhibisora
2026-06-03 22:56:31 +08:00
committed by GitHub
parent ae90b53454
commit e458e77e30
10 changed files with 171 additions and 0 deletions
@@ -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",
+18
View File
@@ -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",
+14
View File
@@ -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",
+18
View File
@@ -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",
+20
View File
@@ -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",
+41
View File
@@ -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",
+27
View File
@@ -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",
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

+2
View File
@@ -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<string, string> = {
byteplus: _byteplus,
claudeapi: _claudeapi,
claudecn: _claudecn,
cherryin: _cherryin,
eflowcode: _eflowcode,
hermes: _hermes,
huoshan: _huoshan,
+15
View File
@@ -147,6 +147,21 @@ export const iconMetadata: Record<string, IconMetadata> = {
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",