diff --git a/open-sse/providers/registry/api-airforce.js b/open-sse/providers/registry/api-airforce.js new file mode 100644 index 00000000..ce1e070c --- /dev/null +++ b/open-sse/providers/registry/api-airforce.js @@ -0,0 +1,40 @@ +export default { + id: "api-airforce", + alias: "af", + aliases: [ + "airforce", + ], + uiAlias: "af", + display: { + name: "API.airforce", + icon: "flight", + color: "#0EA5E9", + textIcon: "AF", + website: "https://api.airforce", + notice: { + apiKeyUrl: "https://api.airforce", + }, + }, + category: "freeTier", + authType: "apikey", + authModes: [ + "apikey", + ], + transport: { + baseUrl: "https://api.airforce/v1/chat/completions", + validateUrl: "https://api.airforce/v1/models", + headers: { + "HTTP-Referer": "https://endpoint-proxy.local", + "X-Title": "Endpoint Proxy", + }, + }, + models: [ + { id: "x-ai/grok-3", name: "Grok-3 (Free)", contextLength: 131072 }, + { id: "x-ai/grok-2-1212", name: "Grok-2 1212 (Free)", contextLength: 131072 }, + { id: "anthropic/claude-3.7-sonnet", name: "Claude 3.7 Sonnet (Free)", contextLength: 200000 }, + { id: "qwen/qwen3-32b", name: "Qwen3 32B (Free)", contextLength: 128000 }, + { id: "moonshot/kimi-k2.6", name: "Kimi K2.6 (Free)", contextLength: 262144 }, + { id: "google/gemini-2.5-flash", name: "Gemini 2.5 Flash (Free)", contextLength: 1048576 }, + { id: "deepseek/deepseek-v3", name: "DeepSeek V3 (Free)", contextLength: 262144 }, + ], +}; diff --git a/open-sse/providers/registry/baidu.js b/open-sse/providers/registry/baidu.js new file mode 100644 index 00000000..efba77ca --- /dev/null +++ b/open-sse/providers/registry/baidu.js @@ -0,0 +1,42 @@ +export default { + id: "baidu", + alias: "qianfan", + aliases: ["qianfan", "ernie", "baidu-qianfan"], + uiAlias: "qianfan", + category: "apikey", + authType: "apikey", + authModes: ["apikey"], + display: { + name: "Baidu Qianfan", + icon: "search", + color: "#2932E1", + textIcon: "BD", + website: "https://cloud.baidu.com/product/qianfan.html", + notice: { + apiKeyUrl: + "https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application", + }, + }, + transport: { + baseUrl: "https://qianfan.baidubce.com/v2/chat/completions", + validateUrl: "https://qianfan.baidubce.com/v2/models", + }, + models: [ + { id: "ernie-5.1", name: "ERNIE 5.1" }, + { id: "ernie-5.0", name: "ERNIE 5.0" }, + { id: "ernie-x1.1", name: "ERNIE X1.1" }, + { id: "ernie-4.5-turbo-128k", name: "ERNIE 4.5 Turbo 128K" }, + { id: "ernie-4.5-turbo-32k", name: "ERNIE 4.5 Turbo 32K" }, + { id: "ernie-4.5-turbo-vl", name: "ERNIE 4.5 Turbo VL" }, + { id: "ernie-4.5-21b-a3b", name: "ERNIE 4.5 21B A3B" }, + { id: "ernie-4.5-0.3b", name: "ERNIE 4.5 0.3B" }, + { id: "ernie-4.0-8k", name: "ERNIE 4.0 8K" }, + { id: "ernie-4.0-turbo-128k", name: "ERNIE 4.0 Turbo 128K" }, + { id: "ernie-4.0-turbo-8k", name: "ERNIE 4.0 Turbo 8K" }, + { id: "ernie-3.5-8k", name: "ERNIE 3.5 8K" }, + { id: "ernie-speed-128k", name: "ERNIE Speed 128K" }, + { id: "ernie-speed-8k", name: "ERNIE Speed 8K" }, + { id: "ernie-lite-8k", name: "ERNIE Lite 8K" }, + { id: "ernie-tiny-8k", name: "ERNIE Tiny 8K" }, + ], +}; diff --git a/open-sse/providers/registry/bazaarlink.js b/open-sse/providers/registry/bazaarlink.js new file mode 100644 index 00000000..0127452f --- /dev/null +++ b/open-sse/providers/registry/bazaarlink.js @@ -0,0 +1,56 @@ +export default { + id: "bazaarlink", + alias: "bzl", + aliases: ["bazaar-link"], + uiAlias: "bzl", + category: "apikey", + authType: "apikey", + authModes: ["apikey"], + display: { + name: "Bazaarlink", + icon: "storefront", + color: "#DC2626", + textIcon: "BZ", + website: "https://bazaarlink.ai", + notice: { apiKeyUrl: "https://bazaarlink.ai" }, + }, + transport: { + baseUrl: "https://bazaarlink.ai/api/v1/chat/completions", + validateUrl: "https://bazaarlink.ai/api/v1/models", + }, + models: [ + { id: "auto:free", name: "Auto Free (Zero Cost)" }, + { id: "claude-opus-4.7", name: "Claude Opus 4.7" }, + { id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6" }, + { id: "claude-haiku-4.5", name: "Claude Haiku 4.5" }, + { id: "gpt-5.5", name: "GPT-5.5" }, + { id: "gpt-5.4", name: "GPT-5.4" }, + { id: "gpt-5.4-mini", name: "GPT-5.4 Mini" }, + { id: "gpt-5.4-nano", name: "GPT-5.4 Nano" }, + { id: "grok-4.3", name: "Grok 4.3" }, + { id: "grok-4.20", name: "Grok 4.20" }, + { id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro" }, + { id: "gemini-3-flash-preview", name: "Gemini 3 Flash" }, + { id: "gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite" }, + { id: "gemma-4-31b-it", name: "Gemma 4 31B" }, + { id: "gemma-4-26b-a4b-it", name: "Gemma 4 26B A4B" }, + { id: "deepseek-v3.2", name: "DeepSeek V3.2" }, + { id: "kimi-k2.6", name: "Kimi K2.6" }, + { id: "kimi-k2.5", name: "Kimi K2.5" }, + { id: "glm-5.1", name: "GLM 5.1" }, + { id: "glm-5", name: "GLM 5" }, + { id: "mimo-v2.5-pro", name: "MiMo-V2.5-Pro" }, + { id: "mimo-v2.5", name: "MiMo-V2.5" }, + { id: "minimax-m3", name: "MiniMax M3" }, + { id: "minimax-m2.7", name: "MiniMax M2.7" }, + { id: "minimax-m2.5", name: "MiniMax M2.5" }, + { id: "llama-4-maverick", name: "Llama 4 Maverick" }, + { id: "llama-4-scout", name: "Llama 4 Scout" }, + { id: "llama-3.3-70b-instruct", name: "Llama 3.3 70B" }, + { id: "qwen3.6-plus", name: "Qwen 3.6 Plus" }, + { id: "mistral-large-2512", name: "Mistral Large 3" }, + { id: "mistral-medium-3.1", name: "Mistral Medium 3.1" }, + { id: "mistral-small-2603", name: "Mistral Small 4" }, + { id: "nemotron-3-super-120b-a12b", name: "Nemotron 3 Super" }, + ], +}; diff --git a/open-sse/providers/registry/bluesminds.js b/open-sse/providers/registry/bluesminds.js new file mode 100644 index 00000000..298ffec8 --- /dev/null +++ b/open-sse/providers/registry/bluesminds.js @@ -0,0 +1,45 @@ +export default { + id: "bluesminds", + alias: "bm", + aliases: ["blue-sminds"], + uiAlias: "bm", + display: { + name: "BluesMinds", + icon: "psychology", + color: "#2563EB", + textIcon: "BM", + website: "https://bluesminds.com", + notice: { apiKeyUrl: "https://bluesminds.com" }, + }, + category: "apikey", + authType: "apikey", + authModes: ["apikey"], + transport: { + baseUrl: "https://api.bluesminds.com/v1/chat/completions", + validateUrl: "https://api.bluesminds.com/v1/models", + }, + models: [ + { id: "gpt-4o", name: "GPT-4o" }, + { id: "gpt-4o-mini", name: "GPT-4o Mini" }, + { id: "gpt-4.1", name: "GPT-4.1" }, + { id: "gpt-4.1-mini", name: "GPT-4.1 Mini" }, + { id: "gpt-4.1-nano", name: "GPT-4.1 Nano" }, + { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5" }, + { id: "claude-haiku-4-5", name: "Claude Haiku 4.5" }, + { id: "gemini-2.0-flash", name: "Gemini 2.0 Flash" }, + { id: "gemini-2.0-flash-exp", name: "Gemini 2.0 Flash (Exp)" }, + { id: "deepseek-reasoner", name: "DeepSeek Reasoner" }, + { id: "deepseek-chat", name: "DeepSeek Chat" }, + { id: "qwen-plus", name: "Qwen Plus" }, + { id: "qwen-turbo", name: "Qwen Turbo" }, + { id: "kimi-k2", name: "Kimi K2" }, + { id: "kimi-k2-thinking", name: "Kimi K2 Thinking" }, + { id: "glm-4.7", name: "GLM 4.7" }, + { id: "glm-4-flash", name: "GLM 4 Flash" }, + { id: "minimax-m2.5", name: "MiniMax M2.5" }, + { id: "claude-opus-4-5", name: "Claude Opus 4.5 (VIP)" }, + { id: "gemini-2.5-pro", name: "Gemini 2.5 Pro (VIP)" }, + { id: "grok-3", name: "Grok-3 (VIP)" }, + { id: "qwen-max", name: "Qwen Max (VIP)" }, + ], +}; diff --git a/open-sse/providers/registry/index.js b/open-sse/providers/registry/index.js index 7f3867e8..3afa797d 100644 --- a/open-sse/providers/registry/index.js +++ b/open-sse/providers/registry/index.js @@ -104,6 +104,16 @@ import p100 from "./codebuddy-intl.js"; // Re-enable by uncommenting both the import and the array entry below. // import p102 from "./trae.js"; import p103 from "./zed.js"; +import p105 from "./api-airforce.js"; +import p106 from "./baidu.js"; +import p107 from "./bazaarlink.js"; +import p108 from "./bluesminds.js"; +import p109 from "./kilo-gateway.js"; +import p110 from "./llm7.js"; +import p111 from "./sambanova.js"; +import p112 from "./tencent.js"; +import p113 from "./morph.js"; +import p114 from "./devin-cli.js"; // import p104 from "./windsurf.js"; export default [ @@ -210,5 +220,15 @@ export default [ p100, // p102, // trae — hidden, no tool calling p103, + p105, + p106, + p107, + p108, + p109, + p110, + p111, + p112, + p113, + p114, // p104, // windsurf — hidden, no tool calling ]; diff --git a/open-sse/providers/registry/kilo-gateway.js b/open-sse/providers/registry/kilo-gateway.js new file mode 100644 index 00000000..702c00af --- /dev/null +++ b/open-sse/providers/registry/kilo-gateway.js @@ -0,0 +1,34 @@ +export default { + id: "kilo-gateway", + alias: "kgw", + aliases: [ + "kilo-gateway", + "kilogateway", + ], + uiAlias: "kgw", + display: { + name: "Kilo Gateway", + icon: "login", + color: "#8B5CF6", + textIcon: "KG", + website: "https://kilo.ai", + notice: { + apiKeyUrl: "https://kilo.ai/dashboard?tab=apiKeys", + }, + }, + category: "apikey", + authType: "apikey", + authModes: ["apikey"], + transport: { + baseUrl: "https://api.kilo.ai/api/gateway/chat/completions", + validateUrl: "https://api.kilo.ai/api/gateway/models", + }, + models: [ + { id: "kilo-auto/frontier", name: "Kilo Auto Frontier" }, + { id: "kilo-auto/balanced", name: "Kilo Auto Balanced" }, + { id: "kilo-auto/free", name: "Kilo Auto Free" }, + { id: "nvidia/nemotron-3-super-120b-a12b:free", name: "Nemotron 3 Super 120B (Free)" }, + { id: "minimax/minimax-m2.5:free", name: "MiniMax M2.5 (Free)" }, + { id: "arcee-ai/trinity-large-preview:free", name: "Trinity Large Preview (Free)" }, + ], +}; diff --git a/open-sse/providers/registry/llm7.js b/open-sse/providers/registry/llm7.js new file mode 100644 index 00000000..be7d99bb --- /dev/null +++ b/open-sse/providers/registry/llm7.js @@ -0,0 +1,34 @@ +export default { + id: "llm7", + alias: "llm7", + aliases: [ + "llm-7", + ], + uiAlias: "llm7", + display: { + name: "LLM7", + icon: "pool", + color: "#7C3AED", + textIcon: "L7", + website: "https://llm7.io", + notice: { + apiKeyUrl: "https://llm7.io", + }, + }, + category: "freeTier", + authType: "apikey", + authModes: [ + "apikey", + ], + transport: { + baseUrl: "https://api.llm7.io/v1/chat/completions", + validateUrl: "https://api.llm7.io/v1/models", + }, + models: [ + { id: "gpt-4o-mini-2024-07-18", name: "GPT-4o mini (LLM7)" }, + { id: "gpt-4.1-nano-2025-04-14", name: "GPT-4.1 nano (LLM7)" }, + { id: "deepseek-r1-0528", name: "DeepSeek R1 (LLM7)" }, + { id: "qwen2.5-coder-32b-instruct", name: "Qwen2.5 Coder 32B (LLM7)" }, + ], + passthroughModels: true, +}; diff --git a/open-sse/providers/registry/morph.js b/open-sse/providers/registry/morph.js new file mode 100644 index 00000000..0652f835 --- /dev/null +++ b/open-sse/providers/registry/morph.js @@ -0,0 +1,29 @@ +export default { + id: "morph", + alias: "morph", + aliases: ["morphllm"], + uiAlias: "morph", + display: { + name: "Morph", + icon: "change_history", + color: "#14B8A6", + textIcon: "MP", + website: "https://morphllm.com", + notice: { apiKeyUrl: "https://morphllm.com" }, + }, + category: "apikey", + authType: "apikey", + authModes: ["apikey"], + transport: { + baseUrl: "https://api.morphllm.com/v1/chat/completions", + validateUrl: "https://api.morphllm.com/v1/models", + }, + models: [ + { id: "morph-v3-large", name: "Morph v3 Large" }, + { id: "morph-v3-fast", name: "Morph v3 Fast" }, + { id: "morph-qwen35-397b", name: "Qwen 3.5 397B (Morph)", contextLength: 262144 }, + { id: "morph-minimax27-230b", name: "MiniMax M2.7 (Morph)", contextLength: 200704 }, + { id: "morph-qwen36-27b", name: "Qwen 3.6 27B (Morph)", contextLength: 131072 }, + { id: "morph-dsv4flash", name: "DeepSeek V4 Flash (Morph)", contextLength: 1048576 }, + ], +}; diff --git a/open-sse/providers/registry/sambanova.js b/open-sse/providers/registry/sambanova.js new file mode 100644 index 00000000..a63d7b33 --- /dev/null +++ b/open-sse/providers/registry/sambanova.js @@ -0,0 +1,30 @@ +export default { + id: "sambanova", + alias: "samba", + aliases: ["sambanova-ai"], + uiAlias: "samba", + display: { + name: "SambaNova", + icon: "memory", + color: "#F97316", + textIcon: "SN", + website: "https://sambanova.ai", + notice: { + apiKeyUrl: "https://cloud.sambanova.ai/apis", + }, + }, + category: "apikey", + authType: "apikey", + authModes: ["apikey"], + transport: { + baseUrl: "https://api.sambanova.ai/v1/chat/completions", + validateUrl: "https://api.sambanova.ai/v1/models", + }, + models: [ + { id: "MiniMax-M2.7", name: "MiniMax M2.7" }, + { id: "DeepSeek-V3.2", name: "DeepSeek V3.2" }, + { id: "Llama-4-Maverick-17B-128E-Instruct", name: "Llama 4 Maverick 17B 128E" }, + { id: "Meta-Llama-3.3-70B-Instruct", name: "Meta Llama 3.3 70B" }, + { id: "gpt-oss-120b", name: "GPT-OSS 120B" }, + ], +}; diff --git a/open-sse/providers/registry/tencent.js b/open-sse/providers/registry/tencent.js new file mode 100644 index 00000000..e4ad637a --- /dev/null +++ b/open-sse/providers/registry/tencent.js @@ -0,0 +1,31 @@ +export default { + id: "tencent", + alias: "hunyuan", + aliases: ["hunyuan", "tencent-hunyuan"], + uiAlias: "hunyuan", + display: { + name: "Tencent Hunyuan", + icon: "cloud", + color: "#0052D9", + textIcon: "HY", + website: "https://cloud.tencent.com/product/hunyuan", + notice: { + apiKeyUrl: "https://console.cloud.tencent.com/hunyuan/api-key", + }, + }, + category: "apikey", + authType: "apikey", + authModes: ["apikey"], + transport: { + baseUrl: "https://api.hunyuan.cloud.tencent.com/v1/chat/completions", + validateUrl: "https://api.hunyuan.cloud.tencent.com/v1/models", + }, + models: [ + { id: "hunyuan-turbos-latest", name: "Hunyuan TurboS Latest" }, + { id: "hunyuan-t1-latest", name: "Hunyuan T1 Latest" }, + { id: "hunyuan-pro", name: "Hunyuan Pro" }, + { id: "hunyuan-vision", name: "Hunyuan Vision" }, + { id: "hunyuan-functioncall", name: "Hunyuan FunctionCall" }, + { id: "hunyuan-lite", name: "Hunyuan Lite" }, + ], +}; diff --git a/public/providers/api-airforce.png b/public/providers/api-airforce.png new file mode 100644 index 00000000..9fa71e6a Binary files /dev/null and b/public/providers/api-airforce.png differ diff --git a/public/providers/baidu.png b/public/providers/baidu.png new file mode 100644 index 00000000..8ad826f2 Binary files /dev/null and b/public/providers/baidu.png differ diff --git a/public/providers/bazaarlink.png b/public/providers/bazaarlink.png new file mode 100644 index 00000000..2a16fd77 Binary files /dev/null and b/public/providers/bazaarlink.png differ diff --git a/public/providers/bluesminds.png b/public/providers/bluesminds.png new file mode 100644 index 00000000..1e5ef31e Binary files /dev/null and b/public/providers/bluesminds.png differ diff --git a/public/providers/kilo-gateway.png b/public/providers/kilo-gateway.png new file mode 100644 index 00000000..99ea60b0 Binary files /dev/null and b/public/providers/kilo-gateway.png differ diff --git a/public/providers/llm7.png b/public/providers/llm7.png new file mode 100644 index 00000000..4f2a70a0 Binary files /dev/null and b/public/providers/llm7.png differ diff --git a/public/providers/morph.png b/public/providers/morph.png index 3034fa5e..82f938f3 100644 Binary files a/public/providers/morph.png and b/public/providers/morph.png differ diff --git a/public/providers/sambanova.png b/public/providers/sambanova.png new file mode 100644 index 00000000..38b016c7 Binary files /dev/null and b/public/providers/sambanova.png differ diff --git a/public/providers/tencent.png b/public/providers/tencent.png new file mode 100644 index 00000000..6293ff7d Binary files /dev/null and b/public/providers/tencent.png differ diff --git a/tests/__baseline__/alias-baseline.json b/tests/__baseline__/alias-baseline.json index 6e189878..ad667294 100644 --- a/tests/__baseline__/alias-baseline.json +++ b/tests/__baseline__/alias-baseline.json @@ -93,7 +93,30 @@ "polly": "aws-polly", "aws-polly": "aws-polly", "bb": "blackbox", - "blackbox": "blackbox" + "blackbox": "blackbox", + "af": "api-airforce", + "airforce": "api-airforce", + "api-airforce": "api-airforce", + "llm7": "llm7", + "llm-7": "llm7", + "samba": "sambanova", + "sambanova": "sambanova", + "bm": "bluesminds", + "bluesminds": "bluesminds", + "bzl": "bazaarlink", + "bazaarlink": "bazaarlink", + "kgw": "kilo-gateway", + "kilo-gateway": "kilo-gateway", + "hunyuan": "tencent", + "tencent": "tencent", + "qianfan": "baidu", + "baidu": "baidu", + "ernie": "baidu", + "dv": "devin-cli", + "devin": "devin-cli", + "devin-cli": "devin-cli", + "morph": "morph", + "morphllm": "morph" }, "idToAlias": { "alicode": "alicode", @@ -101,9 +124,13 @@ "alims-intl": "alims-intl", "anthropic": "anthropic", "antigravity": "ag", + "api-airforce": "af", "assemblyai": "assemblyai", "azure": "azure", + "baidu": "qianfan", + "bazaarlink": "bzl", "blackbox": "blackbox", + "bluesminds": "bm", "byteplus": "byteplus", "cerebras": "cerebras", "chutes": "chutes", @@ -112,12 +139,14 @@ "clinepass": "clinepass", "cloudflare-ai": "cloudflare-ai", "codebuddy-cn": "cbcn", + "codebuddy-intl": "cbai", "codex": "cx", "cohere": "cohere", "commandcode": "commandcode", "cursor": "cu", "deepgram": "deepgram", "deepseek": "deepseek", + "devin-cli": "dv", "featherless": "featherless", "fireworks": "fireworks", "gemini": "gemini", @@ -131,15 +160,18 @@ "groq": "groq", "hyperbolic": "hyperbolic", "iflow": "if", + "kilo-gateway": "kgw", "kilocode": "kc", "kimchi": "kimchi", "kimi": "kimi", "kiro": "kr", + "llm7": "llm7", "mimo-free": "mmf", "minimax": "minimax", "minimax-cn": "minimax-cn", "mistral": "mistral", "mmf": "mmf", + "morph": "morph", "nanobanana": "nanobanana", "nebius": "nebius", "nvidia": "nvidia", @@ -154,7 +186,9 @@ "perplexity-web": "perplexity-web", "qoder": "qd", "qwen": "qw", + "sambanova": "samba", "siliconflow": "siliconflow", + "tencent": "hunyuan", "together": "together", "venice": "venice", "vercel-ai-gateway": "vercel-ai-gateway", @@ -163,9 +197,11 @@ "volcengine-ark": "volcengine-ark", "xai": "xai", "xiaomi-mimo": "xiaomi-mimo", - "xiaomi-tokenplan": "xiaomi-tokenplan" + "xiaomi-tokenplan": "xiaomi-tokenplan", + "zed": "zd" }, "modelKeys": [ + "af", "ag", "alicode", "alicode-intl", @@ -174,7 +210,10 @@ "assemblyai", "black-forest-labs", "blackbox", + "bm", "byteplus", + "bzl", + "cbai", "cbcn", "cc", "cerebras", @@ -188,6 +227,7 @@ "cx", "deepgram", "deepseek", + "dv", "edge-tts", "elevenlabs-tts-models", "fal-ai", @@ -205,17 +245,21 @@ "grok-web", "groq", "huggingface", + "hunyuan", "hyperbolic", "if", "kc", + "kgw", "kimchi", "kimi", "kr", + "llm7", "local-device", "minimax", "minimax-cn", "mistral", "mmf", + "morph", "nanobanana", "nebius", "nvidia", @@ -232,9 +276,11 @@ "perplexity-agent", "perplexity-web", "qd", + "qianfan", "qw", "recraft", "runwayml", + "samba", "sdwebui", "siliconflow", "stability-ai", @@ -246,6 +292,7 @@ "voyage-ai", "xai", "xiaomi-mimo", - "xiaomi-tokenplan" + "xiaomi-tokenplan", + "zd" ] } \ No newline at end of file diff --git a/tests/__baseline__/providers-baseline.json b/tests/__baseline__/providers-baseline.json index e8f64967..4ceb52a6 100644 --- a/tests/__baseline__/providers-baseline.json +++ b/tests/__baseline__/providers-baseline.json @@ -1,6 +1,6 @@ { "alicode-intl": { - "baseUrl": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions", + "baseUrl": "https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions", "headers": {}, "quirks": { "preserveCacheControl": true @@ -880,5 +880,95 @@ "preserveCacheControl": true }, "format": "openai" + }, + "codebuddy-intl": { + "baseUrl": "https://www.codebuddy.ai/v2/chat/completions", + "forceStream": true, + "thinkingFormat": "openai", + "headers": { + "User-Agent": "IDE/2.108.1 CodeBuddy/2.108.1", + "X-Product": "SaaS", + "X-IDE-Type": "IDE", + "X-IDE-Name": "IDE", + "x-requested-with": "XMLHttpRequest", + "x-codebuddy-request": "1" + }, + "auth": { + "combined": true, + "header": "Authorization", + "scheme": "bearer" + }, + "format": "openai", + "tokenUrl": "https://www.codebuddy.ai/v2/plugin/auth/token" + }, + "zed": { + "baseUrl": "https://cloud.zed.dev/completions", + "format": "openai", + "forceStream": true, + "headers": { + "content-type": "application/json" + }, + "auth": { + "combined": true, + "header": "Authorization", + "scheme": " " + }, + "usage": { + "url": "https://cloud.zed.dev/client/users/me" + }, + "modelsUrl": "https://cloud.zed.dev/models" + }, + "api-airforce": { + "baseUrl": "https://api.airforce/v1/chat/completions", + "validateUrl": "https://api.airforce/v1/models", + "headers": { + "HTTP-Referer": "https://endpoint-proxy.local", + "X-Title": "Endpoint Proxy" + }, + "format": "openai" + }, + "baidu": { + "baseUrl": "https://qianfan.baidubce.com/v2/chat/completions", + "validateUrl": "https://qianfan.baidubce.com/v2/models", + "format": "openai" + }, + "bazaarlink": { + "baseUrl": "https://bazaarlink.ai/api/v1/chat/completions", + "validateUrl": "https://bazaarlink.ai/api/v1/models", + "format": "openai" + }, + "bluesminds": { + "baseUrl": "https://api.bluesminds.com/v1/chat/completions", + "validateUrl": "https://api.bluesminds.com/v1/models", + "format": "openai" + }, + "kilo-gateway": { + "baseUrl": "https://api.kilo.ai/api/gateway/chat/completions", + "validateUrl": "https://api.kilo.ai/api/gateway/models", + "format": "openai" + }, + "llm7": { + "baseUrl": "https://api.llm7.io/v1/chat/completions", + "validateUrl": "https://api.llm7.io/v1/models", + "format": "openai" + }, + "sambanova": { + "baseUrl": "https://api.sambanova.ai/v1/chat/completions", + "validateUrl": "https://api.sambanova.ai/v1/models", + "format": "openai" + }, + "tencent": { + "baseUrl": "https://api.hunyuan.cloud.tencent.com/v1/chat/completions", + "validateUrl": "https://api.hunyuan.cloud.tencent.com/v1/models", + "format": "openai" + }, + "morph": { + "baseUrl": "https://api.morphllm.com/v1/chat/completions", + "validateUrl": "https://api.morphllm.com/v1/models", + "format": "openai" + }, + "devin-cli": { + "baseUrl": "devin://acp/stdio", + "format": "openai" } -} +} \ No newline at end of file diff --git a/tests/__baseline__/verify-alias.mjs b/tests/__baseline__/verify-alias.mjs index 56caca53..a3fc1f91 100644 --- a/tests/__baseline__/verify-alias.mjs +++ b/tests/__baseline__/verify-alias.mjs @@ -20,6 +20,9 @@ const ALIAS_TOKENS = [ "xmtp","xiaomi-tokenplan","cf", "cloudflare-ai","fal","fal-ai","stability","stability-ai","bfl","black-forest-labs","recraft", "topaz","runway","runwayml","jina","jina-ai","polly","aws-polly","bb","blackbox", + "af","airforce","api-airforce","llm7","llm-7","samba","sambanova","bm","bluesminds", + "bzl","bazaarlink","kgw","kilo-gateway","hunyuan","tencent","qianfan","baidu","ernie", + "dv","devin","devin-cli","morph","morphllm", ]; // Sort idToAlias by key — runtime accesses by key, order is irrelevant (content-based)