From 83fa4328f36eece894fe92acc21f10aedd2c4a1f Mon Sep 17 00:00:00 2001 From: Diego Rodrigues de Sa e Souza Date: Thu, 17 Sep 2026 13:34:45 -0300 Subject: [PATCH] feat(providers): add xKiro (#12648) * test(catalog): pin the 2026-09-02 free-tier re-audit facts for gemini, ollama-cloud, groq, nara and mistral * feat(providers): add xKiro (5M tokens/day free plan, 39 pinned free models) * fix(catalog): re-audit gemini, ollama-cloud, groq, nara and mistral against official pages * docs(providers): xKiro in the provider reference, counts and free-tier headline (~1.66B) * fix(catalog): restore the console-verified Mistral 1B pool and harden its regression test * docs(free-tiers): move headline to the re-audited ~1.50B and refresh pool counts * chore(free-tiers): retire stale Groq free-tier text and preset model; fix catalog header * docs(providers): align the remaining visible provider/executor counts with the catalog * docs(providers): align remaining free-tier count chips and metadata * docs(free-tiers): state the evidence-comment rule honestly and retire the last "14.4K RPD" Groq texts * docs(free-tiers): retire the stale Gemini onboarding quota text * docs(free-tier): refresh catalog-entry counts to 442 after base sync * docs(providers): re-sync provider and free-tier counts after merging release/v3.8.51 * docs(providers): re-sync residual counts after the base merge * docs(free-tiers): restore README spacing lost in the merge and re-sync the guide counts * docs(free-tiers): re-sync numbers after merging release/v3.8.51 (Cerebras reclassified upstream) * fix(docs): keep the NaraRouter plans endpoint out of the API-path checker; rebaseline gateways.ts (+3) * chore(quality): rebaseline gateways.ts file-size cap for the xKiro entry (+20) --------- Co-authored-by: diegosouzapw --- README.md | 26 +- config/quality/file-size-baseline.json | 3 +- docs/diagrams/README.md | 2 +- docs/diagrams/cli-terminal.svg | 8 +- docs/diagrams/comparison-table.svg | 8 +- docs/diagrams/free-tier-budget.svg | 74 ++--- docs/diagrams/promise-pillars.svg | 8 +- docs/diagrams/readme-hero.svg | 10 +- docs/frameworks/OPEN_SSE_ARCHITECTURE.md | 2 +- docs/getting-started/FREE-TIERS-GUIDE.md | 12 +- docs/i18n/am/llm.txt | 1 - docs/i18n/ha/llm.txt | 1 - docs/i18n/hy/llm.txt | 1 - docs/i18n/ig/llm.txt | 1 - docs/i18n/ka/llm.txt | 1 - docs/i18n/uz/llm.txt | 1 - docs/i18n/yo/llm.txt | 1 - docs/reference/FREE_TIERS.md | 18 +- docs/reference/PROVIDER_REFERENCE.md | 13 +- docs/screenshots/free-tier-budget-card.svg | 89 +++--- open-sse/config/freeModelCatalog.data.ts | 48 ++++ open-sse/config/providers/index.ts | 2 + .../config/providers/registry/xkiro/index.ts | 271 ++++++++++++++++++ package.json | 2 +- public/images/tier-flow-dark.svg | 6 +- public/images/tier-flow-light.svg | 6 +- src/shared/constants/providers.ts | 1 + .../constants/providers/apikey/gateways.ts | 18 ++ tests/unit/check-docs-counts-sync.test.ts | 18 +- tests/unit/free-provider-xkiro.test.ts | 54 ++++ .../provider-node-reserved-prefix.test.ts | 4 +- 31 files changed, 562 insertions(+), 148 deletions(-) create mode 100644 open-sse/config/providers/registry/xkiro/index.ts create mode 100644 tests/unit/free-provider-xkiro.test.ts diff --git a/README.md b/README.md index 80210dcecc..80cfcac154 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,19 @@ # πŸš€ OmniRoute β€” The Free AI Gateway -OmniRoute β€” Never stop coding. Every AI tool β†’ 358 providers β€” 150+ free β€” through one endpoint. Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini with auto-fallback. RTK + Caveman stacked compression saves 15–95% tokens (~89% avg) β€” never hit limits. 358 AI providers Β· 150+ free tiers Β· ~1.47B free tokens/mo Β· 19 routing strategies Β· $0 to start. +OmniRoute β€” Never stop coding. Every AI tool β†’ 359 providers β€” 150+ free β€” through one endpoint. Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini with auto-fallback. RTK + Caveman stacked compression saves 15–95% tokens (~89% avg) β€” never hit limits. 359 AI providers Β· 150+ free tiers Β· ~1.62B free tokens/mo Β· 19 routing strategies Β· $0 to start.
-## πŸ’° ~1.47B Free Tokens / Month +## πŸ’° ~1.62B Free Tokens / Month
-> Stacking free tiers by hand is painful β€” dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute catalogs **452 free-tier entries across 34 recurring pool keys** and computes the token headline from the **16 pools with a published positive monthly budget plus five per-model Groq caps**, deduplicated by shared pool. Quotas that only open after a regional identity check (today: ModelScope) are shown apart, +~6M behind regional identity verification, and never summed into the headline. The result stays visible on the dashboard (`/dashboard/free-tiers`). +> Stacking free tiers by hand is painful β€” dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute catalogs **491 free-tier entries across 35 recurring pool keys** and computes the token headline from the **17 pools with a published positive monthly budget plus five per-model Groq caps**, deduplicated by shared pool. Quotas that only open after a regional identity check (today: ModelScope) are shown apart, +~6M behind regional identity verification, and never summed into the headline. The result stays visible on the dashboard (`/dashboard/free-tiers`). -OmniRoute free-tier budget card: ~1.47B free tokens per month steady, up to ~2.07B in the first month with signup credits, from 34 documented recurring pool keys covering 452 cataloged free-tier entries behind one endpoint. Honest pool-deduped math β€” each shared pool counted once, including 16 recurring pools with a published positive monthly token budget plus five per-model Groq caps; 13 providers are marked avoid in the terms-risk catalog so you decide. Budget bar includes Mistral 1B, Nara 210M, LLM7 150M, Groq 30M (five per-model caps) and smaller pools, plus first-month signup credits and permanently-free no-token-cap providers surfaced separately so they never inflate the headline. Live used/remaining on /dashboard/free-tiers. +OmniRoute free-tier budget card: ~1.62B free tokens per month steady, up to ~2.22B in the first month with signup credits, from 35 documented recurring pool keys covering 491 cataloged free-tier entries behind one endpoint. Honest pool-deduped math β€” each shared pool counted once, including 17 recurring pools with a published positive monthly token budget plus five per-model Groq caps; 13 providers are marked avoid in the terms-risk catalog so you decide. Budget bar includes Mistral 1B, Nara 210M, LLM7 150M, xKiro 150M, Groq 30M (five per-model caps) and smaller pools, plus first-month signup credits and permanently-free no-token-cap providers surfaced separately so they never inflate the headline. Live used/remaining on /dashboard/free-tiers. > Animated summary of the live `/dashboard/free-tiers` page. Full methodology (pool dedupe, credit tiers, provider terms): **[docs/reference/FREE_TIERS.md](docs/reference/FREE_TIERS.md)**. > @@ -63,7 +63,7 @@ | | v3.8.49 | **v3.8.50** | `v3.8.51+` | | ------------------------- | :-----: | :-----------------------: | :---------: | -| 🌐 Providers | 290 | **352** | more queued | +| 🌐 Providers | 290 | **357** | more queued | | 🧠 Unique chat model IDs | 1185 | **1312** | β€” | | πŸ–ΌοΈ Modality Bridge | β€” | πŸ†• vision + audio + video | β€” | | πŸ“‘ Radar free catalog | β€” | πŸ†• opt-in | β€” | @@ -101,7 +101,7 @@ βš™οΈ Features 🎯 Combos - 🌐 Providers + 🌐 Providers πŸ”Œ CLI & MCP @@ -233,7 +233,7 @@ curl http://localhost:20128/v1/chat/completions \ -The Promise β€” One endpoint and 358 providers. Automatic fallback keeps routing while another healthy target is available. Six pillars: resilient fallback across 358 providers Β· up to 95% token savings on eligible workloads Β· $0 to start with 150+ free tiers and 53 recurring/keyless free-forever providers Β· 36 CLI/agent integrations through one config Β· OpenAI, Claude, Gemini and Responses API compatibility at /v1 Β· production controls including circuit breakers, TLS stealth, MCP 110 tools, A2A, memory, guardrails, evals and 39,000+ static test declarations across 5,100+ tracked test files. +The Promise β€” One endpoint and 359 providers. Automatic fallback keeps routing while another healthy target is available. Six pillars: resilient fallback across 359 providers Β· up to 95% token savings on eligible workloads Β· $0 to start with 150+ free tiers and 54 recurring/keyless free-forever providers Β· 36 CLI/agent integrations through one config Β· OpenAI, Claude, Gemini and Responses API compatibility at /v1 Β· production controls including circuit breakers, TLS stealth, MCP 110 tools, A2A, memory, guardrails, evals and 39,000+ static test declarations across 5,100+ tracked test files.

@@ -486,7 +486,7 @@ All **19** strategies β€” mix & match per combo step: -What sets OmniRoute apart β€” a dated feature snapshot vs 9router, OpenRouter, CLIProxyAPI and LiteLLM across 13 capabilities. OmniRoute: 358 providers, 150+ free tiers built in, 19 routing strategies, 12-engine token compression, built-in MCP server with 110 tools, A2A agent protocol, persistent memory, guardrails, cloud agents, TLS fingerprint stealth, Desktop/Termux/PWA and 42 i18n UI locales. OmniRoute is MIT-licensed and self-hostable. Competitor capabilities and counts may change; see the linked methodology. +What sets OmniRoute apart β€” a dated feature snapshot vs 9router, OpenRouter, CLIProxyAPI and LiteLLM across 13 capabilities. OmniRoute: 359 providers, 150+ free tiers built in, 19 routing strategies, 12-engine token compression, built-in MCP server with 110 tools, A2A agent protocol, persistent memory, guardrails, cloud agents, TLS fingerprint stealth, Desktop/Termux/PWA and 42 i18n UI locales. OmniRoute is MIT-licensed and self-hostable. Competitor capabilities and counts may change; see the linked methodology. πŸ“Š Full methodology & per-feature detail vs 9router, OpenRouter, CLIProxyAPI & LiteLLM β†’ [`docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md`](docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md) @@ -542,9 +542,9 @@ Pix copia-e-cola: ## πŸ“‘ OmniRoute Radar -The main free-tier headline remains **~1.47B tokens/month** from the documented, +The main free-tier headline remains **~1.62B tokens/month** from the documented, pool-deduplicated catalog above. Temporary provider signup credits can separately lift the first -month to **~2.07B**. Radar is an optional, signed catalog overlay for people who want fresher +month to **~2.22B**. Radar is an optional, signed catalog overlay for people who want fresher free-model availability between OmniRoute releases; the community catalog and every existing free feature remain free. @@ -668,11 +668,11 @@ of your shell history. β†’ [CLI Integrations](docs/guides/CLI-INTEGRATIONS.md)
-## 🌐 352 AI Providers β€” 152 Catalog-Marked Free +## 🌐 357 AI Providers β€” 152 Catalog-Marked Free
-> **352 registered providers** across the canonical chat, media, search, local, cloud-agent and system collections, including **152 carrying `hasFree: true` discovery metadata**. The chat model registry covers **229 providers / 2,554 distinct provider-model pairs / 1,283 raw model IDs**; the separate free-budget catalog has **443 per-model rows**, **34 recurring pools** and **53 recurring/keyless free-forever providers**. These are different denominators by design; definitions and pool-deduped calculations live in the [Provider Reference](docs/reference/PROVIDER_REFERENCE.md) and [Free Tiers](docs/reference/FREE_TIERS.md). +> **357 registered providers** across the canonical chat, media, search, local, cloud-agent and system collections, including **152 carrying `hasFree: true` discovery metadata**. The chat model registry covers **229 providers / 2,554 distinct provider-model pairs / 1,283 raw model IDs**; the separate free-budget catalog has **491 per-model rows**, **35 recurring pools** and **54 recurring/keyless free-forever providers**. These are different denominators by design; definitions and pool-deduped calculations live in the [Provider Reference](docs/reference/PROVIDER_REFERENCE.md) and [Free Tiers](docs/reference/FREE_TIERS.md).
@@ -1331,7 +1331,7 @@ MΓ©tricas canΓ΄nicas em 2026-08-24: **1.029 vΓ­deos ΓΊnicos** Β· **11.132.922 vi Resilience GuideCircuit breakers, cooldowns, queue, anti-thundering herd, TLS spoofing Auto-Combo Engine16-factor scoring, mode packs, self-healing Proxy Guide3-level proxy system, 1proxy marketplace, registry CRUD - Free TiersConsolidated directory: 34 documented recurring pools / 452 cataloged free-tier entries + Free TiersConsolidated directory: 35 documented recurring pools / 491 cataloged free-tier entries Features GalleryVisual dashboard tour with screenshots Codebase DocumentationBeginner-friendly codebase walkthrough diff --git a/config/quality/file-size-baseline.json b/config/quality/file-size-baseline.json index ee72d15446..5e01e87b80 100644 --- a/config/quality/file-size-baseline.json +++ b/config/quality/file-size-baseline.json @@ -1,4 +1,5 @@ { + "_rebaseline_2026_09_03_12648_xkiro_provider": "PR #12648 (feat/provider-xkiro) own growth: src/shared/constants/providers/apikey/gateways.ts +18 lines on top of #12649 (the xkiro APIKEY_PROVIDERS_GATEWAYS catalog entry with hasFree/freeNote/authHint/apiHint documenting the 5M tokens/day free plan, plus the Prettier reflow of two pre-existing >100-col authHint lines (oneminai, freebuff) that lint-staged enforces on any touch of the file; additive data at the existing registry chokepoint, same god-file no-split rationale as prior gateways.ts rebaselines: #11786 seekai, #10987 logfare, #10531 freebuff). Covered by tests/unit/free-provider-xkiro.test.ts (4/4).", "_rebaseline_2026_09_15_12643_messages_entry_guard": "#12643 own growth: src/sse/handlers/chat.ts +10 (2490->2500 after syncing the 09-16 base, which itself moved the frozen value). A `messages` array containing a null/non-object entry (e.g. `[null]`) passed every existing entry guard (#5110/#6402/#6407/#6412) and crashed downstream translators/session helpers (openai-to-claude.ts, sessionManager.ts, contextManager.ts's fixToolPairs) reading `.role`/`.content` off the raw entry, surfacing as an HTTP 500 instead of a clean 400. Adds one more entry-shape guard clause to the same chokepoint, extending the existing guard family β€” same pattern, irreducible call-site wiring (the check itself is a one-line `.some()` predicate, not extractable into its own leaf without hiding the chokepoint). Covered by tests/unit/chat-messages-entry-objects-12643.test.ts (3/3) plus the sibling guard suites (chat-messages-validation-6402.test.ts, chat-non-string-model-6407.test.ts, 22/22, no regression). ATUALIZADO 2026-09-17: o teto foi refixado em 2519 ao mergear o tip atual. O tip sozinho ja esta em 2509 (acima do teto 2500 que esta PR havia fixado contra um tip anterior); o +10 desta PR e o proprio guard de entrada. O excedente do tip (2509>2500) e base-red herdado, nao introduzido aqui.", "_rebaseline_2026_09_17_13185_claude_oauth_sticky_refresh": "PR #13185 (@RaviTharuma): soft-fail do refresh do Claude para CredentialHealth nao ficar sticky-dead. src/lib/tokenHealthCheck.ts 1214 (tip) -> 1220 na branch e 1221 na arvore combinada com #13426; teto fixado em 1221. O teto anterior (1218) tinha apenas 4 linhas de folga. O crescimento e o proprio fix: preservar o refresh_token e distinguir falha transitoria de credencial morta exige estado extra no caminho de sweep, que nao pode sair do modulo sem quebrar a API interna. Coberto por tests/unit/tokenHealthCheck-claude-refresh-token-preserved.test.ts; os 14 arquivos irmaos de tokenHealthCheck/credentialHealth foram rodados juntos (72/72).", "_rebaseline_2026_09_16_jxnlexn_wave_growth": "Combined growth of the 2026-09-15 maxmad64bis uplift batch (each PR rebaselined its own growth; the merged sum is larger): src/sse/handlers/chat.ts->2498; open-sse/handlers/chatCore.ts->6181. Every hunk is flag-gated or a verified fix covered by that PR's tests; see the batch report.", @@ -503,7 +504,7 @@ "src/lib/tailscaleTunnel.ts": 1208, "src/lib/tokenHealthCheck.ts": 1221, "src/shared/components/RequestLoggerV2.tsx": 1718, - "src/shared/constants/providers/apikey/gateways.ts": 1502, + "src/shared/constants/providers/apikey/gateways.ts": 1520, "src/shared/services/cliRuntime.ts": 1296, "src/sse/handlers/chat.ts": 2520, "src/sse/services/auth.ts": 3557, diff --git a/docs/diagrams/README.md b/docs/diagrams/README.md index 610e2a4dba..0153844a7c 100644 --- a/docs/diagrams/README.md +++ b/docs/diagrams/README.md @@ -34,7 +34,7 @@ inside GitHub's `` sandbox: | [combo-always-on.svg](./combo-always-on.svg) | style reference | Animated priority-combo fallback (4 layers, 16s loop). Edit the SVG directly β€” there is no `.mmd` source. | | [cli-terminal.svg](./cli-terminal.svg) | README.md (root) | Compact half-height animated terminal (1200Γ—350): 3 real CLI commands cycling with typewriter + scrolling subcommand ticker; first frame = completed providers screen. Edit the SVG directly β€” there is no `.mmd` source. | | [compression-pipeline.svg](./compression-pipeline.svg) | README.md (root) | Animated 12-engine compression funnel (8s loop). Edit the SVG directly β€” there is no `.mmd` source. | -| [free-tier-budget.svg](./free-tier-budget.svg) | README.md (root) | Animated free-tier budget card (~1.47B/mo quantified headline, 16-pool + Groq-caps budget bar, per-pool grid, signup credits, 10s loop). Edit the SVG directly β€” there is no `.mmd` source. | +| [free-tier-budget.svg](./free-tier-budget.svg) | README.md (root) | Animated free-tier budget card (~1.62B/mo quantified headline, 17-pool + Groq-caps budget bar, per-pool grid, signup credits, 10s loop). Edit the SVG directly β€” there is no `.mmd` source. | | [readme-hero.svg](./readme-hero.svg) | README.md (root) | Animated hero card (tagline, live provider/free-access headline, full-width compression bar demo, 6 stat chips). Edit the SVG directly β€” there is no `.mmd` source. | | [promise-pillars.svg](./promise-pillars.svg) | README.md (root) | Animated "The Promise" 6-pillar card (12s border-highlight sweep). Edit the SVG directly β€” there is no `.mmd` source. | | [why-pain-fix.svg](./why-pain-fix.svg) | README.md (root) | Animated "Why OmniRoute" 10-row pain-vs-fix ledger (15s green row sweep). Edit the SVG directly β€” there is no `.mmd` source. | diff --git a/docs/diagrams/cli-terminal.svg b/docs/diagrams/cli-terminal.svg index 17f1c784e3..44f34575b5 100644 --- a/docs/diagrams/cli-terminal.svg +++ b/docs/diagrams/cli-terminal.svg @@ -1,4 +1,4 @@ - + Compact animated terminal cycling three real OmniRoute CLI commands with a typewriter effect and a scrolling subcommand ticker; the first frame shows the completed providers-list screen. @@ -6,7 +6,7 @@ omniroute — 86 top-level commands -omniroute providers listOmniRoute Providers1f3a9c2e  anthropic   Claude Max 20x    active8c2d5b1a  codex       Codex Pro (team)  activef4e0a97b  glm         GLM Coding Plan   active03bd6e5f  kimi        Kimi K2 free      active… 348 more providers +omniroute providers listOmniRoute Providers1f3a9c2e  anthropic   Claude Max 20x    active8c2d5b1a  codex       Codex Pro (team)  activef4e0a97b  glm         GLM Coding Plan   active03bd6e5f  kimi        Kimi K2 free      active… 353 more providers $ omniroute providers list @@ -14,7 +14,7 @@ -OmniRoute Providers1f3a9c2e  anthropic   Claude Max 20x    active8c2d5b1a  codex       Codex Pro (team)  activef4e0a97b  glm         GLM Coding Plan   active03bd6e5f  kimi        Kimi K2 free      active… 348 more providers +OmniRoute Providers1f3a9c2e  anthropic   Claude Max 20x    active8c2d5b1a  codex       Codex Pro (team)  activef4e0a97b  glm         GLM Coding Plan   active03bd6e5f  kimi        Kimi K2 free      active… 353 more providers $ @@ -32,7 +32,7 @@ -OmniRoute Health  Status: healthy   Uptime: 4d 12h 33m  Requests (24h): 18,412   p95: 412ms  Breakers: ● 24 closed  ◒ 1 half-open  ○ 0 open  Providers: 350 registered   90+ free tiers… live: /dashboard · omniroute status +OmniRoute Health  Status: healthy   Uptime: 4d 12h 33m  Requests (24h): 18,412   p95: 412ms  Breakers: ● 24 closed  ◒ 1 half-open  ○ 0 open  Providers: 357 registered   150+ free tiers… live: /dashboard · omniroute status diff --git a/docs/diagrams/comparison-table.svg b/docs/diagrams/comparison-table.svg index 02c0f45c32..5f64829434 100644 --- a/docs/diagrams/comparison-table.svg +++ b/docs/diagrams/comparison-table.svg @@ -1,4 +1,4 @@ - + Static-header comparison table where each capability row fades in top to bottom; the OmniRoute column is highlighted and shows a check or a leading value in every row, while competitors show a mix of checks, partials and crosses. @@ -23,7 +23,7 @@ Providers - 352 + 357 40+ 400+* ~5 @@ -32,7 +32,7 @@ Free providers built-in - 90+ + 150+ @@ -117,7 +117,7 @@ i18n UI locales - 42 + 43 6 diff --git a/docs/diagrams/free-tier-budget.svg b/docs/diagrams/free-tier-budget.svg index 6618799b94..02a64add2d 100644 --- a/docs/diagrams/free-tier-budget.svg +++ b/docs/diagrams/free-tier-budget.svg @@ -1,5 +1,5 @@ - - Pool-deduplicated chart of the 16 recurring free-token pools with positive published budgets (plus Groq's five per-model caps as one segment), plus signup credits and uncapped providers shown separately. + + Pool-deduplicated chart of the 17 recurring free-token pools with positive published budgets (plus Groq's five per-model caps as one segment), plus signup credits and uncapped providers shown separately. @@ -61,10 +61,10 @@ - ~1.47B + ~1.62B FREE TOKENS / MONTH · STEADY - up to ~2.07B in your first month — signup credits - documented free tiers · 34 recurring pools · 452 catalog entries · one endpoint + up to ~2.22B in your first month — signup credits + documented free tiers · 35 recurring pools · 491 catalog entries · one endpoint @@ -75,7 +75,7 @@ every rate limit · 24/7 we don't publish that - ~1.47B + ~1.62B each shared free pool counted once ✓ 13 providers ToS-flagged — we flag it · you decide @@ -85,22 +85,23 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -115,20 +116,21 @@ Mistral 1.00B Nara 210M LLM7 150M - Groq 30M · 5 caps - Cloudflare AI 30M - API Airforce 24M - Bluesminds 7.2M - SambaNova 6M - Arcee 4.8M - Navy 4.5M - BazaarLink 3.6M - OpenRouter 1.2M - Cohere 800K - HuggingChat 500K - Morph 400K - Hugging Face 200K - Kiro 25K + xKiro 150M + Groq 30M · 5 caps + Cloudflare AI 30M + API Airforce 24M + Bluesminds 7.2M + SambaNova 6M + Arcee 4.8M + Navy 4.5M + BazaarLink 3.6M + OpenRouter 1.2M + Cohere 800K + HuggingChat 500K + Morph 400K + Hugging Face 200K + Kiro 25K diff --git a/docs/diagrams/promise-pillars.svg b/docs/diagrams/promise-pillars.svg index 0fc137974f..ca60d088dd 100644 --- a/docs/diagrams/promise-pillars.svg +++ b/docs/diagrams/promise-pillars.svg @@ -1,4 +1,4 @@ - + Animated promise card: six pillar tiles fade in in reading order, then a soft colored border highlight sweeps from tile to tile in a continuous cycle. @@ -21,7 +21,7 @@ - One endpoint. 358 providers. Never stop building β€” OmniRoute picks the cheapest one that works. + One endpoint. 359 providers. Never stop building β€” OmniRoute picks the cheapest one that works. @@ -38,7 +38,7 @@ Never hit limits - Auto-fallback across 358 providers in + Auto-fallback across 359 providers in milliseconds. Quota out? The next provider takes over while a healthy target remains. @@ -73,7 +73,7 @@ $0 to start - 150+ providers with a free tier, 52 free + 150+ providers with a free tier, 53 free forever β€” Qoder, Pollinations, Cloudflare, SiliconFlow… No card needed. diff --git a/docs/diagrams/readme-hero.svg b/docs/diagrams/readme-hero.svg index 69cd5a65e0..c536c8d832 100644 --- a/docs/diagrams/readme-hero.svg +++ b/docs/diagrams/readme-hero.svg @@ -1,4 +1,4 @@ - + Animated hero card: a pulse travels the divider line and a compression bar demo repeatedly shrinks a prompt by up to 95 percent; all headline content is static and readable on the first frame. @@ -28,7 +28,7 @@ Never stop coding. - Every AI tool β†’ 358 providers β€” 150+ free β€” through one endpoint. + Every AI tool β†’ 359 providers β€” 150+ free β€” through one endpoint. Claude Code Β· Codex Β· Cursor Β· Cline Β· Copilot Β· Antigravity  β†’  FREE Claude / GPT / Gemini Β· auto-fallback @@ -66,13 +66,13 @@ - 352 + 357 AI PROVIDERS - 90+ + 150+ FREE TIERS - ~1.47B + ~1.62B FREE TOKENS / MO 15–95% diff --git a/docs/frameworks/OPEN_SSE_ARCHITECTURE.md b/docs/frameworks/OPEN_SSE_ARCHITECTURE.md index 75e6a67b29..ac68c62144 100644 --- a/docs/frameworks/OPEN_SSE_ARCHITECTURE.md +++ b/docs/frameworks/OPEN_SSE_ARCHITECTURE.md @@ -252,7 +252,7 @@ Supports **19 routing strategies** (see `src/shared/constants/routingStrategies. ### base.ts (1170 LOC) -The **abstract executor** that all 101 executors extend. It contains: +The **abstract executor** that all 107 executors extend. It contains: - `buildUrl()` β€” default URL construction (subclasses override for custom) - `buildHeaders()` β€” default headers (auth, content-type) diff --git a/docs/getting-started/FREE-TIERS-GUIDE.md b/docs/getting-started/FREE-TIERS-GUIDE.md index 87e52f908d..607d0ab97b 100644 --- a/docs/getting-started/FREE-TIERS-GUIDE.md +++ b/docs/getting-started/FREE-TIERS-GUIDE.md @@ -1,6 +1,6 @@ # Free Tiers Guide: Understand and Combine Free AI Access -> **TL;DR**: OmniRoute registers 352 provider IDs, with **152 provider-catalog entries marked `hasFree`**. The stricter audited free-model catalog covers **34 recurring pool keys / 443 entries** (436 active + 7 discontinued). Connect several suitable providers for broader fallback capacity; every quota, approval rule, privacy policy, and paid-overage condition still applies. +> **TL;DR**: OmniRoute registers 357 provider IDs, with **152 provider-catalog entries marked `hasFree`**. The stricter audited free-model catalog covers **35 recurring pool keys / 482 entries** (475 active + 7 discontinued). Connect several suitable providers for broader fallback capacity; every quota, approval rule, privacy policy, and paid-overage condition still applies. --- @@ -160,11 +160,11 @@ The live, pool-deduplicated catalog currently reports: | Metric | Current audited value | Interpretation | | ---------------------------------------------------- | -----------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------- | -| Recurring quantified grant | **~1.47B tokens/month** | Shared pools counted once; excludes uncapped providers from the sum | -| First month with signup grants | **~2.07B tokens** | Recurring total plus one-time and recurring credits | -| Audited free-model inventory | **34 recurring pool keys / 443 catalog entries** | 436 active + 7 discontinued; distinct from the 352-provider catalog | -| Recurring/keyless free-forever providers represented | **52** | Unique providers across recurring daily/monthly/credit/uncapped and keyless catalog types, eligibility-gated rows excluded | -| Provider catalog entries marked `hasFree` | **152 / 352** | Broader provider metadata; not all have a quantifiable recurring quota | +| Recurring quantified grant | **~1.62B tokens/month** | Shared pools counted once; excludes uncapped providers from the sum | +| First month with signup grants | **~2.22B tokens** | Recurring total plus one-time and recurring credits | +| Audited free-model inventory | **35 recurring pool keys / 482 catalog entries** | 475 active + 7 discontinued; distinct from the 357-provider catalog | +| Recurring/keyless free-forever providers represented | **53** | Unique providers across recurring daily/monthly/credit/uncapped and keyless catalog types, eligibility-gated rows excluded | +| Provider catalog entries marked `hasFree` | **152 / 357** | Broader provider metadata; not all have a quantifiable recurring quota | These values are computed from `open-sse/config/freeModelCatalog.ts`; see the [Free Tiers Reference](../reference/FREE_TIERS.md) for pool deduplication, ToS flags, diff --git a/docs/i18n/am/llm.txt b/docs/i18n/am/llm.txt index 112fb6bc09..3dd573fe29 100644 --- a/docs/i18n/am/llm.txt +++ b/docs/i18n/am/llm.txt @@ -7,7 +7,6 @@ - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 359 AI providers β€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview diff --git a/docs/i18n/ha/llm.txt b/docs/i18n/ha/llm.txt index 697041f2cc..189a3f06da 100644 --- a/docs/i18n/ha/llm.txt +++ b/docs/i18n/ha/llm.txt @@ -7,7 +7,6 @@ - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 359 AI providers β€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview diff --git a/docs/i18n/hy/llm.txt b/docs/i18n/hy/llm.txt index d4e773c23f..708ab71050 100644 --- a/docs/i18n/hy/llm.txt +++ b/docs/i18n/hy/llm.txt @@ -7,7 +7,6 @@ - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 359 AI providers β€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview diff --git a/docs/i18n/ig/llm.txt b/docs/i18n/ig/llm.txt index 35b1197328..bdd2395be5 100644 --- a/docs/i18n/ig/llm.txt +++ b/docs/i18n/ig/llm.txt @@ -7,7 +7,6 @@ - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 359 AI providers β€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview diff --git a/docs/i18n/ka/llm.txt b/docs/i18n/ka/llm.txt index a39109a852..1e4bf5fbb7 100644 --- a/docs/i18n/ka/llm.txt +++ b/docs/i18n/ka/llm.txt @@ -7,7 +7,6 @@ - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 359 AI providers β€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview diff --git a/docs/i18n/uz/llm.txt b/docs/i18n/uz/llm.txt index e1974986ec..5fa011daf5 100644 --- a/docs/i18n/uz/llm.txt +++ b/docs/i18n/uz/llm.txt @@ -7,7 +7,6 @@ - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 359 AI providers β€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview diff --git a/docs/i18n/yo/llm.txt b/docs/i18n/yo/llm.txt index b119d3d91c..e676daa916 100644 --- a/docs/i18n/yo/llm.txt +++ b/docs/i18n/yo/llm.txt @@ -7,7 +7,6 @@ - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 359 AI providers β€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview diff --git a/docs/reference/FREE_TIERS.md b/docs/reference/FREE_TIERS.md index db0edbeb7a..929d192f76 100644 --- a/docs/reference/FREE_TIERS.md +++ b/docs/reference/FREE_TIERS.md @@ -15,14 +15,14 @@ lastUpdated: 2026-09-03 | Metric | Tokens / month | Meaning | | ------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Documented recurring grant (steady)** | **~1.47B** | Free-tier **pools** (per-model catalog), each shared pool counted **once**. The live source behind `/api/free-tier/summary` and the dashboard's Free-Tier Budget page. **Use this number.** | -| **+ first month with signup credits** | **~2.07B** | Steady + one-time signup credits (Z.AI 20M, DeepSeek 5M, …), deduped per account. **First month only** β€” does not recur. | +| **Documented recurring grant (steady)** | **~1.62B** | Free-tier **pools** (per-model catalog), each shared pool counted **once**. The live source behind `/api/free-tier/summary` and the dashboard's Free-Tier Budget page. **Use this number.** | +| **+ first month with signup credits** | **~2.22B** | Steady + one-time signup credits (Z.AI 20M, DeepSeek 5M, …), deduped per account. **First month only** β€” does not recur. | | **+ permanently free, no published cap** | _un-quantifiable_ | `siliconflow`, `glm-cn` (GLM-4-Flash), `tencent`, `baidu`, `kilo-gateway`, `opencode-zen`, `gemini`, `ollama-cloud` β€” real recurring access, rate/concurrency-limited, **no token cap to count**. Listed, never summed (counting them at `RPMΓ—24/7` is the inflation we reject). | | **+ deposit-unlock boost** | **+~24M** | A one-time **$10** OpenRouter top-up raises its free pool from 50 β†’ 1000 req/day. Reported separately so it never inflates the steady number. | | **+ behind a regional identity check** | **+~6M** | `modelscope` (Alibaba Cloud binding + mainland-China real-name verification). Real recurring quota, exposed as `gatedRecurringTokens` / `gatedProviders` and on the dashboard. Never summed into the headline: +~6M behind regional identity verification. | | Theoretical ceiling (all rate limits, 24/7) | ~10B | Sum of every provider rate limit extrapolated to non-stop use. **Not a guarantee** β€” do not headline this. | -**Honest headline:** _OmniRoute aggregates **~1.47B documented free tokens per month** (up to ~2.07B in your first month with signup credits) across 34 free-tier pools β€” plus a long tail of permanently-free, no-cap providers β€” and RTK + Caveman compression (15–95% token savings) stretches that further._ +**Honest headline:** _OmniRoute aggregates **~1.62B documented free tokens per month** (up to ~2.22B in your first month with signup credits) across 35 free-tier pools β€” plus a long tail of permanently-free, no-cap providers β€” and RTK + Caveman compression (15–95% token savings) stretches that further._ > **Why this dropped from the previous ~1.94B.** The 2026-06-17 refresh is an honesty correction, not a loss: `gemini` is now pool-deduped (was inflated by counting each Flash variant separately, 462M β†’ 60M), `cloudflare-ai` corrected to its real 10k-Neurons/day (122M β†’ 30M), `doubao` reclassified as a one-time signup credit (not recurring), and shut-down tiers removed (`chutes`/`phind`/`kluster` discontinued). Partly offset by `llm7` (correct 5M/day β†’ 150M) and new free providers (Kilo, OpenCode Zen, Z.AI GLM-Flash). > @@ -30,11 +30,13 @@ lastUpdated: 2026-09-03 > > **Updated on 2026-08-26 after retiring Felo Web:** Felo Web is excluded while its GPL-derived provenance/licensing remains on HOLD; the source reported 38 pool keys at the time. The pool count is live and CI-gated (`check:docs-counts` fails the build if the numbers above drift from `computeFreeModelTotals()`). > -> **Re-audited on 2026-09-02 against the providers' own pages** (sources: the `// evidence:` comments next to each re-audited entry in `open-sse/config/freeModelCatalog.data.ts`): `gemini` and `ollama-cloud` no longer publish a token figure (Google removed the per-model free table on 2025-12-23; Ollama's Free plan is "starter usage credits") and are now listed as **uncapped**, never summed (βˆ’80M); `groq` is five **per-model** 200K-TPD caps (6M each, +15M) with three retired IDs dropped; `nara` is one 7M/day bucket (+60M, 210M). `mistral`'s 1B is visible only in the account console β€” see _Evidence classes_ under Methodology. The source reported 35 such keys at that point (βˆ’3: `gemini` and `ollama-cloud` moved to the uncapped list, and Groq's per-model caps are not a shared pool). +> **Re-audited on 2026-09-02 against the providers' own pages** (sources: the `// evidence:` comments next to each re-audited entry in `open-sse/config/freeModelCatalog.data.ts`): `gemini` and `ollama-cloud` no longer publish a token figure (Google removed the per-model free table on 2025-12-23; Ollama's Free plan is "starter usage credits") and are now listed as **uncapped**, never summed (βˆ’80M); `groq` is five **per-model** 200K-TPD caps (6M each, +15M) with three retired IDs dropped; `nara` is one 7M/day bucket (+60M, 210M). `mistral`'s 1B is visible only in the account console β€” see _Evidence classes_ under Methodology. > -> **Corrected to ~1.47B on 2026-09-03 (#11773):** `cerebras` was reclassified from a 30M/mo recurring grant (old no-card 1M tokens/day trial) to a one-time $5 signup credit that requires a payment method. Same honesty rule as LongCat. The source now reports 34 recurring pool keys and ~1.47B steady. +> **Corrected on 2026-09-03 (#11773):** `cerebras` was reclassified from a 30M/mo recurring grant (old no-card 1M tokens/day trial) to a one-time $5 signup credit that requires a payment method. Same honesty rule as LongCat. +> +> **Plus xKiro (2026-09-03):** the new `xkiro-free` pool (150M/mo) adds a 35th recurring pool key. Felo Web stays excluded while its GPL-derived provenance/licensing remains on HOLD. The source now reports **35 recurring pool keys** and **~1.62B steady** β€” the live, CI-gated number (`check:docs-counts` fails the build if this drifts from `computeFreeModelTotals()`). -Biggest **documented** contributors: `mistral` 1.00B, `nara` 210M, `llm7` 150M, `groq` 30M (five per-model caps), `cloudflare-ai` 30M, `api-airforce` 24M. (`longcat` is excluded β€” its 10M LongCat-2.0 grant is a one-time, KYC-gated signup credit, not a recurring monthly budget.) +Biggest **documented** contributors: `mistral` 1.00B, `nara` 210M, `llm7` 150M, `xkiro` 150M, `groq` 30M (five per-model caps), `cloudflare-ai` 30M, `api-airforce` 24M. (`longcat` is excluded β€” its 10M LongCat-2.0 grant is a one-time, KYC-gated signup credit, not a recurring monthly budget.) > ⚠️ The theoretical ceiling (~10B) is inflated by rate-limit-only providers with **no published token cap** (`tencent`, `siliconflow`, `nvidia`, `baidu`, `glm-cn`, `sparkdesk`) whose figures would be `RPM/TPM Γ— 24/7 Γ— 30d` β€” a theoretical maximum no single account will sustain. They are **excluded** from the defensible number (shown in the "permanently free, no cap" row instead). This is the same inflation that makes competitors' multi-billion claims unreliable. @@ -74,7 +76,7 @@ purpose. ## Methodology & caveats - Numbers are **upper-bound estimates** from each provider's documented free-tier limits as of **2026-06-17**, gathered by web research. Free tiers change constantly β€” re-verify before relying on a figure. -- **What an entry actually vouches for.** No entry carries a per-row confidence rating, and the API serves none β€” treat every figure above as an estimate of the same, unstated quality. Two facts are different, because they are curated by hand rather than inferred: 5 entries carry an independently documented hard stop, and 13 entries carry a prompt-training disclosure. `hardStopGuaranteed` is set only when the provider's own terms say that exceeding the free allowance refuses the request rather than silently starting to bill you, with the source in a comment next to the entry; it is never defaulted to `true`, and an entry nobody has verified stays unset. So a missing hard-stop flag means "not established", not "known to bill you". **STRICT mode** (the opt-in `freeAccessPolicy=strict` routing guard) only trusts entries that carry the flag; every other free tier is excluded as `no-hard-stop` (see `open-sse/services/autoCombo/strictZeroCostFilter.ts`). +- **What an entry actually vouches for.** No entry carries a per-row confidence rating, and the API serves none β€” treat every figure above as an estimate of the same, unstated quality. Two facts are different, because they are curated by hand rather than inferred: 44 entries carry an independently documented hard stop (39 of them the xKiro rows, which all share one daily allowance), and 13 entries carry a prompt-training disclosure. `hardStopGuaranteed` is set only when the provider's own terms say that exceeding the free allowance refuses the request rather than silently starting to bill you, with the source in a comment next to the entry; it is never defaulted to `true`, and an entry nobody has verified stays unset. So a missing hard-stop flag means "not established", not "known to bill you". **STRICT mode** (the opt-in `freeAccessPolicy=strict` routing guard) only trusts entries that carry the flag; every other free tier is excluded as `no-hard-stop` (see `open-sse/services/autoCombo/strictZeroCostFilter.ts`). - `estMonthlyFreeTokens` = recurring monthly tokens only. **One-time signup credits do not recur** and count as 0. Discontinued tiers are also 0. - Daily token cap β†’ `monthly = daily Γ— 30`. Only RPD documented β†’ `RPD Γ— ~800 output tokens Γ— 30`. Only RPM/TPM (no daily cap) β†’ **uncapped** (see below). - **Permanently free, but no published token cap** (`siliconflow`, `glm-cn`, `tencent`, `baidu`, `kilo-gateway`, `opencode-zen`, `gemini`, `ollama-cloud`): these are real recurring free access, rate/concurrency-limited. We classify them `recurring-uncapped` and **never sum them** β€” multiplying `RPM Γ— 24/7 Γ— 30d` would produce a fantasy ceiling (the inflation we reject). They are listed so you know they exist. @@ -189,6 +191,7 @@ Most "free tokens per month" figures in this space are sums of per-model labels. | `veoaifree-web` | caution | ToS explicitly bans automated bots or scripts running at "inhuman speeds" and prohibits copying the platform to create … | | `vertex` | caution | Google Cloud Service Terms restrict resale to authorized resellers only (Section 14 requires a Reseller Agreement); a s… | | `voyage-ai` | caution | ToS grants "personal, non-commercial use" for site content and prohibits credential/account sharing with third parties;… | +| `xkiro` | caution | ToS (2026-07-30) forbids reselling/redistributing the service and violating the upstream providers' terms; personal pro… | | `360ai` | unknown | ToS for developer API not publicly accessible without registration; access requires application approval which implies … | | `chutes` | unknown | ToS page exists at chutes.ai/terms but content was not accessible via fetch; no explicit proxy/resale clauses found in … | | `freemodel-dev` | unknown | The Terms of Service page (freemodel.dev/terms) returned only a header with no readable content via WebFetch; no clause… | @@ -211,6 +214,7 @@ Most "free tokens per month" figures in this space are sums of per-model labels. | `mistral` | recurring | ~1.00B | β€” | caution | 5 | | `nara` | recurring | ~210M | β€” | caution | 8 | | `llm7` | recurring | ~150M | β€” | caution | 4 | +| `xkiro` | recurring | ~150M | β€” | caution | 39 | | `longcat` | one-time | β€” | 10M | caution | 1 | | `cerebras` | one-time | β€” | $5 credit | caution | 2 | | `cloudflare-ai` | recurring | ~30M | β€” | caution | 9 | diff --git a/docs/reference/PROVIDER_REFERENCE.md b/docs/reference/PROVIDER_REFERENCE.md index 7fd3ee9a83..54b4524915 100644 --- a/docs/reference/PROVIDER_REFERENCE.md +++ b/docs/reference/PROVIDER_REFERENCE.md @@ -1,16 +1,16 @@ --- title: "Provider Reference" version: 3.8.51 -lastUpdated: 2026-09-16 +lastUpdated: 2026-09-17 --- # Provider Reference > **Auto-generated** from `src/shared/constants/providers.ts` β€” do not edit by hand. > Regenerate with: `npm run gen:provider-reference` -> **Last generated:** 2026-09-16 +> **Last generated:** 2026-09-17 -Total providers: **358**. See category breakdown below. +Total providers: **359**. See category breakdown below. ## Categories @@ -117,7 +117,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `zai-web` | `zw` | Z.ai Web | Web cookie | [link](https://chat.z.ai) | Copy the "token" value from chat.z.ai β†’ DevTools β†’ Application β†’ Local Storage. Do not copy cookies; OmniRoute handles the per-request CAPTCHA through its browser transport. | β€” | | `zenmux-free` | `zmf` | ZenMux Free (Web) | Web cookie | [link](https://zenmux.ai) | Login at zenmux.ai, then export all cookies using EditThisCookie or Cookie-Editor and paste the full Cookie header string here. Refresh every ~30 days. | β€” | -## API Key Providers (paid / paid-with-free-credits) (241) +## API Key Providers (paid / paid-with-free-credits) (242) | ID | Alias | Name | Tags | Website | Notes | |----|-------|------|------|---------|-------| @@ -341,8 +341,8 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `v0-vercel` | `v0` | v0 (Vercel) | API key | [link](https://v0.dev) | β€” | | `venice` | `venice` | Venice.ai | API key | [link](https://venice.ai) | β€” | | `vercel-ai-gateway` | `vag` | Vercel AI Gateway | API key, aggregator | [link](https://vercel.com/docs/ai-gateway) | β€” | -| `vertex` | `vertex` | Vertex AI | API key, enterprise | [link](https://cloud.google.com/vertex-ai) | Provide Service Account JSON or OAuth access_token | -| `vertex-partner` | `vp` | Vertex AI Partners | API key, enterprise | [link](https://cloud.google.com/vertex-ai) | Provide the same Service Account JSON used for Vertex AI partner models. | +| `vertex` | `vertex` | Vertex AI | API key, enterprise | [link](https://cloud.google.com/vertex-ai) | Provide Service Account JSON, an OAuth access token, a Vertex Express API key, or a service-account-bound authorization key. Express mode supports Gemini only; partner models require project-scoped credentials. | +| `vertex-partner` | `vp` | Vertex AI Partners | API key, enterprise | [link](https://cloud.google.com/vertex-ai) | Provide Service Account JSON or OAuth credentials. A service-account-bound authorization key also supports discovery, but partner inference additionally requires its Google Cloud project ID. Standard Express keys support Gemini only. | | `void-ai` | `void-ai` | Void AI | API key, aggregator | [link](https://voidai.app) | The public model catalog marks some models with a free plan requirement, but access is conditional and no numeric quota is confirmed. | | `volcengine` | `volcengine` | Volcengine | API key | [link](https://www.volcengine.com) | β€” | | `volcengine-agent-plan` | `veap` | Volcengine Ark Agent Plan | API key | [link](https://console.volcengine.com/ark/region:cn-beijing/subscription/agent-plan) | Connect your Volcano Engine account or use an Ark Agent Plan subscription API key. | @@ -356,6 +356,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `xai` | `xai` | xAI (Grok) | API key | [link](https://x.ai) | Use an official xAI API key, or sign in with xAI OAuth. Grok Build JWT sessions remain a separate provider. | | `xiaomi-mimo` | `mimo` | Xiaomi MiMo | API key | [link](https://mimo.mi.com) | β€” | | `xiaomi-mimo-token-plan` | `mimotp` | Xiaomi MiMo Token Plan | API key | [link](https://mimo.mi.com) | β€” | +| `xkiro` | `xkiro` | xKiro | API key, aggregator | [link](https://xkiro.com) | Create a free account at xkiro.com and paste the key here (Bearer; x-api-key also accepted). | | `yi` | `yi` | Yi (01.AI) | API key | [link](https://01.ai) | Get API key at platform.lingyiwanwu.com | | `yolo-auto` | `yolo-auto` | Yolo-Auto | API key, aggregator | [link](https://yolo-auto.com) | Free API access is request-limited and intended for testing; no numeric daily quota is published and free access is not promised indefinitely. | | `zai` | `zai` | Z.AI | API key | [link](https://open.bigmodel.cn) | β€” | diff --git a/docs/screenshots/free-tier-budget-card.svg b/docs/screenshots/free-tier-budget-card.svg index 5c47cdf7ac..b1613abef0 100644 --- a/docs/screenshots/free-tier-budget-card.svg +++ b/docs/screenshots/free-tier-budget-card.svg @@ -3,36 +3,37 @@ OmniRoute Β· /dashboard/free-tiers Β· preview mockup Monthly free-token budget -21 free pools Β· 452 models Β· one endpoint +22 free pools Β· 482 models Β· one endpoint Steady / month -~1.47B +~1.62B First month (+ signup credits) -~2.07B +~2.22B ToS-flagged (you decide) 13 providers - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + Each segment = one free pool Β· widths floored so every provider shows Β· honest numbers in the grid. @@ -42,41 +43,43 @@ GPT-4o mini 150M -Llama 3.3 70B 30M +Qwen3 VL Plus 150M -Grok-3 24M +Llama 3.3 70B 30M -GPT-4o 7M +Grok-3 24M -GPT-OSS 120B 6M +GPT-4o 7M -GPT-OSS 20B 6M +GPT-OSS 120B 6M -GPT-OSS Safeguard 20B 6M +GPT-OSS 20B 6M -Qwen3.6 27B 6M +GPT-OSS Safeguard 20B 6M -Qwen3.8 27B 6M +Qwen3.6 27B 6M -MiniMax-M2.7 6M +Qwen3.8 27B 6M -Arcee Trinity Large Prev 5M +MiniMax-M2.7 6M -NavyAI free pool 5M +Arcee Trinity Large Prev 5M -Auto Free 4M +NavyAI free pool 5M -Auto 1M +Auto Free 4M -Command A Reasoning 800K +Auto 1M -ERNIE 4.5 VL 424B A47B B 500K +Command A Reasoning 800K -morph-v3-large 400K +ERNIE 4.5 VL 424B A47B B 500K -Llama 3.1 8B 200K +morph-v3-large 400K -Claude Sonnet 4.5 25K +Llama 3.1 8B 200K + +Claude Sonnet 4.5 25K + First month: one-time signup credits (~601M) @@ -99,6 +102,6 @@ hyperbolic 5M Pool-deduped, honest counting β€” no inflated rate-limit ceilings. Some terms suggest personal-use only; we flag them so you decide. -+ 16 permanently-free, no-cap providers (e.g. agnes, agnes-cn, ainative) Β· OpenRouter $10 β†’ +24M/mo. ++ 15 permanently-free, no-cap providers (e.g. agnes, ainative, aion) Β· OpenRouter $10 β†’ +24M/mo. + ~6M behind regional identity verification (modelscope) β€” real quota, never in the headline. diff --git a/open-sse/config/freeModelCatalog.data.ts b/open-sse/config/freeModelCatalog.data.ts index 4ef102a79b..11b797484c 100644 --- a/open-sse/config/freeModelCatalog.data.ts +++ b/open-sse/config/freeModelCatalog.data.ts @@ -516,4 +516,52 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [ { provider: "nara", modelId: "mistral-medium-3-5", displayName: "Mistral Medium 3.5", monthlyTokens: 210000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "nara-free", tos: "caution" }, { provider: "nara", modelId: "qwen3.8-27b", displayName: "Qwen3.8 27B", monthlyTokens: 210000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "nara-free", tos: "caution" }, { provider: "nara", modelId: "stepfun-3.7-flash", displayName: "StepFun 3.7 Flash", monthlyTokens: 210000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "nara-free", tos: "caution" }, + // evidence: public-page https://xkiro.com/ (2026-09-02) β€” Free plan: "$0 / month Β· Free forever Β· Free tokens + // 5M / day Β· Access to 40+ free models Β· No credit card"; https://docs.xkiro.com/models/tiers/ β€” "free β€” any + // account β€” Callable on every plan, including the free one, within a daily token allowance". One allowance per + // account β‡’ single pool: 5M Γ— 30 = 150M. Rows = the 40 `access_tier: "free"` models on the public + // GET https://api.xkiro.com/v1/models minus openai/gpt-5.3-codex-spark (undeclared provenance). + // hardStopGuaranteed: https://docs.xkiro.com/api/rate-limits/ β€” "Past it, free-model requests are blocked with a + // 429 until the daily reset" + "No credit card" (page header) / "no card required" (Free plan card). + // tos: caution β€” ToS (2026-07-30) forbids reselling the service and violating the upstream providers' terms; + // personal proxy use is not addressed. + { provider: "xkiro", modelId: "qwen/qwen3-vl-plus:free", displayName: "Qwen3 VL Plus (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "sensenova/sensenova-6.8-flash-lite", displayName: "SenseNova 6.8 Flash-Lite (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "minimax/minimax-m2.7:free", displayName: "MiniMax M2.7 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "minimax/minimax-m2.7-highspeed:free", displayName: "MiniMax M2.7 Highspeed (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "minimax/minimax-m2.5:free", displayName: "MiniMax M2.5 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "minimax/minimax-m3:free", displayName: "MiniMax M3 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "minimax/minimax-m2.1-highspeed:free", displayName: "MiniMax M2.1 Highspeed (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "minimax/minimax-m2.5-highspeed:free", displayName: "MiniMax M2.5 Highspeed (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "minimax/minimax-m2.1:free", displayName: "MiniMax M2.1 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "minimax/minimax-m2:free", displayName: "MiniMax M2 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.5-flash:free", displayName: "Qwen3.5 Flash (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.6-plus:free", displayName: "Qwen3.6 Plus (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.5-397b-a17b:free", displayName: "Qwen3.5 397B A17B (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.5-omni-flash:free", displayName: "Qwen3.5 Omni Flash (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "mistralai/mistral-large-2512", displayName: "Mistral Large 3 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "mistralai/mistral-medium-3.5", displayName: "Mistral Medium 3.5 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "mistralai/mistral-small-2603", displayName: "Mistral Small 4 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "mistralai/codestral-2508", displayName: "Codestral (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "mistralai/devstral-medium", displayName: "Devstral 2 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "mistralai/ministral-8b", displayName: "Ministral 3 8B (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "mistralai/ministral-3b", displayName: "Ministral 3 3B (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "deepseek/deepseek-v4-pro", displayName: "DeepSeek V4 Pro (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "deepseek/deepseek-v3.2", displayName: "DeepSeek V3.2 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "deepseek/deepseek-chat-v3.1", displayName: "DeepSeek V3.1 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.7-plus:free", displayName: "Qwen3.7 Plus (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "mistralai/ministral-14b", displayName: "Ministral 3 14B (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.6-max-preview:free", displayName: "Qwen3.6 Max Preview (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.5-plus:free", displayName: "Qwen3.5 Plus (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.5-omni-plus:free", displayName: "Qwen3.5 Omni Plus (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "deepseek/deepseek-v4-flash", displayName: "DeepSeek V4 Flash (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "sensenova/sensenova-6.7-flash-lite", displayName: "SenseNova 6.7 Flash-Lite (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.8-max:free", displayName: "Qwen3.8 Max (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.7-max:free", displayName: "Qwen3.7 Max (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.6-27b:free", displayName: "Qwen3.6 27B (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3.6-35b-a3b:free", displayName: "Qwen3.6 35B A3B (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3-max:free", displayName: "Qwen3 Max (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3-coder-plus:free", displayName: "Qwen3 Coder Plus (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen-plus-2025-07-28:free", displayName: "Qwen Plus 0728 (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, + { provider: "xkiro", modelId: "qwen/qwen3-omni-flash:free", displayName: "Qwen3 Omni Flash (xKiro)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "xkiro-free", tos: "caution", hardStopGuaranteed: true }, ]; diff --git a/open-sse/config/providers/index.ts b/open-sse/config/providers/index.ts index 83e6554cae..91df75b5c5 100644 --- a/open-sse/config/providers/index.ts +++ b/open-sse/config/providers/index.ts @@ -231,6 +231,7 @@ import { x5labProvider } from "./registry/x5lab/index.ts"; import { kenariProvider } from "./registry/kenari/index.ts"; import { navyProvider } from "./registry/navy/index.ts"; import { naraProvider } from "./registry/nara/index.ts"; +import { xkiroProvider } from "./registry/xkiro/index.ts"; import { opperProvider } from "./registry/opper/index.ts"; import { requestyProvider } from "./registry/requesty/index.ts"; import { sealionProvider } from "./registry/sealion/index.ts"; @@ -508,6 +509,7 @@ export const REGISTRY: Record = { kenari: kenariProvider, navy: navyProvider, nara: naraProvider, + xkiro: xkiroProvider, opper: opperProvider, requesty: requestyProvider, sealion: sealionProvider, diff --git a/open-sse/config/providers/registry/xkiro/index.ts b/open-sse/config/providers/registry/xkiro/index.ts new file mode 100644 index 0000000000..4e76ae2ba9 --- /dev/null +++ b/open-sse/config/providers/registry/xkiro/index.ts @@ -0,0 +1,271 @@ +import type { RegistryEntry } from "../../shared.ts"; +import { buildOpenAiCompatibleRegistryEntry } from "../../shared.ts"; + +/** + * xKiro β€” OpenAI-compatible gateway (xkiro.com). Free plan: 5M tokens/day per + * account across the models tagged `access_tier: "free"` on the public + * `GET https://api.xkiro.com/v1/models` (2026-09-02: 40 rows; context lengths and + * capabilities below come from that endpoint). `openai/gpt-5.3-codex-spark` is + * listed free upstream but its provenance is undeclared, so it is not pinned. + * Bearer auth; `GET /v1/usage` answers 401 without a valid key. + */ +export const xkiroProvider: RegistryEntry = buildOpenAiCompatibleRegistryEntry({ + id: "xkiro", + baseUrl: "https://api.xkiro.com/v1/chat/completions", + models: [ + { + id: "qwen/qwen3-vl-plus:free", + name: "Qwen3 VL Plus", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + { + id: "sensenova/sensenova-6.8-flash-lite", + name: "SenseNova 6.8 Flash-Lite", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + { + id: "minimax/minimax-m2.7:free", + name: "MiniMax M2.7", + contextLength: 204800, + toolCalling: true, + }, + { + id: "minimax/minimax-m2.7-highspeed:free", + name: "MiniMax M2.7 Highspeed", + contextLength: 204800, + toolCalling: true, + }, + { + id: "minimax/minimax-m2.5:free", + name: "MiniMax M2.5", + contextLength: 204800, + toolCalling: true, + }, + { + id: "minimax/minimax-m3:free", + name: "MiniMax M3", + contextLength: 1000000, + toolCalling: true, + supportsVision: true, + }, + { + id: "minimax/minimax-m2.1-highspeed:free", + name: "MiniMax M2.1 Highspeed", + contextLength: 204800, + toolCalling: true, + }, + { + id: "minimax/minimax-m2.5-highspeed:free", + name: "MiniMax M2.5 Highspeed", + contextLength: 204800, + toolCalling: true, + }, + { + id: "minimax/minimax-m2.1:free", + name: "MiniMax M2.1", + contextLength: 204800, + toolCalling: true, + }, + { id: "minimax/minimax-m2:free", name: "MiniMax M2", contextLength: 204800, toolCalling: true }, + { + id: "qwen/qwen3.5-flash:free", + name: "Qwen3.5 Flash", + contextLength: 1000000, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen3.6-plus:free", + name: "Qwen3.6 Plus", + contextLength: 1000000, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen3.5-397b-a17b:free", + name: "Qwen3.5 397B A17B", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen3.5-omni-flash:free", + name: "Qwen3.5 Omni Flash", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + { + id: "mistralai/mistral-large-2512", + name: "Mistral Large 3", + contextLength: 256000, + toolCalling: true, + supportsVision: true, + supportsReasoning: false, + }, + { + id: "mistralai/mistral-medium-3.5", + name: "Mistral Medium 3.5", + contextLength: 256000, + toolCalling: true, + supportsVision: true, + }, + { + id: "mistralai/mistral-small-2603", + name: "Mistral Small 4", + contextLength: 256000, + toolCalling: true, + supportsVision: true, + }, + { + id: "mistralai/codestral-2508", + name: "Codestral", + contextLength: 256000, + toolCalling: true, + supportsReasoning: false, + }, + { + id: "mistralai/devstral-medium", + name: "Devstral 2", + contextLength: 256000, + toolCalling: true, + supportsReasoning: false, + }, + { + id: "mistralai/ministral-8b", + name: "Ministral 3 8B", + contextLength: 256000, + toolCalling: true, + supportsVision: true, + supportsReasoning: false, + }, + { + id: "mistralai/ministral-3b", + name: "Ministral 3 3B", + contextLength: 128000, + toolCalling: true, + supportsVision: true, + supportsReasoning: false, + }, + { + id: "deepseek/deepseek-v4-pro", + name: "DeepSeek V4 Pro", + contextLength: 1048576, + toolCalling: true, + }, + { + id: "deepseek/deepseek-v3.2", + name: "DeepSeek V3.2", + contextLength: 131072, + toolCalling: true, + }, + { + id: "deepseek/deepseek-chat-v3.1", + name: "DeepSeek V3.1", + contextLength: 163840, + toolCalling: true, + }, + { + id: "qwen/qwen3.7-plus:free", + name: "Qwen3.7 Plus", + contextLength: 1000000, + toolCalling: true, + supportsVision: true, + }, + { + id: "mistralai/ministral-14b", + name: "Ministral 3 14B", + contextLength: 256000, + toolCalling: true, + supportsVision: true, + supportsReasoning: false, + }, + { + id: "qwen/qwen3.6-max-preview:free", + name: "Qwen3.6 Max Preview", + contextLength: 262144, + toolCalling: true, + }, + { + id: "qwen/qwen3.5-plus:free", + name: "Qwen3.5 Plus", + contextLength: 1000000, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen3.5-omni-plus:free", + name: "Qwen3.5 Omni Plus", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + { + id: "deepseek/deepseek-v4-flash", + name: "DeepSeek V4 Flash", + contextLength: 1048576, + toolCalling: true, + }, + { + id: "sensenova/sensenova-6.7-flash-lite", + name: "SenseNova 6.7 Flash-Lite", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen3.8-max:free", + name: "Qwen3.8 Max", + contextLength: 1000000, + toolCalling: true, + supportsVision: true, + }, + { id: "qwen/qwen3.7-max:free", name: "Qwen3.7 Max", contextLength: 1000000, toolCalling: true }, + { + id: "qwen/qwen3.6-27b:free", + name: "Qwen3.6 27B", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen3.6-35b-a3b:free", + name: "Qwen3.6 35B A3B", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen3-max:free", + name: "Qwen3 Max", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen3-coder-plus:free", + name: "Qwen3 Coder Plus", + contextLength: 1048576, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen-plus-2025-07-28:free", + name: "Qwen Plus 0728", + contextLength: 131072, + toolCalling: true, + supportsVision: true, + }, + { + id: "qwen/qwen3-omni-flash:free", + name: "Qwen3 Omni Flash", + contextLength: 262144, + toolCalling: true, + supportsVision: true, + }, + ], +}); diff --git a/package.json b/package.json index 171510f990..8ac5cef97c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "omniroute", "version": "3.8.51", - "description": "Unified AI router with 358 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.", + "description": "Unified AI router with 359 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.", "type": "module", "bin": { "omniroute": "bin/omniroute.mjs", diff --git a/public/images/tier-flow-dark.svg b/public/images/tier-flow-dark.svg index b8016c15c5..1aede4f7a8 100644 --- a/public/images/tier-flow-dark.svg +++ b/public/images/tier-flow-dark.svg @@ -1,6 +1,6 @@ - + OmniRoute 4-tier fallback - OmniRoute 4-tier fallback: your IDE or CLI calls one local endpoint and the OmniRoute Smart Router fails over across 358 providers in 4 tiers β€” Tier 1 Subscription, Tier 2 API, Tier 3 Cheap, Tier 4 Free. + OmniRoute 4-tier fallback: your IDE or CLI calls one local endpoint and the OmniRoute Smart Router fails over across 359 providers in 4 tiers β€” Tier 1 Subscription, Tier 2 API, Tier 3 Cheap, Tier 4 Free. @@ -15,7 +15,7 @@ OmniRoute 4-tier fallback - Never stop building β€” automatic zero-config failover across 358 providers + Never stop building β€” automatic zero-config failover across 359 providers diff --git a/public/images/tier-flow-light.svg b/public/images/tier-flow-light.svg index 2cff72d93d..6425db4f56 100644 --- a/public/images/tier-flow-light.svg +++ b/public/images/tier-flow-light.svg @@ -1,6 +1,6 @@ - + OmniRoute 4-tier fallback - OmniRoute 4-tier fallback: your IDE or CLI calls one local endpoint and the OmniRoute Smart Router fails over across 358 providers in 4 tiers β€” Tier 1 Subscription, Tier 2 API, Tier 3 Cheap, Tier 4 Free. + OmniRoute 4-tier fallback: your IDE or CLI calls one local endpoint and the OmniRoute Smart Router fails over across 359 providers in 4 tiers β€” Tier 1 Subscription, Tier 2 API, Tier 3 Cheap, Tier 4 Free. @@ -15,7 +15,7 @@ OmniRoute 4-tier fallback - Never stop building β€” automatic zero-config failover across 358 providers + Never stop building β€” automatic zero-config failover across 359 providers diff --git a/src/shared/constants/providers.ts b/src/shared/constants/providers.ts index 390675ec10..654b2baac9 100644 --- a/src/shared/constants/providers.ts +++ b/src/shared/constants/providers.ts @@ -102,6 +102,7 @@ export const AGGREGATOR_PROVIDER_IDS = new Set([ "laozhang", "vercel-ai-gateway", "unorouter", + "xkiro", "agentrouter", "thebai", "fenayai", diff --git a/src/shared/constants/providers/apikey/gateways.ts b/src/shared/constants/providers/apikey/gateways.ts index c35390a37d..5dbaf9c9d2 100644 --- a/src/shared/constants/providers/apikey/gateways.ts +++ b/src/shared/constants/providers/apikey/gateways.ts @@ -1376,6 +1376,24 @@ export const APIKEY_PROVIDERS_GATEWAYS = { apiHint: "OpenAI-compatible endpoint at https://router.bynara.id/v1. Free-tier models are pinned; others need credit.", }, + xkiro: { + id: "xkiro", + serviceKinds: ["llm"], + alias: "xkiro", + name: "xKiro", + icon: "hub", + color: "#0EA5E9", + textIcon: "XK", + passthroughModels: true, + website: "https://xkiro.com", + hasFree: true, + freeNote: + "Free plan: 5M tokens/day per account across 40 upstream free models β€” 39 pinned here (Qwen, MiniMax, DeepSeek, Mistral, SenseNova) β€” no card; past the daily allowance free requests get a 429 until the reset. RPM not published.", + authHint: + "Create a free account at xkiro.com and paste the key here (Bearer; x-api-key also accepted).", + apiHint: + "OpenAI-compatible endpoint at https://api.xkiro.com/v1. Public /v1/models tags free rows with access_tier=free; paid models are rejected on the free plan.", + }, regolo: { id: "regolo", serviceKinds: ["llm"], diff --git a/tests/unit/check-docs-counts-sync.test.ts b/tests/unit/check-docs-counts-sync.test.ts index a01ff43d4f..a2c4f10b69 100644 --- a/tests/unit/check-docs-counts-sync.test.ts +++ b/tests/unit/check-docs-counts-sync.test.ts @@ -557,9 +557,23 @@ test("a reworded or deleted sentence fails, instead of passing as absent", () => test("the live page actually satisfies both required gates", () => { // A unit test on synthetic strings proves the validator; this one proves the // document. Without it, the two could drift apart and both stay green. + // The expected counts come from the catalog itself rather than a literal: the + // page tracks the live flags, so a hard-coded number goes stale the moment a + // batch of rows lands (it did, at 5, when the 39 xKiro rows were added). + const catalog = readFileSync( + path.resolve(here, "../../open-sse/config/freeModelCatalog.data.ts"), + "utf8" + ); + const countFlag = (flag: string): number => + catalog.split("\n").filter((l) => l.includes(`${flag}: true`)).length; + const hardStop = countFlag("hardStopGuaranteed"); + const training = countFlag("trainsOnPrompts"); + assert.ok(hardStop > 0, "catalog should carry at least one hardStopGuaranteed row"); + assert.ok(training > 0, "catalog should carry at least one trainsOnPrompts row"); + const page = readFileSync(path.resolve(here, "../../docs/reference/FREE_TIERS.md"), "utf8"); - assert.equal(makeValidator(5, { ...HARD_STOP_CLAIM, requireClaim: true })(page).ok, true); - assert.equal(makeValidator(13, { ...TRAINING_CLAIM, requireClaim: true })(page).ok, true); + assert.equal(makeValidator(hardStop, { ...HARD_STOP_CLAIM, requireClaim: true })(page).ok, true); + assert.equal(makeValidator(training, { ...TRAINING_CLAIM, requireClaim: true })(page).ok, true); }); test("neither claim fires on the other numbers the page is full of", () => { diff --git a/tests/unit/free-provider-xkiro.test.ts b/tests/unit/free-provider-xkiro.test.ts new file mode 100644 index 0000000000..4a327991e7 --- /dev/null +++ b/tests/unit/free-provider-xkiro.test.ts @@ -0,0 +1,54 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { + FREE_MODEL_BUDGETS, + computeFreeModelTotals, +} from "@omniroute/open-sse/config/freeModelCatalog.ts"; +import { REGISTRY } from "@omniroute/open-sse/config/providerRegistry.ts"; +import { AI_PROVIDERS, AGGREGATOR_PROVIDER_IDS } from "@/shared/constants/providers.ts"; + +/** + * xKiro (xkiro.com) β€” OpenAI-compatible gateway. Free plan, verified 2026-09-02 on + * xkiro.com and docs.xkiro.com: "$0 / month Β· Free forever Β· Free tokens 5M / day Β· + * No credit card"; past the daily allowance free-model requests get a 429 until the + * reset. One bucket per account β‡’ one pool of 5M Γ— 30 = 150M. + */ +const rows = FREE_MODEL_BUDGETS.filter((m) => m.provider === "xkiro"); + +test("xkiro is routable, canonical and classified as an aggregator", () => { + assert.ok(REGISTRY.xkiro, "REGISTRY entry"); + assert.equal(REGISTRY.xkiro.format, "openai"); + assert.equal(REGISTRY.xkiro.baseUrl, "https://api.xkiro.com/v1/chat/completions"); + assert.ok(AI_PROVIDERS.xkiro, "canonical provider"); + assert.equal(AI_PROVIDERS.xkiro.hasFree, true); + assert.ok(AGGREGATOR_PROVIDER_IDS.has("xkiro")); +}); + +test("xkiro free plan is one 5M/day account-wide pool = 150M/month, counted once", () => { + assert.equal(rows.length, 39); + for (const m of rows) { + assert.equal(m.poolKey, "xkiro-free", m.modelId); + assert.equal(m.monthlyTokens, 150_000_000, m.modelId); + assert.equal(m.freeType, "recurring-daily", m.modelId); + assert.equal(m.tos, "caution", m.modelId); + assert.equal(m.hardStopGuaranteed, true, m.modelId); + assert.equal((m as { eligibilityGate?: unknown }).eligibilityGate, undefined, m.modelId); + } + const withXkiro = computeFreeModelTotals().steadyRecurringTokens; + const without = computeFreeModelTotals({ + entries: FREE_MODEL_BUDGETS.filter((m) => m.provider !== "xkiro"), + }).steadyRecurringTokens; + assert.equal(withXkiro - without, 150_000_000); +}); + +test("xkiro never lists the undeclared-provenance codex-spark route", () => { + assert.ok(!rows.some((m) => /codex-spark/i.test(m.modelId))); + assert.ok(!REGISTRY.xkiro.models.some((m) => /codex-spark/i.test(m.id))); +}); + +test("every xkiro catalog row is a pinned registry model", () => { + assert.equal(REGISTRY.xkiro.models.length, rows.length); + const pinned = new Set(REGISTRY.xkiro.models.map((m) => m.id)); + for (const r of rows) assert.ok(pinned.has(r.modelId), r.modelId); +}); diff --git a/tests/unit/provider-node-reserved-prefix.test.ts b/tests/unit/provider-node-reserved-prefix.test.ts index e6f3f63225..8d46bb60aa 100644 --- a/tests/unit/provider-node-reserved-prefix.test.ts +++ b/tests/unit/provider-node-reserved-prefix.test.ts @@ -187,7 +187,9 @@ test("shared set size includes live REGISTRY and retired Designer + Felo + Qwen // model ids. Same entry that moved the apikey/regional count to 241 in #13905. // #13131 then retires `chipotle`/`pepper` (dead upstream), removing its id "chipotle" and // alias "pepper" from the REGISTRY walk (414 -> 412) β€” the two land back on the same total. - assert.equal(RESERVED_PREFIX_COUNT, 412); + // #12648 registers xKiro: id "xkiro" with no separate alias β€” a single REGISTRY + // member (412 -> 413). + assert.equal(RESERVED_PREFIX_COUNT, 413); }); test("isReservedProviderPrefix rejects non-string input", () => {