diff --git a/README.md b/README.md index 5bfa7ec184..e3e814d6b9 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,13 @@
+**~1.9B+ documented free tokens/month** β€” up to **~2.5B in your first month** with signup credits β€” aggregated across the free tiers, and the compression above stretches every one further. ([how we count β†’](docs/reference/FREE_TIERS.md#tldr--how-much-free-inference-does-omniroute-actually-aggregate)) + +
+ [![177 AI Providers](https://img.shields.io/badge/177-AI_Providers-6C5CE7?style=for-the-badge)](#-177-ai-providers--50-free) [![50+ Free](https://img.shields.io/badge/50%2B-Free_Tiers-00B894?style=for-the-badge)](#-177-ai-providers--50-free) +[![1.9B+ Free Tokens/mo](https://img.shields.io/badge/1.9B%2B-Free_Tokens%2Fmo-00B894?style=for-the-badge)](docs/reference/FREE_TIERS.md) [![Token Savings](https://img.shields.io/badge/up_to_95%25-Token_Savings-E17055?style=for-the-badge)](#%EF%B8%8F-save-1595-tokens--automatically) [![14 Strategies](https://img.shields.io/badge/14-Routing_Strategies-0984E3?style=for-the-badge)](#-combos--the-flagship) [![$0 to start](https://img.shields.io/badge/%240-To_Start-FDCB6E?style=for-the-badge&logoColor=black)](#-quick-start) @@ -977,6 +982,20 @@ Special thanks to **[Troglodita](https://github.com/leninejunior/troglodita)** b
+## πŸ’° Free-Token Budget β€” see exactly how much free inference you have + +Stacking free tiers by hand is painful: dozens of SDKs, dozens of rate limits, and no idea how much you actually have. OmniRoute aggregates the **documented** free tiers of **50+ provider pools / 530 models** into one honest number and shows it live on the dashboard (`/dashboard/free-tiers`). + +- **~1.9B free tokens / month** (steady) β€” and **up to ~2.5B in your first month** with signup credits. +- **Pool-deduped, honest:** we count each shared free pool **once**, so the headline isn't inflated by rate-limit ceilings the way multi-billion competitor claims are. (The naΓ―ve per-model sum would read ~8B; we don't publish that.) +- **Per-model breakdown**, **live used / remaining** for the current month, and a **ToS flag** for the 19 providers whose terms don't permit proxying. + +![Free-Tier Budget card (preview mockup)](docs/screenshots/free-tier-budget-card.svg) + +> Preview mockup β€” a real screenshot lands once the `/dashboard/free-tiers` page is validated. Full methodology (pool dedupe, credit tiers, the 19 ToS-restricted providers): **[docs/reference/FREE_TIERS.md](docs/reference/FREE_TIERS.md)**. + +
+ ## πŸ“„ License MIT License - see [LICENSE](LICENSE) for details. diff --git a/docs/reference/FREE_TIERS.md b/docs/reference/FREE_TIERS.md index ef0d1aadb5..62f72fe938 100644 --- a/docs/reference/FREE_TIERS.md +++ b/docs/reference/FREE_TIERS.md @@ -1,239 +1,357 @@ --- -title: "Free Tiers" -version: 3.8.2 -lastUpdated: 2026-05-13 +title: "Free Tiers & Free-Token Budget" +version: 3.8.12 +lastUpdated: 2026-06-05 --- -# Free Tiers +# Free Tiers & Free-Token Budget -> **Last consolidated:** 2026-05-13 β€” OmniRoute v3.8.2 -> **Source of truth:** `src/shared/constants/providers.ts` (`FREE_PROVIDERS`, `OAUTH_PROVIDERS`, and `APIKEY_PROVIDERS` entries flagged with `hasFree: true` + `freeNote`) +> **Last researched:** 2026-06-05 β€” per-provider web research of current free-tier quotas + ToS (98 providers). +> **Source of truth (catalog):** `src/shared/constants/providers.ts` (`hasFree: true` + `freeNote`). The token-budget numbers below come from live web research and are an **approximation** β€” see [Methodology & caveats](#methodology--caveats). -This page lists providers with usable free tiers shipped in OmniRoute v3.8.2. The data is derived from the provider catalog. If a provider does not appear here, it either has no free tier in the catalog or its `hasFree` flag is `false`. +## TL;DR β€” how much free inference does OmniRoute actually aggregate? -Add credentials from the dashboard (`/dashboard/providers/new`) β€” OmniRoute reads keys from the database, not from per-provider environment variables. The only env vars that influence provider behavior are listed in the [Environment Variables](#environment-variables) section. +| Metric | Tokens / month | Meaning | +|---|---|---| +| **Documented recurring grant (steady)** | **~1.94B** | 50 provider 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.53B** | Steady + one-time signup credits (DeepSeek 5M, Together, Jina, …), deduped per account. **First month only** β€” does not recur. | +| Theoretical ceiling (all rate limits, 24/7) | ~10.87B | Sum of every provider rate limit extrapolated to non-stop use. **Not a guarantee** β€” do not headline this. | + +**Honest headline:** *OmniRoute aggregates **over 1.9B documented free tokens per month** (up to ~2.5B in your first month with signup credits) across 50+ free-tier pools β€” and RTK + Caveman compression (15–95% token savings) stretches that further.* + +> The earlier **~1.54B** figure was a conservative per-PROVIDER estimate (22 hand-picked providers). The **~1.94B** above is the per-MODEL catalog (530 models / 50 pools, `open-sse/config/freeModelCatalog.ts`) β€” now the canonical source. Both use pool deduplication; the per-model catalog is simply more complete. + +Biggest **documented** contributors: `mistral` 1.00B, `longcat` 150M, `cloudflare-ai` 122M, `gemini` 60M, `doubao` 60M, `cerebras` 30M. + +> ⚠️ The theoretical ceiling (~10.87B) is inflated by rate-limit-only providers with **no published token cap** (`tencent`, `siliconflow`, `nvidia`, `baidu`, `publicai`, `sparkdesk`) whose figures are `RPM/TPM Γ— 24/7 Γ— 30d` β€” a theoretical maximum no single account will sustain. They are **excluded** from the defensible number. This is the same inflation that makes competitors' multi-billion claims unreliable. --- -## How free providers are wired +## Methodology & caveats -OmniRoute classifies providers into the following groups in `src/shared/constants/providers.ts`: - -| Group | Auth | Example IDs | -| ------------------ | ------------------------------ | ------------------------------------------- | -| `FREE_PROVIDERS` | OAuth or vendor account | `qoder`, `gemini-cli`, `kiro`, `amazon-q` | -| `OAUTH_PROVIDERS` | OAuth | `claude`, `cursor`, `windsurf`, `devin-cli` | -| `APIKEY_PROVIDERS` | API key (with `hasFree: true`) | `groq`, `cerebras`, `mistral`, `gemini` | - -A provider appears in the **free pool** when either: - -- It is listed in the `FREE_PROVIDERS` map (and not flagged `deprecated: true`), or -- It is listed in `APIKEY_PROVIDERS` with `hasFree: true` and a `freeNote` string, or -- It is an OAuth provider whose vendor offers a free tier on top of OAuth sign-in. +- Numbers are **upper-bound estimates** from each provider's documented free-tier limits as of **2026-06-05**, gathered by web research (confidence tagged per row). Free tiers change constantly β€” re-verify before relying on a figure. +- `estMonthlyFreeTokens` = recurring monthly tokens only. **One-time signup credits do not recur** and count as 0 (29 providers are signup-credit-only). Discontinued tiers (6) are also 0. +- Daily token cap β†’ `monthly = daily Γ— 30`. Only RPD documented β†’ `RPD Γ— ~800 output tokens Γ— 30`. Only RPM/TPM (no daily cap) β†’ treated as **theoretical**, excluded from the defensible total. +- **ToS matters as much as quota.** 19 providers' terms **prohibit** routing through a self-hosted proxy or forbid non-personal use β€” see the [ToS attention table](#tos-attention-table). A free quota you are not allowed to proxy is not usable headroom. --- -## Quick reference (API key providers with `hasFree: true`) +## ToS attention table -| Provider | ID | Free tier note | -| ------------------ | --------------- | ---------------------------------------------------------------------------------------------------- | -| AgentRouter | `agentrouter` | $200 free credits on signup β€” multi-model routing gateway | -| AI21 Labs | `ai21` | $10 trial credits on signup (valid 3 months), no credit card required | -| AI/ML API | `aimlapi` | $0.025/day free credits β€” 200+ models via single endpoint | -| BazaarLink | `bazaarlink` | Free tier with `auto:free` routing β€” zero-cost inference, no credit card required | -| Baseten | `baseten` | $30 free trial credits for GPU inference | -| Blackbox AI | `blackbox` | Free tier: unlimited basic chat plus Minimax-M2.5, no credit card required | -| Bytez | `bytez` | $1 free credits, refreshes every 4 weeks | -| Cerebras | `cerebras` | Free: 1M tokens/day, 60K TPM β€” world's fastest inference | -| Cloudflare AI | `cloudflare-ai` | Free 10K Neurons/day: ~150 LLM responses or 500s Whisper audio | -| Cohere | `cohere` | Free Trial: 1,000 API calls/month for testing, no credit card required | -| Completions.me | `completions` | Free unlimited access to Claude, GPT, Gemini β€” no credit card, no rate limits | -| DeepInfra | `deepinfra` | Free signup credits for API testing and model exploration | -| DeepSeek | `deepseek` | 5M free tokens on signup β€” no credit card required | -| Enally AI | `enally` | Free for students and developers β€” no credit card, OTP verification | -| Fireworks AI | `fireworks` | $1 free starter credits on signup for API testing | -| FreeTheAi | `freetheai` | Community-run β€” free forever, no paid tiers, no credit card | -| Gemini (AI Studio) | `gemini` | Free forever: 1,500 req/day for Gemini 2.5 Flash β€” no credit card | -| GLHF Chat | `glhf` | Free tier for open-source model inference | -| Groq | `groq` | Free tier: 30 RPM / 14.4K RPD β€” no credit card | -| HuggingFace | `huggingface` | Free Inference API for thousands of models (Whisper, VITS, SDXL…) | -| Hyperbolic | `hyperbolic` | $1–5 trial credits on signup for serverless inference | -| Inference.net | `inference-net` | $25 free credits on signup plus research grants available | -| Jina AI | `jina-ai` | 10M free tokens on signup (non-commercial), no credit card required | -| Kluster AI | `kluster` | $5 free credits on signup β€” DeepSeek R1, Llama 4 Maverick/Scout, Qwen3 235B | -| Lepton AI | `lepton` | Free tier available β€” fast inference on custom hardware | -| LLM7.io | `llm7` | No signup required β€” 2 req/s, 20 RPM, 100 req/hr free tier | -| LongCat AI | `longcat` | 50M tokens/day (Flash-Lite) + 500K/day (Chat/Thinking) β€” 100% free while public beta | -| Mistral | `mistral` | Free Experiment tier: rate-limited access to all models, no credit card required | -| Modal | `modal` | $30/month free credits for new accounts | -| Morph | `morph` | Free tier: 250K credits/month, $0 | -| Nebius | `nebius` | ~$1 trial credits on signup for API testing | -| NLP Cloud | `nlpcloud` | Trial credits for new accounts | -| Nous Research | `nous-research` | Free tier: 50 RPM, 500,000 TPM β€” no credit card | -| Novita AI | `novita` | $0.50 trial credits on signup (valid about 1 year) | -| nScale | `nscale` | $5 free credits on signup for inference testing | -| NVIDIA NIM | `nvidia` | Free dev access: ~40 RPM, 70+ models (Kimi K2.5, GLM 4.7, DeepSeek V3.2…) | -| OpenRouter | `openrouter` | Free models at $0/token with `:free` suffix β€” 20 RPM / 200 RPD | -| Pollinations AI | `pollinations` | No API key required for free public endpoint. Optional Spore tier: ~0.01 pollen/hour | -| Predibase | `predibase` | $25 free trial credits (30-day validity) | -| PublicAI | `publicai` | Free community inference tier for testing | -| Puter AI | `puter` | 500+ models (GPT-5, Claude Opus 4, Gemini 3 Pro, Grok 4, DeepSeek V3…) β€” users pay via Puter account | -| Reka | `reka` | $10/month recurring free API credits | -| SambaNova | `sambanova` | $5 free credits on signup (30-day validity), no credit card required | -| Scaleway AI | `scaleway` | 1M free tokens for new accounts β€” EU/GDPR compliant (Paris), Qwen3 235B & Llama 70B | -| SiliconFlow | `siliconflow` | $1 free credits plus permanently free models after identity verification | -| Together AI | `together` | $25 signup credits + 3 permanently free models: Llama 3.3 70B, Vision, DeepSeek-R1 distill | -| UncloseAI | `uncloseai` | Free forever β€” no signup, no credit card. OpenAI-compatible endpoints | -| Voyage AI | `voyage-ai` | 200M free tokens for embeddings and reranking | +> Whether a self-hosted, single-user personal proxy may use each free tier. `avoid` = terms prohibit proxy/non-personal use; `caution`/`ambiguous` = gray area; `ok` = explicitly permitted. Informational, not legal advice. -**Total: 48 API-key providers with `hasFree: true`.** +### 🚫 Avoid β€” terms prohibit proxy / non-personal use (19) -> All entries above are copied verbatim from the `freeNote` field in the provider catalog so they stay in sync with the code. +| Provider | Note | +|---|---| +| `agy` | Google Antigravity ToS explicitly prohibits using third-party software, tools, or services (including proxies) to access the service via OAuth; doing… | +| `ai21` | ToS Β§4.2/Β§8.2 prohibits sublicensing or distributing API access to third parties; Β§3.3 restricts trial/evaluation products to "internal evaluation on… | +| `amazon-q` | Product is discontinued for new signups; existing users are subject to AWS Customer Agreement which governs use of managed services β€” self-hosted pro… | +| `blackbox` | ToS explicitly prohibits sublicensing, reselling, making the service available to third parties, and building derivative services β€” a self-hosted per… | +| `completions` | No published ToS found (404 on /terms, /faq, /docs). The service proxies Anthropic/OpenAI/Google APIs without authorization, violating those upstream… | +| `coze` | Coze ToS explicitly restricts use to "personal and non-commercial use" and prohibits renting, distributing, sublicensing, or reselling the service; a… | +| `duckduckgo-web` | Duck.ai ToS (duckduckgo.com/duckai/privacy-terms) explicitly prohibits "automated querying and developing or offering AI services" and circumventing … | +| `featherless-ai` | Individual plans explicitly restricted to "interactive use or proto-typing and experimentation by the purchaser" β€” inference resale and proxy use req… | +| `fireworks` | ToS explicitly prohibits proxy/intermediary use, API key transfers, and sublicensing (Sections 2.1 and 2.2(i)(j)); self-hosted personal proxies are n… | +| `friendliai` | ToS Section 8(e) and 8(f) explicitly prohibit using FriendliAI as a proxy or allowing third-party access on a standalone basis, and forbid reselling/… | +| `gemini-cli` | Google explicitly prohibits using Gemini CLI's OAuth authentication with third-party software/proxies; violations result in account bans (mass bans w… | +| `iflytek` | Section 2.4(3) of the iFlytek Spark LLM Service Agreement explicitly prohibits "using any automated or programmatic methods to extract data or output… | +| `kiro` | Kiro FAQ explicitly prohibits use with "OpenClaw and similar tools that leverage third-party harnesses" β€” a self-hosted AI proxy (like OmniRoute) rou… | +| `modal` | ToS Section 1.3 explicitly prohibits "rent, resell or otherwise allow any third party direct access to or use of the Service" β€” building a self-hoste… | +| `muse-spark-web` | Meta ToS explicitly prohibits automated access without prior permission, reverse engineering without written permission, and circumventing technologi… | +| `nlpcloud` | ToS explicitly prohibits "setting up a proxy or other device that allows others to access the Service through it" and grants only a non-transferable,… | +| `opencode` | ToS (Anomaly Innovations, Inc.) explicitly restricts use to "your own internal use, and not on behalf of or for the benefit of any third party" β€” ope… | +| `qwen-web` | The free OAuth tier is discontinued; no ToS permits a self-hosted proxy using session tokens against chat.qwen.ai. Even before shutdown, automated/pr… | +| `t3-web` | ToS explicitly restricts accounts to personal use only, prohibits credential sharing with third parties, and bans automated/bot/scraping access β€” a s… | + +### ⚠️ Caution / ambiguous / ok (the rest) + +| Provider | ToS | Note | +|---|---|---| +| `aimlapi` | ambiguous | ToS grants a non-exclusive use license but does not explicitly permit or prohibit self-hosted proxy or resale; no "pers… | +| `baichuan` | ambiguous | No explicit prohibition on self-hosted personal proxies found in publicly accessible docs; however, the M3 Plus free pl… | +| `bluesminds` | ambiguous | No explicit ToS clauses found regarding self-hosted proxying or resale; the pricing page focuses on feature/rate limits… | +| `bytez` | ambiguous | No explicit ToS page was accessible (404); no public evaluation-only or no-proxy clauses found in docs, but the platfor… | +| `doubao` | ambiguous | No explicit proxy/resale prohibition found in publicly indexed documentation; Volcengine is a developer-oriented cloud … | +| `gitlawb-gmi` | ambiguous | No explicit ToS clause found prohibiting self-hosted personal proxy use; the free Nemotron model carries an NVIDIA disc… | +| `inclusionai` | ambiguous | No explicit ToS found prohibiting proxy/self-hosted use, but the platform is operated by Ant Group (Chinese company) an… | +| `kluster` | ambiguous | ToS primarily covers website content rights and does not specifically address API proxy use, resale, or self-hosted pro… | +| `monsterapi` | ambiguous | MonsterAPI's ToS page (monsterapi.ai/terms-of-service) was unreachable during research; no specific proxy/resale/person… | +| `nous-research` | ambiguous | Nous Portal itself is an aggregator/proxy service; using it as a backend for another self-hosted proxy creates a proxy-… | +| `ollama-cloud` | ambiguous | ToS prohibits using the service "to develop competing products" but has no explicit ban on self-hosted personal proxies… | +| `stepfun` | ambiguous | No explicit prohibition on self-hosted personal proxy found, but the Step Plan ToS targets developers using specific co… | +| `agentrouter` | caution | No published ToS found; platform restricts accepted clients to specific AI coding tools (Claude Code, Codex, Gemini CLI… | +| `api-airforce` | caution | ToS explicitly prohibits "building competing services without permission" and "credential sharing" β€” a self-hosted pers… | +| `arcee-ai` | caution | Free access is via OpenRouter's :free routing layer (not Arcee's direct API terms); OpenRouter ToS permits personal dev… | +| `baidu` | caution | ToS not explicitly reviewed for proxy/resale clauses, but platform requires real-name authentication (Chinese ID typica… | +| `baseten` | caution | ToS restricts use to "Customer's internal business purposes" and explicitly prohibits sublicensing, reselling, or allow… | +| `bazaarlink` | caution | ToS explicitly prohibits reselling or sublicensing API keys to third parties; a self-hosted personal proxy for personal… | +| `brave-search` | caution | ToS prohibits redistribution, resale, and sublicensing of search results; using the API to "replicate or attempt to rep… | +| `byteplus` | caution | Tokens are non-transferable and single-account only; no explicit proxy prohibition, but BytePlus reserves the right to … | +| `cerebras` | caution | ToS grants a non-exclusive, non-transferable, non-sublicensable right for personal or business use; prohibits resale, s… | +| `cloudflare-ai` | caution | Cloudflare Self-Serve ToS Β§2.2.1(j) prohibits using Services to "provide a virtual private network or other similar pro… | +| `cohere` | caution | Cohere explicitly prohibits trial keys for "production or commercial purposes"; a self-hosted personal proxy routing re… | +| `deepinfra` | caution | ToS allows legal commercial use broadly, but prohibits use "directly or indirectly competitive with any business of the… | +| `deepseek` | caution | Open Platform ToS (effective 2026-04-29) permits broad use including "derivative product development" and personal/comm… | +| `dify` | caution | Self-hosted single-user personal proxy is permitted under the modified Apache 2.0 license; however, multi-tenant deploy… | +| `exa-search` | caution | No explicit "no proxy" or "evaluation only" clauses found; Exa actively offers a reseller partner program allowing API … | +| `firecrawl` | caution | Cloud API ToS has no explicit personal-proxy prohibition found, but the open-source self-hosted version is AGPL-3.0 (re… | +| `gemini` | caution | ToS explicitly states the free tier is for "developers building with Google AI models for professional or business purp… | +| `github-models` | caution | GitHub's Acceptable Use Policy prohibits reselling/proxying the service; GitHub Models ToS delegates to each model's ho… | +| `glhf` | caution | ToS explicitly prohibits sharing account credentials or making the account available to any third party, which makes a … | +| `groq` | caution | Services Agreement Β§6.3 prohibits reselling, sublicensing, or distributing API access; Β§3.2 bars reselling/leasing acco… | +| `hackclub` | caution | Service is explicitly scoped to Hack Club teen members building projects/learning; no public ToS found explicitly permi… | +| `huggingchat` | caution | Hugging Face ToS does not explicitly ban personal self-hosted proxies, but supplemental terms (referenced but not fully… | +| `huggingface` | caution | ToS grants a limited license to access/use the service; the document does not explicitly permit or forbid a single-user… | +| `hyperbolic` | caution | ToS grants API access "solely for your own personal or internal business purposes" and explicitly prohibits licensing, … | +| `inference-net` | caution | ToS explicitly prohibits "sublicense, resell, distribute" and transferring API keys without written consent; a single-u… | +| `jina-ai` | caution | Free 10M tokens are explicitly non-commercial (CC-BY-NC 4.0 model license); a single-user personal proxy for personal L… | +| `jina-reader` | caution | ToS prohibits using outputs to build competing services and bans "automated methods to extract information via scraping… | +| `llm7` | caution | ToS positions the service as for "experimentation, development, and research"; no explicit ban on self-hosted personal … | +| `longcat` | caution | The API Platform Service Agreement (longcat.chat/platform/private/) permits commercial integration and self-hosted apps… | +| `mistral` | caution | Consumer ToS explicitly states APIs may only be used for "personal needs" and prohibits making API keys available to th… | +| `morph` | caution | ToS allows commercial use generally; self-hosted proxy deployments require explicit arrangement with sales. Section 18.… | +| `nebius` | caution | ToS (Section 5f) explicitly prohibits resale, redistribution, or offering the service "on a standalone basis" β€” a self-… | +| `nomic` | caution | ToS grants a non-exclusive, non-transferable API license; Section 6.b prohibits building a competitive service. Using t… | +| `novita` | caution | ToS prohibits resale and competing services but does not explicitly address personal self-hosted proxies; personal use … | +| `nscale` | caution | AUP prohibits "copy, modify, duplicate... frame, mirror, republish... distribute all or any part of the Nscale Platform… | +| `nvidia` | caution | Free tier is explicitly for prototyping/dev/research/evaluation only β€” production use (serving real end-users) requires… | +| `openrouter` | caution | ToS explicitly prohibits reselling API access or developing a competing service; single-user self-hosted personal proxy… | +| `pollinations` | caution | MIT License cited in API docs suggests liberal reuse; no explicit prohibition on self-hosted proxying found. However, u… | +| `predibase` | caution | Predibase is positioned as an enterprise fine-tuning/serving platform; the free trial is explicitly for exploration and… | +| `publicai` | caution | ToS (publicai.co/tc) designates services as "primarily for research and educational use"; no explicit proxy or resale p… | +| `puter` | caution | Puter ToS forbids using services for "commercial purpose" without written consent; a self-hosted personal proxy consumi… | +| `qoder` | caution | ToS page returned no readable content; Qoder is a coding IDE client (not a public API), and third-party proxy wrappers … | +| `reka` | caution | Business Terms prohibit sublicensing or distributing access to third parties; a personal single-user proxy is likely fi… | +| `sambanova` | caution | ToS Section 1.5(c) explicitly prohibits reselling, sublicensing, or making the service available to third parties; a se… | +| `sensenova` | caution | No explicit proxy or resale prohibition found in reviewed ToS, but the free tier is a promotional beta with no SLA, Sen… | +| `serper-search` | caution | ToS explicitly prohibits "mirroring materials on any other server as-is with no-value-added" β€” a simple pass-through pr… | +| `siliconflow` | caution | ToS (Clause 3.4(e)(f)(p)) explicitly prohibits making the service available to any third party, reselling/sublicensing,… | +| `sparkdesk` | caution | SparkDesk User Agreement grants only personal, non-commercial use rights; API Interface Policy prohibits automated data… | +| `tavily-search` | caution | ToS explicitly states the API "may not be transferred, assigned, shared, or otherwise made available to any third party… | +| `tencent` | caution | Tencent Cloud ToS explicitly prohibits sublicensing or reselling API access; a self-hosted personal proxy for personal … | +| `together` | caution | ToS Section 4.3(d) explicitly prohibits transferring, distributing, reselling, leasing, or offering the Services on a s… | +| `uncloseai` | caution | Personal proxy use is plausible but not explicitly permitted; ToS bans building "competing machine learning services wi… | +| `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;… | +| `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… | +| `gitlawb` | unknown | No ToS or acceptable-use policy found; proxy/resale restrictions unknown β€” assume caution for self-hosted proxy use. | +| `liquid` | unknown | No hosted API exists to proxy; open-source model commercial use is free for orgs under $10M annual revenue. No self-hos… | +| `phind` | unknown | Service is discontinued; ToS is no longer relevant. No proxy use is possible. | +| `theoldllm` | unknown | No terms of service document was found on the site; proxying, resale, or self-hosted use policy is entirely undocumente… | +| `yi` | unknown | ToS not publicly accessible without login; no proxy/resale clauses could be reviewed. Self-hosted personal proxy use st… | +| `comfyui` | ok | GPL-3.0 open-source license explicitly permits self-hosted personal proxy use; Comfy Org ToS confirms commercial use of… | +| `scaleway` | ok | Scaleway's General Terms of Services are a standard commercial cloud agreement with no explicit prohibition on self-hos… | +| `sdwebui` | ok | AGPL-3.0 license: free to self-host for personal use with no restrictions on usage volume; a personal proxy using this … | +| `searxng-search` | ok | AGPL-3.0 open-source license explicitly permits self-hosted personal proxy use with no restriction on usage type, resal… | --- -## OAuth-based free tiers +## Per-provider free-tier (current, researched 2026-06-05) -### Always-free OAuth providers (in `FREE_PROVIDERS`) +> Sorted by estimated recurring monthly free tokens. `β€”` = not token-quantifiable (credits / one-time / search / image / discontinued). `conf` = research confidence. -These providers are designed around a vendor OAuth flow and ship a free tier by default: - -| Provider | ID | Notes | -| ---------- | ------------ | ----------------------------------------------------------------------------------------------------------- | -| Qoder AI | `qoder` | OAuth or Personal Access Token. Free tier on signup. | -| Gemini CLI | `gemini-cli` | Uses Gemini CLI OAuth / Cloud Code credentials. Pro models require an eligible Google account or paid plan. | -| Kiro AI | `kiro` | AWS Builder ID (Kiro Free tier). | -| Amazon Q | `amazon-q` | Same AWS Builder ID / refresh-token flow as Kiro, but kept as separate connections. | - -### OAuth providers with vendor-controlled free tiers (in `OAUTH_PROVIDERS`) - -The free-tier surface here depends entirely on each vendor's account plan, not on OmniRoute: - -| Provider | ID | Auth hint | -| -------------------- | ------------- | --------------------------------------------------------------------------------------- | -| Claude Code | `claude` | OAuth via `platform.claude.com`. Free quota depends on your Anthropic account. | -| Antigravity | `antigravity` | Google OAuth (Antigravity). | -| OpenAI Codex | `codex` | OAuth via OpenAI (Codex CLI). Subject to ChatGPT plan free credits. | -| GitHub Copilot | `github` | OAuth via GitHub. Free for verified students; free trial otherwise. | -| GitLab Duo | `gitlab-duo` | OAuth (`ai_features + read_user`). Requires GitLab Duo entitlement. | -| Cursor IDE | `cursor` | Cursor OAuth. Free tier limits depend on Cursor plan. | -| Kimi Coding | `kimi-coding` | Moonshot OAuth. Free quota on Kimi Coding accounts. | -| Kilo Code | `kilocode` | Kilo OAuth β€” free auto-router available. | -| Cline | `cline` | Cline OAuth. | -| Windsurf (Devin CLI) | `windsurf` | Sign in at `windsurf.com`, paste your token. Free tier limits set by Windsurf. | -| Devin CLI (Official) | `devin-cli` | Uses the official Devin CLI binary or `WINDSURF_API_KEY`. Subject to Devin's free tier. | +| Provider | Category | Free type | Est. tokens/mo | Conf | ToS | Current status | +|---|---|---|---|---|---|---| +| `sparkdesk` | llm-chat | keyless-limited | 2.59B | med | caution | Spark Lite model is permanently free with a rate limit of 2 QPS (approximately 120 RPM) per App ID and no documented to… | +| `tencent` | llm-chat | keyless-limited | 2.07B | med | caution | Hunyuan-lite is permanently free (no token quota, no expiry) as of May 2026, subject only to a default 5-concurrent-ses… | +| `siliconflow` | aggregator | recurring-monthly | 1.73B | med | caution | SiliconFlow provides $1 one-time trial credits for new account signups plus a set of permanently free (priced at $0/tok… | +| `nvidia` | llm-chat | keyless-limited | 1.38B | med | caution | NVIDIA NIM offers a permanent free API key (no credit card required) with access to 70–100+ hosted models on build.nvid… | +| `mistral` | llm-chat | recurring-monthly | 1.00B | high | caution | Mistral offers a free "Experiment" tier with no credit card required (phone verification only), granting access to all … | +| `baidu` | llm-chat | keyless-limited | 864M | med | caution | ERNIE-Speed-8K/128K, ERNIE-Lite-8K/128K, and ERNIE-Tiny are permanently free (since May 21, 2024) for all users who com… | +| `publicai` | llm-chat | keyless-limited | 691M | med | caution | PublicAI offers a free API (OpenAI-compatible) via platform.publicai.co with no published token cap, rate-limited to 20… | +| `longcat` | llm-chat | recurring-daily | 150M | med | caution | LongCat API Platform (public beta by Meituan) provides 5,000,000 free tokens per day for the LongCat-2.0-Preview model;… | +| `cloudflare-ai` | llm-chat | recurring-daily | 122M | high | caution | Cloudflare Workers AI provides 10,000 Neurons per day free on both Free and Paid Workers plans, resetting daily at 00:0… | +| `doubao` | llm-chat | recurring-daily | 60M | med | ambiguous | Volcengine Ark offers two free tiers for Doubao API: a one-time 500K tokens/model welcome quota (30-day validity, real-… | +| `gemini` | llm-chat | recurring-daily | 60M | med | caution | Google AI Studio free tier (as of mid-2026) provides recurring free access with no credit card required, but limits wer… | +| `cerebras` | llm-chat | recurring-daily | 30M | med | caution | Cerebras offers a recurring free "Free Trial" tier with 1M tokens/day, 5 RPM, and 30K TPM (per-model basis on current d… | +| `api-airforce` | aggregator | recurring-daily | 24M | med | caution | Api.airforce offers a free registered-account tier limited to 1 request/minute and 1,000 requests/day with access to ba… | +| `ollama-cloud` | llm-chat | recurring-monthly | 20M | med | ambiguous | Ollama Cloud offers a free tier ($0/month) with "light usage" access to cloud-hosted open models; usage is GPU-time-bas… | +| `github-models` | aggregator | recurring-daily | 18M | high | caution | All GitHub accounts get free daily rate-limited access to 160+ models including GPT-5, o-series, DeepSeek-R1, Grok-3, a… | +| `groq` | llm-chat | recurring-daily | 15M | high | caution | Groq offers a free tier with no credit card required, providing 30 RPM and per-model daily caps (up to 14.4K RPD / 500K… | +| `inclusionai` | llm-chat | recurring-daily | 15M | med | ambiguous | InclusionAI (via developer.ant-ling.com, the official Ant Group API portal) provides a free tier of 500,000 tokens/day … | +| `bluesminds` | aggregator | recurring-daily | 7M | med | ambiguous | BluesMinds offers a permanent free plan with 500 pi credits on signup, 20 RPM, and 300 requests/day, with access limite… | +| `sambanova` | llm-chat | recurring-daily | 6M | med | caution | SambaNova offers a permanent recurring free tier (no credit card required) with 20 RPM, 20 RPD, and 200,000 TPD. New si… | +| `arcee-ai` | llm-chat | keyless-limited | 5M | med | caution | Arcee AI offers free access to Trinity Large Preview and Trinity Large Thinking via OpenRouter's :free tier (20 RPM, ~2… | +| `llm7` | llm-chat | keyless-limited | 4M | med | caution | LLM7.io offers a free tier that requires obtaining a free token from token.llm7.io (light signup). The authenticated fr… | +| `bazaarlink` | aggregator | recurring-daily | 4M | med | caution | BazaarLink offers a permanent free tier with no credit card required, featuring the auto:free model that routes to zero… | +| `openrouter` | aggregator | recurring-daily | 1M | high | caution | Free models (`:free` suffix) are available at $0/token with 20 RPM and 50 RPD for accounts without purchased credits; t… | +| `cohere` | llm-chat | recurring-monthly | 800K | high | caution | Cohere offers a free Trial API key (auto-issued on signup) limited to 1,000 API calls/month across all endpoints, with … | +| `huggingchat` | llm-chat | recurring-monthly | 500K | med | caution | HuggingChat free tier provides $0.10/month in Hugging Face Inference Provider credits (recurring monthly). The previous… | +| `morph` | llm-code | recurring-monthly | 400K | med | caution | Morph offers a free tier with 200 requests/month and 250K credits, described as intended for testing and personal proje… | +| `huggingface` | aggregator | recurring-monthly | 200K | high | caution | Free HuggingFace accounts receive $0.10/month in recurring Inference Provider credits (explicitly "subject to change") … | +| `kiro` | llm-code | recurring-monthly | 25K | high | avoid | Kiro AI offers a perpetual free tier of 50 credits/month (recurring, resets each billing cycle, unused credits do not c… | +| `360ai` | llm-chat | one-time-trial-credit | β€” | low | unknown | 360 AI (360ζ™Ίθ„‘) API requires formal application and approval to access. New users historically received a one-time promo… | +| `agentrouter` | aggregator | one-time-trial-credit | β€” | low | caution | AgentRouter offers a one-time credit on signup ($100 for standard, $200 via referral) to use across 30+ LLM providers v… | +| `agy` | llm-code | account-oauth | β€” | med | avoid | Antigravity CLI (agy) offers a free tier requiring OAuth login with a personal Google account, with a weekly-based rate… | +| `ai21` | llm-chat | one-time-trial-credit | β€” | med | avoid | AI21 Labs offers new accounts $10 in trial credits valid for 7 days (no credit card required); after expiry, pay-as-you… | +| `aimlapi` | aggregator | discontinued | β€” | high | ambiguous | The free tier is officially paused as of mid-2025 (docs last updated ~May 2026). AI/ML API now operates exclusively on … | +| `amazon-q` | llm-code | discontinued | β€” | high | avoid | Amazon Q Developer is discontinued for new signups as of May 15, 2026 β€” both free tier and paid subscriptions can no lo… | +| `baichuan` | llm-chat | one-time-trial-credit | β€” | med | ambiguous | Baichuan operates on a pay-as-you-go model with a one-time 80 CNY (~$11 USD) trial credit for new accounts (valid 3 mon… | +| `baseten` | other | one-time-trial-credit | β€” | med | caution | Baseten offers $30 one-time trial credits for new workspaces on the Startup (Basic) plan. After those credits are used,… | +| `blackbox` | llm-code | keyless-limited | β€” | med | avoid | Blackbox AI offers a free web/IDE tier with unlimited basic chat but restricts advanced models (GPT-4o, Claude, etc.) t… | +| `brave-search` | search | recurring-credit | β€” | high | caution | As of February 12, 2026, Brave removed its previously free (5,000 queries/month, no card required) plan and replaced it… | +| `byteplus` | llm-chat | one-time-trial-credit | β€” | high | caution | BytePlus ModelArk provides new users a one-time free trial of 500,000 tokens per LLM model (2,000,000 for vision models… | +| `bytez` | aggregator | recurring-credit | β€” | med | ambiguous | Bytez offers $1 in free credits that refresh every 4 weeks (credits expire if unused within the cycle). Free tier is li… | +| `chutes` | aggregator | discontinued | β€” | high | unknown | The free Early Access program (200 requests/day) was officially discontinued on March 15, 2026. Chutes.ai now operates … | +| `comfyui` | image | keyless-unlimited | β€” | high | ok | ComfyUI is a fully open-source (GPL-3.0), self-hosted diffusion model interface that runs entirely on local hardware wi… | +| `completions` | aggregator | keyless-unlimited | β€” | med | avoid | Completions.me claims to offer completely free, unlimited access to Claude Opus 4.6, GPT-5.2, Gemini 3.1 Pro, and 15+ m… | +| `coze` | aggregator | recurring-daily | β€” | med | avoid | Coze's free plan provides 10 message credits per day β€” a platform-level unit (not raw LLM tokens) where each model call… | +| `deepinfra` | aggregator | one-time-trial-credit | β€” | med | caution | DeepInfra is a pay-as-you-go inference provider that explicitly requires a credit card or prepayment to use services; a… | +| `deepseek` | llm-chat | one-time-trial-credit | β€” | high | caution | DeepSeek offers a one-time signup credit of 5 million tokens (no credit card required) valid for 30 days from account c… | +| `dify` | other | one-time-trial-credit | β€” | med | caution | Dify Cloud offers a Sandbox (free) plan with 200 message credits (one-time trial for testing with bundled LLM keys), 5 … | +| `duckduckgo-web` | llm-chat | keyless-limited | β€” | high | avoid | Duck.ai is free and keyless (no account or API key required), with anonymous daily usage limits that DuckDuckGo deliber… | +| `exa-search` | search | recurring-monthly | β€” | high | caution | Exa offers a permanently free plan with 1,000 search requests per month (no expiration), with contents (text and highli… | +| `featherless-ai` | llm-chat | discontinued | β€” | high | avoid | Featherless AI has no free tier or free trial for general users as of June 2026. Paid subscriptions start at $10/month … | +| `firecrawl` | tool | recurring-monthly | β€” | high | caution | Firecrawl offers a free plan with 1,000 credits per month (1 credit = 1 page scraped), 2 concurrent requests, and low r… | +| `fireworks` | llm-chat | one-time-trial-credit | β€” | high | avoid | Fireworks AI offers $1 in one-time starter credits on signup; no recurring free tier exists. Without a payment method o… | +| `freemodel-dev` | llm-chat | one-time-trial-credit | β€” | low | unknown | FreeModel.dev (domain registered April 30, 2026) offers $300 in one-time free credits on signup with no payment info re… | +| `friendliai` | llm-chat | keyless-limited | β€” | med | avoid | FriendliAI offers a Tier 0 account for new signups with adaptive (dynamically throttled) rate limits and 8K max output … | +| `gemini-cli` | llm-chat | account-oauth | β€” | high | avoid | Gemini CLI's free tier (Google Account OAuth, 1,000 req/day, 60 RPM) is being deprecated on June 18, 2026 for all non-e… | +| `gitlawb` | aggregator | unknown | β€” | low | unknown | The original free MiMo (xiaomi/mimo-v2.5) model was revoked server-side around May 24, 2026. As of June 2026 the platfo… | +| `gitlawb-gmi` | llm-chat | keyless-limited | β€” | med | ambiguous | As of June 2026, Gitlawb Opengateway is primarily a pay-as-you-go credit-balance gateway; the only recurring-free model… | +| `glhf` | llm-chat | one-time-trial-credit | β€” | med | caution | GLHF Chat ended its free beta in January 2025 and moved to pay-as-you-go pricing (per-token, no subscription required).… | +| `hackclub` | aggregator | account-oauth | β€” | med | caution | Free AI API access for Hack Club members via OAuth sign-in; no public rate limit numbers documented. Provides 30+ model… | +| `hyperbolic` | llm-chat | one-time-trial-credit | β€” | med | caution | Hyperbolic gives new users $1 in one-time trial credits on signup, with a Basic plan rate limit of 60 RPM; upgrading to… | +| `iflytek` | llm-chat | keyless-limited | β€” | med | avoid | Spark Lite remains permanently free as of June 2026, with unlimited tokens but a 2 QPS (β‰ˆ120 RPM) rate limit per App ID… | +| `inference-net` | llm-chat | recurring-monthly | β€” | med | caution | Inference.net currently offers a free plan ($0 forever) with $1 in recurring monthly credits that can be spent on pay-a… | +| `jina-ai` | search | one-time-trial-credit | β€” | med | caution | New API keys receive 10 million free tokens (one-time, non-commercial) usable across all Jina AI endpoints (embeddings,… | +| `jina-reader` | web-reverse | keyless-limited | β€” | med | caution | Jina Reader is freely accessible without any API key at 20 RPM (keyless, rate-limited by IP). New accounts registering … | +| `kluster` | llm-chat | one-time-trial-credit | β€” | med | ambiguous | New users receive $5 in free credits on signup and email verification; multiple sources also indicate a permanent free … | +| `liquid` | llm-chat | unknown | β€” | high | unknown | Liquid AI does not currently offer a hosted API of their own; models are open-source and available via Hugging Face, LE… | +| `modal` | other | recurring-monthly | β€” | high | avoid | Modal's Starter plan gives every account $30/month in recurring free compute credits (GPU + CPU per-second billing), wi… | +| `monsterapi` | llm-chat | one-time-trial-credit | β€” | low | ambiguous | MonsterAPI offers a free tier that gives new users one-time trial credits upon signup (no credit card required), but th… | +| `muse-spark-web` | llm-chat | account-oauth | β€” | high | avoid | Meta AI at meta.ai is free for any user with a Meta/Facebook account, with no published hard rate or token limits for c… | +| `nebius` | llm-chat | one-time-trial-credit | β€” | med | caution | Nebius AI Studio (Token Factory) offers ~$1 in one-time trial credits to new signups with no credit card required, givi… | +| `nlpcloud` | llm-chat | recurring-monthly | β€” | med | avoid | NLP Cloud offers a permanent recurring free plan with 10,000 API requests per month at up to 3 requests per minute, wit… | +| `nomic` | embeddings | one-time-trial-credit | β€” | med | caution | Nomic offers a one-time free allowance of 1 million tokens for the Embed API; after that, a paid subscription is requir… | +| `nous-research` | aggregator | recurring-credit | β€” | med | ambiguous | Nous Portal (launched April 27, 2026) offers a free tier at $0/month with $0.10 in monthly recurring credits, plus perm… | +| `novita` | aggregator | one-time-trial-credit | β€” | med | caution | Novita AI provides $0.50 one-time trial credits upon signup with a 60 RPM rate limit; no recurring free tier exists, th… | +| `nscale` | llm-chat | one-time-trial-credit | β€” | med | caution | nScale offers $5 in free credits to every new user signing up for their serverless inference API; this is a one-time tr… | +| `opencode` | llm-code | keyless-limited | β€” | med | avoid | OpenCode is an open-source AI coding agent (client tool); its companion hosted service "OpenCode Go" offers a free tier… | +| `phind` | llm-code | discontinued | β€” | high | unknown | Phind permanently shut down on January 16, 2026, without advance notice, just over a month after raising $10M in fundin… | +| `pollinations` | aggregator | keyless-limited | β€” | med | caution | Pollinations AI provides a keyless public API (no signup required for basic access) for image, text, audio, and video g… | +| `predibase` | llm-code | one-time-trial-credit | β€” | med | caution | Predibase was acquired by Rubrik in June/July 2025 and its main domain now redirects to Rubrik marketing pages. The pro… | +| `puter` | aggregator | account-oauth | β€” | med | caution | Puter provides 500+ AI models (GPT, Claude, Gemini, Llama, DeepSeek, Grok, etc.) via an OpenAI-compatible endpoint at a… | +| `qoder` | llm-code | one-time-trial-credit | β€” | med | caution | Qoder offers a free Community Edition (launched April 30, 2026) that includes unlimited code completions/next-edit sugg… | +| `qwen-web` | llm-chat | discontinued | β€” | high | avoid | The Qwen OAuth free tier (which powered token-based API access to chat.qwen.ai) was discontinued on April 15, 2026. New… | +| `reka` | llm-chat | recurring-monthly | β€” | med | caution | Reka offers $10/month in recurring free API credits (refreshed at the start of each month) usable across all API featur… | +| `scaleway` | llm-chat | one-time-trial-credit | β€” | med | ok | New Scaleway accounts receive 1,000,000 free tokens (plus 60 minutes of audio transcription) as a one-time trial credit… | +| `sdwebui` | image | keyless-unlimited | β€” | high | ok | AUTOMATIC1111 Stable Diffusion WebUI is a free, open-source (AGPL-3.0) self-hosted web UI for Stable Diffusion image ge… | +| `searxng-search` | search | keyless-unlimited | β€” | high | ok | SearXNG is free, open-source (AGPL-3.0) self-hosted metasearch software β€” there is no hosted SaaS API tier or pricing m… | +| `sensenova` | llm-chat | one-time-trial-credit | β€” | med | caution | As of June 2026, SenseNova offers a limited-time free public beta ("Token Plan") giving developers 1,500 API calls per … | +| `serper-search` | search | one-time-trial-credit | β€” | high | caution | Serper offers 2,500 free queries as a one-time trial with no credit card required. These credits do not renew β€” after e… | +| `stepfun` | llm-chat | one-time-trial-credit | β€” | med | ambiguous | StepFun's platform (platform.stepfun.ai / platform.stepfun.com) no longer offers free LLM model access β€” all LLM API ca… | +| `t3-web` | aggregator | recurring-daily | β€” | med | avoid | t3.chat offers a free tier with limited daily messages (exact count undisclosed) across a restricted set of models, res… | +| `tavily-search` | search | recurring-monthly | β€” | high | caution | Tavily offers 1,000 free API credits per month with no credit card required. Credits cover basic search (1 credit each)… | +| `theoldllm` | llm-chat | keyless-unlimited | β€” | low | unknown | The Old LLM is a keyless, no-signup web chat UI hosted on Vercel that claims unlimited free access to 60+ AI models, bu… | +| `together` | llm-chat | one-time-trial-credit | β€” | med | caution | Together AI offers a one-time trial credit (reported as $25 by third-party aggregators, though official billing docs sa… | +| `uncloseai` | llm-chat | keyless-unlimited | β€” | med | caution | UncloseAI remains a completely free, no-signup, keyless LLM service serving Hermes-3-Llama-3.1-8B and Qwen 3 Coder via … | +| `veoaifree-web` | video | keyless-unlimited | β€” | med | caution | Veoaifree.com offers completely keyless, no-login video generation (VEO 3.1, VEO 2.0, Seedance 2.0) with no documented … | +| `vertex` | llm-chat | one-time-trial-credit | β€” | high | caution | Vertex AI is a pay-as-you-go enterprise Google Cloud service with no recurring free inference tier. New GCP accounts re… | +| `voyage-ai` | embeddings | one-time-trial-credit | β€” | high | caution | Voyage AI provides a one-time free allocation of 200M tokens per account for most current embedding and reranking model… | +| `yi` | llm-chat | unknown | β€” | low | unknown | The Yi API platform (platform.01.ai) appears to be pay-as-you-go only with no publicly documented free tier; Yi-Lightni… | --- -## Deprecated / discontinued +## What changed since the shipped catalog (`freeNote`) -### Qwen Code (`qwen`) +> The v3.8.0-era `freeNote` strings are stale. Corrections found by this research (these drive the catalog update in `_tasks/features-v3.8.12`): -Marked `deprecated: true` in `FREE_PROVIDERS`. Discontinued **2026-04-15**. - -> Qwen OAuth free tier was discontinued on 2026-04-15. Use `bailian-coding-plan`, `alibaba`, `alibaba-cn`, or `openrouter` providers with an API key instead. - -Connections of type `qwen` will keep working until their tokens expire, but no new OAuth sign-ins are accepted upstream. Migrate to: - -- `bailian-coding-plan` (Alibaba Coding Plan β€” Claude-compatible) -- `alibaba` (Alibaba β€” DashScope international) -- `alibaba-cn` (Alibaba (China) β€” DashScope China) -- `openrouter` (Qwen models exposed via OpenRouter) - ---- - -## Command Code - -`command-code` is a separate API-key provider for the Command Code agent (see `commandcode.ai`). It is not flagged with `hasFree: true` in the catalog, so it does not appear in the free table above, but it is included here because it ships in v3.8.0 alongside the free-tier providers: - -- ID: `command-code` -- Endpoint: Command Code `/alpha/generate` -- Auth: Bearer API key, configured from the dashboard. - -Check Command Code's website for the current free-tier policy. - ---- - -## Environment variables - -OmniRoute v3.8.2 does **not** read provider API keys from environment variables (with one exception below). Keys are stored in the encrypted SQLite database and configured from the dashboard. The env vars listed here are the only ones that affect free-tier behavior: - -```bash -# Windsurf / Devin CLI β€” Firebase Web API key used by the Secure Token -# Service to refresh the Windsurf app. The default value ships in -# .env.example (it is a public Firebase Web API key extracted from the -# Devin CLI binary, not a real secret); override only if you mirror your -# own Windsurf token-refresh service. -WINDSURF_FIREBASE_API_KEY= - -# Optional fallback for the devin-cli executor when no connection key is set. -WINDSURF_API_KEY= - -# Optional path to the official Devin CLI binary. -CLI_DEVIN_BIN=/usr/local/bin/devin - -# OAuth client overrides (rarely needed β€” defaults shipped in code) -CODEX_OAUTH_CLIENT_ID= -GEMINI_OAUTH_CLIENT_ID= -GEMINI_OAUTH_CLIENT_SECRET= -GEMINI_CLI_OAUTH_CLIENT_ID= -GEMINI_CLI_OAUTH_CLIENT_SECRET= -QWEN_OAUTH_CLIENT_ID= -KIMI_CODING_OAUTH_CLIENT_ID= -GITHUB_OAUTH_CLIENT_ID= -GITLAB_DUO_OAUTH_CLIENT_ID= -GITLAB_DUO_OAUTH_CLIENT_SECRET= -QODER_OAUTH_CLIENT_SECRET= -QODER_PERSONAL_ACCESS_TOKEN= - -# CLI sidecar binaries -CLI_CODEX_BIN=codex -CLI_CURSOR_BIN=agent -CLI_CLINE_BIN=cline -CLI_QODER_BIN=qoder -CLI_QWEN_BIN=qwen -``` - -For all other providers (Groq, Cerebras, Mistral, Gemini, Cohere, NVIDIA, OpenRouter, Together, Fireworks, Cloudflare AI, SambaNova, HuggingFace, SiliconFlow, Hyperbolic, Morph, LLM7, Lepton, Kluster, UncloseAI, BazaarLink, Completions, Enally, FreeTheAi, AgentRouter, Command Code, etc.), add the key from `/dashboard/providers/new`. - ---- - -## How to use - -1. Open `/dashboard/providers/new` and pick the provider you want. -2. Paste the API key (or complete the OAuth flow). For OAuth providers, follow the dashboard wizard. -3. The provider appears in your routing pool automatically and is eligible for combos and auto-routing. -4. Track usage at `/dashboard/usage` to see how close you are to free-tier limits. - -### Suggested combos - -| Goal | Strategy | Notes | -| ---------------------------- | -------------------- | --------------------------------------------------------------------- | -| Cheapest possible chat | `auto/cheap` | Prefers free / lowest-cost providers; falls back automatically. | -| Local-only routing | `auto/offline` | Routes only to local providers (Ollama, LM Studio, vLLM, …). | -| Redundancy across free tiers | combo `priority` | List Groq β†’ Cerebras β†’ Mistral β†’ Gemini β†’ NVIDIA β†’ OpenRouter. | -| High RPM throughput | combo `round-robin` | Spreads requests across all configured free providers. | -| Best success rate | combo `lkgp` / `p2c` | Picks last-known-good provider or "power of two choices" rebalancing. | - -### Tips - -- Combine multiple free providers in a combo (`/dashboard/combos`) to maximize daily quota and route around outages. -- Use `omniroute doctor` to verify all configured free providers are reachable. -- Check provider health in `/dashboard/monitoring/health` β€” a provider with an open circuit breaker is skipped automatically. -- Free-tier limits change frequently; the `freeNote` strings reflect the limits as known at v3.8.0 ship date. Verify with each provider's official docs before relying on a specific number. +- **`360ai`** β€” The shipped freeNote "Free 360 AI Brain models" appears outdated. Current access is application-gated and paid. The 2023 launch-era promotional tokens (100M–250M one-time) may have been the basis for… +- **`agentrouter`** β€” Our shipped freeNote says "$200 free credits on signup." Current reality shows standard (non-referral) signups receive only $100; referral signups may get $200 but a community comment from April 2026… +- **`agy`** β€” Our shipped freeNote says "(none)" implying no free tier, but Antigravity does have a free OAuth-gated tier. However, the ToS explicitly prohibits using this free tier through a proxy like OmniRoute … +- **`ai21`** β€” Tightened: trial window shrunk from "3 months" to 7 days. The $10 credit amount remains the same, but validity dropped sharply from ~90 days to 7 days. +- **`aimlapi`** β€” Changed significantly. Shipped freeNote advertised "$0.025/day free credits β€” 200+ models" but the free tier is now paused/discontinued. The $0.025/day credit allocation (50,000 credits/day, 10 req/d… +- **`amazon-q`** β€” Our shipped freeNote says "(none)" β€” the reality is worse: the product is now discontinued for new signups (May 15, 2026). Previously the free tier offered 50 agentic requests/month + unlimited inlin… +- **`api-airforce`** β€” Catalog ships freeNote "(none)" but a documented free tier exists: 1 RPM / 1,000 RPD recurring, account signup required, limited to basic models. +- **`arcee-ai`** β€” The shipped freeNote ("Free Trinity Large Thinking model (262K context)") is partially accurate β€” Trinity Large Thinking is indeed free via OpenRouter with 262K context β€” but the note omits that this… +- **`baichuan`** β€” Our shipped freeNote says "Free Baichuan models" which implies ongoing free access, but current reality is only a one-time 80 CNY trial credit for new users (valid 3 months). There are no permanently… +- **`baidu`** β€” The catalog says "Free ERNIE Speed/Lite models" which is broadly accurate, but understates the scope: ERNIE-Tiny and multiple context-window variants (8K and 128K) are also free. The free tier appear… +- **`bazaarlink`** β€” Broadly matches β€” the shipped freeNote accurately describes auto:free routing for zero-cost inference. However, the current reality includes explicit rate limits (10-20 RPM, ~150 RPD) not mentioned i… +- **`blackbox`** β€” Our shipped freeNote claims "unlimited basic chat plus Minimax-M2.5." In reality, unlimited Minimax-M2.5 agent requests are a paid-plan feature (Pro+), not part of the free tier. The free tier has li… +- **`bluesminds`** β€” Our shipped freeNote was "(none)" β€” but BluesMinds does have a documented free tier: 500 pi credits, 20 RPM, 300 RPD, permanent free plan. The catalog significantly understates the offering. +- **`brave-search`** β€” The catalog notes "(none)" suggesting no free tier was tracked, but in reality there was a free 5,000 queries/month tier (no card) until February 12, 2026, which has since been replaced by a $5/month… +- **`byteplus`** β€” Our catalog shipped "(none)" but BytePlus ModelArk does have a free tier: a one-time trial credit of 500k tokens per LLM model for new accounts. The catalog underreports this. +- **`cerebras`** β€” TPM appears tightened from 60K to 30K on current documented models (gpt-oss-120b, zai-glm-4.7). RPM of 5 is now explicitly documented (was not in our shipped note). Daily token cap of 1M/day is uncha… +- **`chutes`** β€” The shipped freeNote says "Free tier available" but as of March 15, 2026, the free tier has been officially discontinued. The catalog note is stale and should be updated to reflect that there is no r… +- **`completions`** β€” Our shipped freeNote ("Free unlimited access to Claude, GPT, Gemini β€” no rate limits") still matches the site's self-described claims. However, the service is a legally dubious, short-lived aggregato… +- **`coze`** β€” The shipped note "Free ByteDance agent platform" is directionally accurate but omits that the free tier is now tightly credit-capped (10 credits/day β‰ˆ 5–100 messages depending on model), a constraint… +- **`deepinfra`** β€” Our shipped freeNote says "Free signup credits for API testing" β€” this appears stale. The official pricing page now requires card/prepayment with no documented general free signup credit. The free ti… +- **`deepseek`** β€” Our shipped note says "5M free tokens on signup - no credit card required" β€” this is still accurate for the one-time grant, but importantly the credits expire after 30 days (not mentioned in the ship… +- **`dify`** β€” The shipped freeNote ("Free open-source AI app builder + RAG") is directionally accurate but incomplete. The cloud free tier is more constrained than implied: 200 message credits appear to be a one-t… +- **`doubao`** β€” The shipped freeNote "Free Doubao models (ByteDance)" is directionally correct but underspecified. Current reality is more structured: there is a quantified recurring daily free tier (2M tokens/day v… +- **`duckduckgo-web`** β€” The core "free anonymous access" description still holds, but the service has matured significantly: it now has explicit paid tiers (Plus/Pro) with higher limits implying the free tier is rate-constr… +- **`exa-search`** β€” Catalog ships freeNote "(none)" but Exa has a documented recurring free tier of 1,000 requests/month. This is a significant gap β€” the free tier exists and is permanent. +- **`featherless-ai`** β€” Our shipped freeNote says "Free tier available" but there is no general free tier. The only free access is through an invitation/application-based Builder Series program, which is not a standard free… +- **`firecrawl`** β€” Our catalog shipped freeNote "(none)", implying no free tier. In reality Firecrawl has a documented recurring free plan with 1,000 credits/month β€” the catalog entry is incorrect. +- **`freemodel-dev`** β€” Our shipped freeNote is "(none)" β€” this was likely a placeholder meaning the provider was not yet cataloged. In reality the provider does have a $300 one-time trial credit offer. However, this is a o… +- **`friendliai`** β€” The shipped freeNote ("Free tier for serverless inference") is partially accurate but misleading. There is free access via Tier 0 and free-designated models, but the rate limits are undefined and ada… +- **`gemini`** β€” The shipped freeNote says "1,500 req/day for Gemini 2.5 Flash" β€” this was accurate before December 2025. Google cut free-tier limits by 50-80% in December 2025, reducing Gemini 2.5 Flash from 1,500 R… +- **`gemini-cli`** β€” Catalog ships "(none)" implying no free tier was recognized. In reality, Gemini CLI did have a notable free OAuth tier (1,000 RPD via Google Account) until recently, but it is now being shut down (Ju… +- **`github-models`** β€” Catalog note "Free GPT-5, o-series, DeepSeek-R1, Llama 4, Grok 3" is directionally correct about model availability but omits the daily rate limits (50 RPD for high-tier models, 150 RPD for low-tier)… +- **`gitlawb`** β€” The shipped freeNote "Free tier available" is effectively stale. The original free MiMo access was removed in May 2026; the only remaining "free" option is a temporary promotional model (Nemotron 3 U… +- **`gitlawb-gmi`** β€” Partially still accurate β€” free tier exists but is now narrowed to a single model (Nemotron 3 Ultra) after MiMo free access was revoked in late May 2026. The shipped note "Free tier available" unders… +- **`glhf`** β€” The shipped freeNote ("Free tier for open-source model inference") is now stale. The free beta ended in January 2025; GLHF Chat is now a paid pay-as-you-go service. There is no ongoing recurring free… +- **`groq`** β€” The shipped freeNote "30 RPM / 14.4K RPD" is accurate only for llama-3.1-8b-instant. Most other models (including llama-3.3-70b-versatile) have a much lower 1K RPD cap. The note omits model-specific … +- **`hackclub`** β€” The "30+ models" count appears accurate and still matches. The core offering remains free for Hack Club members. No evidence of tightening β€” still "$0 ALWAYS FREE" per the homepage. The freeNote omit… +- **`huggingchat`** β€” The shipped freeNote ("Free LLM chat β€” no subscription required. Rate limits apply.") is partially accurate but significantly understates the restrictions. The free tier now operates on a hard $0.10/… +- **`huggingface`** β€” Significantly tightened. The shipped freeNote ("Free Inference API for thousands of models") implied unlimited/generous free access, but as of mid-2025 the free tier is capped at $0.10/month in recur… +- **`hyperbolic`** β€” Our shipped freeNote says "$1-5 trial credits on signup" β€” the $1 trial credit portion is accurate, but the "$5" figure refers to the minimum deposit required to unlock GPU rental (not free credits g… +- **`iflytek`** β€” Catalog says "Free Spark Lite models" β€” this is broadly accurate. However the current reality is more nuanced: only Spark Lite is free (the Max 100M token offer was a one-time promo, not recurring); … +- **`inclusionai`** β€” Our shipped freeNote says "Free Ling-2.6-flash model (262K context)" without specifying token limits. Reality is more specific: the free tier is 500K tokens/day (shared across all models), with a 2 Q… +- **`inference-net`** β€” The shipped freeNote states "$25 free credits on signup plus research grants." The current pricing page shows only $1 recurring monthly credits with no mention of a $25 signup bonus or research grant… +- **`jina-reader`** β€” Our shipped freeNote was "(none)", which is incorrect. Jina Reader has had a publicly documented free tier since launch: keyless access at 20 RPM plus a 10M one-time token grant with a free API key. … +- **`kiro`** β€” Catalog shipped freeNote "(none)" β€” but Kiro has a documented, perpetual free tier of 50 credits/month. The free tier existed since Kiro's public launch (pricing formalized ~October 2025). This is a … +- **`kluster`** β€” The $5 free credits on signup appears to still match. However, there is evidence of an additional permanent free tier (post-credit) with undocumented limits, which may represent an improvement over t… +- **`llm7`** β€” Rate limits have increased from the shipped freeNote (20 RPM / 100 req/hr β†’ 40 RPM / 200 req/hr). The "no signup required" claim is now outdated β€” a free token from token.llm7.io is now required (tho… +- **`longcat`** β€” Significant change from shipped freeNote of "(none)": the platform actively provides 5M free tokens/day on a recurring daily basis to all API users during the public beta. +- **`mistral`** β€” The shipped freeNote ("Free Experiment tier: rate-limited access to all models") is directionally correct but understated. Current reality adds specific documented limits: 2 RPM, 500K TPM, 1B tokens/… +- **`monsterapi`** β€” The shipped freeNote says "Free credits for decentralized GPU inference" which is partially accurate β€” there are one-time trial credits on signup. However, the recurring free tier has 0 credits/month… +- **`morph`** β€” The shipped freeNote mentions "250K credits/month" which matches the current credit allocation; however, the more significant constraint is 200 requests/month which was not captured in the original c… +- **`muse-spark-web`** β€” The shipped freeNote ("Free with login β€” Meta AI platform with Llama models") is broadly accurate regarding login requirement and Llama model access. No tightening of the free tier was detected; it r… +- **`nlpcloud`** β€” The shipped freeNote says "Trial credits for new accounts," which implies a one-time trial. In reality, NLP Cloud's free tier is a recurring monthly free plan (10,000 requests/month), not trial credi… +- **`nomic`** β€” Our shipped freeNote says "Free Nomic Embed API" with no qualification, implying ongoing free access. Reality is a one-time 1M-token trial credit only β€” after that token budget is consumed, paid subs… +- **`nous-research`** β€” The shipped freeNote ("Free tier: 50 RPM, 500,000 TPM") does not match the current Nous Portal product. The portal launched April 27, 2026 and structures its free tier as $0.10/month in recurring cre… +- **`nvidia`** β€” The "40 RPM, 70+ models" rate limit element matches the catalog, but the freeNote framing as a simple dev-access tier undersells that the old one-time credit pool has been removed β€” access is now tru… +- **`ollama-cloud`** β€” Our shipped freeNote is "(none)" β€” this is stale. Ollama Cloud launched a cloud inference product with a genuine free tier that provides light weekly GPU-time-based access to hosted open models. +- **`openrouter`** β€” RPD tightened from 200 to 50 for zero-credit accounts (RPM unchanged at 20). The catalog note was accurate on RPM but overstated the RPD by 4x for the no-credits baseline tier. +- **`phind`** β€” Our shipped freeNote describes an active free chat/code-search service β€” but Phind is fully discontinued as of January 16, 2026. The catalog entry should be marked discontinued and removed from activ… +- **`pollinations`** β€” Partially matches β€” the "no API key required" claim is still true for anonymous access, but the catalog freeNote omits that: (1) rate limits do apply (interval throttle of ~1 req/6-15s for anonymous … +- **`predibase`** β€” The shipped freeNote ($25 free trial credits, 30-day validity) still matches current documentation. However, the catalog omits the concurrent 20,000 tokens/day serverless rate limit that applies duri… +- **`publicai`** β€” The shipped freeNote ("Free community inference tier") is broadly accurate but understates the specificity: the 20 RPM rate limit is now documented. No major tightening found; the service remains fre… +- **`puter`** β€” Partially matches: the "500+ models" count is still accurate. However "users pay via Puter account" understates the reality β€” free accounts receive an undocumented starting credit that can be exhaust… +- **`qoder`** β€” Our catalog ships freeNote "(none)", but Qoder does have a free tier: a Community Edition with unlimited basic-model completions (daily-capped, unspecified limit) plus a one-time 14-day/300-credit Pr… +- **`qwen-web`** β€” The shipped freeNote ("Free β€” Qwen models via chat.qwen.ai with login token") is now stale. The login-token/OAuth free API path was terminated on 2026-04-15. The qwen-web executor will receive 401 er… +- **`sambanova`** β€” Our shipped note only described the one-time $5 credit (30-day validity). The current reality includes a permanent recurring free tier with documented rate limits (20 RPM, 20 RPD, 200k TPD) that pers… +- **`sensenova`** β€” Our shipped freeNote says "Free SenseTime models" which is vague but directionally correct β€” free access does exist. However, reality is more nuanced: free access is a time-limited public beta (Token… +- **`serper-search`** β€” The shipped freeNote says "(none)" which is partially accurate β€” there is no recurring free plan β€” but Serper does offer 2,500 one-time trial credits on signup. The catalog note could be more precise… +- **`siliconflow`** β€” Partially matches but more nuanced: the $1 free credits are a one-time trial (not recurring), while the "permanently free models" component still holds β€” free $0 models continue to exist (Qwen3-8B, D… +- **`sparkdesk`** β€” Partially matches β€” the shipped freeNote "Free iFlytek Spark models" is accurate in that Spark Lite is permanently free, but understates the constraint (2 QPS per App ID) and overstates scope (only S… +- **`stepfun`** β€” The shipped freeNote "Free Step-2 models" is stale. Step-2 LLM free access is no longer offered; the platform has transitioned to Step 3.x models on a paid-per-token basis with no free LLM tier. Only… +- **`t3-web`** β€” The shipped freeNote is broadly accurate (limited model access, Pro unlocks 50+ models for $8/month), but misses two key updates: (1) the free tier now resets daily instead of monthly (changed around… +- **`tavily-search`** β€” Catalog ships freeNote "(none)" implying no free tier, but Tavily does in fact offer a documented recurring free tier of 1,000 credits/month with no credit card required. This is a significant discre… +- **`tencent`** β€” Largely matches β€” the shipped freeNote ("Free Hunyuan Lite models") is accurate. Hunyuan-lite has been permanently free since May 2024 and remains so as of 2026. The catalog note undersells the detai… +- **`theoldllm`** β€” Our shipped freeNote was "(none)" β€” this still matches in the sense that no structured API/free tier offering exists; the service remains a UI-only chat wrapper with no catalogable API tier. +- **`together`** β€” The shipped note says "$25 signup credits + 3 permanently free models" but reality shows far more permanently free models (~80, not 3). The $25 trial credit figure is contested β€” official billing doc… +- **`uncloseai`** β€” Largely matches β€” still free forever with no signup. However, the ToS (terms-of-use.html) clarifies IP-based throttling exists for excessive use and prohibits building competing ML services without a… +- **`veoaifree-web`** β€” The shipped freeNote states "6 requests/hour" but no such explicit limit is currently documented anywhere on veoaifree.com. The site claims unlimited free generation with no login. The models listed … +- **`voyage-ai`** β€” The shipped freeNote "200M free tokens for embeddings and reranking" is directionally correct on the token count but misleading β€” it omits that this is a one-time per-account allocation, not a recurr… +- **`yi`** β€” The shipped freeNote "Free Yi-Light models" references a model name ("Yi-Light") that does not appear in any current 01.AI documentation or model catalog β€” no such model is listed on platform.01.ai, … --- ## Glossary -| Term | Meaning | -| ---------- | -------------------------------------------------------- | -| **RPM** | Requests per minute | -| **RPD** | Requests per day | -| **RPH** | Requests per hour | -| **RPS** | Requests per second | -| **TPM** | Tokens per minute | -| **TPD** | Tokens per day | -| **Neuron** | Cloudflare's compute unit (~1 output token) | -| **LKGP** | Last-known-good provider β€” auto-combo strategy | -| **P2C** | Power-of-two choices β€” auto-combo load balancer strategy | +| Term | Meaning | +|---|---| +| **RPM / RPD / RPH** | Requests per minute / day / hour | +| **TPM / TPD** | Tokens per minute / day | +| **Documented grant** | Provider publishes an explicit daily/monthly token cap (defensible budget) | +| **Theoretical ceiling** | `rate-limit Γ— 24/7 Γ— 30d` β€” a maximum, not a granted budget | +| **Neuron** | Cloudflare compute unit (~1 output token) | + +> Generated from per-provider research on 2026-06-05. Re-run the research workflow (see `_tasks/features-v3.8.12`) to refresh. diff --git a/docs/reference/PROVIDER_REFERENCE.md b/docs/reference/PROVIDER_REFERENCE.md index a15251b1de..a1f5c81146 100644 --- a/docs/reference/PROVIDER_REFERENCE.md +++ b/docs/reference/PROVIDER_REFERENCE.md @@ -1,16 +1,16 @@ --- title: "Provider Reference" -version: 3.8.2 -lastUpdated: 2026-05-17 +version: 3.8.11 +lastUpdated: 2026-06-05 --- # 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-05-17 +> **Last generated:** 2026-06-05 -Total providers: **177**. See category breakdown below. +Total providers: **224**. See category breakdown below. ## Categories @@ -31,233 +31,276 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each --- -## Free Tier (OAuth-first or no-key) (5) +## OAuth Providers (19) -| ID | Alias | Name | Tags | Website | Notes | -| ------------ | ------------ | ---------- | ---- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `amazon-q` | `aq` | Amazon Q | Free | [link](https://aws.amazon.com/q/developer/) | Uses the same AWS Builder ID or imported refresh-token flow as Kiro, but keeps Amazon Q connections separate. | -| `gemini-cli` | `gemini-cli` | Gemini CLI | Free | β€” | Uses Gemini CLI OAuth / Cloud Code credentials. Pro models require an eligible Google account or paid plan. | -| `kiro` | `kr` | Kiro AI | Free | β€” | β€” | -| `qoder` | `if` | Qoder AI | Free | β€” | β€” | -| `qwen` | `qw` | Qwen Code | Free | β€” | ⚠️ **DEPRECATED.** Qwen OAuth free tier was discontinued on 2026-04-15. Use 'bailian-coding-plan', 'alibaba', 'alibaba-cn', or 'openrouter' provider with API key instead. | +| ID | Alias | Name | Tags | Website | Notes | +|----|-------|------|------|---------|-------| +| `agy` | `agy` | Antigravity CLI | OAuth | [link](https://antigravity.google) | Import your Antigravity CLI (`agy`) login (paste/upload its token file), auto-detect a local CLI login, or sign in with Google. Shares the Antigravity backend (incl. Claude models). | +| `amazon-q` | `aq` | Amazon Q | OAuth | [link](https://aws.amazon.com/q/developer/) | Uses the same AWS Builder ID or imported refresh-token flow as Kiro, but keeps Amazon Q connections separate. | +| `antigravity` | β€” | Antigravity | OAuth | β€” | β€” | +| `claude` | `cc` | Claude Code | OAuth | β€” | β€” | +| `cline` | `cl` | Cline | OAuth | β€” | β€” | +| `codex` | `cx` | OpenAI Codex | OAuth | β€” | β€” | +| `cursor` | `cu` | Cursor IDE | OAuth | β€” | β€” | +| `devin-cli` | `dv` | Devin CLI (Official) | OAuth | [link](https://cli.devin.ai) | Requires the Devin CLI binary. Run `devin auth login` to authenticate, or provide your WINDSURF_API_KEY. Install: https://cli.devin.ai | +| `gemini-cli` | `gemini-cli` | Gemini CLI | OAuth | β€” | Uses Gemini CLI OAuth / Cloud Code credentials. Pro models require an eligible Google account or paid plan. | +| `github` | `gh` | GitHub Copilot | OAuth | β€” | β€” | +| `gitlab-duo` | `gitlab-duo` | GitLab Duo | OAuth | [link](https://docs.gitlab.com/user/duo_agent_platform/code_suggestions/) | OAuth application with ai_features + read_user scopes. Configure GITLAB_DUO_OAUTH_CLIENT_ID and optionally GITLAB_DUO_OAUTH_CLIENT_SECRET on this OmniRoute instance. | +| `kilocode` | `kc` | Kilo Code | OAuth | β€” | β€” | +| `kimi-coding` | `kmc` | Kimi Coding | OAuth | β€” | β€” | +| `kiro` | `kr` | Kiro AI | OAuth | β€” | Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use. | +| `qoder` | `if` | Qoder AI | OAuth | β€” | β€” | +| `qwen` | `qw` | Qwen Code | OAuth | β€” | ⚠️ **DEPRECATED.** Qwen OAuth free tier was discontinued on 2026-04-15. Use 'bailian-coding-plan', 'alibaba', 'alibaba-cn', or 'openrouter' provider with API key instead. | +| `trae` | `tr` | Trae | OAuth | [link](https://trae.ai) | Trae is an AI-native IDE by ByteDance (SOLO remote agent). Authorize via trae.ai in the popup, or sign in at solo.trae.ai and paste the Cloud-IDE-JWT (sent as 'Authorization: Cloud-IDE-JWT ', ~14-day lifetime) as the access token; web_id/biz_user_id/user_unique_id/scope/tenant/region propagate via providerSpecificData. No headless refresh for pasted tokens β€” re-paste on expiry. | +| `windsurf` | `ws` | Windsurf (Devin CLI) | OAuth | [link](https://windsurf.com) | Sign in at windsurf.com to get your token. Visit windsurf.com/show-auth-token after logging in and paste it here, or use the device-code login flow. | +| `zed` | `zd` | Zed IDE | OAuth | [link](https://zed.dev) | Zed stores LLM provider credentials (OpenAI, Anthropic, Google, Mistral, xAI) in the OS keychain. Use the Import button below to discover and import them automatically. | -## OAuth Providers (11) +## Web Cookie Providers (20) -| ID | Alias | Name | Tags | Website | Notes | -| ------------- | ------------ | -------------------- | ----- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `antigravity` | β€” | Antigravity | OAuth | β€” | β€” | -| `claude` | `cc` | Claude Code | OAuth | β€” | β€” | -| `cline` | `cl` | Cline | OAuth | β€” | β€” | -| `codex` | `cx` | OpenAI Codex | OAuth | β€” | β€” | -| `cursor` | `cu` | Cursor IDE | OAuth | β€” | β€” | -| `devin-cli` | `dv` | Devin CLI (Official) | OAuth | [link](https://cli.devin.ai) | Requires the Devin CLI binary. Run `devin auth login` to authenticate, or provide your WINDSURF_API_KEY. Install: https://cli.devin.ai | -| `github` | `gh` | GitHub Copilot | OAuth | β€” | β€” | -| `gitlab-duo` | `gitlab-duo` | GitLab Duo | OAuth | [link](https://docs.gitlab.com/user/duo_agent_platform/code_suggestions/) | OAuth application with ai_features + read_user scopes. Configure GITLAB_DUO_OAUTH_CLIENT_ID and optionally GITLAB_DUO_OAUTH_CLIENT_SECRET on this OmniRoute instance. | -| `kilocode` | `kc` | Kilo Code | OAuth | β€” | β€” | -| `kimi-coding` | `kmc` | Kimi Coding | OAuth | β€” | β€” | -| `windsurf` | `ws` | Windsurf (Devin CLI) | OAuth | [link](https://windsurf.com) | Sign in at windsurf.com to get your token. Visit windsurf.com/show-auth-token after logging in and paste it here, or use the device-code login flow. | +| ID | Alias | Name | Tags | Website | Notes | +|----|-------|------|------|---------|-------| +| `adapta-web` | `adp-web` | Adapta.org (Adapta One Web) | Web cookie | [link](https://agent.adapta.one) | Paste your __client cookie value from .clerk.agent.adapta.one (DevTools β†’ Application β†’ Cookies) | +| `blackbox-web` | `bb-web` | Blackbox Web (Subscription) | Web cookie | [link](https://app.blackbox.ai) | Paste your __Secure-authjs.session-token value or full cookie header from app.blackbox.ai | +| `chatgpt-web` | `cgpt-web` | ChatGPT Web (Plus/Pro) | Web cookie | [link](https://chatgpt.com) | Paste your __Secure-next-auth.session-token cookie value from chatgpt.com | +| `claude-web` | `cw` | Claude Web | Web cookie | [link](https://claude.ai) | Paste your session cookie from claude.ai | +| `copilot-web` | `copilot` | Microsoft Copilot Web | Web cookie | [link](https://copilot.microsoft.com) | Paste your access_token from copilot.microsoft.com (or export a .har file from DevTools while logged in) | +| `deepseek-web` | `ds-web` | DeepSeek Web | Web cookie | [link](https://chat.deepseek.com) | Paste your userToken from chat.deepseek.com β€” DevTools β†’ Application β†’ Local Storage β†’ userToken | +| `doubao-web` | `db` | Doubao Web (ByteDance) | Web cookie | [link](https://www.doubao.com) | Paste your session cookie from doubao.com (DevTools β†’ Application β†’ Cookies) | +| `gemini-web` | `gweb` | Gemini Web (Free) | Web cookie | [link](https://gemini.google.com) | Paste your __Secure-1PSID cookie value from gemini.google.com. Optionally add __Secure-1PSIDTS separated by semicolon. | +| `grok-web` | `gw` | Grok Web (Subscription) | Web cookie | [link](https://grok.com) | Paste the full grok.com cookie line from DevTools β†’ Application β†’ Cookies. Include both `sso` and `sso-rw` (e.g. `sso=...; sso-rw=...`) β€” Grok's anti-bot rejects `sso` on its own. | +| `huggingchat` | `huggingchat` | HuggingChat (Free) | Web cookie | [link](https://huggingface.co/chat) | Paste your hf-chat cookie value from huggingface.co/chat (DevTools β†’ Application β†’ Cookies β†’ hf-chat). Optional β€” works without auth for basic use. | +| `inner-ai` | `in-ai` | Inner.ai (Subscription) | Web cookie | [link](https://app.innerai.com) | Paste your token cookie and email separated by a space: open DevTools β†’ Application β†’ Cookies β†’ .innerai.com, copy the token value, then append a space and your Inner.ai login email. Example: eyJhbG... user@example.com | +| `kimi-web` | `kimi-web` | Kimi Web (Moonshot AI) | Web cookie | [link](https://kimi.moonshot.cn) | Paste your session cookie from kimi.moonshot.cn (DevTools β†’ Application β†’ Cookies) | +| `muse-spark-web` | `ms-web` | Muse Spark Web (Meta AI) | Web cookie | [link](https://www.meta.ai) | Paste your abra_sess value or full cookie header from meta.ai | +| `perplexity-web` | `pplx-web` | Perplexity Web (Pro/Max) | Web cookie | [link](https://www.perplexity.ai) | Paste your __Secure-next-auth.session-token cookie value from perplexity.ai | +| `phind` | `ph` | Phind (Free) | Web cookie | [link](https://www.phind.com) | Paste your session cookie from phind.com (DevTools β†’ Application β†’ Cookies). Optional β€” works with free tier. | +| `poe-web` | `poe` | Poe Web (Subscription) | Web cookie | [link](https://poe.com) | Paste your p-b cookie value from poe.com (DevTools β†’ Application β†’ Cookies β†’ p-b) | +| `qwen-web` | `qwen-web` | Qwen Web (Free) | Web cookie | [link](https://chat.qwen.ai) | Open chat.qwen.ai, log in, then open DevTools β†’ Application β†’ Local Storage β†’ copy the "token" value (or use tongyi_sso_ticket cookie as Bearer token). | +| `t3-web` | `t3chat` | t3.chat (Pro/Free) | Web cookie | [link](https://t3.chat) | Open t3.chat in your browser, log in, then open DevTools β†’ Application β†’ Local Storage β†’ https://t3.chat. Copy the value of 'convex-session-id'. Also open DevTools β†’ Network, copy the Cookie header from any request. Paste both values here. See provider setup docs for a step-by-step guide. | +| `v0-vercel-web` | `v0` | v0 Vercel Web (Code Gen) | Web cookie | [link](https://v0.dev) | Paste your session cookie from v0.dev (DevTools β†’ Application β†’ Cookies) | +| `venice-web` | `ven` | Venice Web (Privacy) | Web cookie | [link](https://venice.ai) | Paste your session cookie from venice.ai (DevTools β†’ Application β†’ Cookies) | -## Web Cookie Providers (7) +## API Key Providers (paid / paid-with-free-credits) (152) -| ID | Alias | Name | Tags | Website | Notes | -| ---------------- | ---------- | --------------------------- | ---------- | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `blackbox-web` | `bb-web` | Blackbox Web (Subscription) | Web cookie | [link](https://app.blackbox.ai) | Paste your \_\_Secure-authjs.session-token value or full cookie header from app.blackbox.ai | -| `chatgpt-web` | `cgpt-web` | ChatGPT Web (Plus/Pro) | Web cookie | [link](https://chatgpt.com) | Paste your \_\_Secure-next-auth.session-token cookie value from chatgpt.com | -| `deepseek-web` | `ds-web` | DeepSeek Web | Web cookie | [link](https://chat.deepseek.com) | Paste your ds_session_id cookie from chat.deepseek.com | -| `grok-web` | `gw` | Grok Web (Subscription) | Web cookie | [link](https://grok.com) | Paste your sso= cookie value from grok.com | -| `muse-spark-web` | `ms-web` | Muse Spark Web (Meta AI) | Web cookie | [link](https://www.meta.ai) | Paste your abra_sess value or full cookie header from meta.ai | -| `perplexity-web` | `pplx-web` | Perplexity Web (Pro/Max) | Web cookie | [link](https://www.perplexity.ai) | Paste your \_\_Secure-next-auth.session-token cookie value from perplexity.ai | -| `t3-web` | `t3chat` | t3.chat (Pro/Free) | Web cookie | [link](https://t3.chat) | Pro: $8/mo, 50+ models. Free tier: limited models. Requires Cookie header + convex-session-id from DevTools. **Skeleton β€” endpoint URL not yet confirmed (TODO post-devtools-capture).** | +| ID | Alias | Name | Tags | Website | Notes | +|----|-------|------|------|---------|-------| +| `360ai` | `360ai` | 360 AI | API key | [link](https://ai.360.cn) | Get API key at ai.360.cn | +| `agentrouter` | `agentrouter` | AgentRouter | API key, aggregator | [link](https://agentrouter.org) | $200 free credits on signup - multi-model routing gateway | +| `ai21` | `ai21` | AI21 Labs | API key | [link](https://www.ai21.com) | $10 trial credits on signup (valid 3 months), no credit card required | +| `aimlapi` | `aiml` | AI/ML API | API key, aggregator | [link](https://aimlapi.com) | $0.025/day free credits β€” 200+ models (GPT-4o, Claude, Gemini, Llama) via single endpoint | +| `alibaba` | `ali` | Alibaba | API key | [link](https://dashscope-intl.aliyuncs.com) | β€” | +| `alibaba-cn` | `ali-cn` | Alibaba (China) | API key | [link](https://dashscope.aliyuncs.com) | β€” | +| `anthropic` | `anthropic` | Anthropic | API key | [link](https://platform.claude.com) | β€” | +| `api-airforce` | `af` | Api.airforce | API key | [link](https://api.airforce) | 55 free tier models including Grok-3, Claude 3.7, Qwen3, Kimi-K2, Gemini 2.5 Flash, DeepSeek-V3 | +| `arcee-ai` | `arcee` | Arcee AI | API key | [link](https://arcee.ai) | Get API key at arcee.ai | +| `azure-ai` | `azure-ai` | Azure AI Foundry | API key, enterprise | [link](https://learn.microsoft.com/azure/ai-foundry) | Use your Azure AI Foundry key. Base URL can be https://.services.ai.azure.com/openai/v1/ or https://.openai.azure.com/openai/v1/. | +| `azure-openai` | `azure` | Azure OpenAI | API key, enterprise | [link](https://azure.microsoft.com/products/ai-services/openai-service) | Use your Azure OpenAI API key. Base URL should be your resource endpoint, for example https://my-resource.openai.azure.com. | +| `baichuan` | `baichuan` | Baichuan | API key | [link](https://baichuan.com) | Get API key at platform.baichuan-ai.com | +| `baidu` | `baidu` | Baidu (ERNIE) | API key | [link](https://yiyan.baidu.com) | Get API key at console.bce.baidu.com | +| `bailian-coding-plan` | `bcp` | Alibaba Coding Plan | API key | [link](https://www.alibabacloud.com/help/en/model-studio/coding-plan) | β€” | +| `baseten` | `baseten` | Baseten | API key | [link](https://baseten.co) | $30 free trial credits for GPU inference | +| `bazaarlink` | `bzl` | BazaarLink | API key | [link](https://bazaarlink.ai) | Free tier with auto:free routing β€” zero-cost inference, no credit card required | +| `bedrock` | `bedrock` | Amazon Bedrock | API key, enterprise | [link](https://aws.amazon.com/bedrock) | Use your Amazon Bedrock API key and configure the AWS region where your models are enabled (for example eu-west-2). OmniRoute calls Bedrock's native Converse API directly. | +| `black-forest-labs` | `bfl` | Black Forest Labs | API key, image | [link](https://blackforestlabs.ai) | β€” | +| `blackbox` | `bb` | Blackbox AI | API key | [link](https://blackbox.ai) | Free tier: unlimited basic chat plus Minimax-M2.5, no credit card required | +| `bluesminds` | `bm` | BluesMinds | API key | [link](https://www.bluesminds.com) | Free daily pi credits β€” supports 200+ models including GPT-4o, GPT-4.1, Claude Sonnet 4.5, Gemini 2.0 Flash, DeepSeek V4, Qwen, Kimi K2 | +| `byteplus` | `bpm` | BytePlus ModelArk | API key | [link](https://console.byteplus.com/ark) | β€” | +| `bytez` | `bytez` | Bytez | API key | [link](https://bytez.com) | $1 free credits, refreshes every 4 weeks | +| `cablyai` | `cablyai` | CablyAI | API key, aggregator | [link](https://cablyai.com) | Bearer API key for the CablyAI OpenAI-compatible gateway. | +| `cerebras` | `cerebras` | Cerebras | API key | [link](https://inference.cerebras.ai) | Free Trial: 1M tokens/day, 30K TPM, 5 RPM β€” no credit card. | +| `chutes` | `chutes` | Chutes.ai | API key, aggregator | [link](https://chutes.ai) | Bearer API key for the Chutes OpenAI-compatible gateway. | +| `clarifai` | `clarifai` | Clarifai | API key, enterprise | [link](https://docs.clarifai.com) | Use your Clarifai PAT or app-specific API key. OmniRoute targets the OpenAI-compatible endpoint at https://api.clarifai.com/v2/ext/openai/v1 and authenticates with Authorization: Key . | +| `cloudflare-ai` | `cf` | Cloudflare Workers AI | API key | [link](https://developers.cloudflare.com/workers-ai) | Requires API Token AND Account ID (found at dash.cloudflare.com) | +| `codestral` | `codestral` | Codestral | API key | [link](https://mistral.ai) | β€” | +| `cohere` | `cohere` | Cohere | API key | [link](https://cohere.com) | Free Trial: 1,000 API calls/month for testing, no credit card required | +| `command-code` | `cmd` | Command Code | API key | [link](https://commandcode.ai/) | Use a Command Code API key. Requests are sent to Command Code's /alpha/generate endpoint. | +| `completions` | `cpl` | Completions.me | API key | [link](https://completions.me) | Free unlimited access to Claude, GPT, Gemini β€” no credit card, no rate limits | +| `coze` | `coze` | Coze | API key | [link](https://coze.com) | Get API key at coze.com/open/api | +| `crof` | `crof` | CrofAI | API key | [link](https://crof.ai) | β€” | +| `databricks` | `databricks` | Databricks | API key, enterprise | [link](https://www.databricks.com) | β€” | +| `datarobot` | `datarobot` | DataRobot | API key, enterprise | [link](https://docs.datarobot.com) | Use your DataRobot API token. Optional Base URL can be the account root (for LLM Gateway) or a deployment URL under /api/v2/deployments/. | +| `deepinfra` | `deepinfra` | DeepInfra | API key | [link](https://deepinfra.com) | Free signup credits for API testing and model exploration | +| `deepseek` | `ds` | DeepSeek | API key | [link](https://platform.deepseek.com) | 5M free tokens on signup - no credit card required | +| `dify` | `dify` | Dify | API key | [link](https://dify.ai) | Get API key from your Dify instance. | +| `doubao` | `doubao` | Doubao | API key | [link](https://doubao.com) | Get API key at console.volcengine.com | +| `empower` | `empower` | Empower | API key, aggregator | [link](https://docs.empower.dev) | Bearer API key for the Empower OpenAI-compatible endpoint. | +| `fal-ai` | `fal` | Fal.ai | API key, image | [link](https://fal.ai) | β€” | +| `featherless-ai` | `featherless` | Featherless AI | API key | [link](https://featherless.ai) | Free tier available β€” no credit card required | +| `fenayai` | `fenayai` | FenayAI | API key, aggregator | [link](https://fenayai.com) | Bearer API key for the FenayAI OpenAI-compatible gateway. | +| `firecrawl` | `fc` | Firecrawl | API key | [link](https://firecrawl.dev) | β€” | +| `fireworks` | `fireworks` | Fireworks AI | API key | [link](https://fireworks.ai) | $1 free starter credits on signup for API testing | +| `freeaiapikey` | `faik` | FreeAIAPIKey | API key | [link](https://freeaiapikey.com) | β€” | +| `freemodel-dev` | `fmd` | FreeModel.dev | API key | [link](https://freemodel.dev) | $300 free credits on signup β€” no credit card required. Access GPT-5.4 and GPT-5.5 (OpenAI's latest flagship models) through an OpenAI-compatible API. | +| `friendliai` | `friendli` | FriendliAI | API key | [link](https://friendli.ai) | Free tier for serverless inference β€” no credit card required | +| `galadriel` | `galadriel` | Galadriel | API key | [link](https://galadriel.com) | β€” | +| `gemini` | `gemini` | Gemini (Google AI Studio) | API key | [link](https://aistudio.google.com) | Free forever: 1,500 req/day for Gemini 2.5 Flash β€” no credit card, get key at aistudio.google.com | +| `getgoapi` | `ggo` | GoAPI | API key, aggregator | [link](https://api.getgoapi.com) | β€” | +| `gigachat` | `gigachat` | GigaChat (Sber) | API key | [link](https://developers.sber.ru) | β€” | +| `github-models` | `ghm` | GitHub Models | API key | [link](https://github.com/marketplace/models) | Create a GitHub PAT with 'models: read' scope at github.com/settings/tokens | +| `gitlab` | `gitlab` | GitLab Duo PAT | API key | [link](https://docs.gitlab.com/user/duo_agent_platform/code_suggestions/) | GitLab personal access token for the public Code Suggestions API. Configure a self-hosted base URL when not using gitlab.com. | +| `gitlawb` | `glb` | Gitlawb Opengateway (MiMo) | API key | [link](https://opengateway.gitlawb.com) | Free tier available β€” no credit card required | +| `gitlawb-gmi` | `glb-gmi` | Gitlawb Opengateway (GMI Cloud) | API key | [link](https://opengateway.gitlawb.com) | Free tier available β€” no credit card required | +| `glhf` | `glhf` | GLHF Chat | API key, aggregator | [link](https://glhf.chat) | Bearer API key for the GLHF OpenAI-compatible gateway. | +| `glm` | `glm` | GLM Coding | API key | [link](https://z.ai/subscribe) | β€” | +| `glm-cn` | `glmcn` | GLM Coding (China) | API key | [link](https://open.bigmodel.cn) | β€” | +| `glmt` | `glmt` | GLM Thinking | API key | [link](https://open.bigmodel.cn) | β€” | +| `groq` | `groq` | Groq | API key | [link](https://groq.com) | Free tier: 30 RPM / 14.4K RPD β€” no credit card | +| `hackclub` | `hc` | Hackclub AI | API key, aggregator | [link](https://ai.hackclub.com) | Sign in with your Hack Club account at ai.hackclub.com. | +| `haiper` | `hp` | Haiper | API key, video | [link](https://haiper.ai) | Get API key at haiper.ai/haiper-api | +| `heroku` | `heroku` | Heroku AI | API key, enterprise | [link](https://www.heroku.com) | β€” | +| `huggingchat` | `huggingchat` | HuggingChat | API key | [link](https://huggingface.co/chat) | No API key required for basic access. | +| `huggingface` | `hf` | HuggingFace | API key | [link](https://huggingface.co) | Free Inference API for thousands of models (Whisper, VITS, SDXL…) | +| `hyperbolic` | `hyp` | Hyperbolic | API key | [link](https://hyperbolic.xyz) | $1-5 trial credits on signup for serverless inference | +| `ideogram` | `ideo` | Ideogram | API key | [link](https://ideogram.ai) | Get API key at ideogram.ai/docs/api | +| `iflytek` | `iflytek` | iFlytek Spark | API key | [link](https://xinghuo.xfyun.cn) | Get API key at console.xfyun.cn | +| `inclusionai` | `inclusion` | InclusionAI | API key | [link](https://inclusionai.com) | Get API key at inclusionai.com | +| `inference-net` | `inet` | Inference.net | API key | [link](https://inference.net) | $25 free credits on signup plus research grants available | +| `jina-ai` | `jina` | Jina AI | API key, embed/rerank | [link](https://jina.ai) | Bearer API key for the Jina AI rerank API. | +| `jina-reader` | `jr` | Jina Reader | API key | [link](https://jina.ai/reader) | β€” | +| `kie` | `kie` | KIE.AI | API key | [link](https://kie.ai) | β€” | +| `kilo-gateway` | `kg` | Kilo Gateway | API key, aggregator | [link](https://kilo.ai) | β€” | +| `kimi` | `kimi` | Kimi | API key | [link](https://platform.moonshot.ai) | β€” | +| `kimi-coding-apikey` | `kmca` | Kimi Coding (API Key) | API key | [link](https://www.kimi.com/code) | β€” | +| `kluster` | `kluster` | Kluster AI | API key | [link](https://kluster.ai) | $5 free credits on signup - DeepSeek R1, Llama 4 Maverick/Scout, Qwen3 235B | +| `lambda-ai` | `lambda` | Lambda AI | API key | [link](https://lambda.ai) | β€” | +| `laozhang` | `lz` | LaoZhang AI | API key, aggregator | [link](https://api.laozhang.ai) | β€” | +| `leonardo` | `leo` | Leonardo AI | API key, video | [link](https://leonardo.ai) | Get API key at leonardo.ai/developer | +| `liquid` | `liquid` | Liquid AI | API key | [link](https://liquid.ai) | Get API key at liquid.ai | +| `llamagate` | `llamagate` | LlamaGate | API key | [link](https://llamagate.ai) | β€” | +| `llm7` | `llm7` | LLM7.io | API key | [link](https://llm7.io) | No signup required - 2 req/s, 20 RPM, 100 req/hr free tier | +| `longcat` | `lc` | LongCat AI | API key | [link](https://longcat.chat/platform/docs) | Free: 5M tokens/day on LongCat-2.0-Preview (Flash models retired 2026-05-29); up to 120M/day via feedback. | +| `maritalk` | `maritalk` | Maritalk | API key | [link](https://www.maritaca.ai) | β€” | +| `meta-llama` | `meta` | Meta Llama API | API key | [link](https://llama.developer.meta.com) | β€” | +| `minimax` | `minimax` | Minimax Coding | API key, video | [link](https://www.minimax.io) | β€” | +| `minimax-cn` | `minimax-cn` | Minimax (China) | API key | [link](https://www.minimaxi.com) | β€” | +| `mistral` | `mistral` | Mistral | API key | [link](https://mistral.ai) | Free Experiment tier: rate-limited access to all models, no credit card required | +| `modal` | `mdl` | Modal | API key, enterprise | [link](https://modal.com/docs) | Use the bearer token that protects your Modal deployment, if enabled. Base URL should point to your OpenAI-compatible Modal app, for example https://--.modal.run/v1. | +| `monsterapi` | `monster` | MonsterAPI | API key | [link](https://monsterapi.ai) | Get API key at monsterapi.ai | +| `moonshot` | `moonshot` | Moonshot AI | API key | [link](https://platform.moonshot.ai) | β€” | +| `morph` | `morph` | Morph | API key | [link](https://morphllm.com) | Free tier: 250K credits/month, $0 | +| `nanogpt` | `nanogpt` | NanoGPT | API key | [link](https://nano-gpt.com) | β€” | +| `nebius` | `nebius` | Nebius AI | API key | [link](https://nebius.com) | ~$1 trial credits on signup for API testing | +| `nlpcloud` | `nlpc` | NLP Cloud | API key | [link](https://docs.nlpcloud.com) | Use your NLP Cloud API key in Authorization: Token . OmniRoute targets the chatbot endpoint on https://api.nlpcloud.io/v1/gpu//chatbot by default. | +| `nomic` | `nomic` | Nomic | API key | [link](https://nomic.ai) | Get API key at atlas.nomic.ai | +| `nous-research` | `nous` | Nous Research | API key | [link](https://portal.nousresearch.com/help) | Use your Nous Portal API key. OmniRoute targets the official OpenAI-compatible inference endpoint at https://inference-api.nousresearch.com/v1. | +| `novita` | `novita` | Novita AI | API key, aggregator | [link](https://novita.ai) | $0.50 trial credits on signup (valid about 1 year) | +| `nscale` | `nscale` | nScale | API key | [link](https://nscale.com) | $5 free credits on signup for inference testing | +| `nvidia` | `nvidia` | NVIDIA NIM | API key | [link](https://build.nvidia.com) | Free dev access: ~40 RPM, 70+ models (Kimi K2.5, GLM 4.7, DeepSeek V3.2...) | +| `oci` | `oci` | OCI Generative AI | API key, enterprise | [link](https://www.oracle.com/artificial-intelligence/generative-ai) | Use your OCI Generative AI API key or IAM bearer token. Base URL can be https://inference.generativeai..oci.oraclecloud.com/openai/v1/. | +| `ollama-cloud` | `ollamacloud` | Ollama Cloud | API key | [link](https://ollama.com/settings/api-keys) | β€” | +| `openai` | `openai` | OpenAI | API key | [link](https://platform.openai.com) | β€” | +| `opencode-go` | `opencode-go` | OpenCode Go | API key | [link](https://opencode.ai/go) | β€” | +| `opencode-zen` | `opencode-zen` | OpenCode Zen | API key | [link](https://opencode.ai/zen) | β€” | +| `openrouter` | `openrouter` | OpenRouter | API key, aggregator | [link](https://openrouter.ai) | Free models at $0/token with :free suffix - 20 RPM / 200 RPD | +| `ovhcloud` | `ovh` | OVHcloud AI | API key | [link](https://www.ovhcloud.com) | β€” | +| `perplexity` | `pplx` | Perplexity | API key | [link](https://www.perplexity.ai) | β€” | +| `phind` | `phind` | Phind | API key | [link](https://phind.com) | Get API key at phind.com | +| `piapi` | `pi` | PiAPI | API key, aggregator | [link](https://piapi.ai) | β€” | +| `poe` | `poe` | Poe | API key, aggregator | [link](https://creator.poe.com/api-reference) | Bearer API key for the Poe OpenAI-compatible API. | +| `pollinations` | `pol` | Pollinations AI | API key, video | [link](https://pollinations.ai) | No API key required for free public endpoint. Optional Spore tier: ~0.01 pollen/hour. | +| `predibase` | `predibase` | Predibase | API key | [link](https://predibase.com) | $25 free trial credits (30-day validity) | +| `publicai` | `publicai` | PublicAI | API key | [link](https://publicai.co) | Free community inference tier for testing | +| `puter` | `pu` | Puter AI | API key | [link](https://puter.com) | Get token at puter.com/dashboard β†’ Copy Auth Token | +| `qianfan` | `qianfan` | Baidu Qianfan | API key | [link](https://cloud.baidu.com/product/wenxinworkshop) | β€” | +| `recraft` | `recraft` | Recraft | API key, image | [link](https://recraft.ai) | β€” | +| `reka` | `reka` | Reka | API key | [link](https://docs.reka.ai/chat/overview) | Use your Reka API key. OmniRoute supports the OpenAI-compatible base URL https://api.reka.ai/v1 and sends both Authorization and X-Api-Key headers for compatibility. | +| `runwayml` | `runway` | Runway | API key, video | [link](https://docs.dev.runwayml.com) | Use your Runway API key in Authorization: Bearer . OmniRoute targets the current Runway API at https://api.dev.runwayml.com/v1 and sends the required X-Runway-Version header automatically. | +| `sambanova` | `samba` | SambaNova | API key | [link](https://sambanova.ai) | $5 free credits on signup (30-day validity), no credit card required | +| `sap` | `sap` | SAP Generative AI Hub | API key, enterprise | [link](https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/generative-ai-hub-in-sap-ai-core) | Use your SAP AI Core bearer token. Base URL can be your AI_API_URL root or a deploymentUrl from Generative AI Hub. | +| `scaleway` | `scw` | Scaleway AI | API key | [link](https://www.scaleway.com/en/ai/generative-apis) | 1M free tokens for new accounts β€” EU/GDPR compliant (Paris), Qwen3 235B & Llama 70B | +| `sensenova` | `sensenova` | SenseNova | API key | [link](https://platform.sensenova.cn) | Get API key at platform.sensenova.cn | +| `siliconflow` | `siliconflow` | SiliconFlow | API key | [link](https://cloud.siliconflow.com) | $1 free credits plus permanently free models after identity verification | +| `snowflake` | `snowflake` | Snowflake Cortex | API key, enterprise | [link](https://www.snowflake.com) | β€” | +| `sparkdesk` | `sparkdesk` | SparkDesk | API key | [link](https://xinghuo.xfyun.cn) | Get API key at console.xfyun.cn | +| `stability-ai` | `stability` | Stability AI | API key, image | [link](https://stability.ai) | β€” | +| `stepfun` | `stepfun` | StepFun | API key | [link](https://stepfun.com) | Get API key at platform.stepfun.com | +| `suno` | `suno` | Suno | API key | [link](https://suno.ai) | Paste session cookie from suno.ai (Clerk auth) | +| `synthetic` | `synthetic` | Synthetic | API key, aggregator | [link](https://synthetic.new) | β€” | +| `tencent` | `tencent` | Tencent Hunyuan | API key | [link](https://hunyuan.tencent.com) | Get API key at console.cloud.tencent.com | +| `thebai` | `thebai` | TheB.AI | API key, aggregator | [link](https://theb.ai) | Bearer API key for the TheB.AI OpenAI-compatible gateway. | +| `together` | `together` | Together AI | API key, video | [link](https://www.together.ai) | $25 signup credits + 3 permanently free models: Llama 3.3 70B, Vision, DeepSeek-R1 distill | +| `topaz` | `topaz` | Topaz | API key, image | [link](https://topazlabs.com) | β€” | +| `udio` | `udio` | Udio | API key | [link](https://udio.com) | Paste session cookie from udio.com (Supabase auth) | +| `uncloseai` | `unc` | UncloseAI | API key | [link](https://uncloseai.com) | No auth required. API accepts any non-empty string as key for identification. | +| `upstage` | `upstage` | Upstage | API key | [link](https://www.upstage.ai) | β€” | +| `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. | +| `volcengine` | `volcengine` | Volcengine | API key | [link](https://www.volcengine.com) | β€” | +| `voyage-ai` | `voyage` | Voyage AI | API key, embed/rerank | [link](https://www.voyageai.com) | Bearer API key for Voyage AI embeddings and rerank APIs. | +| `wandb` | `wandb` | Weights & Biases Inference | API key | [link](https://wandb.ai) | β€” | +| `watsonx` | `watsonx` | IBM watsonx.ai Gateway | API key, enterprise | [link](https://www.ibm.com/products/watsonx-ai) | Use your watsonx bearer token. Base URL can be https://.ml.cloud.ibm.com/ml/gateway/v1/ or a self-managed /ml/gateway/v1 endpoint. | +| `xai` | `xai` | xAI (Grok) | API key | [link](https://x.ai) | β€” | +| `xiaomi-mimo` | `mimo` | Xiaomi MiMo | API key | [link](https://mimo.mi.com) | β€” | +| `yi` | `yi` | Yi (01.AI) | API key | [link](https://01.ai) | Get API key at platform.lingyiwanwu.com | +| `zai` | `zai` | Z.AI | API key | [link](https://open.bigmodel.cn) | β€” | -## API Key Providers (paid / paid-with-free-credits) (122) +## Local Providers (11) -| ID | Alias | Name | Tags | Website | Notes | -| --------------------- | -------------- | -------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `agentrouter` | `agentrouter` | AgentRouter | API key, aggregator | [link](https://agentrouter.org) | $200 free credits on signup - multi-model routing gateway | -| `ai21` | `ai21` | AI21 Labs | API key | [link](https://www.ai21.com) | $10 trial credits on signup (valid 3 months), no credit card required | -| `aimlapi` | `aiml` | AI/ML API | API key, aggregator | [link](https://aimlapi.com) | $0.025/day free credits β€” 200+ models (GPT-4o, Claude, Gemini, Llama) via single endpoint | -| `alibaba` | `ali` | Alibaba | API key | [link](https://dashscope-intl.aliyuncs.com) | β€” | -| `alibaba-cn` | `ali-cn` | Alibaba (China) | API key | [link](https://dashscope.aliyuncs.com) | β€” | -| `anthropic` | `anthropic` | Anthropic | API key | [link](https://platform.claude.com) | β€” | -| `azure-ai` | `azure-ai` | Azure AI Foundry | API key, enterprise | [link](https://learn.microsoft.com/azure/ai-foundry) | Use your Azure AI Foundry key. Base URL can be https://.services.ai.azure.com/openai/v1/ or https://.openai.azure.com/openai/v1/. | -| `azure-openai` | `azure` | Azure OpenAI | API key, enterprise | [link](https://azure.microsoft.com/products/ai-services/openai-service) | Use your Azure OpenAI API key. Base URL should be your resource endpoint, for example https://my-resource.openai.azure.com. | -| `bailian-coding-plan` | `bcp` | Alibaba Coding Plan | API key | [link](https://www.alibabacloud.com/help/en/model-studio/coding-plan) | β€” | -| `baseten` | `baseten` | Baseten | API key | [link](https://baseten.co) | $30 free trial credits for GPU inference | -| `bazaarlink` | `bzl` | BazaarLink | API key | [link](https://bazaarlink.ai) | Free tier with auto:free routing β€” zero-cost inference, no credit card required | -| `bedrock` | `bedrock` | Amazon Bedrock | API key, enterprise | [link](https://aws.amazon.com/bedrock) | Use your Amazon Bedrock API key in Authorization: Bearer . OmniRoute defaults to the OpenAI-compatible bedrock-mantle endpoint in us-east-1; set a regional base URL if your account uses another region or the bedrock-runtime /openai/v1 path. | -| `black-forest-labs` | `bfl` | Black Forest Labs | API key, image | [link](https://blackforestlabs.ai) | β€” | -| `blackbox` | `bb` | Blackbox AI | API key | [link](https://blackbox.ai) | Free tier: unlimited basic chat plus Minimax-M2.5, no credit card required | -| `bytez` | `bytez` | Bytez | API key | [link](https://bytez.com) | $1 free credits, refreshes every 4 weeks | -| `cablyai` | `cablyai` | CablyAI | API key, aggregator | [link](https://cablyai.com) | Bearer API key for the CablyAI OpenAI-compatible gateway. | -| `cerebras` | `cerebras` | Cerebras | API key | [link](https://inference.cerebras.ai) | Free: 1M tokens/day, 60K TPM β€” world's fastest inference | -| `chutes` | `chutes` | Chutes.ai | API key, aggregator | [link](https://chutes.ai) | Bearer API key for the Chutes OpenAI-compatible gateway. | -| `clarifai` | `clarifai` | Clarifai | API key, enterprise | [link](https://docs.clarifai.com) | Use your Clarifai PAT or app-specific API key. OmniRoute targets the OpenAI-compatible endpoint at https://api.clarifai.com/v2/ext/openai/v1 and authenticates with Authorization: Key . | -| `cloudflare-ai` | `cf` | Cloudflare Workers AI | API key | [link](https://developers.cloudflare.com/workers-ai) | Requires API Token AND Account ID (found at dash.cloudflare.com) | -| `codestral` | `codestral` | Codestral | API key | [link](https://mistral.ai) | β€” | -| `cohere` | `cohere` | Cohere | API key | [link](https://cohere.com) | Free Trial: 1,000 API calls/month for testing, no credit card required | -| `command-code` | `cmd` | Command Code | API key | [link](https://commandcode.ai/) | Use a Command Code API key. Requests are sent to Command Code's /alpha/generate endpoint. | -| `completions` | `cpl` | Completions.me | API key | [link](https://completions.me) | Free unlimited access to Claude, GPT, Gemini β€” no credit card, no rate limits | -| `crof` | `crof` | CrofAI | API key | [link](https://crof.ai) | β€” | -| `databricks` | `databricks` | Databricks | API key, enterprise | [link](https://www.databricks.com) | β€” | -| `datarobot` | `datarobot` | DataRobot | API key, enterprise | [link](https://docs.datarobot.com) | Use your DataRobot API token. Optional Base URL can be the account root (for LLM Gateway) or a deployment URL under /api/v2/deployments/. | -| `deepinfra` | `deepinfra` | DeepInfra | API key | [link](https://deepinfra.com) | Free signup credits for API testing and model exploration | -| `deepseek` | `ds` | DeepSeek | API key | [link](https://platform.deepseek.com) | 5M free tokens on signup - no credit card required | -| `empower` | `empower` | Empower | API key, aggregator | [link](https://docs.empower.dev) | Bearer API key for the Empower OpenAI-compatible endpoint. | -| `enally` | `enly` | Enally AI | API key | [link](https://ai.enally.in) | Free for students and developers β€” no credit card, OTP verification | -| `fal-ai` | `fal` | Fal.ai | API key, image | [link](https://fal.ai) | β€” | -| `featherless-ai` | `featherless` | Featherless AI | API key | [link](https://featherless.ai) | β€” | -| `fenayai` | `fenayai` | FenayAI | API key, aggregator | [link](https://fenayai.com) | Bearer API key for the FenayAI OpenAI-compatible gateway. | -| `fireworks` | `fireworks` | Fireworks AI | API key | [link](https://fireworks.ai) | $1 free starter credits on signup for API testing | -| `freetheai` | `fta` | FreeTheAi | API key | [link](https://freetheai.xyz) | Community-run β€” free forever, no paid tiers, no credit card | -| `friendliai` | `friendli` | FriendliAI | API key | [link](https://friendli.ai) | β€” | -| `galadriel` | `galadriel` | Galadriel | API key | [link](https://galadriel.com) | β€” | -| `gemini` | `gemini` | Gemini (Google AI Studio) | API key | [link](https://aistudio.google.com) | Free forever: 1,500 req/day for Gemini 2.5 Flash β€” no credit card, get key at aistudio.google.com | -| `getgoapi` | `ggo` | GoAPI | API key, aggregator | [link](https://api.getgoapi.com) | β€” | -| `gigachat` | `gigachat` | GigaChat (Sber) | API key | [link](https://developers.sber.ru) | β€” | -| `gitlab` | `gitlab` | GitLab Duo PAT | API key | [link](https://docs.gitlab.com/user/duo_agent_platform/code_suggestions/) | GitLab personal access token for the public Code Suggestions API. Configure a self-hosted base URL when not using gitlab.com. | -| `glhf` | `glhf` | GLHF Chat | API key, aggregator | [link](https://glhf.chat) | Bearer API key for the GLHF OpenAI-compatible gateway. | -| `glm` | `glm` | GLM Coding | API key | [link](https://z.ai/subscribe) | β€” | -| `glm-cn` | `glmcn` | GLM Coding (China) | API key | [link](https://open.bigmodel.cn) | β€” | -| `glmt` | `glmt` | GLM Thinking | API key | [link](https://open.bigmodel.cn) | β€” | -| `groq` | `groq` | Groq | API key | [link](https://groq.com) | Free tier: 30 RPM / 14.4K RPD β€” no credit card | -| `heroku` | `heroku` | Heroku AI | API key, enterprise | [link](https://www.heroku.com) | β€” | -| `huggingface` | `hf` | HuggingFace | API key | [link](https://huggingface.co) | Free Inference API for thousands of models (Whisper, VITS, SDXL…) | -| `hyperbolic` | `hyp` | Hyperbolic | API key | [link](https://hyperbolic.xyz) | $1-5 trial credits on signup for serverless inference | -| `inference-net` | `inet` | Inference.net | API key | [link](https://inference.net) | $25 free credits on signup plus research grants available | -| `jina-ai` | `jina` | Jina AI | API key, embed/rerank | [link](https://jina.ai) | Bearer API key for the Jina AI rerank API. | -| `kie` | `kie` | KIE.AI | API key | [link](https://kie.ai) | β€” | -| `kilo-gateway` | `kg` | Kilo Gateway | API key, aggregator | [link](https://kilo.ai) | β€” | -| `kimi` | `kimi` | Kimi | API key | [link](https://platform.moonshot.ai) | β€” | -| `kimi-coding-apikey` | `kmca` | Kimi Coding (API Key) | API key | [link](https://www.kimi.com/code) | β€” | -| `kluster` | `kluster` | Kluster AI | API key | [link](https://kluster.ai) | $5 free credits on signup - DeepSeek R1, Llama 4 Maverick/Scout, Qwen3 235B | -| `lambda-ai` | `lambda` | Lambda AI | API key | [link](https://lambda.ai) | β€” | -| `laozhang` | `lz` | LaoZhang AI | API key, aggregator | [link](https://api.laozhang.ai) | β€” | -| `lepton` | `lepton` | Lepton AI | API key | [link](https://lepton.ai) | Free tier available - fast inference on custom hardware | -| `llamagate` | `llamagate` | LlamaGate | API key | [link](https://llamagate.ai) | β€” | -| `llm7` | `llm7` | LLM7.io | API key | [link](https://llm7.io) | No signup required - 2 req/s, 20 RPM, 100 req/hr free tier | -| `longcat` | `lc` | LongCat AI | API key | [link](https://longcat.chat/platform/docs) | 50M tokens/day (Flash-Lite) + 500K/day (Chat/Thinking) β€” 100% free while public beta | -| `maritalk` | `maritalk` | Maritalk | API key | [link](https://www.maritaca.ai) | β€” | -| `meta-llama` | `meta` | Meta Llama API | API key | [link](https://llama.developer.meta.com) | β€” | -| `minimax` | `minimax` | Minimax Coding | API key | [link](https://www.minimax.io) | β€” | -| `minimax-cn` | `minimax-cn` | Minimax (China) | API key | [link](https://www.minimaxi.com) | β€” | -| `mistral` | `mistral` | Mistral | API key | [link](https://mistral.ai) | Free Experiment tier: rate-limited access to all models, no credit card required | -| `modal` | `mdl` | Modal | API key, enterprise | [link](https://modal.com/docs) | Use the bearer token that protects your Modal deployment, if enabled. Base URL should point to your OpenAI-compatible Modal app, for example https://--.modal.run/v1. | -| `moonshot` | `moonshot` | Moonshot AI | API key | [link](https://platform.moonshot.ai) | β€” | -| `morph` | `morph` | Morph | API key | [link](https://morphllm.com) | Free tier: 250K credits/month, $0 | -| `nanobanana` | `nb` | NanoBanana | API key, image | [link](https://nanobananaapi.ai) | β€” | -| `nanogpt` | `nanogpt` | NanoGPT | API key | [link](https://nano-gpt.com) | β€” | -| `nebius` | `nebius` | Nebius AI | API key | [link](https://nebius.com) | ~$1 trial credits on signup for API testing | -| `nlpcloud` | `nlpc` | NLP Cloud | API key | [link](https://docs.nlpcloud.com) | Use your NLP Cloud API key in Authorization: Token . OmniRoute targets the chatbot endpoint on https://api.nlpcloud.io/v1/gpu//chatbot by default. | -| `nous-research` | `nous` | Nous Research | API key | [link](https://portal.nousresearch.com/help) | Use your Nous Portal API key. OmniRoute targets the official OpenAI-compatible inference endpoint at https://inference-api.nousresearch.com/v1. | -| `novita` | `novita` | Novita AI | API key, aggregator | [link](https://novita.ai) | $0.50 trial credits on signup (valid about 1 year) | -| `nscale` | `nscale` | nScale | API key | [link](https://nscale.com) | $5 free credits on signup for inference testing | -| `nvidia` | `nvidia` | NVIDIA NIM | API key | [link](https://build.nvidia.com) | Free dev access: ~40 RPM, 70+ models (Kimi K2.5, GLM 4.7, DeepSeek V3.2...) | -| `oci` | `oci` | OCI Generative AI | API key, enterprise | [link](https://www.oracle.com/artificial-intelligence/generative-ai) | Use your OCI Generative AI API key or IAM bearer token. Base URL can be https://inference.generativeai..oci.oraclecloud.com/openai/v1/. | -| `ollama-cloud` | `ollamacloud` | Ollama Cloud | API key | [link](https://ollama.com/settings/api-keys) | β€” | -| `openai` | `openai` | OpenAI | API key | [link](https://platform.openai.com) | β€” | -| `opencode-go` | `opencode-go` | OpenCode Go | API key | [link](https://opencode.ai/go) | β€” | -| `opencode-zen` | `opencode-zen` | OpenCode Zen | API key | [link](https://opencode.ai/zen) | β€” | -| `openrouter` | `openrouter` | OpenRouter | API key, aggregator | [link](https://openrouter.ai) | Free models at $0/token with :free suffix - 20 RPM / 200 RPD | -| `ovhcloud` | `ovh` | OVHcloud AI | API key | [link](https://www.ovhcloud.com) | β€” | -| `perplexity` | `pplx` | Perplexity | API key | [link](https://www.perplexity.ai) | β€” | -| `petals` | `petals` | Petals | API key | [link](https://chat.petals.dev) | No API key is required for the public research endpoint. Leave the field blank, or provide a bearer token if your self-hosted Petals gateway uses auth. | -| `piapi` | `pi` | PiAPI | API key, aggregator | [link](https://piapi.ai) | β€” | -| `poe` | `poe` | Poe | API key, aggregator | [link](https://creator.poe.com/api-reference) | Bearer API key for the Poe OpenAI-compatible API. | -| `pollinations` | `pol` | Pollinations AI | API key | [link](https://pollinations.ai) | No API key required for free public endpoint. Optional Spore tier: ~0.01 pollen/hour. | -| `predibase` | `predibase` | Predibase | API key | [link](https://predibase.com) | $25 free trial credits (30-day validity) | -| `publicai` | `publicai` | PublicAI | API key | [link](https://publicai.co) | Free community inference tier for testing | -| `puter` | `pu` | Puter AI | API key | [link](https://puter.com) | Get token at puter.com/dashboard β†’ Copy Auth Token | -| `qianfan` | `qianfan` | Baidu Qianfan | API key | [link](https://cloud.baidu.com/product/wenxinworkshop) | β€” | -| `recraft` | `recraft` | Recraft | API key, image | [link](https://recraft.ai) | β€” | -| `reka` | `reka` | Reka | API key | [link](https://docs.reka.ai/chat/overview) | Use your Reka API key. OmniRoute supports the OpenAI-compatible base URL https://api.reka.ai/v1 and sends both Authorization and X-Api-Key headers for compatibility. | -| `runwayml` | `runway` | Runway | API key, video | [link](https://docs.dev.runwayml.com) | Use your Runway API key in Authorization: Bearer . OmniRoute targets the current Runway API at https://api.dev.runwayml.com/v1 and sends the required X-Runway-Version header automatically. | -| `sambanova` | `samba` | SambaNova | API key | [link](https://sambanova.ai) | $5 free credits on signup (30-day validity), no credit card required | -| `sap` | `sap` | SAP Generative AI Hub | API key, enterprise | [link](https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/generative-ai-hub-in-sap-ai-core) | Use your SAP AI Core bearer token. Base URL can be your AI_API_URL root or a deploymentUrl from Generative AI Hub. | -| `scaleway` | `scw` | Scaleway AI | API key | [link](https://www.scaleway.com/en/ai/generative-apis) | 1M free tokens for new accounts β€” EU/GDPR compliant (Paris), Qwen3 235B & Llama 70B | -| `siliconflow` | `siliconflow` | SiliconFlow | API key | [link](https://cloud.siliconflow.com) | $1 free credits plus permanently free models after identity verification | -| `snowflake` | `snowflake` | Snowflake Cortex | API key, enterprise | [link](https://www.snowflake.com) | β€” | -| `stability-ai` | `stability` | Stability AI | API key, image | [link](https://stability.ai) | β€” | -| `synthetic` | `synthetic` | Synthetic | API key, aggregator | [link](https://synthetic.new) | β€” | -| `thebai` | `thebai` | TheB.AI | API key, aggregator | [link](https://theb.ai) | Bearer API key for the TheB.AI OpenAI-compatible gateway. | -| `together` | `together` | Together AI | API key | [link](https://www.together.ai) | $25 signup credits + 3 permanently free models: Llama 3.3 70B, Vision, DeepSeek-R1 distill | -| `topaz` | `topaz` | Topaz | API key, image | [link](https://topazlabs.com) | β€” | -| `uncloseai` | `unc` | UncloseAI | API key | [link](https://uncloseai.com) | No auth required. API accepts any non-empty string as key for identification. | -| `upstage` | `upstage` | Upstage | API key | [link](https://www.upstage.ai) | β€” | -| `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. | -| `volcengine` | `volcengine` | Volcengine | API key | [link](https://www.volcengine.com) | β€” | -| `voyage-ai` | `voyage` | Voyage AI | API key, embed/rerank | [link](https://www.voyageai.com) | Bearer API key for Voyage AI embeddings and rerank APIs. | -| `wandb` | `wandb` | Weights & Biases Inference | API key | [link](https://wandb.ai) | β€” | -| `watsonx` | `watsonx` | IBM watsonx.ai Gateway | API key, enterprise | [link](https://www.ibm.com/products/watsonx-ai) | Use your watsonx bearer token. Base URL can be https://.ml.cloud.ibm.com/ml/gateway/v1/ or a self-managed /ml/gateway/v1 endpoint. | -| `xai` | `xai` | xAI (Grok) | API key | [link](https://x.ai) | β€” | -| `xiaomi-mimo` | `mimo` | Xiaomi MiMo | API key | [link](https://mimo.mi.com) | β€” | -| `zai` | `zai` | Z.AI | API key | [link](https://open.bigmodel.cn) | β€” | - -## Local Providers (10) - -| ID | Alias | Name | Tags | Website | Notes | -| --------------------- | ------------ | ------------------- | ------------------ | --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `comfyui` | `comfyui` | ComfyUI | Local | [link](https://github.com/comfyanonymous/ComfyUI) | No API key required. Configure the local ComfyUI base URL (default: http://localhost:8188). | -| `docker-model-runner` | `dmr` | Docker Model Runner | Local, self-hosted | [link](https://docs.docker.com/ai/model-runner/) | API key optional. Configure the local Docker Model Runner OpenAI-compatible base URL (default: http://localhost:12434/v1). | -| `lemonade` | `lemonade` | Lemonade Server | Local, self-hosted | [link](https://lemonade-server.ai) | API key optional. Configure the local Lemonade OpenAI-compatible base URL (default: http://localhost:13305/api/v1). | -| `llamafile` | `llamafile` | Llamafile | Local, self-hosted | [link](https://github.com/Mozilla-Ocho/llamafile) | API key optional. Configure the local Llamafile OpenAI-compatible base URL (default: http://127.0.0.1:8080/v1). | -| `lm-studio` | `lmstudio` | LM Studio | Local, self-hosted | [link](https://lmstudio.ai) | API key optional. Configure the local LM Studio OpenAI-compatible base URL (default: http://localhost:1234/v1). | -| `oobabooga` | `ooba` | oobabooga | Local, self-hosted | [link](https://github.com/oobabooga/text-generation-webui) | API key optional. Configure the local oobabooga OpenAI-compatible base URL (default: http://localhost:5000/v1). | -| `sdwebui` | `sdwebui` | SD WebUI | Local | [link](https://github.com/AUTOMATIC1111/stable-diffusion-webui) | No API key required. Configure the local WebUI base URL (default: http://localhost:7860). | -| `triton` | `triton` | NVIDIA Triton | Local, self-hosted | [link](https://developer.nvidia.com/triton-inference-server) | API key optional. Configure the Triton OpenAI-compatible base URL (default: http://localhost:8000/v1). | -| `vllm` | `vllm` | vLLM | Local, self-hosted | [link](https://github.com/vllm-project/vllm) | API key optional. Configure the local vLLM OpenAI-compatible base URL (default: http://localhost:8000/v1). | -| `xinference` | `xinference` | XInference | Local, self-hosted | [link](https://inference.readthedocs.io) | API key optional. Configure the local XInference OpenAI-compatible base URL (default: http://localhost:9997/v1). | +| ID | Alias | Name | Tags | Website | Notes | +|----|-------|------|------|---------|-------| +| `comfyui` | `comfyui` | ComfyUI | Local | [link](https://github.com/comfyanonymous/ComfyUI) | No API key required. Configure the local ComfyUI base URL (default: http://localhost:8188). | +| `docker-model-runner` | `dmr` | Docker Model Runner | Local, self-hosted | [link](https://docs.docker.com/ai/model-runner/) | API key optional. Configure the local Docker Model Runner OpenAI-compatible base URL (default: http://localhost:12434/v1). | +| `lemonade` | `lemonade` | Lemonade Server | Local, self-hosted | [link](https://lemonade-server.ai) | API key optional. Configure the local Lemonade OpenAI-compatible base URL (default: http://localhost:13305/api/v1). | +| `llama-cpp` | `llamacpp` | llama.cpp | Local, self-hosted | [link](https://github.com/ggml-org/llama.cpp) | API key optional (use any value, e.g. sk-no-key-required). Configure the llama-server OpenAI-compatible base URL (default: http://127.0.0.1:8080/v1). Note: if Llamafile is also installed, both default to port 8080 β€” run only one at a time or override the port. | +| `llamafile` | `llamafile` | Llamafile | Local, self-hosted | [link](https://github.com/Mozilla-Ocho/llamafile) | API key optional. Configure the local Llamafile OpenAI-compatible base URL (default: http://127.0.0.1:8080/v1). | +| `lm-studio` | `lmstudio` | LM Studio | Local, self-hosted | [link](https://lmstudio.ai) | API key optional. Configure the local LM Studio OpenAI-compatible base URL (default: http://localhost:1234/v1). | +| `oobabooga` | `ooba` | oobabooga | Local, self-hosted | [link](https://github.com/oobabooga/text-generation-webui) | API key optional. Configure the local oobabooga OpenAI-compatible base URL (default: http://localhost:5000/v1). | +| `sdwebui` | `sdwebui` | SD WebUI | Local | [link](https://github.com/AUTOMATIC1111/stable-diffusion-webui) | No API key required. Configure the local WebUI base URL (default: http://localhost:7860). | +| `triton` | `triton` | NVIDIA Triton | Local, self-hosted | [link](https://developer.nvidia.com/triton-inference-server) | API key optional. Configure the Triton OpenAI-compatible base URL (default: http://localhost:8000/v1). | +| `vllm` | `vllm` | vLLM | Local, self-hosted | [link](https://github.com/vllm-project/vllm) | API key optional. Configure the local vLLM OpenAI-compatible base URL (default: http://localhost:8000/v1). | +| `xinference` | `xinference` | XInference | Local, self-hosted | [link](https://inference.readthedocs.io) | API key optional. Configure the local XInference OpenAI-compatible base URL (default: http://localhost:9997/v1). | ## Search Providers (11) -| ID | Alias | Name | Tags | Website | Notes | -| ------------------- | --------------- | -------------------------- | ------ | --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `brave-search` | `brave-search` | Brave Search | Search | [link](https://brave.com/search/api) | Subscription token from Brave Search API dashboard | -| `exa-search` | `exa-search` | Exa Search | Search | [link](https://exa.ai) | API key from dashboard.exa.ai | -| `google-pse-search` | `google-pse` | Google Programmable Search | Search | [link](https://developers.google.com/custom-search/v1/overview) | Requires a Google API key and your Programmable Search Engine ID (cx) | -| `linkup-search` | `linkup` | Linkup Search | Search | [link](https://docs.linkup.so) | Bearer API key from the Linkup dashboard | -| `ollama-search` | `ollama-search` | Ollama Search | Search | [link](https://ollama.com/settings/api-keys) | Same API key as Ollama Cloud (from ollama.com/settings/api-keys) | -| `perplexity-search` | `pplx-search` | Perplexity Search | Search | [link](https://docs.perplexity.ai/guides/search-quickstart) | Same API key as Perplexity (pplx-...) | -| `searchapi-search` | `searchapi` | SearchAPI | Search | [link](https://www.searchapi.io/docs) | API key from SearchAPI (query param or Bearer auth) | -| `searxng-search` | `searxng` | SearXNG Search | Search | [link](https://docs.searxng.org) | API key is optional. Set your SearXNG base URL. Some instances may require a bearer token for access. | -| `serper-search` | `serper-search` | Serper Search | Search | [link](https://serper.dev) | API key from serper.dev dashboard | -| `tavily-search` | `tavily-search` | Tavily Search | Search | [link](https://tavily.com) | API key from app.tavily.com (format: tvly-...) | -| `youcom-search` | `youcom-search` | You.com Search | Search | [link](https://you.com/docs/search/overview) | X-API-Key from the You.com platform dashboard | +| ID | Alias | Name | Tags | Website | Notes | +|----|-------|------|------|---------|-------| +| `brave-search` | `brave-search` | Brave Search | Search | [link](https://brave.com/search/api) | Subscription token from Brave Search API dashboard | +| `exa-search` | `exa-search` | Exa Search | Search | [link](https://exa.ai) | API key from dashboard.exa.ai | +| `google-pse-search` | `google-pse` | Google Programmable Search | Search | [link](https://developers.google.com/custom-search/v1/overview) | Requires a Google API key and your Programmable Search Engine ID (cx) | +| `linkup-search` | `linkup` | Linkup Search | Search | [link](https://docs.linkup.so) | Bearer API key from the Linkup dashboard | +| `ollama-search` | `ollama-search` | Ollama Search | Search | [link](https://ollama.com/settings/api-keys) | Same API key as Ollama Cloud (from ollama.com/settings/api-keys) | +| `perplexity-search` | `pplx-search` | Perplexity Search | Search | [link](https://docs.perplexity.ai/guides/search-quickstart) | Same API key as Perplexity (pplx-...) | +| `searchapi-search` | `searchapi` | SearchAPI | Search | [link](https://www.searchapi.io/docs) | API key from SearchAPI (query param or Bearer auth) | +| `searxng-search` | `searxng` | SearXNG Search | Search | [link](https://docs.searxng.org) | API key is optional. Set your SearXNG base URL. Some instances may require a bearer token for access. | +| `serper-search` | `serper-search` | Serper Search | Search | [link](https://serper.dev) | API key from serper.dev dashboard | +| `tavily-search` | `tavily-search` | Tavily Search | Search | [link](https://tavily.com) | API key from app.tavily.com (format: tvly-...) | +| `youcom-search` | `youcom-search` | You.com Search | Search | [link](https://you.com/docs/search/overview) | X-API-Key from the You.com platform dashboard | ## Audio-only Providers (7) -| ID | Alias | Name | Tags | Website | Notes | -| ------------ | ---------- | ---------- | ----- | ------------------------------------- | ----------------------------------------------------------------------------------------------- | -| `assemblyai` | `aai` | AssemblyAI | Audio | [link](https://assemblyai.com) | β€” | -| `aws-polly` | `polly` | AWS Polly | Audio | [link](https://aws.amazon.com/polly/) | Use AWS Secret Access Key as API key; set providerSpecificData.accessKeyId and optional region. | -| `cartesia` | `cartesia` | Cartesia | Audio | [link](https://cartesia.ai) | β€” | -| `deepgram` | `dg` | Deepgram | Audio | [link](https://deepgram.com) | β€” | -| `elevenlabs` | `el` | ElevenLabs | Audio | [link](https://elevenlabs.io) | β€” | -| `inworld` | `inworld` | Inworld | Audio | [link](https://inworld.ai) | β€” | -| `playht` | `playht` | PlayHT | Audio | [link](https://play.ht) | β€” | +| ID | Alias | Name | Tags | Website | Notes | +|----|-------|------|------|---------|-------| +| `assemblyai` | `aai` | AssemblyAI | Audio | [link](https://assemblyai.com) | β€” | +| `aws-polly` | `polly` | AWS Polly | Audio | [link](https://aws.amazon.com/polly/) | Use AWS Secret Access Key as API key; set providerSpecificData.accessKeyId and optional region. | +| `cartesia` | `cartesia` | Cartesia | Audio | [link](https://cartesia.ai) | β€” | +| `deepgram` | `dg` | Deepgram | Audio | [link](https://deepgram.com) | β€” | +| `elevenlabs` | `el` | ElevenLabs | Audio | [link](https://elevenlabs.io) | β€” | +| `inworld` | `inworld` | Inworld | Audio | [link](https://inworld.ai) | β€” | +| `playht` | `playht` | PlayHT | Audio | [link](https://play.ht) | β€” | -## Upstream Proxy Providers (1) +## Upstream Proxy Providers (2) -| ID | Alias | Name | Tags | Website | Notes | -| ------------- | ----- | ----------- | -------------- | ---------------------------------------------------- | ----- | -| `cliproxyapi` | `cpa` | CLIProxyAPI | Upstream proxy | [link](https://github.com/router-for-me/CLIProxyAPI) | β€” | +| ID | Alias | Name | Tags | Website | Notes | +|----|-------|------|------|---------|-------| +| `9router` | `nr` | 9router | Upstream proxy | [link](https://www.npmjs.com/package/9router) | β€” | +| `cliproxyapi` | `cpa` | CLIProxyAPI | Upstream proxy | [link](https://github.com/router-for-me/CLIProxyAPI) | β€” | ## Cloud Agent Providers (3) -| ID | Alias | Name | Tags | Website | Notes | -| ------------- | ------------- | ------------ | ----------- | -------------------------------- | ----------------------------------------------------------- | -| `codex-cloud` | `codex-cloud` | Codex Cloud | Cloud agent | [link](https://openai.com/codex) | OpenAI API key with Codex Cloud task access. | -| `devin` | `devin` | Devin | Cloud agent | [link](https://devin.ai) | Devin API key for cloud agent sessions. | -| `jules` | `jules` | Google Jules | Cloud agent | [link](https://jules.google) | Jules API key for creating and managing cloud coding tasks. | +| ID | Alias | Name | Tags | Website | Notes | +|----|-------|------|------|---------|-------| +| `codex-cloud` | `codex-cloud` | Codex Cloud | Cloud agent | [link](https://openai.com/codex) | OpenAI API key with Codex Cloud task access. | +| `devin` | `devin` | Devin | Cloud agent | [link](https://devin.ai) | Devin API key for cloud agent sessions. | +| `jules` | `jules` | Google Jules | Cloud agent | [link](https://jules.google) | Jules API key for creating and managing cloud coding tasks. | ## System Providers (1) -| ID | Alias | Name | Tags | Website | Notes | -| ------ | ------ | ------------------ | ------ | ------- | ----- | -| `auto` | `auto` | Auto (Zero-Config) | System | β€” | β€” | +| ID | Alias | Name | Tags | Website | Notes | +|----|-------|------|------|---------|-------| +| `auto` | `auto` | Auto (Zero-Config) | System | β€” | β€” | ## Sources of truth diff --git a/docs/screenshots/free-tier-budget-card.svg b/docs/screenshots/free-tier-budget-card.svg new file mode 100644 index 0000000000..7284c30c48 --- /dev/null +++ b/docs/screenshots/free-tier-budget-card.svg @@ -0,0 +1,59 @@ + + + + + + Monthly free-token budget + 1.86B remaining Β· 98% of 1.90B + + + + + + + + + + + + + + + + + Up to ~2.5B in your first month with signup credits Β· stretched further by RTK + Caveman compression + + + + + Mistral Large β€” 1.0B + LongCat 2.0 β€” 150M + Cloudflare WAI β€” 122M + + Gemini 2.5 Flash β€” 60M + Doubao β€” 60M + Cerebras Qwen3 β€” 30M + + GitHub Models β€” 18M + Groq Llama 3.3 β€” 15M + OpenRouter :free β€” 1.2M + + + + + + + Steady / month + ~1.94B + First month (+ signup credits) + ~2.53B + Pools Β· models + 50 Β· 530 + + + + + ⚠ 19 providers are ToS-restricted (proxy not permitted) and excluded Β· figures are pool-deduped β€” no inflated rate-limit ceilings. + + OmniRoute Β· /dashboard/free-tiers Β· preview mockup + diff --git a/open-sse/config/freeModelCatalog.data.ts b/open-sse/config/freeModelCatalog.data.ts new file mode 100644 index 0000000000..c0a825cafb --- /dev/null +++ b/open-sse/config/freeModelCatalog.data.ts @@ -0,0 +1,537 @@ +// AUTO-GENERATED by scripts/research/compile-free-model-catalog.ts on 2026-06-05. +// Source: _tasks/features-v3.8.12/free-model-research-2026-06-05.json (per-model free-tier budgets). +// Do not edit by hand β€” re-run the compiler to refresh. +import type { FreeModelBudget } from "./freeModelCatalog.ts"; + +export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [ + { provider: "gemini", modelId: "gemini-2.0-flash", displayName: "Gemini 2.0 Flash", monthlyTokens: 25000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini", modelId: "gemini-3.1-pro-preview", displayName: "Gemini 3.1 Pro Preview", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini", modelId: "gemini-3-flash-preview", displayName: "Gemini 3 Flash Preview", monthlyTokens: 25000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini", modelId: "gemini-3.1-flash-lite-preview", displayName: "Gemini 3.1 Flash Lite Preview", monthlyTokens: 120000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini", modelId: "gemini-3.5-flash", displayName: "Gemini 3.5 Flash", monthlyTokens: 25000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini", modelId: "gemini-2.5-pro", displayName: "Gemini 2.5 Pro", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini", modelId: "gemini-2.5-flash", displayName: "Gemini 2.5 Flash", monthlyTokens: 25000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini", modelId: "gemini-2.5-flash-lite", displayName: "Gemini 2.5 Flash Lite", monthlyTokens: 120000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini", modelId: "gemini-2.0-flash-thinking-exp-01-21", displayName: "Gemini 2.0 Flash Thinking", monthlyTokens: 25000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini", modelId: "gemini-2.0-pro-exp-02-05", displayName: "Gemini 2.0 Pro Experimental", monthlyTokens: 60000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini", tos: "caution" }, + { provider: "gemini", modelId: "gemini-1.5-pro", displayName: "Gemini 1.5 Pro", monthlyTokens: 60000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini", tos: "caution" }, + { provider: "gemini", modelId: "gemini-1.5-flash", displayName: "Gemini 1.5 Flash", monthlyTokens: 25000000, creditTokens: 0, freeType: "recurring-daily", poolKey: null, tos: "caution" }, + { provider: "gemini-cli", modelId: "gemini-2.0-flash", displayName: "Gemini 2.0 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gemini-cli", tos: "avoid" }, + { provider: "gemini-cli", modelId: "gemini-2.0-flash-thinking", displayName: "Gemini 2.0 Flash Thinking", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gemini-cli", tos: "avoid" }, + { provider: "gemini-cli", modelId: "gemini-2.0-pro-exp-02-05", displayName: "Gemini 2.0 Pro Experimental", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gemini-cli", tos: "avoid" }, + { provider: "gemini-cli", modelId: "gemini-1.5-pro", displayName: "Gemini 1.5 Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gemini-cli", tos: "avoid" }, + { provider: "gemini-cli", modelId: "gemini-1.5-flash", displayName: "Gemini 1.5 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gemini-cli", tos: "avoid" }, + { provider: "gemini-cli", modelId: "gemini-3.1-pro-preview", displayName: "Gemini 3.1 Pro Preview", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gemini-cli", tos: "avoid" }, + { provider: "gemini-cli", modelId: "gemini-3.1-pro-preview-customtools", displayName: "Gemini 3.1 Pro Preview Custom Tools", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gemini-cli", tos: "avoid" }, + { provider: "gemini-cli", modelId: "gemini-3-flash-preview", displayName: "Gemini 3 Flash Preview", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gemini-cli", tos: "avoid" }, + { provider: "gemini-cli", modelId: "gemini-3.1-flash-lite-preview", displayName: "Gemini 3.1 Flash Lite", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gemini-cli", tos: "avoid" }, + { provider: "qoder", modelId: "qoder-rome-30ba3b", displayName: "Qoder ROME", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "qwen3-coder-plus", displayName: "Qwen3 Coder Plus", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "qwen3-max", displayName: "Qwen3 Max", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "qwen3-vl-plus", displayName: "Qwen3 Vision Plus", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "kimi-k2-0905", displayName: "Kimi K2 0905", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "qwen3-max-preview", displayName: "Qwen3 Max Preview", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "kimi-k2", displayName: "Kimi K2", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "deepseek-v3.2", displayName: "DeepSeek-V3.2-Exp", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "deepseek-r1", displayName: "DeepSeek R1", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "deepseek-v3", displayName: "DeepSeek V3", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "qwen3-32b", displayName: "Qwen3 32B", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "qwen3-235b-a22b-thinking-2507", displayName: "Qwen3 235B A22B Thinking 2507", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "qwen3-235b-a22b-instruct", displayName: "Qwen3 235B A22B Instruct", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "qoder", modelId: "qwen3-235b", displayName: "Qwen3 235B", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" }, + { provider: "agy", modelId: "claude-opus-4-6-thinking", displayName: "Claude Opus 4.6 (Thinking)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "claude-sonnet-4-6", displayName: "Claude Sonnet 4.6 (Thinking)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-3.1-pro-high", displayName: "Gemini 3.1 Pro (High)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-3.1-pro-low", displayName: "Gemini 3.1 Pro (Low)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-pro-agent", displayName: "Gemini 3.1 Pro (Agent)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-3-flash-agent", displayName: "Gemini 3.5 Flash (Agent)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-3-flash", displayName: "Gemini 3 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-3.5-flash-low", displayName: "Gemini 3.5 Flash (Low)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-3.5-flash-extra-low", displayName: "Gemini 3.5 Flash (Extra Low)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-3.1-flash-lite", displayName: "Gemini 3.1 Flash Lite", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-3.1-flash-image", displayName: "Gemini 3.1 Flash Image", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-2.5-pro", displayName: "Gemini 2.5 Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-2.5-flash", displayName: "Gemini 2.5 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-2.5-flash-thinking", displayName: "Gemini 2.5 Flash Thinking", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gemini-2.5-flash-lite", displayName: "Gemini 2.5 Flash Lite", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "agy", modelId: "gpt-oss-120b-medium", displayName: "GPT-OSS 120B (Medium)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "agy", tos: "avoid" }, + { provider: "github-models", modelId: "openai/gpt-4.1", displayName: "GPT-4.1 (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "openai/gpt-4o", displayName: "GPT-4o (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "openai/gpt-4o-mini", displayName: "GPT-4o Mini (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "openai/o1", displayName: "o1 (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "openai/o3", displayName: "o3 (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "openai/o4-mini", displayName: "o4-mini (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "deepseek/DeepSeek-R1", displayName: "DeepSeek R1 (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "meta/Llama-4-Maverick-17B-128E-Instruct", displayName: "Llama 4 Maverick (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "xai/grok-3", displayName: "Grok 3 (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "mistral-ai/Mistral-Medium-3", displayName: "Mistral Medium 3 (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "cohere/Cohere-command-a", displayName: "Cohere Command A (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "microsoft/Phi-4", displayName: "Phi-4 (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "openai/text-embedding-3-large", displayName: "Text Embedding 3 Large (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "github-models", modelId: "openai/text-embedding-3-small", displayName: "Text Embedding 3 Small (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, + { provider: "kiro", modelId: "auto-kiro", displayName: "Auto (Kiro picks best model)", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "claude-opus-4.8", displayName: "Claude Opus 4.8", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "claude-opus-4.7", displayName: "Claude Opus 4.7", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "claude-opus-4.6", displayName: "Claude Opus 4.6", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "claude-sonnet-4.6", displayName: "Claude Sonnet 4.6", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "claude-sonnet-4.5", displayName: "Claude Sonnet 4.5", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "claude-haiku-4.5", displayName: "Claude Haiku 4.5", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "deepseek-3.2", displayName: "DeepSeek V3.2", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "minimax-m2.5", displayName: "MiniMax M2.5", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "minimax-m2.1", displayName: "MiniMax M2.1", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "glm-5", displayName: "GLM-5", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "kiro", modelId: "qwen3-coder-next", displayName: "Qwen3 Coder Next", monthlyTokens: 25000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + { provider: "opencode", modelId: "big-pickle", displayName: "Big Pickle", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "opencode", tos: "avoid" }, + { provider: "opencode", modelId: "deepseek-v4-flash-free", displayName: "DeepSeek V4 Flash Free", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "opencode", tos: "avoid" }, + { provider: "opencode", modelId: "minimax-m2.5-free", displayName: "MiniMax M2.5 Free", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "opencode", tos: "avoid" }, + { provider: "opencode", modelId: "ling-2.6-1t-free", displayName: "Ling 2.6 Free", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "opencode", tos: "avoid" }, + { provider: "opencode", modelId: "trinity-large-preview-free", displayName: "Trinity Large Preview Free", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "opencode", tos: "avoid" }, + { provider: "opencode", modelId: "nemotron-3-super-free", displayName: "Nemotron 3 Super Free", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "opencode", tos: "avoid" }, + { provider: "opencode", modelId: "qwen3.6-plus-free", displayName: "Qwen3.6 Plus Free", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "opencode", tos: "avoid" }, + { provider: "agentrouter", modelId: "claude-opus-4-6", displayName: "Claude 4.6 Opus", monthlyTokens: 0, creditTokens: 200000000, freeType: "one-time-initial", poolKey: "agentrouter", tos: "caution" }, + { provider: "agentrouter", modelId: "claude-haiku-4-5-20251001", displayName: "Claude 4.5 Haiku", monthlyTokens: 0, creditTokens: 200000000, freeType: "one-time-initial", poolKey: "agentrouter", tos: "caution" }, + { provider: "agentrouter", modelId: "glm-5.1", displayName: "GLM 5.1", monthlyTokens: 0, creditTokens: 200000000, freeType: "one-time-initial", poolKey: "agentrouter", tos: "caution" }, + { provider: "agentrouter", modelId: "deepseek-v3.2", displayName: "DeepSeek V3.2", monthlyTokens: 0, creditTokens: 200000000, freeType: "one-time-initial", poolKey: "agentrouter", tos: "caution" }, + { provider: "openrouter", modelId: "auto", displayName: "Auto (Best Available)", monthlyTokens: 1200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "openrouter", tos: "caution" }, + { provider: "api-airforce", modelId: "x-ai/grok-3", displayName: "Grok-3 (Free)", monthlyTokens: 24000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "api-airforce", tos: "caution" }, + { provider: "api-airforce", modelId: "x-ai/grok-2-1212", displayName: "Grok-2 1212 (Free)", monthlyTokens: 24000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "api-airforce", tos: "caution" }, + { provider: "api-airforce", modelId: "anthropic/claude-3.7-sonnet", displayName: "Claude 3.7 Sonnet (Free)", monthlyTokens: 24000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "api-airforce", tos: "caution" }, + { provider: "api-airforce", modelId: "qwen/qwen3-32b", displayName: "Qwen3 32B (Free)", monthlyTokens: 24000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "api-airforce", tos: "caution" }, + { provider: "api-airforce", modelId: "moonshot/kimi-k2.6", displayName: "Kimi K2.6 (Free)", monthlyTokens: 24000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "api-airforce", tos: "caution" }, + { provider: "api-airforce", modelId: "google/gemini-2.5-flash", displayName: "Gemini 2.5 Flash (Free)", monthlyTokens: 24000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "api-airforce", tos: "caution" }, + { provider: "api-airforce", modelId: "deepseek/deepseek-v3", displayName: "DeepSeek V3 (Free)", monthlyTokens: 24000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "api-airforce", tos: "caution" }, + { provider: "deepseek", modelId: "deepseek-v4-pro", displayName: "DeepSeek V4 Pro", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "deepseek", tos: "caution" }, + { provider: "deepseek", modelId: "deepseek-v4-flash", displayName: "DeepSeek V4 Flash", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "deepseek", tos: "caution" }, + { provider: "groq", modelId: "meta-llama/llama-4-scout-17b-16e-instruct", displayName: "Llama 4 Scout", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution" }, + { provider: "groq", modelId: "llama-3.3-70b-versatile", displayName: "Llama 3.3 70B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution" }, + { provider: "groq", modelId: "openai/gpt-oss-120b", displayName: "GPT-OSS 120B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution" }, + { provider: "groq", modelId: "openai/gpt-oss-20b", displayName: "GPT-OSS 20B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution" }, + { provider: "groq", modelId: "qwen/qwen3-32b", displayName: "Qwen3 32B", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "groq", tos: "caution" }, + { provider: "novita", modelId: "ai-ai/llama-3.1-8b-instruct", displayName: "Llama 3.1 8B", monthlyTokens: 0, creditTokens: 500000, freeType: "one-time-initial", poolKey: "novita", tos: "caution" }, + { provider: "baidu", modelId: "ernie-4.0-8k", displayName: "ERNIE 4.0 8K", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "baidu", tos: "caution" }, + { provider: "baichuan", modelId: "Baichuan4", displayName: "Baichuan 4", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "baichuan", tos: "ambiguous" }, + { provider: "coze", modelId: "claude-3-7-sonnet-20250514", displayName: "Claude 3.7 Sonnet", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "coze", tos: "avoid" }, + { provider: "kluster", modelId: "auto", displayName: "Auto", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "kluster", tos: "ambiguous" }, + { provider: "liquid", modelId: "liquid-lfm-40b", displayName: "Liquid LFM 40B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "liquid", tos: "unknown" }, + { provider: "monsterapi", modelId: "llama-3-8b-fuse", displayName: "Llama 3 8B Fuse", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "monsterapi", tos: "ambiguous" }, + { provider: "nlpcloud", modelId: "llama-3-8b-instruct", displayName: "Llama 3 8B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "nlpcloud", tos: "avoid" }, + { provider: "phind", modelId: "phind-model", displayName: "Phind Model (Auto)", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "phind", tos: "unknown" }, + { provider: "phind", modelId: "gpt-4o", displayName: "GPT-4o (via Phind)", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "phind", tos: "unknown" }, + { provider: "phind", modelId: "claude-3.5-sonnet", displayName: "Claude 3.5 Sonnet (via Phind)", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "phind", tos: "unknown" }, + { provider: "chutes", modelId: "Qwen2.5-72B-Instruct", displayName: "Qwen2.5 72B", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "chutes", tos: "unknown" }, + { provider: "glhf", modelId: "deepseek-7b-chat", displayName: "DeepSeek 7B Chat", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "glhf", tos: "caution" }, + { provider: "huggingchat", modelId: "meta-llama/Llama-3.3-70B-Instruct", displayName: "Llama 3.3 70B", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" }, + { provider: "huggingchat", modelId: "Qwen/Qwen2.5-72B-Instruct", displayName: "Qwen 2.5 72B", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" }, + { provider: "huggingchat", modelId: "mistralai/Mistral-Small-24B-Instruct-2501", displayName: "Mistral Small 24B", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" }, + { provider: "huggingchat", modelId: "deepseek-ai/DeepSeek-R1", displayName: "DeepSeek R1", monthlyTokens: 500000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingchat", tos: "caution" }, + { provider: "iflytek", modelId: "generalv3.5", displayName: "General V3.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "iflytek", tos: "avoid" }, + { provider: "inclusionai", modelId: "inclusion-model", displayName: "Inclusion Model", monthlyTokens: 15000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "inclusionai", tos: "ambiguous" }, + { provider: "sensenova", modelId: "sensechat", displayName: "SenseChat", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "sensenova", tos: "caution" }, + { provider: "sparkdesk", modelId: "general", displayName: "General", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "sparkdesk", tos: "caution" }, + { provider: "stepfun", modelId: "step-1v", displayName: "Step 1V", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "stepfun", tos: "ambiguous" }, + { provider: "tencent", modelId: "hunyuan-pro", displayName: "Hunyuan Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "tencent", tos: "caution" }, + { provider: "doubao", modelId: "doubao-pro-32k", displayName: "Doubao Pro 32K", monthlyTokens: 60000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "doubao", tos: "ambiguous" }, + { provider: "yi", modelId: "yi-large", displayName: "Yi Large", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "yi", tos: "unknown" }, + { provider: "blackbox", modelId: "gpt-4o", displayName: "GPT-4o", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "blackbox", tos: "avoid" }, + { provider: "blackbox", modelId: "gemini-2.5-flash", displayName: "Gemini 2.5 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "blackbox", tos: "avoid" }, + { provider: "blackbox", modelId: "claude-sonnet-4", displayName: "Claude Sonnet 4", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "blackbox", tos: "avoid" }, + { provider: "blackbox", modelId: "deepseek-v3", displayName: "DeepSeek V3", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "blackbox", tos: "avoid" }, + { provider: "blackbox", modelId: "blackboxai", displayName: "Blackbox AI", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "blackbox", tos: "avoid" }, + { provider: "blackbox", modelId: "blackboxai-pro", displayName: "Blackbox AI Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "blackbox", tos: "avoid" }, + { provider: "bazaarlink", modelId: "auto:free", displayName: "Auto Free (Zero Cost)", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "claude-opus-4.7", displayName: "Claude Opus 4.7", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "claude-sonnet-4.6", displayName: "Claude Sonnet 4.6", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "claude-haiku-4.5", displayName: "Claude Haiku 4.5", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "gpt-5.5", displayName: "GPT-5.5", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "gpt-5.4", displayName: "GPT-5.4", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "gpt-5.4-mini", displayName: "GPT-5.4 Mini", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "gpt-5.4-nano", displayName: "GPT-5.4 Nano", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "grok-4.3", displayName: "Grok 4.3", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "grok-4.20", displayName: "Grok 4.20", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "gemini-3.1-pro-preview", displayName: "Gemini 3.1 Pro", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "gemini-3-flash-preview", displayName: "Gemini 3 Flash", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "gemini-3.1-flash-lite-preview", displayName: "Gemini 3.1 Flash Lite", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "gemma-4-31b-it", displayName: "Gemma 4 31B", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "gemma-4-26b-a4b-it", displayName: "Gemma 4 26B A4B", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "deepseek-v3.2", displayName: "DeepSeek V3.2", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "kimi-k2.6", displayName: "Kimi K2.6", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "kimi-k2.5", displayName: "Kimi K2.5", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "glm-5.1", displayName: "GLM 5.1", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "glm-5", displayName: "GLM 5", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "mimo-v2.5-pro", displayName: "MiMo-V2.5-Pro", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "mimo-v2.5", displayName: "MiMo-V2.5", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "minimax-m2.7", displayName: "MiniMax M2.7", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "minimax-m2.5", displayName: "MiniMax M2.5", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "llama-4-maverick", displayName: "Llama 4 Maverick", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "llama-4-scout", displayName: "Llama 4 Scout", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "llama-3.3-70b-instruct", displayName: "Llama 3.3 70B", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "qwen3.6-plus", displayName: "Qwen 3.6 Plus", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "mistral-large-2512", displayName: "Mistral Large 3", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "mistral-medium-3.1", displayName: "Mistral Medium 3.1", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "mistral-small-2603", displayName: "Mistral Small 4", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "bazaarlink", modelId: "nemotron-3-super-120b-a12b", displayName: "Nemotron 3 Super", monthlyTokens: 3600000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bazaarlink", tos: "caution" }, + { provider: "completions", modelId: "claude-opus-4.6", displayName: "Claude Opus 4.6", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "completions", tos: "avoid" }, + { provider: "completions", modelId: "claude-sonnet-4.6", displayName: "Claude Sonnet 4.6", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "completions", tos: "avoid" }, + { provider: "completions", modelId: "claude-haiku-4.5", displayName: "Claude Haiku 4.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "completions", tos: "avoid" }, + { provider: "completions", modelId: "gpt-5.2", displayName: "GPT-5.2", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "completions", tos: "avoid" }, + { provider: "completions", modelId: "gpt-5-mini", displayName: "GPT-5 Mini", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "completions", tos: "avoid" }, + { provider: "completions", modelId: "gpt-4.1", displayName: "GPT-4.1", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "completions", tos: "avoid" }, + { provider: "completions", modelId: "gemini-3.1-pro-preview", displayName: "Gemini 3.1 Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "completions", tos: "avoid" }, + { provider: "completions", modelId: "gemini-3-flash-preview", displayName: "Gemini 3 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "completions", tos: "avoid" }, + { provider: "mistral", modelId: "mistral-large-latest", displayName: "Mistral Large 3", monthlyTokens: 1000000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "mistral", tos: "caution" }, + { provider: "mistral", modelId: "mistral-medium-3-5", displayName: "Mistral Medium 3.5", monthlyTokens: 1000000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "mistral", tos: "caution" }, + { provider: "mistral", modelId: "mistral-small-latest", displayName: "Mistral Small 4", monthlyTokens: 1000000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "mistral", tos: "caution" }, + { provider: "mistral", modelId: "devstral-latest", displayName: "Devstral 2", monthlyTokens: 1000000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "mistral", tos: "caution" }, + { provider: "mistral", modelId: "codestral-latest", displayName: "Codestral", monthlyTokens: 1000000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "mistral", tos: "caution" }, + { provider: "muse-spark-web", modelId: "muse-spark", displayName: "Muse Spark", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "muse-spark-web", tos: "avoid" }, + { provider: "muse-spark-web", modelId: "muse-spark-thinking", displayName: "Muse Spark Thinking", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "muse-spark-web", tos: "avoid" }, + { provider: "muse-spark-web", modelId: "muse-spark-contemplating", displayName: "Muse Spark Contemplating", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "muse-spark-web", tos: "avoid" }, + { provider: "t3-web", modelId: "claude-opus-4", displayName: "Claude Opus 4 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "claude-sonnet-4", displayName: "Claude Sonnet 4 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "claude-haiku-4", displayName: "Claude Haiku 4 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "claude-3.7", displayName: "Claude 3.7 Sonnet (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "gpt-5", displayName: "GPT-5 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "gpt-4o", displayName: "GPT-4o (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "gpt-4.1", displayName: "GPT-4.1 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "o3", displayName: "o3 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "o4-mini", displayName: "o4-mini (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "gemini-2.5-pro", displayName: "Gemini 2.5 Pro (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "gemini-2.5-flash", displayName: "Gemini 2.5 Flash (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "deepseek-r1", displayName: "DeepSeek R1 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "deepseek-v3", displayName: "DeepSeek V3 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "grok-3", displayName: "Grok 3 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "grok-3-mini", displayName: "Grok 3 Mini (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "llama-4-maverick", displayName: "Llama 4 Maverick (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "llama-4-scout", displayName: "Llama 4 Scout (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "llama-3.3-70b", displayName: "Llama 3.3 70B (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "devstral", displayName: "Devstral (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "mistral-large", displayName: "Mistral Large (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "qwen3-235b", displayName: "Qwen3 235B (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "qwen3-32b", displayName: "Qwen3 32B (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "t3-web", modelId: "kimi-k2", displayName: "Kimi K2 (via t3.chat)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "t3-web", tos: "avoid" }, + { provider: "duckduckgo-web", modelId: "gpt-4o-mini", displayName: "GPT-4o Mini", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "duckduckgo-web", tos: "avoid" }, + { provider: "duckduckgo-web", modelId: "gpt-5-mini", displayName: "GPT-5 Mini", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "duckduckgo-web", tos: "avoid" }, + { provider: "duckduckgo-web", modelId: "claude-3-5-haiku-20241022", displayName: "Claude 3.5 Haiku", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "duckduckgo-web", tos: "avoid" }, + { provider: "duckduckgo-web", modelId: "llama-4-scout", displayName: "Llama 4 Scout", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "duckduckgo-web", tos: "avoid" }, + { provider: "duckduckgo-web", modelId: "mistral-small-2501", displayName: "Mistral Small", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "duckduckgo-web", tos: "avoid" }, + { provider: "duckduckgo-web", modelId: "o3-mini", displayName: "O3 Mini", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "duckduckgo-web", tos: "avoid" }, + { provider: "together", modelId: "meta-llama/Llama-3.3-70B-Instruct-Turbo-Free", displayName: "Llama 3.3 70B Turbo (πŸ†“ Free)", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "together", tos: "caution" }, + { provider: "together", modelId: "meta-llama/Llama-Vision-Free", displayName: "Llama Vision (πŸ†“ Free)", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "together", tos: "caution" }, + { provider: "together", modelId: "deepseek-ai/DeepSeek-R1-Distill-Llama-70B-Free", displayName: "DeepSeek R1 Distill 70B (πŸ†“ Free)", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "together", tos: "caution" }, + { provider: "together", modelId: "meta-llama/Llama-3.3-70B-Instruct-Turbo", displayName: "Llama 3.3 70B Turbo", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "together", tos: "caution" }, + { provider: "together", modelId: "deepseek-ai/DeepSeek-R1", displayName: "DeepSeek R1", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "together", tos: "caution" }, + { provider: "together", modelId: "Qwen/Qwen3-235B-A22B", displayName: "Qwen3 235B", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "together", tos: "caution" }, + { provider: "together", modelId: "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", displayName: "Llama 4 Maverick", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "together", tos: "caution" }, + { provider: "fireworks", modelId: "deepseek-v4-flash", displayName: "DeepSeek V4 Flash", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "fireworks", modelId: "deepseek-v4-pro", displayName: "DeepSeek V4 Pro", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "fireworks", modelId: "glm-5p1", displayName: "GLM 5.1", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "fireworks", modelId: "gpt-oss-120b", displayName: "OpenAI gpt-oss-120b", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "fireworks", modelId: "gpt-oss-20b", displayName: "OpenAI gpt-oss-20b", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "fireworks", modelId: "kimi-k2p5", displayName: "Kimi K2.5", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "fireworks", modelId: "kimi-k2p6", displayName: "Kimi K2.6", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "fireworks", modelId: "minimax-m2p5", displayName: "MiniMax M2.5", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "fireworks", modelId: "minimax-m2p7", displayName: "MiniMax M2.7", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "fireworks", modelId: "qwen3p6-plus", displayName: "Qwen3.6 Plus", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "fireworks", tos: "avoid" }, + { provider: "cerebras", modelId: "zai-glm-4.7", displayName: "GLM 4.7", monthlyTokens: 30000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "cerebras", tos: "caution" }, + { provider: "cerebras", modelId: "gpt-oss-120b", displayName: "GPT OSS 120B", monthlyTokens: 30000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "cerebras", tos: "caution" }, + { provider: "ollama-cloud", modelId: "deepseek-v4-pro", displayName: "DeepSeek V4 Pro", monthlyTokens: 20000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "ollama-cloud", tos: "ambiguous" }, + { provider: "ollama-cloud", modelId: "deepseek-v4-flash", displayName: "DeepSeek V4 Flash", monthlyTokens: 20000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "ollama-cloud", tos: "ambiguous" }, + { provider: "ollama-cloud", modelId: "kimi-k2.6", displayName: "Kimi K2.6", monthlyTokens: 20000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "ollama-cloud", tos: "ambiguous" }, + { provider: "ollama-cloud", modelId: "glm-5.1", displayName: "GLM 5.1", monthlyTokens: 20000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "ollama-cloud", tos: "ambiguous" }, + { provider: "ollama-cloud", modelId: "minimax-m2.7", displayName: "MiniMax M2.7", monthlyTokens: 20000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "ollama-cloud", tos: "ambiguous" }, + { provider: "ollama-cloud", modelId: "gemma4:31b", displayName: "Gemma 4 31B", monthlyTokens: 20000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "ollama-cloud", tos: "ambiguous" }, + { provider: "ollama-cloud", modelId: "nemotron-3-super", displayName: "NVIDIA Nemotron 3 Super", monthlyTokens: 20000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "ollama-cloud", tos: "ambiguous" }, + { provider: "ollama-cloud", modelId: "qwen3.5:397b", displayName: "Qwen 3.5 397B", monthlyTokens: 20000000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "ollama-cloud", tos: "ambiguous" }, + { provider: "cohere", modelId: "command-a-reasoning-08-2025", displayName: "Command A Reasoning (Aug 2025)", monthlyTokens: 800000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "cohere", tos: "caution" }, + { provider: "cohere", modelId: "command-a-vision-07-2025", displayName: "Command A Vision (Jul 2025)", monthlyTokens: 800000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "cohere", tos: "caution" }, + { provider: "cohere", modelId: "command-a-03-2025", displayName: "Command A (Mar 2025)", monthlyTokens: 800000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "cohere", tos: "caution" }, + { provider: "cohere", modelId: "command-r7b-12-2024", displayName: "Command R7B (Dec 2024)", monthlyTokens: 800000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "cohere", tos: "caution" }, + { provider: "cohere", modelId: "command-r-plus-08-2024", displayName: "Command R Plus (Aug 2024)", monthlyTokens: 800000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "cohere", tos: "caution" }, + { provider: "cohere", modelId: "command-r-08-2024", displayName: "Command R (Aug 2024)", monthlyTokens: 800000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "cohere", tos: "caution" }, + { provider: "nvidia", modelId: "z-ai/glm-5.1", displayName: "GLM 5.1", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "minimaxai/minimax-m2.7", displayName: "MiniMax M2.7", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "google/gemma-4-31b-it", displayName: "Gemma 4 31B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "mistralai/mistral-small-4-119b-2603", displayName: "Mistral Small 4 2603", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "mistralai/mistral-large-3-675b-instruct-2512", displayName: "Mistral Large 3 675B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "mistralai/devstral-2-123b-instruct-2512", displayName: "Devstral 2 123B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "qwen/qwen3.5-397b-a17b", displayName: "Qwen3.5-397B-A17B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "qwen/qwen3.5-122b-a10b", displayName: "Qwen3.5-122B-A10B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "stepfun-ai/step-3.5-flash", displayName: "Step 3.5 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "deepseek-ai/deepseek-v4-pro", displayName: "DeepSeek V4 Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "openai/gpt-oss-120b", displayName: "GPT OSS 120B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "openai/gpt-oss-20b", displayName: "GPT OSS 20B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nvidia", modelId: "nvidia/nemotron-3-super-120b-a12b", displayName: "Nemotron 3 Super 120B A12B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "nvidia", tos: "caution" }, + { provider: "nebius", modelId: "meta-llama/Llama-3.3-70B-Instruct", displayName: "Llama 3.3 70B Instruct", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "nebius", tos: "caution" }, + { provider: "siliconflow", modelId: "deepseek-ai/DeepSeek-V3.2", displayName: "DeepSeek V3.2", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "siliconflow", modelId: "deepseek-ai/DeepSeek-V3.1", displayName: "DeepSeek V3.1", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "siliconflow", modelId: "deepseek-ai/DeepSeek-R1", displayName: "DeepSeek R1", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "siliconflow", modelId: "Qwen/Qwen3-235B-A22B-Instruct-2507", displayName: "Qwen3 235B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "siliconflow", modelId: "Qwen/Qwen3-Coder-480B-A35B-Instruct", displayName: "Qwen3 Coder 480B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "siliconflow", modelId: "Qwen/Qwen3-32B", displayName: "Qwen3 32B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "siliconflow", modelId: "moonshotai/Kimi-K2.5", displayName: "Kimi K2.5", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "siliconflow", modelId: "zai-org/GLM-4.7", displayName: "GLM 4.7", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "siliconflow", modelId: "openai/gpt-oss-120b", displayName: "GPT OSS 120B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "siliconflow", modelId: "baidu/ERNIE-4.5-300B-A47B", displayName: "ERNIE 4.5 300B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "siliconflow", tos: "caution" }, + { provider: "hyperbolic", modelId: "Qwen/QwQ-32B", displayName: "QwQ 32B", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "caution" }, + { provider: "hyperbolic", modelId: "deepseek-ai/DeepSeek-R1", displayName: "DeepSeek R1", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "caution" }, + { provider: "hyperbolic", modelId: "deepseek-ai/DeepSeek-V3", displayName: "DeepSeek V3", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "caution" }, + { provider: "hyperbolic", modelId: "meta-llama/Llama-3.3-70B-Instruct", displayName: "Llama 3.3 70B", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "caution" }, + { provider: "hyperbolic", modelId: "meta-llama/Llama-3.2-3B-Instruct", displayName: "Llama 3.2 3B", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "caution" }, + { provider: "hyperbolic", modelId: "Qwen/Qwen2.5-72B-Instruct", displayName: "Qwen 2.5 72B", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "caution" }, + { provider: "hyperbolic", modelId: "Qwen/Qwen2.5-Coder-32B-Instruct", displayName: "Qwen 2.5 Coder 32B", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "caution" }, + { provider: "hyperbolic", modelId: "NousResearch/Hermes-3-Llama-3.1-70B", displayName: "Hermes 3 70B", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "caution" }, + { provider: "huggingface", modelId: "meta-llama/llama-3.1-8b-instruct", displayName: "Llama 3.1 8B", monthlyTokens: 200000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingface", tos: "caution" }, + { provider: "huggingface", modelId: "meta-llama/llama-3.2-11b-instruct", displayName: "Llama 3.2 11B", monthlyTokens: 200000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingface", tos: "caution" }, + { provider: "huggingface", modelId: "mistralai/mistral-7b-instruct", displayName: "Mistral 7B", monthlyTokens: 200000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingface", tos: "caution" }, + { provider: "huggingface", modelId: "google/gemma-2-9b-it", displayName: "Gemma 2 9B", monthlyTokens: 200000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingface", tos: "caution" }, + { provider: "huggingface", modelId: "Qwen/Qwen2.5-7B-Instruct", displayName: "Qwen 2.5 7B", monthlyTokens: 200000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingface", tos: "caution" }, + { provider: "huggingface", modelId: "deepseek-ai/DeepSeek-V3", displayName: "DeepSeek V3", monthlyTokens: 200000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "huggingface", tos: "caution" }, + { provider: "vertex", modelId: "gemini-3.1-pro-preview", displayName: "Gemini 3.1 Pro Preview (Vertex)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "vertex", modelId: "gemini-3.1-flash-lite", displayName: "Gemini 3.1 Flash Lite (Vertex)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "vertex", modelId: "gemini-3-flash-preview", displayName: "Gemini 3 Flash Preview (Vertex)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "vertex", modelId: "gemma-4-31b-it", displayName: "Gemma 4 31B (Vertex)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "vertex", modelId: "DeepSeek-V4-Flash", displayName: "DeepSeek V4 Flash (Vertex Partner)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "vertex", modelId: "DeepSeek-V4-Pro", displayName: "DeepSeek V4 Pro (Vertex Partner)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "vertex", modelId: "Qwen3.6-35B-A3B", displayName: "Qwen3.6 35B A3B (Vertex Partner)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "vertex", modelId: "GLM-5.1-FP8", displayName: "GLM-5.1 (Vertex Partner)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "vertex", modelId: "claude-opus-4-7", displayName: "Claude Opus 4.7 (Vertex)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "vertex", modelId: "claude-sonnet-4-6", displayName: "Claude Sonnet 4.6 (Vertex)", monthlyTokens: 0, creditTokens: 300000000, freeType: "one-time-initial", poolKey: "vertex", tos: "caution" }, + { provider: "longcat", modelId: "LongCat-Flash-Lite", displayName: "LongCat Flash-Lite (50M tok/day πŸ†“)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "longcat", tos: "caution" }, + { provider: "longcat", modelId: "LongCat-Flash-Chat", displayName: "LongCat Flash-Chat (500K tok/day πŸ†“)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "longcat", tos: "caution" }, + { provider: "longcat", modelId: "LongCat-Flash-Thinking", displayName: "LongCat Flash-Thinking (500K tok/day πŸ†“)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "longcat", tos: "caution" }, + { provider: "longcat", modelId: "LongCat-Flash-Omni-2603", displayName: "LongCat Flash-Omni-2603 (500K tok/day πŸ†“)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "longcat", tos: "caution" }, + { provider: "pollinations", modelId: "openai", displayName: "OpenAI (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "openai-fast", displayName: "OpenAI Fast (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "openai-large", displayName: "OpenAI Large (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "qwen-coder", displayName: "Qwen Coder (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "mistral", displayName: "Mistral (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "gemini", displayName: "Gemini (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "gemini-flash-lite-3.1", displayName: "Gemini Flash Lite 3.1 (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "gemini-fast", displayName: "Gemini Fast (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "deepseek", displayName: "DeepSeek (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "grok", displayName: "Grok (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "grok-large", displayName: "Grok Large (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "gemini-search", displayName: "Gemini Search (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "midijourney", displayName: "Midijourney (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "midijourney-large", displayName: "Midijourney Large (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "claude-fast", displayName: "Claude Fast (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "claude", displayName: "Claude (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "claude-large", displayName: "Claude Large (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "perplexity-fast", displayName: "Perplexity Fast (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "perplexity-reasoning", displayName: "Perplexity Reasoning (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "kimi", displayName: "Kimi (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "gemini-large", displayName: "Gemini Large (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "nova-fast", displayName: "Nova Fast (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "nova", displayName: "Nova (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "glm", displayName: "GLM (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "minimax", displayName: "MiniMax (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "mistral-large", displayName: "Mistral Large (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "polly", displayName: "Polly (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "qwen-coder-large", displayName: "Qwen Coder Large (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "qwen-large", displayName: "Qwen Large (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "qwen-vision", displayName: "Qwen Vision (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "pollinations", modelId: "qwen-safety", displayName: "Qwen Safety (Pollinations)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "pollinations", tos: "caution" }, + { provider: "puter", modelId: "gpt-5.5", displayName: "GPT-5.5 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "gpt-5.4", displayName: "GPT-5.4 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "gpt-5.4-mini", displayName: "GPT-5.4 Mini (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "gpt-5.4-nano", displayName: "GPT-5.4 Nano (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "gpt-4o", displayName: "GPT-4o (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "gpt-4o-mini", displayName: "GPT-4o Mini (πŸ†“ Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "o3", displayName: "OpenAI o3 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "claude-haiku-4-5", displayName: "Claude Haiku 4.5 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "claude-sonnet-4-6", displayName: "Claude Sonnet 4.6 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "claude-opus-4-7", displayName: "Claude Opus 4.7 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "google/gemini-3.1-flash-lite-preview", displayName: "Gemini 3.1 Flash Lite (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "google/gemini-3-flash", displayName: "Gemini 3 Flash (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "google/gemini-3.1-pro-preview", displayName: "Gemini 3.1 Pro (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "deepseek/deepseek-v4-pro", displayName: "DeepSeek V4 Pro (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "deepseek/deepseek-v4-flash", displayName: "DeepSeek V4 Flash (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "x-ai/grok-4.3", displayName: "Grok 4.3 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "x-ai/grok-4.20", displayName: "Grok 4.20 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "llama-4-scout", displayName: "Llama 4 Scout (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "llama-4-maverick", displayName: "Llama 4 Maverick (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "llama-3.3-70b-instruct", displayName: "Llama 3.3 70B (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "mistral-small-2603", displayName: "Mistral Small 4 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "mistral-medium-3-5", displayName: "Mistral Medium 3.5 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "mistral-large-2512", displayName: "Mistral Large (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "devstral-2512", displayName: "Devstral 2 (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "codestral-2508", displayName: "Codestral (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "mistral-nemo", displayName: "Mistral Nemo (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "qwen/qwen3.6-plus", displayName: "Qwen 3.6 Plus (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "qwen/qwen3.5-397b-a17b", displayName: "Qwen 3.5 397B (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "perplexity/sonar-deep-research", displayName: "Perplexity Sonar Deep Research (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "perplexity/sonar-pro-search", displayName: "Perplexity Sonar Pro Search (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "perplexity/sonar-pro", displayName: "Perplexity Sonar Pro (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "perplexity/sonar-reasoning-pro", displayName: "Perplexity Sonar Reasoning Pro (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "puter", modelId: "perplexity/sonar", displayName: "Perplexity Sonar (Puter)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "puter", tos: "caution" }, + { provider: "cloudflare-ai", modelId: "@cf/meta/llama-3.3-70b-instruct", displayName: "Llama 3.3 70B (πŸ†“ ~150 resp/day)", monthlyTokens: 122000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "cloudflare-ai", tos: "caution" }, + { provider: "cloudflare-ai", modelId: "@cf/meta/llama-3.1-8b-instruct", displayName: "Llama 3.1 8B (πŸ†“)", monthlyTokens: 122000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "cloudflare-ai", tos: "caution" }, + { provider: "cloudflare-ai", modelId: "@cf/google/gemma-3-12b-it", displayName: "Gemma 3 12B (πŸ†“)", monthlyTokens: 122000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "cloudflare-ai", tos: "caution" }, + { provider: "cloudflare-ai", modelId: "@cf/mistral/mistral-7b-instruct-v0.2-lora", displayName: "Mistral 7B (πŸ†“)", monthlyTokens: 122000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "cloudflare-ai", tos: "caution" }, + { provider: "cloudflare-ai", modelId: "@cf/qwen/qwen2.5-coder-15b-instruct", displayName: "Qwen 2.5 Coder 15B (πŸ†“)", monthlyTokens: 122000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "cloudflare-ai", tos: "caution" }, + { provider: "cloudflare-ai", modelId: "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", displayName: "DeepSeek R1 Distill 32B (πŸ†“)", monthlyTokens: 122000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "cloudflare-ai", tos: "caution" }, + { provider: "scaleway", modelId: "qwen3-235b-a22b-instruct-2507", displayName: "Qwen3 235B A22B (1M free tok πŸ†“)", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "scaleway", tos: "ok" }, + { provider: "scaleway", modelId: "llama-3.1-70b-instruct", displayName: "Llama 3.1 70B (πŸ†“ EU)", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "scaleway", tos: "ok" }, + { provider: "scaleway", modelId: "llama-3.1-8b-instruct", displayName: "Llama 3.1 8B (πŸ†“ EU)", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "scaleway", tos: "ok" }, + { provider: "scaleway", modelId: "mistral-small-3.2-24b-instruct-2506", displayName: "Mistral Small 3.2 (πŸ†“ EU)", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "scaleway", tos: "ok" }, + { provider: "scaleway", modelId: "deepseek-v3-0324", displayName: "DeepSeek V3 (πŸ†“ EU)", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "scaleway", tos: "ok" }, + { provider: "scaleway", modelId: "gpt-oss-120b", displayName: "GPT-OSS 120B (πŸ†“ EU)", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "scaleway", tos: "ok" }, + { provider: "uncloseai", modelId: "adamo1139/Hermes-3-Llama-3.1-8B-FP8-Dynamic", displayName: "Hermes 3 Llama 3.1 8B (πŸ†“ Free)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "uncloseai", tos: "caution" }, + { provider: "uncloseai", modelId: "qwen3.6:27b", displayName: "Qwen3 Coder 27B (πŸ†“ Free)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "uncloseai", tos: "caution" }, + { provider: "uncloseai", modelId: "gemma4:31b", displayName: "Gemma 4 31B (πŸ†“ Free)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "uncloseai", tos: "caution" }, + { provider: "hackclub", modelId: "meta-llama/llama-3.3-70b-instruct", displayName: "Llama 3.3 70B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "hackclub", tos: "caution" }, + { provider: "hackclub", modelId: "mistralai/mistral-7b-instruct", displayName: "Mistral 7B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "hackclub", tos: "caution" }, + { provider: "hackclub", modelId: "deepseek-ai/deepseek-coder-33b", displayName: "DeepSeek Coder 33B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "hackclub", tos: "caution" }, + { provider: "deepinfra", modelId: "anthropic/claude-4-opus", displayName: "anthropic/claude-4-opus", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "anthropic/claude-4-sonnet", displayName: "anthropic/claude-4-sonnet", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "openai/gpt-oss-120b", displayName: "openai/gpt-oss-120b", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "openai/gpt-oss-20b", displayName: "openai/gpt-oss-20b", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "google/gemma-4-31B-it", displayName: "google/gemma-4-31B-it", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "google/gemma-4-26B-A4B-it", displayName: "google/gemma-4-26B-A4B-it", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B", displayName: "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning", displayName: "nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", displayName: "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "meta-llama/Llama-4-Scout-17B-16E-Instruct", displayName: "meta-llama/Llama-4-Scout-17B-16E-Instruct", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "meta-llama/Llama-3.3-70B-Instruct-Turbo", displayName: "meta-llama/Llama-3.3-70B-Instruct-Turbo", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "NousResearch/Hermes-3-Llama-3.1-405B", displayName: "NousResearch/Hermes-3-Llama-3.1-405B", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "deepseek-ai/DeepSeek-V4-Pro", displayName: "deepseek-ai/DeepSeek-V4-Pro", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "deepseek-ai/DeepSeek-V4-Flash", displayName: "deepseek-ai/DeepSeek-V4-Flash", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "zai-org/GLM-5.1", displayName: "zai-org/GLM-5.1", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "moonshotai/Kimi-K2.6", displayName: "moonshotai/Kimi-K2.6", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "MiniMaxAI/MiniMax-M2.5", displayName: "MiniMaxAI/MiniMax-M2.5", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "Qwen/Qwen3.6-35B-A3B", displayName: "Qwen/Qwen3.6-35B-A3B", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "Qwen/Qwen3.5-397B-A17B", displayName: "Qwen/Qwen3.5-397B-A17B", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "Qwen/Qwen3.5-122B-A10B", displayName: "Qwen/Qwen3.5-122B-A10B", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "XiaomiMiMo/MiMo-V2.5-Pro", displayName: "XiaomiMiMo/MiMo-V2.5-Pro", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "deepinfra", modelId: "XiaomiMiMo/MiMo-V2.5", displayName: "XiaomiMiMo/MiMo-V2.5", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "deepinfra", tos: "caution" }, + { provider: "sambanova", modelId: "MiniMax-M2.7", displayName: "MiniMax-M2.7", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" }, + { provider: "sambanova", modelId: "DeepSeek-V3.2", displayName: "DeepSeek-V3.2", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" }, + { provider: "sambanova", modelId: "Llama-4-Maverick-17B-128E-Instruct", displayName: "Llama-4-Maverick-17B-128E-Instruct", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" }, + { provider: "sambanova", modelId: "Meta-Llama-3.3-70B-Instruct", displayName: "Meta-Llama-3.3-70B-Instruct", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" }, + { provider: "sambanova", modelId: "gpt-oss-120b", displayName: "gpt-oss-120b", monthlyTokens: 6000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "sambanova", tos: "caution" }, + { provider: "nscale", modelId: "moonshotai/Kimi-K2.5", displayName: "moonshotai/Kimi-K2.5", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "nscale", tos: "caution" }, + { provider: "nscale", modelId: "Qwen/Qwen3-235B-A22B-Instruct-2507", displayName: "Qwen/Qwen3-235B-A22B-Instruct-2507", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "nscale", tos: "caution" }, + { provider: "nscale", modelId: "openai/gpt-oss-120b", displayName: "openai/gpt-oss-120b", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "nscale", tos: "caution" }, + { provider: "nscale", modelId: "openai/gpt-oss-20b", displayName: "openai/gpt-oss-20b", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "nscale", tos: "caution" }, + { provider: "nscale", modelId: "meta-llama/Llama-4-Scout-17B-16E-Instruct", displayName: "meta-llama/Llama-4-Scout-17B-16E-Instruct", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "nscale", tos: "caution" }, + { provider: "nscale", modelId: "meta-llama/Llama-3.3-70B-Instruct", displayName: "meta-llama/Llama-3.3-70B-Instruct", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "nscale", tos: "caution" }, + { provider: "publicai", modelId: "swiss-ai/apertus-70b-instruct", displayName: "swiss-ai/apertus-70b-instruct", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "publicai", tos: "caution" }, + { provider: "publicai", modelId: "aisingapore/Qwen-SEA-LION-v4-32B-IT", displayName: "aisingapore/Qwen-SEA-LION-v4-32B-IT", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "publicai", tos: "caution" }, + { provider: "publicai", modelId: "allenai/Olmo-3-32B-Think", displayName: "allenai/Olmo-3-32B-Think", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "publicai", tos: "caution" }, + { provider: "morph", modelId: "morph-v3-large", displayName: "morph-v3-large", monthlyTokens: 400000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "morph", tos: "caution" }, + { provider: "morph", modelId: "morph-v3-fast", displayName: "morph-v3-fast", monthlyTokens: 400000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "morph", tos: "caution" }, + { provider: "featherless-ai", modelId: "featherless-ai/Qwerky-72B", displayName: "featherless-ai/Qwerky-72B", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "featherless-ai", tos: "avoid" }, + { provider: "featherless-ai", modelId: "featherless-ai/Qwerky-QwQ-32B", displayName: "featherless-ai/Qwerky-QwQ-32B", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "featherless-ai", tos: "avoid" }, + { provider: "friendliai", modelId: "meta-llama-3.1-70b-instruct", displayName: "meta-llama-3.1-70b-instruct", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "friendliai", tos: "avoid" }, + { provider: "friendliai", modelId: "meta-llama-3.1-8b-instruct", displayName: "meta-llama-3.1-8b-instruct", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "friendliai", tos: "avoid" }, + { provider: "ai21", modelId: "jamba-large-1.7", displayName: "jamba-large-1.7", monthlyTokens: 0, creditTokens: 10000000, freeType: "one-time-initial", poolKey: "ai21", tos: "avoid" }, + { provider: "ai21", modelId: "jamba-mini-2", displayName: "jamba-mini-2", monthlyTokens: 0, creditTokens: 10000000, freeType: "one-time-initial", poolKey: "ai21", tos: "avoid" }, + { provider: "qwen-web", modelId: "qwen-plus", displayName: "Qwen Plus", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" }, + { provider: "qwen-web", modelId: "qwen-max", displayName: "Qwen Max", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" }, + { provider: "qwen-web", modelId: "qwen-turbo", displayName: "Qwen Turbo", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" }, + { provider: "qwen-web", modelId: "qwen3-plus", displayName: "Qwen3 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" }, + { provider: "qwen-web", modelId: "qwen3-max", displayName: "Qwen3 Max", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" }, + { provider: "qwen-web", modelId: "qwen3-flash", displayName: "Qwen3 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" }, + { provider: "qwen-web", modelId: "qwen3-coder-plus", displayName: "Qwen3 Coder Plus", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" }, + { provider: "qwen-web", modelId: "qwen3-coder-flash", displayName: "Qwen3 Coder Flash", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" }, + { provider: "gitlawb", modelId: "mimo-v2.5-pro", displayName: "MiMo-V2.5-Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb", tos: "unknown" }, + { provider: "gitlawb", modelId: "mimo-v2.5", displayName: "MiMo-V2.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb", tos: "unknown" }, + { provider: "gitlawb", modelId: "mimo-v2-pro", displayName: "MiMo-V2-Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb", tos: "unknown" }, + { provider: "gitlawb", modelId: "mimo-v2-omni", displayName: "MiMo-V2-Omni", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb", tos: "unknown" }, + { provider: "gitlawb", modelId: "mimo-v2-flash", displayName: "MiMo-V2-Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb", tos: "unknown" }, + { provider: "gitlawb-gmi", modelId: "XiaomiMiMo/MiMo-V2.5-Pro", displayName: "MiMo-V2.5-Pro (GMI)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "XiaomiMiMo/MiMo-V2.5", displayName: "MiMo-V2.5 (GMI)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5.5", displayName: "GPT-5.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5.4-pro", displayName: "GPT-5.4 Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5.4", displayName: "GPT-5.4", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5.4-mini", displayName: "GPT-5.4 Mini", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5.4-nano", displayName: "GPT-5.4 Nano", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5.3-codex", displayName: "GPT-5.3 Codex", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5.2-codex", displayName: "GPT-5.2 Codex", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5.2", displayName: "GPT-5.2", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5.1", displayName: "GPT-5.1", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-5", displayName: "GPT-5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-4o", displayName: "GPT-4o", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "openai/gpt-4o-mini", displayName: "GPT-4o Mini", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "anthropic/claude-opus-4.7", displayName: "Claude Opus 4.7", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "anthropic/claude-opus-4.6", displayName: "Claude Opus 4.6", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "anthropic/claude-opus-4.5", displayName: "Claude Opus 4.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "anthropic/claude-opus-4.1", displayName: "Claude Opus 4.1", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "anthropic/claude-sonnet-4.6", displayName: "Claude Sonnet 4.6", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "anthropic/claude-sonnet-4.5", displayName: "Claude Sonnet 4.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "anthropic/claude-sonnet-4", displayName: "Claude Sonnet 4", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "anthropic/claude-haiku-4.5", displayName: "Claude Haiku 4.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "deepseek-ai/DeepSeek-V4-Pro", displayName: "DeepSeek V4 Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "deepseek-ai/DeepSeek-V4-Flash", displayName: "DeepSeek V4 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "deepseek-ai/DeepSeek-R1-0528", displayName: "DeepSeek R1", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "deepseek-ai/DeepSeek-V3.2", displayName: "DeepSeek V3.2", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "google/gemini-3.1-pro-preview", displayName: "Gemini 3.1 Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "google/gemini-3.1-flash-lite-preview", displayName: "Gemini 3.1 Flash Lite", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "google/gemini-3-flash-preview", displayName: "Gemini 3 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "zai-org/GLM-5.1-FP8", displayName: "GLM-5.1", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "zai-org/GLM-5-FP8", displayName: "GLM-5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "moonshotai/Kimi-K2.6", displayName: "Kimi K2.6", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "moonshotai/Kimi-K2.5", displayName: "Kimi K2.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "MiniMaxAI/MiniMax-M2.7", displayName: "MiniMax M2.7", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "MiniMaxAI/MiniMax-M2.5", displayName: "MiniMax M2.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "Qwen/Qwen3.6-Max-Preview", displayName: "Qwen3.6 Max", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "Qwen/Qwen3.6-Plus", displayName: "Qwen3.6 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "Qwen/Qwen3.5-397B-A17B", displayName: "Qwen3.5 397B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", displayName: "Qwen3 Coder 480B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "gitlawb-gmi", modelId: "nvidia/NVIDIA-Nemotron-3-Nano-Omni", displayName: "Nemotron 3 Nano", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb-gmi", tos: "ambiguous" }, + { provider: "inference-net", modelId: "meta-llama/Llama-3.3-70B-Instruct", displayName: "meta-llama/Llama-3.3-70B-Instruct", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "inference-net", tos: "caution" }, + { provider: "inference-net", modelId: "deepseek-ai/DeepSeek-R1", displayName: "deepseek-ai/DeepSeek-R1", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "inference-net", tos: "caution" }, + { provider: "inference-net", modelId: "Qwen/Qwen2.5-72B-Instruct", displayName: "Qwen/Qwen2.5-72B-Instruct", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "inference-net", tos: "caution" }, + { provider: "predibase", modelId: "llama-3.3-70b", displayName: "llama-3.3-70b", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "predibase", tos: "caution" }, + { provider: "bytez", modelId: "meta-llama/Llama-3.3-70B-Instruct", displayName: "meta-llama/Llama-3.3-70B-Instruct", monthlyTokens: 0, creditTokens: 1000000, freeType: "recurring-credit", poolKey: "bytez", tos: "ambiguous" }, + { provider: "bytez", modelId: "mistralai/Mistral-7B-Instruct-v0.3", displayName: "mistralai/Mistral-7B-Instruct-v0.3", monthlyTokens: 0, creditTokens: 1000000, freeType: "recurring-credit", poolKey: "bytez", tos: "ambiguous" }, + { provider: "bytez", modelId: "Qwen/Qwen2.5-72B-Instruct", displayName: "Qwen/Qwen2.5-72B-Instruct", monthlyTokens: 0, creditTokens: 1000000, freeType: "recurring-credit", poolKey: "bytez", tos: "ambiguous" }, + { provider: "llm7", modelId: "gpt-4o-mini-2024-07-18", displayName: "GPT-4o mini (LLM7)", monthlyTokens: 4320000, creditTokens: 0, freeType: "keyless", poolKey: "llm7", tos: "caution" }, + { provider: "llm7", modelId: "gpt-4.1-nano-2025-04-14", displayName: "GPT-4.1 nano (LLM7)", monthlyTokens: 4320000, creditTokens: 0, freeType: "keyless", poolKey: "llm7", tos: "caution" }, + { provider: "llm7", modelId: "deepseek-r1-0528", displayName: "DeepSeek R1 (LLM7)", monthlyTokens: 4320000, creditTokens: 0, freeType: "keyless", poolKey: "llm7", tos: "caution" }, + { provider: "llm7", modelId: "qwen2.5-coder-32b-instruct", displayName: "Qwen2.5 Coder 32B (LLM7)", monthlyTokens: 4320000, creditTokens: 0, freeType: "keyless", poolKey: "llm7", tos: "caution" }, + { provider: "aimlapi", modelId: "gpt-4o", displayName: "GPT-4o (via AI/ML API)", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "aimlapi", tos: "ambiguous" }, + { provider: "aimlapi", modelId: "claude-3-5-sonnet-20241022", displayName: "Claude 3.5 Sonnet (via AI/ML API)", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "aimlapi", tos: "ambiguous" }, + { provider: "aimlapi", modelId: "gemini-1.5-pro", displayName: "Gemini 1.5 Pro (via AI/ML API)", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "aimlapi", tos: "ambiguous" }, + { provider: "aimlapi", modelId: "meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo", displayName: "Llama 3.1 70B (via AI/ML API)", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "aimlapi", tos: "ambiguous" }, + { provider: "aimlapi", modelId: "deepseek-chat", displayName: "DeepSeek Chat (via AI/ML API)", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "aimlapi", tos: "ambiguous" }, + { provider: "aimlapi", modelId: "mistral-large-latest", displayName: "Mistral Large (via AI/ML API)", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "aimlapi", tos: "ambiguous" }, + { provider: "nous-research", modelId: "Hermes-4-405B", displayName: "Hermes 4 7B (Nous Research)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-credit", poolKey: "nous-research", tos: "ambiguous" }, + { provider: "nous-research", modelId: "Hermes-4-70B", displayName: "Hermes 4 70B (Nous Research)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-credit", poolKey: "nous-research", tos: "ambiguous" }, + { provider: "reka", modelId: "reka-flash-3", displayName: "Reka Flash 3", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "reka", tos: "caution" }, + { provider: "reka", modelId: "reka-edge-2603", displayName: "Reka Edge 2603", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "reka", tos: "caution" }, + { provider: "bluesminds", modelId: "gpt-4o", displayName: "GPT-4o", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "gpt-4o-mini", displayName: "GPT-4o Mini", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "gpt-4.1", displayName: "GPT-4.1", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "gpt-4.1-mini", displayName: "GPT-4.1 Mini", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "gpt-4.1-nano", displayName: "GPT-4.1 Nano", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "claude-sonnet-4-5", displayName: "Claude Sonnet 4.5", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "claude-haiku-4-5", displayName: "Claude Haiku 4.5", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "gemini-2.0-flash", displayName: "Gemini 2.0 Flash", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "gemini-2.0-flash-exp", displayName: "Gemini 2.0 Flash (Exp)", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "deepseek-reasoner", displayName: "DeepSeek Reasoner", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "deepseek-chat", displayName: "DeepSeek Chat", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "qwen-plus", displayName: "Qwen Plus", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "qwen-turbo", displayName: "Qwen Turbo", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "kimi-k2", displayName: "Kimi K2", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "kimi-k2-thinking", displayName: "Kimi K2 Thinking", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "glm-4.7", displayName: "GLM 4.7", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "glm-4-flash", displayName: "GLM 4 Flash", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "minimax-m2.5", displayName: "MiniMax M2.5", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "claude-opus-4-5", displayName: "Claude Opus 4.5 (VIP)", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "gemini-2.5-pro", displayName: "Gemini 2.5 Pro (VIP)", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "grok-3", displayName: "Grok-3 (VIP)", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "bluesminds", modelId: "qwen-max", displayName: "Qwen Max (VIP)", monthlyTokens: 7200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "bluesminds", tos: "ambiguous" }, + { provider: "freemodel-dev", modelId: "gpt-5.5", displayName: "GPT-5.5", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "freemodel-dev", tos: "unknown" }, + { provider: "freemodel-dev", modelId: "gpt-5.4", displayName: "GPT-5.4", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "freemodel-dev", tos: "unknown" }, + { provider: "freemodel-dev", modelId: "gpt-5.4-mini", displayName: "GPT-5.4 Mini", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "freemodel-dev", tos: "unknown" }, + { provider: "freemodel-dev", modelId: "gpt-5.3-codex", displayName: "GPT-5.3 Codex", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "freemodel-dev", tos: "unknown" }, + { provider: "theoldllm", modelId: "GPT_5_4", displayName: "GPT-5.4 (The Old LLM πŸ†“)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "theoldllm", tos: "unknown" }, + { provider: "theoldllm", modelId: "GPT_4o", displayName: "GPT-4o (The Old LLM πŸ†“)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "theoldllm", tos: "unknown" }, + { provider: "theoldllm", modelId: "claude_opus_4", displayName: "Claude Opus 4 (The Old LLM πŸ†“)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "theoldllm", tos: "unknown" }, + { provider: "theoldllm", modelId: "claude_sonnet_4", displayName: "Claude Sonnet 4 (The Old LLM πŸ†“)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "theoldllm", tos: "unknown" }, + { provider: "theoldllm", modelId: "claude_haiku_3_5", displayName: "Claude Haiku 3.5 (The Old LLM πŸ†“)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "theoldllm", tos: "unknown" }, + { provider: "theoldllm", modelId: "deepseek_v4", displayName: "DeepSeek V4 (The Old LLM πŸ†“)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "theoldllm", tos: "unknown" }, + { provider: "theoldllm", modelId: "gemini_3_flash", displayName: "Gemini 3 Flash (The Old LLM πŸ†“)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "theoldllm", tos: "unknown" }, + { provider: "theoldllm", modelId: "gemini_3_pro", displayName: "Gemini 3 Pro (The Old LLM πŸ†“)", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "theoldllm", tos: "unknown" }, +]; diff --git a/open-sse/config/freeModelCatalog.ts b/open-sse/config/freeModelCatalog.ts new file mode 100644 index 0000000000..958b174b8c --- /dev/null +++ b/open-sse/config/freeModelCatalog.ts @@ -0,0 +1,94 @@ +import type { TosVerdict } from "./freeTierCatalog.ts"; +export { FREE_MODEL_BUDGETS } from "./freeModelCatalog.data.ts"; +import { FREE_MODEL_BUDGETS } from "./freeModelCatalog.data.ts"; + +export type FreeModelFreeType = + | "recurring-daily" + | "recurring-monthly" + | "recurring-credit" + | "one-time-initial" + | "keyless" + | "discontinued"; + +export interface FreeModelBudget { + provider: string; + modelId: string; + displayName: string; + monthlyTokens: number; + creditTokens: number; + freeType: FreeModelFreeType; + poolKey: string | null; + tos: TosVerdict; +} + +export interface FreeModelTotals { + steadyRecurringTokens: number; + steadyWithRecurringCreditsTokens: number; + firstMonthRealisticTokens: number; + modelCount: number; + poolCount: number; + perModel: FreeModelBudget[]; + headline: string; +} + +const RECURRING = new Set(["recurring-daily", "recurring-monthly", "keyless"]); + +function fmt(n: number): string { + return n >= 1e9 ? (n / 1e9).toFixed(2) + "B" : Math.round(n / 1e6) + "M"; +} + +// Sum a per-model numeric field, counting each shared pool once (max within the pool); +// poolKey null => the model is independent and counts on its own. +function dedupedSum( + models: FreeModelBudget[], + pick: (m: FreeModelBudget) => number, + include: (m: FreeModelBudget) => boolean, +): number { + const poolMax = new Map(); + let loose = 0; + for (const m of models) { + if (!include(m)) continue; + const key = m.poolKey; + if (key) poolMax.set(key, Math.max(poolMax.get(key) ?? 0, pick(m))); + else loose += pick(m); + } + for (const v of poolMax.values()) loose += v; + return loose; +} + +export function computeFreeModelTotals(opts: { excludeTosAvoid?: boolean } = {}): FreeModelTotals { + const models = FREE_MODEL_BUDGETS.filter((m) => !(opts.excludeTosAvoid && m.tos === "avoid")); + + const steadyRecurringTokens = dedupedSum( + models, + (m) => m.monthlyTokens, + (m) => RECURRING.has(m.freeType), + ); + const recurringCredits = dedupedSum( + models, + (m) => m.creditTokens, + (m) => m.freeType === "recurring-credit", + ); + const oneTimeCredits = dedupedSum( + models, + (m) => m.creditTokens, + (m) => m.freeType === "one-time-initial", + ); + + const steadyWithRecurringCreditsTokens = steadyRecurringTokens + recurringCredits; + const firstMonthRealisticTokens = steadyWithRecurringCreditsTokens + oneTimeCredits; + + const poolCount = new Set( + models.filter((m) => RECURRING.has(m.freeType) && m.poolKey).map((m) => m.poolKey), + ).size; + + return { + steadyRecurringTokens, + steadyWithRecurringCreditsTokens, + firstMonthRealisticTokens, + modelCount: models.length, + poolCount, + perModel: models.slice().sort((a, b) => b.monthlyTokens - a.monthlyTokens), + headline: `~${fmt(steadyRecurringTokens)} documented free tokens/month (steady), up to ~${fmt(firstMonthRealisticTokens)} in your first month with signup credits`, + }; +} diff --git a/open-sse/config/freeTierCatalog.ts b/open-sse/config/freeTierCatalog.ts new file mode 100644 index 0000000000..18fede3017 --- /dev/null +++ b/open-sse/config/freeTierCatalog.ts @@ -0,0 +1,105 @@ +/** + * Free-tier monthly token budget catalog. + * + * Hand-seeded from the 2026-06-05 per-provider research snapshot. Each value is + * the UPPER-BOUND of a provider's DOCUMENTED recurring monthly free tokens + * (explicit daily/monthly token cap, or documented RPD Γ— ~800 tokens Γ— 30). + * + * Deliberately EXCLUDED (rate-limit-only, no published token cap β€” theoretical, + * not granted): tencent, siliconflow, nvidia, baidu, publicai, sparkdesk. + * One-time signup credits and discontinued tiers are excluded (do not recur). + */ +export type TosVerdict = "ok" | "caution" | "ambiguous" | "avoid" | "unknown"; + +export const FREE_TIER_BUDGETS: Record = { + mistral: 1_000_000_000, + longcat: 150_000_000, + "cloudflare-ai": 122_000_000, + gemini: 60_000_000, + doubao: 60_000_000, + cerebras: 30_000_000, + "api-airforce": 24_000_000, + "ollama-cloud": 20_000_000, + "github-models": 18_000_000, + groq: 15_000_000, + inclusionai: 15_000_000, + bluesminds: 7_200_000, + sambanova: 6_000_000, + "arcee-ai": 4_800_000, + llm7: 4_300_000, + bazaarlink: 3_600_000, + openrouter: 1_200_000, + cohere: 800_000, + huggingchat: 500_000, + morph: 400_000, + huggingface: 200_000, + kiro: 25_000, +}; + +/** + * Providers whose terms PROHIBIT routing through a self-hosted proxy or forbid + * non-personal use. Source: ToS attention table in docs/reference/FREE_TIERS.md. + */ +export const FREE_TIER_TOS: Record = { + opencode: "avoid", + "duckduckgo-web": "avoid", + "gemini-cli": "avoid", + agy: "avoid", + kiro: "avoid", + "amazon-q": "avoid", + "muse-spark-web": "avoid", + "t3-web": "avoid", + "qwen-web": "avoid", + modal: "avoid", + nlpcloud: "avoid", + blackbox: "avoid", + completions: "avoid", + fireworks: "avoid", + "featherless-ai": "avoid", + friendliai: "avoid", + ai21: "avoid", + iflytek: "avoid", + coze: "avoid", +}; + +export interface FreeTierTotals { + documentedMonthlyTokens: number; + providerCount: number; + byProvider: Array<{ id: string; monthlyTokens: number; tos: TosVerdict }>; + headline: string; +} + +function billions(n: number): string { + return n >= 1e9 ? (n / 1e9).toFixed(2) + "B" : Math.round(n / 1e6) + "M"; +} + +/** + * Sum the documented free-tier budgets. `excludeTosAvoid` drops providers whose + * terms prohibit proxy use (not usable headroom). + * + * @deprecated Superseded by the per-MODEL catalog. Use + * `computeFreeModelTotals()` from `./freeModelCatalog.ts` β€” it is the canonical + * source behind `/api/free-tier/summary` (~1.94B steady vs this per-provider + * ~1.54B). This per-provider aggregator is retained only for reference; the + * `FREE_TIER_TOS` map below is still used as the ToS source of truth. + */ +export function computeFreeTierTotals( + opts: { excludeTosAvoid?: boolean } = {} +): FreeTierTotals { + const byProvider = Object.entries(FREE_TIER_BUDGETS) + .map(([id, monthlyTokens]) => ({ + id, + monthlyTokens, + tos: (FREE_TIER_TOS[id] ?? "caution") as TosVerdict, + })) + .filter((p) => !(opts.excludeTosAvoid && p.tos === "avoid")) + .sort((a, b) => b.monthlyTokens - a.monthlyTokens); + + const documentedMonthlyTokens = byProvider.reduce((s, p) => s + p.monthlyTokens, 0); + return { + documentedMonthlyTokens, + providerCount: byProvider.length, + byProvider, + headline: `over ${billions(documentedMonthlyTokens)} documented free tokens/month across ${byProvider.length}+ providers`, + }; +} diff --git a/src/app/(dashboard)/dashboard/free-tiers/page.tsx b/src/app/(dashboard)/dashboard/free-tiers/page.tsx new file mode 100644 index 0000000000..9b4f458880 --- /dev/null +++ b/src/app/(dashboard)/dashboard/free-tiers/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import FreeBudgetCard from "@/app/(dashboard)/dashboard/usage/components/FreeBudgetCard"; + +export default function FreeTiersPage() { + return ( +
+ +
+ ); +} diff --git a/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx b/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx index b91d1fc46e..4f02966e36 100644 --- a/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx +++ b/src/app/(dashboard)/dashboard/usage/components/BudgetTab.tsx @@ -5,7 +5,6 @@ import { useLocale, useTranslations } from "next-intl"; import { Card, Button, Input, EmptyState } from "@/shared/components"; import { useNotificationStore } from "@/store/notificationStore"; import { compareTr, matchesSearch } from "@/shared/utils/turkishText"; - // ──────────────────────────────────────────────────────────────────────────── // Types // ──────────────────────────────────────────────────────────────────────────── diff --git a/src/app/(dashboard)/dashboard/usage/components/FreeBudgetCard.tsx b/src/app/(dashboard)/dashboard/usage/components/FreeBudgetCard.tsx new file mode 100644 index 0000000000..6d514fe237 --- /dev/null +++ b/src/app/(dashboard)/dashboard/usage/components/FreeBudgetCard.tsx @@ -0,0 +1,317 @@ +"use client"; + +import { useState, useEffect } from "react"; +import React from "react"; + +// ──────────────────────────────────────────────────────────────────────────── +// Types +// ──────────────────────────────────────────────────────────────────────────── + +export interface FreeBudgetPerModel { + provider: string; + modelId: string; + displayName: string; + monthlyTokens: number; + creditTokens: number; + freeType: string; + poolKey: string; + tos: string; +} + +export interface FreeBudgetData { + steadyRecurringTokens: number; + steadyWithRecurringCreditsTokens: number; + firstMonthRealisticTokens: number; + usedThisMonth: number; + remaining: number; + modelCount: number; + poolCount: number; + perModel: FreeBudgetPerModel[]; + headline?: string; +} + +// ──────────────────────────────────────────────────────────────────────────── +// Helpers +// ──────────────────────────────────────────────────────────────────────────── + +function fmt(n: number): string { + if (n >= 1e9) return (n / 1e9).toFixed(2).replace(/\.?0+$/, "") + "B"; + return Math.round(n / 1e6) + "M"; +} + +// Distinct hues for stacked bar segments (cycling) +const BAR_HUES = [ + "#6366f1", // indigo + "#10b981", // emerald + "#f59e0b", // amber + "#3b82f6", // blue + "#ec4899", // pink + "#14b8a6", // teal + "#f97316", // orange + "#8b5cf6", // violet + "#06b6d4", // cyan + "#84cc16", // lime +]; + +// ──────────────────────────────────────────────────────────────────────────── +// Pool-dedup helpers +// ──────────────────────────────────────────────────────────────────────────── + +const RECURRING_TYPES = new Set(["recurring-daily", "recurring-monthly", "keyless"]); + +interface BarSegment { + /** Unique key for React rendering */ + key: string; + /** Label shown in the tooltip */ + label: string; + tokens: number; + color: string; +} + +/** + * Build an ordered list of bar segments from per-model data. + * - For recurring-type models that share a poolKey, emit ONE segment using the + * pool's MAX monthlyTokens, labeled by the top model's displayName. + * - For recurring-type models with poolKey===null, emit one segment each. + * The segments therefore sum to `steadyRecurringTokens` (the deduped header total). + */ +function buildBarSegments(perModel: FreeBudgetPerModel[]): BarSegment[] { + // Deterministic color by provider β€” stable hue even if model order changes + const providerColorCache = new Map(); + function colorFor(provider: string): string { + if (!providerColorCache.has(provider)) { + // Assign from BAR_HUES in first-seen order + const idx = providerColorCache.size; + providerColorCache.set(provider, BAR_HUES[idx % BAR_HUES.length]); + } + return providerColorCache.get(provider)!; + } + + const seenPools = new Map(); + const looseSegments: BarSegment[] = []; + + for (const m of perModel) { + if (!RECURRING_TYPES.has(m.freeType)) continue; + if (m.monthlyTokens <= 0) continue; + + if (m.poolKey) { + const existing = seenPools.get(m.poolKey); + if (!existing) { + seenPools.set(m.poolKey, { + key: `pool:${m.poolKey}`, + label: `${m.displayName} (${m.provider})`, + tokens: m.monthlyTokens, + color: colorFor(m.provider), + }); + } else if (m.monthlyTokens > existing.tokens) { + // Keep max within the pool; update label to the larger model + seenPools.set(m.poolKey, { ...existing, tokens: m.monthlyTokens, label: `${m.displayName} (${m.provider})` }); + } + } else { + looseSegments.push({ + key: `model:${m.modelId}`, + label: `${m.displayName}`, + tokens: m.monthlyTokens, + color: colorFor(m.provider), + }); + } + } + + return [...seenPools.values(), ...looseSegments]; +} + +/** + * Map each perModel entry to the color of its pool/provider bar segment. + * Used so the legend swatches match the bar segment for that provider. + */ +function buildLegendColorMap( + perModel: FreeBudgetPerModel[], + segments: BarSegment[], +): Map { + // Build: poolKey β†’ color, provider β†’ color from the resolved segments + const poolColorMap = new Map(); + const providerColorMap = new Map(); + for (const seg of segments) { + if (seg.key.startsWith("pool:")) { + const pk = seg.key.slice("pool:".length); + poolColorMap.set(pk, seg.color); + } + } + for (const m of perModel) { + if (m.poolKey && poolColorMap.has(m.poolKey)) { + providerColorMap.set(m.provider, poolColorMap.get(m.poolKey)!); + } + } + // For loose segments, map by model key directly + const modelColorMap = new Map(); + for (const seg of segments) { + if (seg.key.startsWith("model:")) { + const mid = seg.key.slice("model:".length); + modelColorMap.set(mid, seg.color); + } + } + // Final lookup: per modelId β†’ color + const result = new Map(); + for (const m of perModel) { + if (modelColorMap.has(m.modelId)) { + result.set(m.modelId, modelColorMap.get(m.modelId)!); + } else if (m.poolKey && poolColorMap.has(m.poolKey)) { + result.set(m.modelId, poolColorMap.get(m.poolKey)!); + } else { + // Fallback: stable hash by provider + const provColor = providerColorMap.get(m.provider) ?? BAR_HUES[0]; + result.set(m.modelId, provColor); + } + } + return result; +} + +// ──────────────────────────────────────────────────────────────────────────── +// Pure view (SSR-testable β€” no hooks) +// ──────────────────────────────────────────────────────────────────────────── + +export function FreeBudgetView({ data }: { data: FreeBudgetData }) { + const { + steadyRecurringTokens, + firstMonthRealisticTokens, + remaining, + perModel, + } = data; + + const pct = + steadyRecurringTokens > 0 + ? Math.round((remaining / steadyRecurringTokens) * 100) + : 0; + + const avoidModels = perModel.filter((m) => m.tos === "avoid"); + + // Pool-deduped bar segments β€” their token sum equals steadyRecurringTokens + const barSegments = buildBarSegments(perModel); + const totalBarTokens = barSegments.reduce((s, seg) => s + seg.tokens, 0); + + // Per-model color lookup for legend swatches (matches bar) + const legendColorMap = buildLegendColorMap(perModel, barSegments); + + // Filter legend to entries with something to show (no zero-budget clutter) + const legendModels = perModel.filter((m) => m.monthlyTokens > 0 || m.creditTokens > 0); + + return ( +
+ {/* Header */} +
+ + token + + + Monthly free-token budget + + + {fmt(remaining)} remaining Β· {pct}% of {fmt(steadyRecurringTokens)} + +
+ + {/* Stacked bar β€” pool-deduped; segments sum to steadyRecurringTokens */} + {barSegments.length > 0 && ( +
+
+ {barSegments.map((seg) => { + const width = + totalBarTokens > 0 + ? ((seg.tokens / totalBarTokens) * 100).toFixed(2) + : "0"; + return ( +
+ ); + })} +
+
+ )} + + {/* First-month callout */} +
+ Up to{" "} + + {fmt(firstMonthRealisticTokens)} + {" "} + in your first month with signup credits +
+ + {/* ToS-restricted callout */} + {avoidModels.length > 0 && ( +
+ + warning + + + {avoidModels.length} model + {avoidModels.length !== 1 ? "s" : ""} flagged as ToS-restricted + +
+ )} + + {/* Per-model legend grid β€” filtered to non-zero entries; colors match bar */} +
+
+ {legendModels.map((m) => { + const swatchColor = legendColorMap.get(m.modelId) ?? BAR_HUES[0]; + return ( +
+ + + {m.displayName} + + + {m.monthlyTokens >= 1e6 ? fmt(m.monthlyTokens) : m.monthlyTokens.toLocaleString()} + + {m.tos === "avoid" && ( + + warning + + )} +
+ ); + })} +
+
+
+ ); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Fetch wrapper (client component) +// ──────────────────────────────────────────────────────────────────────────── + +export default function FreeBudgetCard() { + const [data, setData] = useState(null); + + useEffect(() => { + fetch("/api/free-tier/summary") + .then((r) => (r.ok ? r.json() : null)) + .then((json) => { + if (json) setData(json as FreeBudgetData); + }) + .catch(() => { + /* best-effort */ + }); + }, []); + + if (!data) return null; + + return ; +} diff --git a/src/app/api/free-tier/summary/route.ts b/src/app/api/free-tier/summary/route.ts new file mode 100644 index 0000000000..d497629d47 --- /dev/null +++ b/src/app/api/free-tier/summary/route.ts @@ -0,0 +1,28 @@ +import { computeFreeModelTotals } from "@omniroute/open-sse/config/freeModelCatalog.ts"; +import { sumUsageTokensThisMonth } from "@/lib/db/usageSummary"; + +const CORS = { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "GET, OPTIONS", + "Access-Control-Allow-Headers": "Content-Type, Authorization", +}; + +export function OPTIONS(): Response { + return new Response(null, { status: 204, headers: CORS }); +} + +export async function GET(req: Request): Promise { + const url = new URL(req.url); + const excludeTosAvoid = url.searchParams.get("excludeTosAvoid") === "1"; + const totals = computeFreeModelTotals({ excludeTosAvoid }); + const usedThisMonth = sumUsageTokensThisMonth(); + const body = { + ...totals, + usedThisMonth, + remaining: Math.max(0, totals.steadyRecurringTokens - usedThisMonth), + }; + return new Response(JSON.stringify(body), { + status: 200, + headers: { "Content-Type": "application/json", ...CORS }, + }); +} diff --git a/src/domain/omnirouteResponseMeta.ts b/src/domain/omnirouteResponseMeta.ts index 287ed20542..561772204b 100644 --- a/src/domain/omnirouteResponseMeta.ts +++ b/src/domain/omnirouteResponseMeta.ts @@ -47,6 +47,7 @@ export function formatOmniRouteCost(costUsd: unknown): string { export function buildOmniRouteResponseMetaHeaders({ cacheHit = false, costUsd = 0, + fallbackAttempts = 0, latencyMs = 0, model = null, provider = null, @@ -54,6 +55,7 @@ export function buildOmniRouteResponseMetaHeaders({ }: { cacheHit?: boolean; costUsd?: unknown; + fallbackAttempts?: number; latencyMs?: unknown; model?: string | null; provider?: string | null; @@ -76,6 +78,11 @@ export function buildOmniRouteResponseMetaHeaders({ headers[OMNIROUTE_RESPONSE_HEADERS.provider] = getProviderAlias(provider); } + const attempts = toNonNegativeInteger(fallbackAttempts); + if (attempts > 0) { + headers[OMNIROUTE_RESPONSE_HEADERS.fallbackAttempts] = String(attempts); + } + return headers; } diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 22fd29686d..8864863613 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -967,6 +967,7 @@ "analyticsComboHealth": "Combo Health", "analyticsCompression": "Compression", "costsBudget": "Budget", + "costsFreeTiers": "Free-Tier Budget", "costsQuotaShare": "Quota Sharing", "costsPricing": "Pricing", "logsProxy": "Proxy Logs", @@ -1036,6 +1037,7 @@ "healthSubtitle": "System health check", "costsPricingSubtitle": "Per-model pricing rules", "costsBudgetSubtitle": "Budget limits", + "costsFreeTiersSubtitle": "Monthly free-token allowances", "costsQuotaShareSubtitle": "Share provider quotas across keys", "auditLogSubtitle": "Authorization audit", "auditMcpSubtitle": "MCP server audit", diff --git a/src/lib/db/usageSummary.ts b/src/lib/db/usageSummary.ts new file mode 100644 index 0000000000..1885d7c7fb --- /dev/null +++ b/src/lib/db/usageSummary.ts @@ -0,0 +1,18 @@ +import { getDbInstance } from "./core.ts"; +import type { SqliteAdapter } from "./adapters/types.ts"; + +/** Total input+output tokens rolled up in daily_usage_summary for the current calendar month. */ +export function sumUsageTokensThisMonth(db: SqliteAdapter = getDbInstance()): number { + try { + const row = db + .prepare( + `SELECT COALESCE(SUM(total_input_tokens + total_output_tokens), 0) AS used + FROM daily_usage_summary + WHERE date >= strftime('%Y-%m-01','now')` + ) + .get() as { used: number } | undefined; + return row?.used ?? 0; + } catch { + return 0; // table may not exist yet on a fresh install β€” treat as 0 used + } +} diff --git a/src/lib/localDb.ts b/src/lib/localDb.ts index 1a91121c2e..6a8f9968e9 100755 --- a/src/lib/localDb.ts +++ b/src/lib/localDb.ts @@ -614,3 +614,5 @@ export { listApiKeyContextSources, } from "./db/apiKeyContextSources"; export type { ApiKeyContextSource } from "./db/apiKeyContextSources"; + +export { sumUsageTokensThisMonth } from "./db/usageSummary"; diff --git a/src/shared/constants/headers.ts b/src/shared/constants/headers.ts index 74ef3e3e0d..63f166586a 100644 --- a/src/shared/constants/headers.ts +++ b/src/shared/constants/headers.ts @@ -1,6 +1,7 @@ export const OMNIROUTE_RESPONSE_HEADERS = { cache: "X-OmniRoute-Cache", cacheHit: "X-OmniRoute-Cache-Hit", + fallbackAttempts: "X-OmniRoute-Fallback-Attempts", latencyMs: "X-OmniRoute-Latency-Ms", model: "X-OmniRoute-Model", progress: "X-OmniRoute-Progress", diff --git a/src/shared/constants/providers.ts b/src/shared/constants/providers.ts index df46a689f6..4b7dc2f6a5 100644 --- a/src/shared/constants/providers.ts +++ b/src/shared/constants/providers.ts @@ -168,6 +168,7 @@ export const OAUTH_PROVIDERS = { subscriptionRisk: true, riskNoticeVariant: "deprecated", hasFree: true, + freeNote: "Free tier: 50 credits/month (~25K–100K tokens). ⚠️ Kiro ToS prohibits third-party proxy/harness use.", }, "amazon-q": { id: "amazon-q", @@ -1005,7 +1006,7 @@ export const APIKEY_PROVIDERS = { textIcon: "CB", website: "https://inference.cerebras.ai", hasFree: true, - freeNote: "Free: 1M tokens/day, 60K TPM β€” world's fastest inference", + freeNote: "Free Trial: 1M tokens/day, 30K TPM, 5 RPM β€” no credit card.", }, cohere: { id: "cohere", @@ -1188,8 +1189,7 @@ export const APIKEY_PROVIDERS = { textIcon: "LC", website: "https://longcat.chat/platform/docs", hasFree: true, - freeNote: - "50M tokens/day (Flash-Lite) + 500K/day (Chat/Thinking) β€” 100% free while public beta", + freeNote: "Free: 5M tokens/day on LongCat-2.0-Preview (Flash models retired 2026-05-29); up to 120M/day via feedback.", }, pollinations: { id: "pollinations", diff --git a/src/shared/constants/sidebarVisibility.ts b/src/shared/constants/sidebarVisibility.ts index 5dd9d328e4..1e22507272 100644 --- a/src/shared/constants/sidebarVisibility.ts +++ b/src/shared/constants/sidebarVisibility.ts @@ -47,6 +47,7 @@ export const HIDEABLE_SIDEBAR_ITEM_IDS = [ // Costs section "costs-pricing", "costs-budget", + "costs-free-tiers", "costs-quota-share", // Monitoring > Audit "audit", @@ -469,6 +470,13 @@ const COSTS_ITEMS: readonly SidebarItemDefinition[] = [ subtitleKey: "costsBudgetSubtitle", icon: "savings", }, + { + id: "costs-free-tiers", + href: "/dashboard/free-tiers", + i18nKey: "costsFreeTiers", + subtitleKey: "costsFreeTiersSubtitle", + icon: "request_quote", + }, ]; const AUDIT_GROUP: SidebarItemGroup = { diff --git a/tests/unit/free-budget-card.test.tsx b/tests/unit/free-budget-card.test.tsx new file mode 100644 index 0000000000..8f84db3c0d --- /dev/null +++ b/tests/unit/free-budget-card.test.tsx @@ -0,0 +1,62 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { renderToStaticMarkup } from "react-dom/server"; +import React from "react"; +import { FreeBudgetView } from "../../src/app/(dashboard)/dashboard/usage/components/FreeBudgetCard.tsx"; + +const data = { + steadyRecurringTokens: 1_940_000_000, + steadyWithRecurringCreditsTokens: 1_941_000_000, + firstMonthRealisticTokens: 2_530_000_000, + usedThisMonth: 40_000_000, + remaining: 1_900_000_000, + modelCount: 530, + poolCount: 50, + perModel: [ + { provider: "mistral", modelId: "mistral-large", displayName: "Mistral Large", monthlyTokens: 1_000_000_000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "mistral", tos: "caution" }, + { provider: "kiro", modelId: "kiro", displayName: "Kiro", monthlyTokens: 25_000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" }, + ], +}; + +test("FreeBudgetView renders steady total, remaining, first-month, per-model rows, and ToS-restricted count", () => { + const html = renderToStaticMarkup(React.createElement(FreeBudgetView, { data })); + assert.match(html, /1\.94B/); // steady + assert.match(html, /2\.53B/); // first-month + assert.match(html, /remaining/i); + assert.match(html, /Mistral Large/); + assert.match(html, /1 .*(ToS|restricted)/i); // 1 avoid-flagged model called out +}); + +// Pool-dedup: two models in the same pool β†’ only ONE bar segment for that pool +test("FreeBudgetView bar is pool-deduped: two models sharing a poolKey produce one bar segment", () => { + const sharedPoolData = { + steadyRecurringTokens: 1_000_000_000, + steadyWithRecurringCreditsTokens: 1_000_000_000, + firstMonthRealisticTokens: 1_200_000_000, + usedThisMonth: 0, + remaining: 1_000_000_000, + modelCount: 3, + poolCount: 1, + perModel: [ + // Two models in the same pool β€” should produce only 1 bar segment + { provider: "gemini", modelId: "gemini-flash", displayName: "Gemini Flash", monthlyTokens: 1_000_000_000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "gemini-pool", tos: "ok" }, + { provider: "gemini", modelId: "gemini-pro", displayName: "Gemini Pro", monthlyTokens: 500_000_000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "gemini-pool", tos: "ok" }, + // One standalone model (poolKey null) + { provider: "openai", modelId: "gpt-free", displayName: "GPT Free", monthlyTokens: 200_000_000, creditTokens: 0, freeType: "keyless", poolKey: null, tos: "ok" }, + ], + }; + + const html = renderToStaticMarkup(React.createElement(FreeBudgetView, { data: sharedPoolData })); + + // Count bar segment divs by data-testid attribute + const segmentMatches = html.match(/data-testid="bar-segment"/g); + const segmentCount = segmentMatches ? segmentMatches.length : 0; + + // 1 pool-segment (gemini-pool) + 1 loose segment (openai) = 2 total, NOT 3 + assert.equal(segmentCount, 2, `Expected 2 pool-deduped bar segments, got ${segmentCount}`); + + // Legend should show all 3 models (informational) + assert.match(html, /Gemini Flash/); + assert.match(html, /Gemini Pro/); + assert.match(html, /GPT Free/); +}); diff --git a/tests/unit/free-model-catalog.test.ts b/tests/unit/free-model-catalog.test.ts new file mode 100644 index 0000000000..14d1f58dea --- /dev/null +++ b/tests/unit/free-model-catalog.test.ts @@ -0,0 +1,35 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { FREE_MODEL_BUDGETS, computeFreeModelTotals } from "../../open-sse/config/freeModelCatalog.ts"; + +test("FREE_MODEL_BUDGETS is a non-empty array of well-formed per-model records", () => { + assert.ok(Array.isArray(FREE_MODEL_BUDGETS) && FREE_MODEL_BUDGETS.length >= 400); + for (const m of FREE_MODEL_BUDGETS) { + assert.equal(typeof m.provider, "string"); + assert.equal(typeof m.modelId, "string"); + assert.ok(Number.isInteger(m.monthlyTokens) && m.monthlyTokens >= 0); + assert.ok(Number.isInteger(m.creditTokens) && m.creditTokens >= 0); + assert.ok(["recurring-daily","recurring-monthly","recurring-credit","one-time-initial","keyless","discontinued"].includes(m.freeType)); + } +}); + +test("computeFreeModelTotals dedupes shared pools AND per-account credits, tiers honestly", () => { + const t = computeFreeModelTotals(); + // pool-deduped steady recurring should be in a defensible band (NOT the inflated per-model sum) + assert.ok(t.steadyRecurringTokens >= 1_000_000_000 && t.steadyRecurringTokens <= 4_000_000_000, `steady=${t.steadyRecurringTokens}`); + assert.ok(t.steadyWithRecurringCreditsTokens >= t.steadyRecurringTokens); + assert.ok(t.firstMonthRealisticTokens >= t.steadyWithRecurringCreditsTokens); + // one-time credits must be pool-deduped: a multi-model provider's signup credit counts once. + // (Sanity: first-month delta over steady must be far below the naive per-model credit sum.) + const naiveOneTime = FREE_MODEL_BUDGETS.filter(m=>m.freeType==="one-time-initial").reduce((s,m)=>s+m.creditTokens,0); + assert.ok(t.firstMonthRealisticTokens - t.steadyWithRecurringCreditsTokens < naiveOneTime, "one-time credits not deduped"); + assert.equal(t.modelCount, FREE_MODEL_BUDGETS.length); + assert.equal(typeof t.headline, "string"); +}); + +test("excludeTosAvoid drops avoid-flagged models from the totals", () => { + const all = computeFreeModelTotals(); + const clean = computeFreeModelTotals({ excludeTosAvoid: true }); + assert.ok(clean.modelCount < all.modelCount); + assert.ok(clean.steadyRecurringTokens <= all.steadyRecurringTokens); +}); diff --git a/tests/unit/free-note-freshness.test.ts b/tests/unit/free-note-freshness.test.ts new file mode 100644 index 0000000000..1f24629218 --- /dev/null +++ b/tests/unit/free-note-freshness.test.ts @@ -0,0 +1,19 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { getProviderById } from "../../src/shared/constants/providers.ts"; + +const note = (id: string): string => getProviderById(id)?.freeNote ?? ""; + +test("kiro freeNote reflects the current 50-credit/month reality + ToS warning", () => { + const n = note("kiro"); + assert.match(n, /50 credits\/month/i); + assert.match(n, /ToS|proxy/i); +}); + +test("longcat freeNote reflects the post-2026-05-29 5M tokens/day reality", () => { + assert.match(note("longcat"), /5M tokens\/day|LongCat-2\.0/i); +}); + +test("cerebras freeNote reflects the tightened 30K TPM", () => { + assert.match(note("cerebras"), /30K TPM|1M tokens\/day/i); +}); diff --git a/tests/unit/free-tier-catalog.test.ts b/tests/unit/free-tier-catalog.test.ts new file mode 100644 index 0000000000..5a96d7b20a --- /dev/null +++ b/tests/unit/free-tier-catalog.test.ts @@ -0,0 +1,40 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + FREE_TIER_BUDGETS, + FREE_TIER_TOS, + computeFreeTierTotals, +} from "../../open-sse/config/freeTierCatalog.ts"; + +test("FREE_TIER_BUDGETS holds positive integer monthly-token budgets", () => { + assert.ok(Object.keys(FREE_TIER_BUDGETS).length >= 20); + for (const [id, tokens] of Object.entries(FREE_TIER_BUDGETS)) { + assert.ok(Number.isInteger(tokens) && tokens > 0, `${id} must be a positive integer`); + } + assert.equal(FREE_TIER_BUDGETS.mistral, 1_000_000_000); + assert.equal(FREE_TIER_BUDGETS.longcat, 150_000_000); + assert.equal(FREE_TIER_BUDGETS["cloudflare-ai"], 122_000_000); + assert.equal(FREE_TIER_BUDGETS.cerebras, 30_000_000); +}); + +test("FREE_TIER_TOS marks proxy-prohibited providers as avoid", () => { + for (const id of ["kiro", "gemini-cli", "amazon-q", "blackbox", "fireworks"]) { + assert.equal(FREE_TIER_TOS[id], "avoid", `${id} must be flagged avoid`); + } +}); + +test("computeFreeTierTotals sums the documented budgets", () => { + const t = computeFreeTierTotals(); + assert.equal(t.providerCount, 22); + assert.ok(t.documentedMonthlyTokens >= 1_500_000_000); + assert.ok(t.documentedMonthlyTokens <= 1_600_000_000); + assert.equal(typeof t.headline, "string"); + assert.match(t.headline, /1\.5/); +}); + +test("computeFreeTierTotals can exclude ToS-avoid providers", () => { + const all = computeFreeTierTotals(); + const clean = computeFreeTierTotals({ excludeTosAvoid: true }); + assert.equal(all.documentedMonthlyTokens - clean.documentedMonthlyTokens, 25_000); + assert.equal(clean.providerCount, 21); +}); diff --git a/tests/unit/free-tier-summary-route.test.ts b/tests/unit/free-tier-summary-route.test.ts new file mode 100644 index 0000000000..9b06f54153 --- /dev/null +++ b/tests/unit/free-tier-summary-route.test.ts @@ -0,0 +1,42 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { mkdtempSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; + +process.env.DATA_DIR = mkdtempSync(join(tmpdir(), "omniroute-freetier-route-")); + +const { GET } = await import("../../src/app/api/free-tier/summary/route.ts"); + +test("GET /api/free-tier/summary returns per-model totals and headline", async () => { + const res = await GET(new Request("http://localhost/api/free-tier/summary")); + assert.equal(res.status, 200); + const body = await res.json(); + // Per-model catalog fields (supersedes per-provider documentedMonthlyTokens/providerCount/byProvider) + assert.ok(body.steadyRecurringTokens >= 1_000_000_000); + assert.ok(body.firstMonthRealisticTokens >= body.steadyRecurringTokens); + assert.ok(Array.isArray(body.perModel) && body.perModel.length >= 400); + assert.match(body.headline, /free tokens\/month/); + assert.ok(!JSON.stringify(body).includes("at /")); // no stack-trace leak +}); + +test("summary returns per-model totals, used-this-month and remaining", async () => { + const res = await GET(new Request("http://localhost/api/free-tier/summary")); + assert.equal(res.status, 200); + const body = await res.json(); + assert.ok(body.steadyRecurringTokens >= 1_000_000_000); + assert.ok(body.firstMonthRealisticTokens >= body.steadyRecurringTokens); + assert.ok(Array.isArray(body.perModel) && body.perModel.length >= 400); + assert.equal(typeof body.usedThisMonth, "number"); + assert.equal(body.remaining, Math.max(0, body.steadyRecurringTokens - body.usedThisMonth)); + assert.ok(!JSON.stringify(body).includes("at /")); // no stack-trace leak +}); + +test("GET /api/free-tier/summary excludeTosAvoid filters models", async () => { + const res = await GET(new Request("http://localhost/api/free-tier/summary?excludeTosAvoid=1")); + assert.equal(res.status, 200); + const body = await res.json(); + // With tos-avoid excluded, modelCount must still be positive + assert.ok(body.modelCount >= 1); + assert.equal(typeof body.usedThisMonth, "number"); +}); diff --git a/tests/unit/free-tier-used-this-month.test.ts b/tests/unit/free-tier-used-this-month.test.ts new file mode 100644 index 0000000000..6092c4bd72 --- /dev/null +++ b/tests/unit/free-tier-used-this-month.test.ts @@ -0,0 +1,23 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { mkdtempSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +process.env.DATA_DIR = mkdtempSync(join(tmpdir(), "omniroute-used-month-")); + +const { getDbInstance, resetDbInstance } = await import("../../src/lib/db/core.ts"); +const { sumUsageTokensThisMonth } = await import("../../src/lib/db/usageSummary.ts"); + +test.after(() => resetDbInstance()); + +test("sumUsageTokensThisMonth sums only the current calendar month's rolled-up tokens", () => { + const db = getDbInstance(); + // Ensure the table exists (migrations run on getDbInstance; if not present, create defensively). + db.exec(`CREATE TABLE IF NOT EXISTS daily_usage_summary (id INTEGER PRIMARY KEY AUTOINCREMENT, provider TEXT NOT NULL, model TEXT NOT NULL, date TEXT NOT NULL, total_requests INTEGER NOT NULL DEFAULT 0, total_input_tokens INTEGER NOT NULL DEFAULT 0, total_output_tokens INTEGER NOT NULL DEFAULT 0, total_cost REAL NOT NULL DEFAULT 0.0, created_at TEXT NOT NULL DEFAULT (datetime('now')));`); + const thisMonth = new Date().toISOString().slice(0, 7); // YYYY-MM + const insert = db.prepare("INSERT INTO daily_usage_summary (provider, model, date, total_input_tokens, total_output_tokens) VALUES (?,?,?,?,?)"); + insert.run("groq", "llama", `${thisMonth}-05`, 100, 200); + insert.run("cerebras", "qwen", `${thisMonth}-12`, 50, 50); + insert.run("groq", "llama", "2000-01-01", 9999, 9999); // long ago β€” excluded + assert.equal(sumUsageTokensThisMonth(), 400); +}); diff --git a/tests/unit/omniroute-meta-fallback-attempts.test.ts b/tests/unit/omniroute-meta-fallback-attempts.test.ts new file mode 100644 index 0000000000..da3b5469ad --- /dev/null +++ b/tests/unit/omniroute-meta-fallback-attempts.test.ts @@ -0,0 +1,23 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { OMNIROUTE_RESPONSE_HEADERS } from "../../src/shared/constants/headers.ts"; +import { buildOmniRouteResponseMetaHeaders } from "../../src/domain/omnirouteResponseMeta.ts"; + +test("headers constant exposes the fallback-attempts key", () => { + assert.equal( + OMNIROUTE_RESPONSE_HEADERS.fallbackAttempts, + "X-OmniRoute-Fallback-Attempts" + ); +}); + +test("buildOmniRouteResponseMetaHeaders emits the fallback-attempts count when > 0", () => { + const h = buildOmniRouteResponseMetaHeaders({ model: "gpt", provider: "openai", fallbackAttempts: 2 }); + assert.equal(h["X-OmniRoute-Fallback-Attempts"], "2"); +}); + +test("buildOmniRouteResponseMetaHeaders omits the header when 0 / absent", () => { + const none = buildOmniRouteResponseMetaHeaders({ model: "gpt" }); + assert.equal(none["X-OmniRoute-Fallback-Attempts"], undefined); + const zero = buildOmniRouteResponseMetaHeaders({ model: "gpt", fallbackAttempts: 0 }); + assert.equal(zero["X-OmniRoute-Fallback-Attempts"], undefined); +});