diff --git a/AGENTS.md b/AGENTS.md index e36adc672d..24ce8c533d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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**. diff --git a/README.md b/README.md index 9f51b304f8..4427be4225 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/public/providers/360ai.svg b/public/providers/360ai.svg new file mode 100644 index 0000000000..caeb6eb2c9 --- /dev/null +++ b/public/providers/360ai.svg @@ -0,0 +1,5 @@ + + + + 360 + diff --git a/public/providers/baichuan.svg b/public/providers/baichuan.svg new file mode 100644 index 0000000000..fa3789f62e --- /dev/null +++ b/public/providers/baichuan.svg @@ -0,0 +1,5 @@ + + + + BC + diff --git a/public/providers/baidu.svg b/public/providers/baidu.svg new file mode 100644 index 0000000000..0c74817895 --- /dev/null +++ b/public/providers/baidu.svg @@ -0,0 +1,5 @@ + + + + BD + diff --git a/public/providers/coze.svg b/public/providers/coze.svg new file mode 100644 index 0000000000..52d4bb54b6 --- /dev/null +++ b/public/providers/coze.svg @@ -0,0 +1,5 @@ + + + + CZ + diff --git a/public/providers/dify.svg b/public/providers/dify.svg new file mode 100644 index 0000000000..80be2e3447 --- /dev/null +++ b/public/providers/dify.svg @@ -0,0 +1,5 @@ + + + + DF + diff --git a/public/providers/doubao.svg b/public/providers/doubao.svg new file mode 100644 index 0000000000..4317871d38 --- /dev/null +++ b/public/providers/doubao.svg @@ -0,0 +1,5 @@ + + + + DB + diff --git a/public/providers/huggingchat.svg b/public/providers/huggingchat.svg new file mode 100644 index 0000000000..30a8cef613 --- /dev/null +++ b/public/providers/huggingchat.svg @@ -0,0 +1,5 @@ + + + + HC + diff --git a/public/providers/iflytek.svg b/public/providers/iflytek.svg new file mode 100644 index 0000000000..bad262efe4 --- /dev/null +++ b/public/providers/iflytek.svg @@ -0,0 +1,5 @@ + + + + IF + diff --git a/public/providers/phind.svg b/public/providers/phind.svg new file mode 100644 index 0000000000..778aae891c --- /dev/null +++ b/public/providers/phind.svg @@ -0,0 +1,5 @@ + + + + PH + diff --git a/public/providers/sensenova.svg b/public/providers/sensenova.svg new file mode 100644 index 0000000000..9bd7ebda11 --- /dev/null +++ b/public/providers/sensenova.svg @@ -0,0 +1,5 @@ + + + + SN + diff --git a/public/providers/sparkdesk.svg b/public/providers/sparkdesk.svg new file mode 100644 index 0000000000..d9960faaaa --- /dev/null +++ b/public/providers/sparkdesk.svg @@ -0,0 +1,5 @@ + + + + SD + diff --git a/public/providers/stepfun.svg b/public/providers/stepfun.svg new file mode 100644 index 0000000000..2a7196ea47 --- /dev/null +++ b/public/providers/stepfun.svg @@ -0,0 +1,5 @@ + + + + SF + diff --git a/public/providers/tencent.svg b/public/providers/tencent.svg new file mode 100644 index 0000000000..d1dff98da9 --- /dev/null +++ b/public/providers/tencent.svg @@ -0,0 +1,5 @@ + + + + TC + diff --git a/public/providers/yi.svg b/public/providers/yi.svg new file mode 100644 index 0000000000..8ddc60de6e --- /dev/null +++ b/public/providers/yi.svg @@ -0,0 +1,5 @@ + + + + YI + diff --git a/src/shared/components/ProviderIcon.tsx b/src/shared/components/ProviderIcon.tsx index a412b868c8..aba7e5fd4f 100644 --- a/src/shared/components/ProviderIcon.tsx +++ b/src/shared/components/ProviderIcon.tsx @@ -76,6 +76,10 @@ const KNOWN_SVGS = new Set([ "brave", "brave-search", "cartesia", + "360ai", + "huggingchat", + "iflytek", + "sparkdesk", "arcee-ai", "inclusionai", "krutrim", diff --git a/src/shared/components/lobeProviderIcons.ts b/src/shared/components/lobeProviderIcons.ts index 5c462cd67c..cdc50b4e22 100644 --- a/src/shared/components/lobeProviderIcons.ts +++ b/src/shared/components/lobeProviderIcons.ts @@ -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; @@ -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; diff --git a/src/shared/constants/providers.ts b/src/shared/constants/providers.ts index e58f7d3c0b..5637857a32 100644 --- a/src/shared/constants/providers.ts +++ b/src/shared/constants/providers.ts @@ -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) ||