feat(providers): add 14 free-tier providers — Chinese regional + dev tools (Wave 1b) (#2488)

Integrated into release/v3.8.2
This commit is contained in:
Paijo
2026-05-22 04:13:15 +07:00
committed by GitHub
parent 1f2d1fdbf2
commit 0498b77004
19 changed files with 289 additions and 3 deletions

View File

@@ -3,7 +3,7 @@
## Project
Unified AI proxy/router — route any LLM through one endpoint. Multi-provider support
with **160+ providers** (OpenAI, Anthropic, Gemini, DeepSeek, Groq, xAI, Mistral, Fireworks,
with **212 providers** (OpenAI, Anthropic, Gemini, DeepSeek, Groq, xAI, Mistral, Fireworks,
Cohere, NVIDIA, Cerebras, Pollinations, Puter, Cloudflare AI, HuggingFace, DeepInfra,
SambaNova, Meta Llama API, Moonshot AI, AI21 Labs, Databricks, Snowflake, and many more)
with **MCP Server** (37 tools), **A2A v0.3 Protocol**, and **Electron desktop app**.

View File

@@ -4,7 +4,7 @@
### Never stop coding. Save 15-95% eligible tokens with RTK+Caveman compression + auto-fallback to **FREE & low-cost AI models**.
_The most complete open-source AI proxy — **one endpoint**, **160+ providers**, **13 routing strategies**, zero downtime. Multi-platform: **Web**, **Desktop (Electron)**, **Mobile (PWA + Termux)**. Fully extensible via **MCP Server (37 tools)**, **A2A Protocol**, and **Memory/Skills** systems. Available in **40+ languages**._
_The most complete open-source AI proxy — **one endpoint**, **212 providers**, **13 routing strategies**, zero downtime. Multi-platform: **Web**, **Desktop (Electron)**, **Mobile (PWA + Termux)**. Fully extensible via **MCP Server (37 tools)**, **A2A Protocol**, and **Memory/Skills** systems. Available in **40+ languages**._
[![npm](https://img.shields.io/npm/v/omniroute?logo=npm&style=flat-square)](https://www.npmjs.com/package/omniroute)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE)
@@ -1444,7 +1444,7 @@ Code blocks, URLs, JSON, and structured data are **always protected** from compr
2. **Per-provider proxy** — different proxy per provider
3. **Per-API-key proxy** — different proxy per key
Plus the **1proxy free marketplace** for community-shared proxies. Users in Russia, China, Iran, and other restricted regions can access all 160+ providers through OmniRoute's proxy infrastructure.
Plus the **1proxy free marketplace** for community-shared proxies. Users in Russia, China, Iran, and other restricted regions can access all 212 providers through OmniRoute's proxy infrastructure.
See the [Proxy Guide](docs/PROXY_GUIDE.md) for setup instructions.

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#00B96B" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#00B96B" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#00B96B">360</text>
</svg>

After

Width:  |  Height:  |  Size: 416 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#6366F1" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#6366F1" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#6366F1">BC</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#2932E1" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#2932E1" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#2932E1">BD</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#3B82F6" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#3B82F6" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#3B82F6">CZ</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#6366F1" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#6366F1" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#6366F1">DF</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#FE2C55" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#FE2C55" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#FE2C55">DB</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#FFD21E" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#FFD21E" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#FFD21E">HC</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#0066FF" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#0066FF" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#0066FF">IF</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#EC4899" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#EC4899" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#EC4899">PH</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#0066FF" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#0066FF" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#0066FF">SN</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#0066FF" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#0066FF" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#0066FF">SD</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#8B5CF6" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#8B5CF6" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#8B5CF6">SF</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#07C160" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#07C160" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#07C160">TC</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

5
public/providers/yi.svg Normal file
View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="14" fill="#10B981" opacity="0.15"/>
<circle cx="16" cy="16" r="14" fill="none" stroke="#10B981" stroke-width="2"/>
<text x="16" y="16" text-anchor="middle" dominant-baseline="central" font-family="system-ui,-apple-system,sans-serif" font-size="11" font-weight="600" fill="#10B981">YI</text>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -76,6 +76,10 @@ const KNOWN_SVGS = new Set([
"brave",
"brave-search",
"cartesia",
"360ai",
"huggingchat",
"iflytek",
"sparkdesk",
"arcee-ai",
"inclusionai",
"krutrim",

View File

@@ -18,6 +18,8 @@ import AzureColorIcon from "@lobehub/icons/es/Azure/components/Color";
import AzureMonoIcon from "@lobehub/icons/es/Azure/components/Mono";
import AzureAIColorIcon from "@lobehub/icons/es/AzureAI/components/Color";
import AzureAIMonoIcon from "@lobehub/icons/es/AzureAI/components/Mono";
import BaichuanColorIcon from "@lobehub/icons/es/Baichuan/components/Color";
import BaichuanMonoIcon from "@lobehub/icons/es/Baichuan/components/Mono";
import BaiduColorIcon from "@lobehub/icons/es/Baidu/components/Color";
import BaiduMonoIcon from "@lobehub/icons/es/Baidu/components/Mono";
import BailianColorIcon from "@lobehub/icons/es/Bailian/components/Color";
@@ -41,11 +43,16 @@ import ComfyUIColorIcon from "@lobehub/icons/es/ComfyUI/components/Color";
import ComfyUIMonoIcon from "@lobehub/icons/es/ComfyUI/components/Mono";
import CursorMonoIcon from "@lobehub/icons/es/Cursor/components/Mono";
import DbrxColorIcon from "@lobehub/icons/es/Dbrx/components/Color";
import CozeMonoIcon from "@lobehub/icons/es/Coze/components/Mono";
import DbrxMonoIcon from "@lobehub/icons/es/Dbrx/components/Mono";
import DeepInfraColorIcon from "@lobehub/icons/es/DeepInfra/components/Color";
import DeepInfraMonoIcon from "@lobehub/icons/es/DeepInfra/components/Mono";
import DeepSeekColorIcon from "@lobehub/icons/es/DeepSeek/components/Color";
import DeepSeekMonoIcon from "@lobehub/icons/es/DeepSeek/components/Mono";
import DifyColorIcon from "@lobehub/icons/es/Dify/components/Color";
import DifyMonoIcon from "@lobehub/icons/es/Dify/components/Mono";
import DoubaoColorIcon from "@lobehub/icons/es/Doubao/components/Color";
import DoubaoMonoIcon from "@lobehub/icons/es/Doubao/components/Mono";
import ElevenLabsMonoIcon from "@lobehub/icons/es/ElevenLabs/components/Mono";
import ExaColorIcon from "@lobehub/icons/es/Exa/components/Color";
import ExaMonoIcon from "@lobehub/icons/es/Exa/components/Mono";
@@ -107,6 +114,7 @@ import OpenCodeMonoIcon from "@lobehub/icons/es/OpenCode/components/Mono";
import OpenRouterMonoIcon from "@lobehub/icons/es/OpenRouter/components/Mono";
import PerplexityColorIcon from "@lobehub/icons/es/Perplexity/components/Color";
import PerplexityMonoIcon from "@lobehub/icons/es/Perplexity/components/Mono";
import PhindMonoIcon from "@lobehub/icons/es/Phind/components/Mono";
import PoeColorIcon from "@lobehub/icons/es/Poe/components/Color";
import PoeMonoIcon from "@lobehub/icons/es/Poe/components/Mono";
import PollinationsMonoIcon from "@lobehub/icons/es/Pollinations/components/Mono";
@@ -125,15 +133,23 @@ import SiliconCloudColorIcon from "@lobehub/icons/es/SiliconCloud/components/Col
import SiliconCloudMonoIcon from "@lobehub/icons/es/SiliconCloud/components/Mono";
import SnowflakeColorIcon from "@lobehub/icons/es/Snowflake/components/Color";
import SnowflakeMonoIcon from "@lobehub/icons/es/Snowflake/components/Mono";
import SenseNovaColorIcon from "@lobehub/icons/es/SenseNova/components/Color";
import SenseNovaMonoIcon from "@lobehub/icons/es/SenseNova/components/Mono";
import StabilityColorIcon from "@lobehub/icons/es/Stability/components/Color";
import StabilityMonoIcon from "@lobehub/icons/es/Stability/components/Mono";
import StepfunColorIcon from "@lobehub/icons/es/Stepfun/components/Color";
import StepfunMonoIcon from "@lobehub/icons/es/Stepfun/components/Mono";
import TavilyColorIcon from "@lobehub/icons/es/Tavily/components/Color";
import TavilyMonoIcon from "@lobehub/icons/es/Tavily/components/Mono";
import TogetherColorIcon from "@lobehub/icons/es/Together/components/Color";
import TencentColorIcon from "@lobehub/icons/es/Tencent/components/Color";
import TencentMonoIcon from "@lobehub/icons/es/Tencent/components/Mono";
import TogetherMonoIcon from "@lobehub/icons/es/Together/components/Mono";
import TopazLabsMonoIcon from "@lobehub/icons/es/TopazLabs/components/Mono";
import UpstageColorIcon from "@lobehub/icons/es/Upstage/components/Color";
import UpstageMonoIcon from "@lobehub/icons/es/Upstage/components/Mono";
import YiColorIcon from "@lobehub/icons/es/Yi/components/Color";
import YiMonoIcon from "@lobehub/icons/es/Yi/components/Mono";
import V0MonoIcon from "@lobehub/icons/es/V0/components/Mono";
import VeniceColorIcon from "@lobehub/icons/es/Venice/components/Color";
import VeniceMonoIcon from "@lobehub/icons/es/Venice/components/Mono";
@@ -180,6 +196,7 @@ const LOBE_ICON_COMPONENTS = {
Aws: { mono: AwsMonoIcon, color: AwsColorIcon },
Azure: { mono: AzureMonoIcon, color: AzureColorIcon },
AzureAI: { mono: AzureAIMonoIcon, color: AzureAIColorIcon },
Baichuan: { mono: BaichuanMonoIcon, color: BaichuanColorIcon },
Baidu: { mono: BaiduMonoIcon, color: BaiduColorIcon },
Bailian: { mono: BailianMonoIcon, color: BailianColorIcon },
Baseten: { mono: BasetenMonoIcon },
@@ -192,10 +209,13 @@ const LOBE_ICON_COMPONENTS = {
Codex: { mono: CodexMonoIcon, color: CodexColorIcon },
Cohere: { mono: CohereMonoIcon, color: CohereColorIcon },
ComfyUI: { mono: ComfyUIMonoIcon, color: ComfyUIColorIcon },
Coze: { mono: CozeMonoIcon },
Cursor: { mono: CursorMonoIcon },
Dbrx: { mono: DbrxMonoIcon, color: DbrxColorIcon },
DeepInfra: { mono: DeepInfraMonoIcon, color: DeepInfraColorIcon },
DeepSeek: { mono: DeepSeekMonoIcon, color: DeepSeekColorIcon },
Dify: { mono: DifyMonoIcon, color: DifyColorIcon },
Doubao: { mono: DoubaoMonoIcon, color: DoubaoColorIcon },
ElevenLabs: { mono: ElevenLabsMonoIcon },
Exa: { mono: ExaMonoIcon, color: ExaColorIcon },
Fal: { mono: FalMonoIcon, color: FalColorIcon },
@@ -236,6 +256,7 @@ const LOBE_ICON_COMPONENTS = {
OpenCode: { mono: OpenCodeMonoIcon },
OpenRouter: { mono: OpenRouterMonoIcon },
Perplexity: { mono: PerplexityMonoIcon, color: PerplexityColorIcon },
Phind: { mono: PhindMonoIcon },
Poe: { mono: PoeMonoIcon, color: PoeColorIcon },
Pollinations: { mono: PollinationsMonoIcon },
Qoder: { mono: QoderMonoIcon, color: QoderColorIcon },
@@ -247,9 +268,12 @@ const LOBE_ICON_COMPONENTS = {
SambaNova: { mono: SambaNovaMonoIcon, color: SambaNovaColorIcon },
SearchApi: { mono: SearchApiMonoIcon },
SiliconCloud: { mono: SiliconCloudMonoIcon, color: SiliconCloudColorIcon },
SenseNova: { mono: SenseNovaMonoIcon, color: SenseNovaColorIcon },
Snowflake: { mono: SnowflakeMonoIcon, color: SnowflakeColorIcon },
Stability: { mono: StabilityMonoIcon, color: StabilityColorIcon },
Stepfun: { mono: StepfunMonoIcon, color: StepfunColorIcon },
Tavily: { mono: TavilyMonoIcon, color: TavilyColorIcon },
Tencent: { mono: TencentMonoIcon, color: TencentColorIcon },
Together: { mono: TogetherMonoIcon, color: TogetherColorIcon },
TopazLabs: { mono: TopazLabsMonoIcon },
Upstage: { mono: UpstageMonoIcon, color: UpstageColorIcon },
@@ -265,6 +289,7 @@ const LOBE_ICON_COMPONENTS = {
XAI: { mono: XAIMonoIcon },
XiaomiMiMo: { mono: XiaomiMiMoMonoIcon },
Xinference: { mono: XinferenceMonoIcon, color: XinferenceColorIcon },
Yi: { mono: YiMonoIcon, color: YiColorIcon },
ZAI: { mono: ZAIMonoIcon },
Zhipu: { mono: ZhipuMonoIcon, color: ZhipuColorIcon },
} satisfies Record<string, LobeIconEntry>;
@@ -300,6 +325,7 @@ const LOBE_PROVIDER_ALIASES = {
cohere: "Cohere",
comfyui: "ComfyUI",
copilot: "GithubCopilot",
coze: "Coze",
cursor: "Cursor",
databricks: "Dbrx",
deepinfra: "DeepInfra",
@@ -372,6 +398,7 @@ const LOBE_PROVIDER_ALIASES = {
"perplexity-search": "Perplexity",
"perplexity-web": "Perplexity",
poe: "Poe",
phind: "Phind",
pollinations: "Pollinations",
qoder: "Qoder",
qwen: "Qwen",
@@ -385,10 +412,12 @@ const LOBE_PROVIDER_ALIASES = {
"searchapi-search": "SearchApi",
siliconflow: "SiliconCloud",
snowflake: "Snowflake",
stepfun: "Stepfun",
stability: "Stability",
"stability-ai": "Stability",
tavily: "Tavily",
"tavily-search": "Tavily",
tencent: "Tencent",
together: "Together",
topaz: "TopazLabs",
triton: "Nvidia",
@@ -413,6 +442,7 @@ const LOBE_PROVIDER_ALIASES = {
xiaomimimo: "XiaomiMiMo",
xinference: "Xinference",
zai: "ZAI",
yi: "Yi",
zhipu: "Zhipu",
} satisfies Record<string, keyof typeof LOBE_ICON_COMPONENTS>;

View File

@@ -1743,6 +1743,187 @@ export const APIKEY_PROVIDERS = {
textIcon: "TP",
website: "https://topazlabs.com",
},
baidu: {
id: "baidu",
alias: "baidu",
name: "Baidu (ERNIE)",
icon: "auto_awesome",
color: "#2932E1",
textIcon: "BD",
website: "https://yiyan.baidu.com",
hasFree: true,
freeNote: "Free ERNIE Speed/Lite models. China's #2 LLM.",
passthroughModels: true,
authHint: "Get API key at console.bce.baidu.com",
},
tencent: {
id: "tencent",
alias: "tencent",
name: "Tencent Hunyuan",
icon: "auto_awesome",
color: "#07C160",
textIcon: "TC",
website: "https://hunyuan.tencent.com",
hasFree: true,
freeNote: "Free Hunyuan Lite models. WeChat ecosystem.",
passthroughModels: true,
authHint: "Get API key at console.cloud.tencent.com",
},
iflytek: {
id: "iflytek",
alias: "iflytek",
name: "iFlytek Spark",
icon: "auto_awesome",
color: "#0066FF",
textIcon: "IF",
website: "https://xinghuo.xfyun.cn",
hasFree: true,
freeNote: "Free Spark Lite models. China's voice AI leader.",
passthroughModels: true,
authHint: "Get API key at console.xfyun.cn",
},
baichuan: {
id: "baichuan",
alias: "baichuan",
name: "Baichuan",
icon: "auto_awesome",
color: "#6366F1",
textIcon: "BC",
website: "https://baichuan.com",
hasFree: true,
freeNote: "Free Baichuan models. Popular Chinese LLM startup.",
passthroughModels: true,
authHint: "Get API key at platform.baichuan-ai.com",
},
yi: {
id: "yi",
alias: "yi",
name: "Yi (01.AI)",
icon: "auto_awesome",
color: "#10B981",
textIcon: "YI",
website: "https://01.ai",
hasFree: true,
freeNote: "Free Yi-Light models. Kai-Fu Lee's company.",
passthroughModels: true,
authHint: "Get API key at platform.lingyiwanwu.com",
},
stepfun: {
id: "stepfun",
alias: "stepfun",
name: "StepFun",
icon: "auto_awesome",
color: "#8B5CF6",
textIcon: "SF",
website: "https://stepfun.com",
hasFree: true,
freeNote: "Free Step-2 models. Chinese AI company.",
passthroughModels: true,
authHint: "Get API key at platform.stepfun.com",
},
coze: {
id: "coze",
alias: "coze",
name: "Coze",
icon: "smart_toy",
color: "#3B82F6",
textIcon: "CZ",
website: "https://coze.com",
hasFree: true,
freeNote: "Free ByteDance agent platform. Bot building + LLM access.",
passthroughModels: true,
authHint: "Get API key at coze.com/open/api",
},
"360ai": {
id: "360ai",
alias: "360ai",
name: "360 AI",
icon: "auto_awesome",
color: "#00B96B",
textIcon: "360",
website: "https://ai.360.cn",
hasFree: true,
freeNote: "Free 360 AI Brain models. Major Chinese security company.",
passthroughModels: true,
authHint: "Get API key at ai.360.cn",
},
doubao: {
id: "doubao",
alias: "doubao",
name: "Doubao",
icon: "auto_awesome",
color: "#FE2C55",
textIcon: "DB",
website: "https://doubao.com",
hasFree: true,
freeNote: "Free Doubao models. ByteDance's chatbot.",
passthroughModels: true,
authHint: "Get API key at console.volcengine.com",
},
sensenova: {
id: "sensenova",
alias: "sensenova",
name: "SenseNova",
icon: "auto_awesome",
color: "#0066FF",
textIcon: "SN",
website: "https://platform.sensenova.cn",
hasFree: true,
freeNote: "Free SenseTime models. Computer vision leader.",
passthroughModels: true,
authHint: "Get API key at platform.sensenova.cn",
},
sparkdesk: {
id: "sparkdesk",
alias: "sparkdesk",
name: "SparkDesk",
icon: "auto_awesome",
color: "#0066FF",
textIcon: "SD",
website: "https://xinghuo.xfyun.cn",
hasFree: true,
freeNote: "Free iFlytek Spark models (alias for iflytek).",
passthroughModels: true,
authHint: "Get API key at console.xfyun.cn",
},
phind: {
id: "phind",
alias: "phind",
name: "Phind",
icon: "search",
color: "#EC4899",
textIcon: "PH",
website: "https://phind.com",
hasFree: true,
freeNote: "Free code search + AI. Developer-focused.",
passthroughModels: true,
authHint: "Get API key at phind.com",
},
huggingchat: {
id: "huggingchat",
alias: "huggingchat",
name: "HuggingChat",
icon: "chat",
color: "#FFD21E",
textIcon: "HC",
website: "https://huggingface.co/chat",
hasFree: true,
freeNote: "Free chat with open models (Llama, Mistral, etc.).",
passthroughModels: true,
authHint: "No API key required for basic access.",
},
dify: {
id: "dify",
alias: "dify",
name: "Dify",
icon: "smart_toy",
color: "#6366F1",
textIcon: "DF",
website: "https://dify.ai",
hasFree: true,
freeNote: "Free open-source AI app builder + RAG platform.",
passthroughModels: true,
authHint: "Get API key from your Dify instance.",
poolside: {
id: "poolside",
alias: "poolside",
@@ -2329,6 +2510,7 @@ export function providerAllowsOptionalApiKey(providerId: unknown): boolean {
providerId === "pollinations" ||
providerId === "copilot-web" ||
providerId === "hackclub" ||
providerId === "huggingchat" ||
providerId === "gitlawb" ||
providerId === "gitlawb-gmi" ||
isLocalProvider(providerId) ||