mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-31 04:12:10 +03:00
feat(dashboard): 2026-06-17 free-tier refresh — honest catalog, uncapped + boost tiers, Layout A budget table (#4089)
Integrated into release/v3.8.28
This commit is contained in:
committed by
GitHub
parent
3c613d16c6
commit
a7ff81bb95
13
README.md
13
README.md
@@ -15,13 +15,13 @@
|
||||
|
||||
<br/>
|
||||
|
||||
**~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))
|
||||
**~1.5B documented free tokens/month** — up to **~2.1B in your first month** with signup credits — aggregated across the free tiers, plus a long tail of permanently-free, no-cap providers, 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))
|
||||
|
||||
<br/>
|
||||
|
||||
[](#-227-ai-providers--50-free)
|
||||
[](#-227-ai-providers--50-free)
|
||||
[](docs/reference/FREE_TIERS.md)
|
||||
[](docs/reference/FREE_TIERS.md)
|
||||
[](#%EF%B8%8F-save-1595-tokens--automatically)
|
||||
[](#-combos--the-flagship)
|
||||
[](#-quick-start)
|
||||
@@ -114,14 +114,15 @@
|
||||
|
||||
<div align="center">
|
||||
|
||||
# 💰 ~1.9B Free Tokens / Month
|
||||
# 💰 ~1.5B Free Tokens / Month
|
||||
|
||||
</div>
|
||||
|
||||
> 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`).
|
||||
> 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 **40+ provider pools / 500+ 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.)
|
||||
- **~1.5B free tokens / month** (steady) — and **up to ~2.1B 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. (Counting every rate limit 24/7 would read ~10B; we don't publish that.)
|
||||
- **Plus the un-countable** — permanently-free, no-token-cap providers (SiliconFlow, Z.AI GLM-Flash, Kilo, OpenCode Zen…) and a **$10 OpenRouter top-up** that unlocks **+24M/mo**, both surfaced separately so they never inflate the headline.
|
||||
- **Per-model breakdown**, **live used / remaining** for the current month, and a transparent **terms flag** per provider.
|
||||
|
||||

|
||||
|
||||
@@ -227,7 +227,7 @@ Let's calculate how much free AI you can get:
|
||||
| NVIDIA NIM | ~40 RPM | ~1.7M requests |
|
||||
| Cerebras | 1M tokens | 30M tokens |
|
||||
|
||||
**Total**: ~1.9B+ free tokens/month (with compression: ~9.5B+ effective tokens)
|
||||
**Total**: ~1.5B documented free tokens/month — up to ~2.1B in your first month with signup credits (with compression: ~7.5B+ effective tokens)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,40 +1,59 @@
|
||||
---
|
||||
title: "Free Tiers & Free-Token Budget"
|
||||
version: 3.8.12
|
||||
lastUpdated: 2026-06-05
|
||||
version: 3.8.28
|
||||
lastUpdated: 2026-06-17
|
||||
---
|
||||
|
||||
# Free Tiers & Free-Token Budget
|
||||
|
||||
> **For Users**: Looking for a simple guide? See the [Free Tiers Guide](../getting-started/FREE-TIERS-GUIDE.md) for step-by-step instructions on getting free AI.
|
||||
|
||||
> **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).
|
||||
> **Last researched:** 2026-06-17 — per-provider web research (official docs + last-7-days news, 50-agent pass with adversarial verification) refreshing every free-tier quota + ToS.
|
||||
> **Source of truth (catalog):** `open-sse/config/freeModelCatalog.ts` (per-MODEL budgets, pool-deduped). The token-budget numbers below come from live web research and are an **approximation** — see [Methodology & caveats](#methodology--caveats).
|
||||
|
||||
## TL;DR — how much free inference does OmniRoute actually aggregate?
|
||||
|
||||
| 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. |
|
||||
| **Documented recurring grant (steady)** | **~1.54B** | 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.15B** | Steady + one-time signup credits (Together $25, Z.AI 20M, DeepSeek 5M, …), deduped per account. **First month only** — does not recur. |
|
||||
| **+ permanently free, no published cap** | *un-quantifiable* | `siliconflow`, `glm-cn` (GLM-4-Flash), `tencent`, `baidu`, `kilo-gateway`, `opencode-zen` — real recurring access, rate/concurrency-limited, **no token cap to count**. Listed, never summed (counting them at `RPM×24/7` is the inflation we reject). |
|
||||
| **+ deposit-unlock boost** | **+~24M** | A one-time **$10** OpenRouter top-up raises its free pool from 50 → 1000 req/day. Reported separately so it never inflates the steady number. |
|
||||
| Theoretical ceiling (all rate limits, 24/7) | ~10B | Sum of every provider rate limit extrapolated to non-stop use. **Not a guarantee** — do not headline this. |
|
||||
|
||||
**Honest headline:** *OmniRoute aggregates **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.*
|
||||
**Honest headline:** *OmniRoute aggregates **~1.5B documented free tokens per month** (up to ~2.1B in your first month with signup credits) across 40+ free-tier pools — plus a long tail of permanently-free, no-cap providers — 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.
|
||||
> **Why this dropped from the previous ~1.94B.** The 2026-06-17 refresh is an honesty correction, not a loss: `gemini` is now pool-deduped (was inflated by counting each Flash variant separately, 462M → 60M), `cloudflare-ai` corrected to its real 10k-Neurons/day (122M → 30M), `doubao` reclassified as a one-time signup credit (not recurring), and shut-down tiers removed (`github-models` closed to new signups, `chutes`/`phind`/`kluster`/`glhf` discontinued). Partly offset by `llm7` (correct 5M/day → 150M) and new free providers (Kilo, OpenCode Zen, Z.AI GLM-Flash).
|
||||
|
||||
Biggest **documented** contributors: `mistral` 1.00B, `longcat` 150M, `cloudflare-ai` 122M, `gemini` 60M, `doubao` 60M, `cerebras` 30M.
|
||||
Biggest **documented** contributors: `mistral` 1.00B, `llm7` 150M, `longcat` 150M (LongCat-2.0), `groq` 117M, `gemini` 60M, `cerebras` 30M, `cloudflare-ai` 30M, `sambanova` 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.
|
||||
> ⚠️ The theoretical ceiling (~10B) is inflated by rate-limit-only providers with **no published token cap** (`tencent`, `siliconflow`, `nvidia`, `baidu`, `glm-cn`, `sparkdesk`) whose figures would be `RPM/TPM × 24/7 × 30d` — a theoretical maximum no single account will sustain. They are **excluded** from the defensible number (shown in the "permanently free, no cap" row instead). This is the same inflation that makes competitors' multi-billion claims unreliable.
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-17 refresh — what changed since 2026-06-05
|
||||
|
||||
A 50-agent web-research pass (official docs + last-7-days news, adversarially verified) refreshed the whole catalog. Highlights:
|
||||
|
||||
- **Removed (discontinued / shut down in 2026):** `chutes` (free tier ended 2026-03), `phind` (company shut down 2026-01), `kluster` (sunset 2026-06-09 → MITO), `glhf` (beta ended), `gitlawb` (free model revoked 2026-05-24), `aimlapi` / `theoldllm` / `featherless-ai` (no current free tier).
|
||||
- **GitHub Models** — closed to **new** customers on 2026-06-16; existing accounts keep API/playground access, so it stays in the catalog with a note (not removed).
|
||||
- **Gemini** — `2.0 Flash` / `2.0 Flash-Lite` shut down 2026-06-01 and `2.5 Pro` left the free tier (2026-04); free tier is now **Flash-family only** (2.5/3/3.1/3.5 Flash + Gemma). The catalog now **pools** the Flash family (was inflated by counting each variant separately: 462M → 60M).
|
||||
- **Corrected numbers:** `cloudflare-ai` 122M → **30M** (real 10k-Neurons/day), `doubao` reclassified as a one-time signup credit (not recurring), `llm7` 4M → **150M** (documented 5M tokens/day), `together` "-Free" endpoints discontinued → only the **$25** signup credit remains, `longcat` retired 6 legacy models → **LongCat-2.0-Preview** only.
|
||||
- **New free providers discovered:** ⭐ **Kilo Code** (`kilo-gateway` — rotating "Auto Free" set: NVIDIA Nemotron 3 family, StepFun, Poolside, Nex-N2-Pro), ⭐ **OpenCode Zen** (`opencode-zen` — 6 rotating free coding models), ⭐ **Z.AI / Zhipu** (`glm-cn` — GLM-4-Flash / 4.5-Flash / 4.7-Flash permanently free + 20M signup bonus), and `arcee-ai` Trinity Large Preview.
|
||||
- **New honest tiers** (see Methodology): a *permanently-free-but-uncapped* category (real recurring access, no token cap to count) and a *deposit-unlock boost* (OpenRouter $10 → +24M/mo), both surfaced **separately** so they never inflate the headline.
|
||||
|
||||
> The detailed per-provider table further down is the **2026-06-05 snapshot**; the deltas above supersede it. The live, canonical source is the per-model catalog `open-sse/config/freeModelCatalog.ts`.
|
||||
|
||||
---
|
||||
|
||||
## Methodology & caveats
|
||||
|
||||
- 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.
|
||||
- **A note on terms.** ~19 providers have personal-use or proxy clauses worth a glance before you lean on them (see the [provider-terms table](#tos-attention-table)). Their access is real — we simply don't fold the **un-quantifiable** OAuth/keyless ones (e.g. `gemini-cli`, `agy`, `amazon-q` — they share quota already counted under the base provider) into the headline. None of this is legal advice; you decide.
|
||||
- Numbers are **upper-bound estimates** from each provider's documented free-tier limits as of **2026-06-17**, 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. Discontinued tiers are also 0.
|
||||
- Daily token cap → `monthly = daily × 30`. Only RPD documented → `RPD × ~800 output tokens × 30`. Only RPM/TPM (no daily cap) → **uncapped** (see below).
|
||||
- **Permanently free, but no published token cap** (`siliconflow`, `glm-cn`, `tencent`, `baidu`, `kilo-gateway`, `opencode-zen`): these are real recurring free access, rate/concurrency-limited. We classify them `recurring-uncapped` and **never sum them** — multiplying `RPM × 24/7 × 30d` would produce a fantasy ceiling (the inflation we reject). They are listed so you know they exist.
|
||||
- **Deposit-unlock boost:** a one-time small top-up that permanently raises a free quota (OpenRouter: $10 → 1000 req/day ≈ +24M/mo). Reported as a separate figure, kept out of the steady headline.
|
||||
- **A note on terms.** Some providers have personal-use or proxy clauses worth a glance before you lean on them (see the [provider-terms table](#tos-attention-table)). Their access is real — we simply don't fold the **un-quantifiable** OAuth/keyless ones (e.g. `gemini-cli`, `agy`, `amazon-q` — they share quota already counted under the base provider) into the headline. None of this is legal advice; you decide.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,123 +1,103 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="596" viewBox="0 0 900 596" font-family="-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif">
|
||||
<rect width="900" height="596" rx="16" fill="#0d1117"/>
|
||||
<rect x="16" y="16" width="868" height="580" rx="13" fill="#161b22" stroke="#30363d"/>
|
||||
<text x="868" y="588" fill="#484f58" font-size="10.5" text-anchor="end">OmniRoute · /dashboard/free-tiers · preview mockup</text>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="566" viewBox="0 0 900 566" font-family="-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif">
|
||||
<rect width="900" height="566" rx="16" fill="#0d1117"/>
|
||||
<rect x="16" y="16" width="868" height="550" rx="13" fill="#161b22" stroke="#30363d"/>
|
||||
<text x="868" y="558" fill="#484f58" font-size="10.5" text-anchor="end">OmniRoute · /dashboard/free-tiers · preview mockup</text>
|
||||
<text x="32" y="50" fill="#e6edf3" font-size="18" font-weight="700">Monthly free-token budget</text>
|
||||
<text x="868" y="50" fill="#7d8590" font-size="13" text-anchor="end">31 free pools · 530 models · one endpoint</text>
|
||||
<text x="868" y="50" fill="#7d8590" font-size="13" text-anchor="end">21 free pools · 493 models · one endpoint</text>
|
||||
<text x="32" y="84" fill="#7d8590" font-size="11.5">Steady / month</text>
|
||||
<text x="32" y="114" fill="#e6edf3" font-size="27" font-weight="800">~1.94B</text>
|
||||
<text x="32" y="114" fill="#e6edf3" font-size="27" font-weight="800">~1.54B</text>
|
||||
<text x="330" y="84" fill="#7d8590" font-size="11.5">First month (+ signup credits)</text>
|
||||
<text x="330" y="114" fill="#3fb950" font-size="27" font-weight="800">~2.53B</text>
|
||||
<text x="330" y="114" fill="#3fb950" font-size="27" font-weight="800">~2.15B</text>
|
||||
<text x="700" y="84" fill="#7d8590" font-size="11.5">ToS-flagged (you decide)</text>
|
||||
<text x="700" y="114" fill="#d29922" font-size="27" font-weight="800">17 providers</text>
|
||||
<text x="700" y="114" fill="#d29922" font-size="27" font-weight="800">15 providers</text>
|
||||
<clipPath id="bar"><rect x="32" y="132" width="836" height="16" rx="8"/></clipPath>
|
||||
<g clip-path="url(#bar)"><rect x="32" y="132" width="836" height="16" fill="#21262d"/>
|
||||
<rect x="32.0" y="132" width="337.5" height="16" fill="#6c5ce7"/>
|
||||
<rect x="368.9" y="132" width="57.1" height="16" fill="#00b894"/>
|
||||
<rect x="425.3" y="132" width="47.8" height="16" fill="#0984e3"/>
|
||||
<rect x="472.6" y="132" width="47.2" height="16" fill="#e17055"/>
|
||||
<rect x="519.2" y="132" width="47.2" height="16" fill="#fdcb6e"/>
|
||||
<rect x="565.7" y="132" width="27.4" height="16" fill="#e84393"/>
|
||||
<rect x="592.5" y="132" width="27.4" height="16" fill="#00cec9"/>
|
||||
<rect x="619.3" y="132" width="17.5" height="16" fill="#d63031"/>
|
||||
<rect x="636.2" y="132" width="15.8" height="16" fill="#a29bfe"/>
|
||||
<rect x="651.5" y="132" width="15.8" height="16" fill="#55efc4"/>
|
||||
<rect x="666.7" y="132" width="15.8" height="16" fill="#74b9ff"/>
|
||||
<rect x="682.0" y="132" width="15.8" height="16" fill="#ffeaa7"/>
|
||||
<rect x="697.2" y="132" width="15.8" height="16" fill="#fab1a0"/>
|
||||
<rect x="712.5" y="132" width="15.8" height="16" fill="#81ecec"/>
|
||||
<rect x="727.7" y="132" width="15.5" height="16" fill="#6c5ce7"/>
|
||||
<rect x="742.6" y="132" width="14.2" height="16" fill="#00b894"/>
|
||||
<rect x="756.2" y="132" width="13.5" height="16" fill="#0984e3"/>
|
||||
<rect x="769.1" y="132" width="12.5" height="16" fill="#e17055"/>
|
||||
<rect x="781.1" y="132" width="12.5" height="16" fill="#fdcb6e"/>
|
||||
<rect x="793.0" y="132" width="10.0" height="16" fill="#e84393"/>
|
||||
<rect x="802.4" y="132" width="9.6" height="16" fill="#00cec9"/>
|
||||
<rect x="811.4" y="132" width="9.6" height="16" fill="#d63031"/>
|
||||
<rect x="820.4" y="132" width="9.6" height="16" fill="#a29bfe"/>
|
||||
<rect x="829.4" y="132" width="9.0" height="16" fill="#55efc4"/>
|
||||
<rect x="837.8" y="132" width="8.8" height="16" fill="#74b9ff"/>
|
||||
<rect x="846.0" y="132" width="8.0" height="16" fill="#ffeaa7"/>
|
||||
<rect x="853.4" y="132" width="7.9" height="16" fill="#fab1a0"/>
|
||||
<rect x="860.6" y="132" width="7.8" height="16" fill="#81ecec"/>
|
||||
<rect x="32.0" y="132" width="456.0" height="16" fill="#6c5ce7"/>
|
||||
<rect x="487.4" y="132" width="74.9" height="16" fill="#00b894"/>
|
||||
<rect x="561.6" y="132" width="74.9" height="16" fill="#0984e3"/>
|
||||
<rect x="635.9" y="132" width="34.5" height="16" fill="#e17055"/>
|
||||
<rect x="669.8" y="132" width="21.1" height="16" fill="#fdcb6e"/>
|
||||
<rect x="690.2" y="132" width="21.1" height="16" fill="#e84393"/>
|
||||
<rect x="710.7" y="132" width="18.4" height="16" fill="#00cec9"/>
|
||||
<rect x="728.4" y="132" width="16.6" height="16" fill="#d63031"/>
|
||||
<rect x="744.4" y="132" width="15.7" height="16" fill="#a29bfe"/>
|
||||
<rect x="759.5" y="132" width="14.3" height="16" fill="#55efc4"/>
|
||||
<rect x="773.2" y="132" width="14.3" height="16" fill="#74b9ff"/>
|
||||
<rect x="786.9" y="132" width="10.8" height="16" fill="#ffeaa7"/>
|
||||
<rect x="797.1" y="132" width="10.3" height="16" fill="#fab1a0"/>
|
||||
<rect x="806.8" y="132" width="9.8" height="16" fill="#81ecec"/>
|
||||
<rect x="816.0" y="132" width="9.2" height="16" fill="#6c5ce7"/>
|
||||
<rect x="824.6" y="132" width="8.1" height="16" fill="#00b894"/>
|
||||
<rect x="832.1" y="132" width="8.0" height="16" fill="#0984e3"/>
|
||||
<rect x="839.5" y="132" width="7.8" height="16" fill="#e17055"/>
|
||||
<rect x="846.7" y="132" width="7.8" height="16" fill="#fdcb6e"/>
|
||||
<rect x="853.9" y="132" width="7.7" height="16" fill="#e84393"/>
|
||||
<rect x="861.0" y="132" width="7.6" height="16" fill="#00cec9"/>
|
||||
</g>
|
||||
<text x="32" y="172" fill="#7d8590" font-size="12">Each segment = one free pool · widths floored so every provider shows · honest numbers in the grid.</text>
|
||||
<circle cx="37" cy="196" r="5" fill="#6c5ce7"/>
|
||||
<text x="48" y="200" fill="#c9d1d9" font-size="12.5">Mistral Large 3 <tspan fill="#7d8590">1.00B</tspan></text>
|
||||
<circle cx="250" cy="196" r="5" fill="#00b894"/>
|
||||
<text x="261" y="200" fill="#c9d1d9" font-size="12.5">LongCat Flash-Lite <tspan fill="#7d8590">150M</tspan></text>
|
||||
<text x="261" y="200" fill="#c9d1d9" font-size="12.5">GPT-4o mini <tspan fill="#7d8590">150M</tspan></text>
|
||||
<circle cx="463" cy="196" r="5" fill="#0984e3"/>
|
||||
<text x="474" y="200" fill="#c9d1d9" font-size="12.5">Llama 3.3 70B <tspan fill="#7d8590">122M</tspan></text>
|
||||
<text x="474" y="200" fill="#c9d1d9" font-size="12.5">LongCat-2.0-Preview <tspan fill="#7d8590">150M</tspan></text>
|
||||
<circle cx="676" cy="196" r="5" fill="#e17055"/>
|
||||
<text x="687" y="200" fill="#c9d1d9" font-size="12.5">Gemini 3.1 Flash Lite Pr <tspan fill="#7d8590">120M</tspan></text>
|
||||
<text x="687" y="200" fill="#c9d1d9" font-size="12.5">Gemini 2.5 Flash <tspan fill="#7d8590">60M</tspan></text>
|
||||
<circle cx="37" cy="226" r="5" fill="#fdcb6e"/>
|
||||
<text x="48" y="230" fill="#c9d1d9" font-size="12.5">Gemini 2.5 Flash Lite <tspan fill="#7d8590">120M</tspan></text>
|
||||
<text x="48" y="230" fill="#c9d1d9" font-size="12.5">GLM 4.7 <tspan fill="#7d8590">30M</tspan></text>
|
||||
<circle cx="250" cy="226" r="5" fill="#e84393"/>
|
||||
<text x="261" y="230" fill="#c9d1d9" font-size="12.5">Gemini 2.0 Pro Experimen <tspan fill="#7d8590">60M</tspan></text>
|
||||
<text x="261" y="230" fill="#c9d1d9" font-size="12.5">Llama 3.3 70B <tspan fill="#7d8590">30M</tspan></text>
|
||||
<circle cx="463" cy="226" r="5" fill="#00cec9"/>
|
||||
<text x="474" y="230" fill="#c9d1d9" font-size="12.5">Doubao Pro 32K <tspan fill="#7d8590">60M</tspan></text>
|
||||
<text x="474" y="230" fill="#c9d1d9" font-size="12.5">Grok-3 <tspan fill="#7d8590">24M</tspan></text>
|
||||
<circle cx="676" cy="226" r="5" fill="#d63031"/>
|
||||
<text x="687" y="230" fill="#c9d1d9" font-size="12.5">GLM 4.7 <tspan fill="#7d8590">30M</tspan></text>
|
||||
<text x="687" y="230" fill="#c9d1d9" font-size="12.5">DeepSeek V4 Pro <tspan fill="#7d8590">20M</tspan></text>
|
||||
<circle cx="37" cy="256" r="5" fill="#a29bfe"/>
|
||||
<text x="48" y="260" fill="#c9d1d9" font-size="12.5">Gemini 2.0 Flash <tspan fill="#7d8590">25M</tspan></text>
|
||||
<text x="48" y="260" fill="#c9d1d9" font-size="12.5">GPT-4.1 <tspan fill="#7d8590">18M</tspan></text>
|
||||
<circle cx="250" cy="256" r="5" fill="#55efc4"/>
|
||||
<text x="261" y="260" fill="#c9d1d9" font-size="12.5">Gemini 3 Flash Preview <tspan fill="#7d8590">25M</tspan></text>
|
||||
<text x="261" y="260" fill="#c9d1d9" font-size="12.5">Llama 4 Scout <tspan fill="#7d8590">15M</tspan></text>
|
||||
<circle cx="463" cy="256" r="5" fill="#74b9ff"/>
|
||||
<text x="474" y="260" fill="#c9d1d9" font-size="12.5">Gemini 3.5 Flash <tspan fill="#7d8590">25M</tspan></text>
|
||||
<text x="474" y="260" fill="#c9d1d9" font-size="12.5">Inclusion Model <tspan fill="#7d8590">15M</tspan></text>
|
||||
<circle cx="676" cy="256" r="5" fill="#ffeaa7"/>
|
||||
<text x="687" y="260" fill="#c9d1d9" font-size="12.5">Gemini 2.5 Flash <tspan fill="#7d8590">25M</tspan></text>
|
||||
<text x="687" y="260" fill="#c9d1d9" font-size="12.5">GPT-4o <tspan fill="#7d8590">7M</tspan></text>
|
||||
<circle cx="37" cy="286" r="5" fill="#fab1a0"/>
|
||||
<text x="48" y="290" fill="#c9d1d9" font-size="12.5">Gemini 2.0 Flash Thinkin <tspan fill="#7d8590">25M</tspan></text>
|
||||
<text x="48" y="290" fill="#c9d1d9" font-size="12.5">MiniMax-M2.7 <tspan fill="#7d8590">6M</tspan></text>
|
||||
<circle cx="250" cy="286" r="5" fill="#81ecec"/>
|
||||
<text x="261" y="290" fill="#c9d1d9" font-size="12.5">Gemini 1.5 Flash <tspan fill="#7d8590">25M</tspan></text>
|
||||
<text x="261" y="290" fill="#c9d1d9" font-size="12.5">Arcee Trinity Large Prev <tspan fill="#7d8590">5M</tspan></text>
|
||||
<circle cx="463" cy="286" r="5" fill="#6c5ce7"/>
|
||||
<text x="474" y="290" fill="#c9d1d9" font-size="12.5">Grok-3 <tspan fill="#7d8590">24M</tspan></text>
|
||||
<text x="474" y="290" fill="#c9d1d9" font-size="12.5">Auto Free <tspan fill="#7d8590">4M</tspan></text>
|
||||
<circle cx="676" cy="286" r="5" fill="#00b894"/>
|
||||
<text x="687" y="290" fill="#c9d1d9" font-size="12.5">DeepSeek V4 Pro <tspan fill="#7d8590">20M</tspan></text>
|
||||
<text x="687" y="290" fill="#c9d1d9" font-size="12.5">Auto <tspan fill="#7d8590">1M</tspan></text>
|
||||
<circle cx="37" cy="316" r="5" fill="#0984e3"/>
|
||||
<text x="48" y="320" fill="#c9d1d9" font-size="12.5">GPT-4.1 <tspan fill="#7d8590">18M</tspan></text>
|
||||
<text x="48" y="320" fill="#c9d1d9" font-size="12.5">Command A Reasoning <tspan fill="#7d8590">800K</tspan></text>
|
||||
<circle cx="250" cy="316" r="5" fill="#e17055"/>
|
||||
<text x="261" y="320" fill="#c9d1d9" font-size="12.5">Llama 4 Scout <tspan fill="#7d8590">15M</tspan></text>
|
||||
<text x="261" y="320" fill="#c9d1d9" font-size="12.5">Llama 3.3 70B <tspan fill="#7d8590">500K</tspan></text>
|
||||
<circle cx="463" cy="316" r="5" fill="#fdcb6e"/>
|
||||
<text x="474" y="320" fill="#c9d1d9" font-size="12.5">Inclusion Model <tspan fill="#7d8590">15M</tspan></text>
|
||||
<text x="474" y="320" fill="#c9d1d9" font-size="12.5">morph-v3-large <tspan fill="#7d8590">400K</tspan></text>
|
||||
<circle cx="676" cy="316" r="5" fill="#e84393"/>
|
||||
<text x="687" y="320" fill="#c9d1d9" font-size="12.5">GPT-4o <tspan fill="#7d8590">7M</tspan></text>
|
||||
<text x="687" y="320" fill="#c9d1d9" font-size="12.5">Llama 3.1 8B <tspan fill="#7d8590">200K</tspan></text>
|
||||
<circle cx="37" cy="346" r="5" fill="#00cec9"/>
|
||||
<text x="48" y="350" fill="#c9d1d9" font-size="12.5">Gemini 3.1 Pro Preview <tspan fill="#7d8590">6M</tspan></text>
|
||||
<circle cx="250" cy="346" r="5" fill="#d63031"/>
|
||||
<text x="261" y="350" fill="#c9d1d9" font-size="12.5">Gemini 2.5 Pro <tspan fill="#7d8590">6M</tspan></text>
|
||||
<circle cx="463" cy="346" r="5" fill="#a29bfe"/>
|
||||
<text x="474" y="350" fill="#c9d1d9" font-size="12.5">MiniMax-M2.7 <tspan fill="#7d8590">6M</tspan></text>
|
||||
<circle cx="676" cy="346" r="5" fill="#55efc4"/>
|
||||
<text x="687" y="350" fill="#c9d1d9" font-size="12.5">GPT-4o mini <tspan fill="#7d8590">4M</tspan></text>
|
||||
<circle cx="37" cy="376" r="5" fill="#74b9ff"/>
|
||||
<text x="48" y="380" fill="#c9d1d9" font-size="12.5">Auto Free <tspan fill="#7d8590">4M</tspan></text>
|
||||
<circle cx="250" cy="376" r="5" fill="#ffeaa7"/>
|
||||
<text x="261" y="380" fill="#c9d1d9" font-size="12.5">Auto <tspan fill="#7d8590">1M</tspan></text>
|
||||
<circle cx="463" cy="376" r="5" fill="#fab1a0"/>
|
||||
<text x="474" y="380" fill="#c9d1d9" font-size="12.5">Command A Reasoning <tspan fill="#7d8590">800K</tspan></text>
|
||||
<circle cx="676" cy="376" r="5" fill="#81ecec"/>
|
||||
<text x="687" y="380" fill="#c9d1d9" font-size="12.5">Llama 3.3 70B <tspan fill="#7d8590">500K</tspan></text>
|
||||
<line x1="32" y1="416" x2="868" y2="416" stroke="#30363d"/>
|
||||
<text x="32" y="442" fill="#3fb950" font-size="13" font-weight="700">+ First month: one-time signup credits (~586M)</text>
|
||||
<rect x="32" y="451" width="90" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="77" y="466" fill="#7ee787" font-size="11.5" text-anchor="middle">vertex 300M</text>
|
||||
<rect x="130" y="451" width="123" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="191" y="466" fill="#7ee787" font-size="11.5" text-anchor="middle">agentrouter 200M</text>
|
||||
<rect x="261" y="451" width="96" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="309" y="466" fill="#7ee787" font-size="11.5" text-anchor="middle">together 25M</text>
|
||||
<rect x="365" y="451" width="103" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="417" y="466" fill="#7ee787" font-size="11.5" text-anchor="middle">predibase 25M</text>
|
||||
<rect x="476" y="451" width="70" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="511" y="466" fill="#7ee787" font-size="11.5" text-anchor="middle">ai21 10M</text>
|
||||
<rect x="554" y="451" width="90" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="599" y="466" fill="#7ee787" font-size="11.5" text-anchor="middle">deepseek 5M</text>
|
||||
<rect x="652" y="451" width="83" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="693" y="466" fill="#7ee787" font-size="11.5" text-anchor="middle">kluster 5M</text>
|
||||
<rect x="743" y="451" width="103" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="794" y="466" fill="#7ee787" font-size="11.5" text-anchor="middle">hyperbolic 5M</text>
|
||||
<rect x="32" y="481" width="76" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="70" y="496" fill="#7ee787" font-size="11.5" text-anchor="middle">nscale 5M</text>
|
||||
<rect x="32" y="522" width="836" height="34" rx="8" fill="#1c2230" stroke="#30363d"/>
|
||||
<text x="46" y="544" fill="#7d8590" font-size="12">Some providers' terms suggest personal-use only — we flag them so you can decide. Figures are pool-deduped: no inflated rate-limit ceilings.</text>
|
||||
<text x="48" y="350" fill="#c9d1d9" font-size="12.5">Auto <tspan fill="#7d8590">25K</tspan></text>
|
||||
<line x1="32" y1="386" x2="868" y2="386" stroke="#30363d"/>
|
||||
<text x="32" y="412" fill="#3fb950" font-size="13" font-weight="700">+ First month: one-time signup credits (~616M)</text>
|
||||
<rect x="32" y="421" width="90" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="77" y="436" fill="#7ee787" font-size="11.5" text-anchor="middle">vertex 300M</text>
|
||||
<rect x="130" y="421" width="123" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="191" y="436" fill="#7ee787" font-size="11.5" text-anchor="middle">agentrouter 200M</text>
|
||||
<rect x="261" y="421" width="103" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="312" y="436" fill="#7ee787" font-size="11.5" text-anchor="middle">predibase 25M</text>
|
||||
<rect x="372" y="421" width="96" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="420" y="436" fill="#7ee787" font-size="11.5" text-anchor="middle">together 25M</text>
|
||||
<rect x="476" y="421" width="83" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="518" y="436" fill="#7ee787" font-size="11.5" text-anchor="middle">glm-cn 20M</text>
|
||||
<rect x="567" y="421" width="83" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="609" y="436" fill="#7ee787" font-size="11.5" text-anchor="middle">doubao 15M</text>
|
||||
<rect x="658" y="421" width="70" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="693" y="436" fill="#7ee787" font-size="11.5" text-anchor="middle">ai21 10M</text>
|
||||
<rect x="736" y="421" width="90" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="781" y="436" fill="#7ee787" font-size="11.5" text-anchor="middle">deepseek 5M</text>
|
||||
<rect x="32" y="451" width="103" height="22" rx="11" fill="#13311f" stroke="#238636"/>
|
||||
<text x="84" y="466" fill="#7ee787" font-size="11.5" text-anchor="middle">hyperbolic 5M</text>
|
||||
<rect x="32" y="492" width="836" height="34" rx="8" fill="#1c2230" stroke="#30363d"/>
|
||||
<text x="46" y="506" fill="#7d8590" font-size="12">Pool-deduped, honest counting — no inflated rate-limit ceilings. Some terms suggest personal-use only; we flag them so you decide.</text>
|
||||
<text x="46" y="520" fill="#7d8590" font-size="11.5">+ 6 permanently-free, no-cap providers (e.g. baidu, glm-cn, kilo-gateway) · OpenRouter $10 → +24M/mo.</text>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 8.2 KiB |
@@ -1,44 +1,16 @@
|
||||
// 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.
|
||||
// AUTO-GENERATED — refreshed by the 2026-06-17 per-provider free-tier research pass.
|
||||
// Source: _tasks/features-v3.8.28/free-tier-research-2026-06-17.raw.json (50-agent web research + adversarial verification).
|
||||
// Methodology: honest pool-deduped recurring tokens. "recurring-uncapped" = permanently free but no
|
||||
// published token cap (rate/concurrency-limited) — NOT summed into the steady headline (see freeModelCatalog.ts).
|
||||
// Deposit-unlock boosts (e.g. OpenRouter $10 -> 1000 RPD) live in FREE_TIER_BOOSTS, not per-record.
|
||||
// Do not edit by hand — re-run the patch generator 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: "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: "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" },
|
||||
@@ -55,44 +27,8 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
|
||||
{ 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: "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: "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" },
|
||||
@@ -100,44 +36,9 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
|
||||
{ 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: "arcee-ai", modelId: "arcee-ai/trinity-large-preview:free", displayName: "Arcee Trinity Large Preview (free)", monthlyTokens: 4800000, creditTokens: 0, freeType: "recurring-daily", poolKey: "arcee-free", 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: "baidu", modelId: "ernie-4.0-8k", displayName: "ERNIE 4.0 8K", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "baidu", tos: "caution" },
|
||||
{ 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" },
|
||||
@@ -170,210 +71,52 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
|
||||
{ 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: "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: "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: "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: "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: "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: "cloudflare-ai", modelId: "@cf/meta/llama-3.3-70b-instruct", displayName: "Llama 3.3 70B (🆓 ~150 resp/day)", monthlyTokens: 30000000, 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: 0, 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: 0, 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: 0, 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: 0, 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: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "cloudflare-ai", tos: "caution" },
|
||||
{ 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: "coze", modelId: "claude-3-7-sonnet-20250514", displayName: "Claude 3.7 Sonnet", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "coze", tos: "avoid" },
|
||||
{ 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" },
|
||||
@@ -396,36 +139,60 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
|
||||
{ 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: "one-time-initial", 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: "one-time-initial", poolKey: "publicai", tos: "caution" },
|
||||
{ provider: "publicai", modelId: "allenai/Olmo-3-32B-Think", displayName: "allenai/Olmo-3-32B-Think", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", 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: "deepseek", modelId: "deepseek-v4-pro", displayName: "DeepSeek V4 Pro", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "deepseek", tos: "ok" },
|
||||
{ provider: "deepseek", modelId: "deepseek-v4-flash", displayName: "DeepSeek V4 Flash", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "deepseek", tos: "ok" },
|
||||
{ provider: "doubao", modelId: "doubao-pro-32k", displayName: "Doubao Pro 32K", monthlyTokens: 0, creditTokens: 15000000, freeType: "one-time-initial", poolKey: "doubao", tos: "ambiguous" },
|
||||
{ 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: "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: "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: "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: "qwen3.7-max", displayName: "Qwen3.7 Max", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
|
||||
{ provider: "qwen-web", modelId: "qwen3.7-plus", displayName: "Qwen3.7 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
|
||||
{ provider: "qwen-web", modelId: "qwen3.6-plus", displayName: "Qwen3.6 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", 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: "gemini", modelId: "gemini-2.5-flash", displayName: "Gemini 2.5 Flash", monthlyTokens: 60000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" },
|
||||
{ provider: "gemini", modelId: "gemini-2.5-flash-lite", displayName: "Gemini 2.5 Flash-Lite", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" },
|
||||
{ provider: "gemini", modelId: "gemini-3-flash-preview", displayName: "Gemini 3 Flash Preview", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" },
|
||||
{ provider: "gemini", modelId: "gemini-3.1-flash-lite-preview", displayName: "Gemini 3.1 Flash-Lite", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" },
|
||||
{ provider: "gemini", modelId: "gemini-3.5-flash", displayName: "Gemini 3.5 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" },
|
||||
{ provider: "gemini", modelId: "gemma-4", displayName: "Gemma 4 (open model)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", 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: "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: "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" },
|
||||
@@ -466,59 +233,271 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
|
||||
{ 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: "glm-cn", modelId: "glm-4-flash", displayName: "GLM-4-Flash", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "zhipu-flash-free", tos: "ok" },
|
||||
{ provider: "glm-cn", modelId: "glm-4.5-flash", displayName: "GLM-4.5-Flash", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "zhipu-flash-free", tos: "ok" },
|
||||
{ provider: "glm-cn", modelId: "glm-4.7-flash", displayName: "GLM-4.7-Flash", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "zhipu-flash-free", tos: "ok" },
|
||||
{ provider: "glm-cn", modelId: "glm-signup-bonus", displayName: "Z.AI — 20M signup bonus", monthlyTokens: 0, creditTokens: 20000000, freeType: "one-time-initial", poolKey: "zhipu-signup", tos: "ok" },
|
||||
{ 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: "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: "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: "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: "hyperbolic", modelId: "Qwen/QwQ-32B", displayName: "QwQ 32B", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "ok" },
|
||||
{ provider: "hyperbolic", modelId: "deepseek-ai/DeepSeek-R1", displayName: "DeepSeek R1", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "ok" },
|
||||
{ provider: "hyperbolic", modelId: "deepseek-ai/DeepSeek-V3", displayName: "DeepSeek V3", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "ok" },
|
||||
{ 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: "ok" },
|
||||
{ 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: "ok" },
|
||||
{ provider: "hyperbolic", modelId: "Qwen/Qwen2.5-72B-Instruct", displayName: "Qwen 2.5 72B", monthlyTokens: 0, creditTokens: 5000000, freeType: "one-time-initial", poolKey: "hyperbolic", tos: "ok" },
|
||||
{ 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: "ok" },
|
||||
{ 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: "ok" },
|
||||
{ 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: "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: "kilo-gateway", modelId: "kilo-auto/free", displayName: "Kilo Auto Free (auto-router)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "kilo-gateway-free", tos: "caution" },
|
||||
{ provider: "kilo-gateway", modelId: "stepfun/step-3.7-flash:free", displayName: "StepFun Step 3.7 Flash (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "kilo-gateway-free", tos: "caution" },
|
||||
{ provider: "kilo-gateway", modelId: "poolside/laguna-m.1:free", displayName: "Poolside Laguna M.1 (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "kilo-gateway-free", tos: "caution" },
|
||||
{ provider: "kilo-gateway", modelId: "poolside/laguna-xs.2:free", displayName: "Poolside Laguna XS.2 (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "kilo-gateway-free", tos: "caution" },
|
||||
{ provider: "kilo-gateway", modelId: "nvidia/nemotron-3-ultra-550b-a55b:free", displayName: "NVIDIA Nemotron 3 Ultra (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "kilo-gateway-free", tos: "caution" },
|
||||
{ provider: "kilo-gateway", modelId: "nvidia/nemotron-3-super-120b-a12b:free", displayName: "NVIDIA Nemotron 3 Super (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "kilo-gateway-free", tos: "caution" },
|
||||
{ provider: "kilo-gateway", modelId: "nex-agi/nex-n2-pro:free", displayName: "Nex-N2-Pro (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "kilo-gateway-free", 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: "liquid", modelId: "liquid-lfm-40b", displayName: "Liquid LFM 40B", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "liquid", tos: "unknown" },
|
||||
{ provider: "llm7", modelId: "gpt-4o-mini-2024-07-18", displayName: "GPT-4o mini (LLM7)", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "llm7-free", tos: "caution" },
|
||||
{ provider: "llm7", modelId: "gpt-4.1-nano-2025-04-14", displayName: "GPT-4.1 nano (LLM7)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "llm7-free", tos: "caution" },
|
||||
{ provider: "llm7", modelId: "deepseek-r1-0528", displayName: "DeepSeek R1 (LLM7)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "llm7-free", tos: "caution" },
|
||||
{ provider: "llm7", modelId: "qwen2.5-coder-32b-instruct", displayName: "Qwen2.5 Coder 32B (LLM7)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "llm7-free", tos: "caution" },
|
||||
{ provider: "longcat", modelId: "longcat-2.0-preview", displayName: "LongCat-2.0-Preview", monthlyTokens: 150000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "longcat-free", tos: "caution" },
|
||||
{ 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: "monsterapi", modelId: "llama-3-8b-fuse", displayName: "Llama 3 8B Fuse", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "monsterapi", tos: "ambiguous" },
|
||||
{ provider: "morph", modelId: "morph-v3-large", displayName: "morph-v3-large", monthlyTokens: 400000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "morph", tos: "ok" },
|
||||
{ provider: "morph", modelId: "morph-v3-fast", displayName: "morph-v3-fast", monthlyTokens: 400000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "morph", tos: "ok" },
|
||||
{ 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: "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: "nlpcloud", modelId: "llama-3-8b-instruct", displayName: "Llama 3 8B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-monthly", poolKey: "nlpcloud", tos: "avoid" },
|
||||
{ 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: "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: "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: "nvidia", modelId: "z-ai/glm-5.1", displayName: "GLM 5.1", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "minimaxai/minimax-m2.7", displayName: "MiniMax M2.7", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "google/gemma-4-31b-it", displayName: "Gemma 4 31B", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "mistralai/mistral-small-4-119b-2603", displayName: "Mistral Small 4 2603", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "mistralai/mistral-large-3-675b-instruct-2512", displayName: "Mistral Large 3 675B", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "mistralai/devstral-2-123b-instruct-2512", displayName: "Devstral 2 123B", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "qwen/qwen3.5-397b-a17b", displayName: "Qwen3.5-397B-A17B", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "qwen/qwen3.5-122b-a10b", displayName: "Qwen3.5-122B-A10B", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "stepfun-ai/step-3.5-flash", displayName: "Step 3.5 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "deepseek-ai/deepseek-v4-pro", displayName: "DeepSeek V4 Pro", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "openai/gpt-oss-120b", displayName: "GPT OSS 120B", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "openai/gpt-oss-20b", displayName: "GPT OSS 20B", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", tos: "caution" },
|
||||
{ provider: "nvidia", modelId: "nvidia/nemotron-3-super-120b-a12b", displayName: "Nemotron 3 Super 120B A12B", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "nvidia", 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: "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: "opencode-zen", modelId: "opencode/big-pickle", displayName: "Big Pickle (stealth)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "opencode-zen-free", tos: "caution" },
|
||||
{ provider: "opencode-zen", modelId: "opencode/deepseek-v4-flash-free", displayName: "DeepSeek V4 Flash (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "opencode-zen-free", tos: "caution" },
|
||||
{ provider: "opencode-zen", modelId: "opencode/nemotron-3-super-free", displayName: "Nemotron 3 Super (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "opencode-zen-free", tos: "caution" },
|
||||
{ provider: "opencode-zen", modelId: "opencode/mimo-v2.5-free", displayName: "MiMo V2.5 (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "opencode-zen-free", tos: "caution" },
|
||||
{ provider: "opencode-zen", modelId: "opencode/north-mini-code-free", displayName: "North Mini Code (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "opencode-zen-free", tos: "caution" },
|
||||
{ provider: "opencode-zen", modelId: "opencode/nemotron-3-ultra-free", displayName: "Nemotron 3 Ultra (free)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "opencode-zen-free", tos: "caution" },
|
||||
{ provider: "openrouter", modelId: "auto", displayName: "Auto (Best Available)", monthlyTokens: 1200000, creditTokens: 0, freeType: "recurring-daily", poolKey: "openrouter-free", 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: "predibase", modelId: "llama-3.3-70b", displayName: "llama-3.3-70b", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "predibase", tos: "caution" },
|
||||
{ provider: "publicai", modelId: "swiss-ai/apertus-70b-instruct", displayName: "swiss-ai/apertus-70b-instruct", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", 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: "one-time-initial", poolKey: "publicai", tos: "caution" },
|
||||
{ provider: "publicai", modelId: "allenai/Olmo-3-32B-Think", displayName: "allenai/Olmo-3-32B-Think", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "publicai", 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: "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: "qwen-web", modelId: "qwen3.7-max", displayName: "Qwen3.7 Max", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
|
||||
{ provider: "qwen-web", modelId: "qwen3.7-plus", displayName: "Qwen3.7 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
|
||||
{ provider: "qwen-web", modelId: "qwen3.6-plus", displayName: "Qwen3.6 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
|
||||
{ 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" },
|
||||
{ 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: "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: "sensenova", modelId: "sensechat", displayName: "SenseChat", monthlyTokens: 0, creditTokens: 0, freeType: "one-time-initial", poolKey: "sensenova", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "deepseek-ai/DeepSeek-V3.2", displayName: "DeepSeek V3.2", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "deepseek-ai/DeepSeek-V3.1", displayName: "DeepSeek V3.1", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "deepseek-ai/DeepSeek-R1", displayName: "DeepSeek R1", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "Qwen/Qwen3-235B-A22B-Instruct-2507", displayName: "Qwen3 235B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "Qwen/Qwen3-Coder-480B-A35B-Instruct", displayName: "Qwen3 Coder 480B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "Qwen/Qwen3-32B", displayName: "Qwen3 32B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "moonshotai/Kimi-K2.5", displayName: "Kimi K2.5", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "zai-org/GLM-4.7", displayName: "GLM 4.7", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "openai/gpt-oss-120b", displayName: "GPT OSS 120B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", tos: "caution" },
|
||||
{ provider: "siliconflow", modelId: "baidu/ERNIE-4.5-300B-A47B", displayName: "ERNIE 4.5 300B", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "siliconflow", 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: "ok" },
|
||||
{ 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: "tencent", modelId: "hunyuan-pro", displayName: "Hunyuan Pro", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-uncapped", poolKey: "tencent", tos: "caution" },
|
||||
{ provider: "together", modelId: "together-signup-credit", displayName: "Together — $25 signup credit (any model)", monthlyTokens: 0, creditTokens: 25000000, freeType: "one-time-initial", poolKey: "together-signup", tos: "caution" },
|
||||
{ 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: "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: "yi", modelId: "yi-large", displayName: "Yi Large", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "yi", tos: "unknown" },
|
||||
];
|
||||
|
||||
@@ -6,6 +6,7 @@ export type FreeModelFreeType =
|
||||
| "recurring-daily"
|
||||
| "recurring-monthly"
|
||||
| "recurring-credit"
|
||||
| "recurring-uncapped"
|
||||
| "one-time-initial"
|
||||
| "keyless"
|
||||
| "discontinued";
|
||||
@@ -22,9 +23,24 @@ export interface FreeModelBudget {
|
||||
}
|
||||
|
||||
export interface FreeModelTotals {
|
||||
/** Pool-deduped recurring tokens/month — the headline "steady" number. */
|
||||
steadyRecurringTokens: number;
|
||||
/** Steady + recurring credit grants (e.g. monthly $-credit plans). */
|
||||
steadyWithRecurringCreditsTokens: number;
|
||||
/** Steady + recurring + one-time signup credits — first-month only. */
|
||||
firstMonthRealisticTokens: number;
|
||||
/**
|
||||
* Extra recurring tokens/month unlocked by a one-time small deposit
|
||||
* (e.g. OpenRouter: 50→1000 req/day after a $10 lifetime top-up).
|
||||
* Reported separately so it never inflates the steady headline.
|
||||
*/
|
||||
boostMonthlyTokens: number;
|
||||
/**
|
||||
* Providers that are permanently free but publish NO token cap
|
||||
* (rate/concurrency-limited). Real access, but un-quantifiable — listed,
|
||||
* never summed into the headline (avoids the rate-limit×24/7 inflation).
|
||||
*/
|
||||
uncappedProviders: string[];
|
||||
modelCount: number;
|
||||
poolCount: number;
|
||||
perModel: FreeModelBudget[];
|
||||
@@ -33,6 +49,22 @@ export interface FreeModelTotals {
|
||||
|
||||
const RECURRING = new Set<FreeModelFreeType>(["recurring-daily", "recurring-monthly", "keyless"]);
|
||||
|
||||
/**
|
||||
* Deposit-unlock boosts: a one-time small top-up that permanently raises a
|
||||
* provider's recurring free quota. Kept OUT of the steady headline and surfaced
|
||||
* as a separate "unlock more" figure. Keyed by the provider's recurring poolKey.
|
||||
*/
|
||||
export const FREE_TIER_BOOSTS: Record<
|
||||
string,
|
||||
{ provider: string; boostMonthlyTokens: number; note: string }
|
||||
> = {
|
||||
"openrouter-free": {
|
||||
provider: "openrouter",
|
||||
boostMonthlyTokens: 24_000_000,
|
||||
note: "A one-time $10 lifetime top-up raises the free pool from 50 to 1000 requests/day (~24M tokens/month).",
|
||||
},
|
||||
};
|
||||
|
||||
function fmt(n: number): string {
|
||||
return n >= 1e9 ? (n / 1e9).toFixed(2) + "B" : Math.round(n / 1e6) + "M";
|
||||
}
|
||||
@@ -82,10 +114,26 @@ export function computeFreeModelTotals(opts: { excludeTosAvoid?: boolean } = {})
|
||||
models.filter((m) => RECURRING.has(m.freeType) && m.poolKey).map((m) => m.poolKey),
|
||||
).size;
|
||||
|
||||
// Deposit-unlock boost: sum the FREE_TIER_BOOSTS whose pool still has a live
|
||||
// recurring model in the (optionally ToS-filtered) set.
|
||||
const livePools = new Set(
|
||||
models.filter((m) => RECURRING.has(m.freeType) && m.poolKey).map((m) => m.poolKey),
|
||||
);
|
||||
const boostMonthlyTokens = Object.entries(FREE_TIER_BOOSTS)
|
||||
.filter(([pool]) => livePools.has(pool))
|
||||
.reduce((s, [, b]) => s + b.boostMonthlyTokens, 0);
|
||||
|
||||
// Permanently-free-but-uncapped providers (real access, no published cap).
|
||||
const uncappedProviders = [
|
||||
...new Set(models.filter((m) => m.freeType === "recurring-uncapped").map((m) => m.provider)),
|
||||
].sort();
|
||||
|
||||
return {
|
||||
steadyRecurringTokens,
|
||||
steadyWithRecurringCreditsTokens,
|
||||
firstMonthRealisticTokens,
|
||||
boostMonthlyTokens,
|
||||
uncappedProviders,
|
||||
modelCount: models.length,
|
||||
poolCount,
|
||||
perModel: models.slice().sort((a, b) => b.monthlyTokens - a.monthlyTokens),
|
||||
|
||||
@@ -39,8 +39,9 @@ for (const r of recs) {
|
||||
}
|
||||
const oneTime = [...otMap.values()].sort((a, b) => b.v - a.v);
|
||||
const oneTimeSum = oneTime.reduce((s, r) => s + r.v, 0);
|
||||
const firstMonth = steady + oneTimeSum + 1_000_000;
|
||||
const firstMonth = steady + oneTimeSum;
|
||||
const avoidProviders = [...new Set(recs.filter((r) => r.tos === "avoid").map((r) => r.provider))].length;
|
||||
const uncappedProviders = [...new Set(recs.filter((r) => r.freeType === "recurring-uncapped").map((r) => r.provider))];
|
||||
|
||||
const GRID = pools.slice(0, 28);
|
||||
const STRIP = oneTime.slice(0, 9);
|
||||
@@ -62,7 +63,7 @@ const segs = GRID.map((r, i) => {
|
||||
const B = []; // body elements
|
||||
// title
|
||||
B.push(`<text x="32" y="50" fill="#e6edf3" font-size="18" font-weight="700">Monthly free-token budget</text>`);
|
||||
B.push(`<text x="868" y="50" fill="#7d8590" font-size="13" text-anchor="end">${pools.length} free pools · 530 models · one endpoint</text>`);
|
||||
B.push(`<text x="868" y="50" fill="#7d8590" font-size="13" text-anchor="end">${pools.length} free pools · ${recs.length} models · one endpoint</text>`);
|
||||
// stats
|
||||
const stat = (sx, label, val, vc) => {
|
||||
B.push(`<text x="${sx}" y="84" fill="#7d8590" font-size="11.5">${label}</text>`);
|
||||
@@ -103,7 +104,8 @@ for (const r of STRIP) {
|
||||
y += 26;
|
||||
// ToS note (softened)
|
||||
B.push(`<rect x="32" y="${y}" width="836" height="34" rx="8" fill="#1c2230" stroke="#30363d"/>`);
|
||||
B.push(`<text x="46" y="${(y + 22).toFixed(0)}" fill="#7d8590" font-size="12">Some providers' terms suggest personal-use only — we flag them so you can decide. Figures are pool-deduped: no inflated rate-limit ceilings.</text>`);
|
||||
B.push(`<text x="46" y="${(y + 14).toFixed(0)}" fill="#7d8590" font-size="12">Pool-deduped, honest counting — no inflated rate-limit ceilings. Some terms suggest personal-use only; we flag them so you decide.</text>`);
|
||||
B.push(`<text x="46" y="${(y + 28).toFixed(0)}" fill="#7d8590" font-size="11.5">+ ${uncappedProviders.length} permanently-free, no-cap providers (e.g. ${uncappedProviders.slice(0, 3).join(", ")}) · OpenRouter $10 → +24M/mo.</text>`);
|
||||
y += 34;
|
||||
const H = y + 24; // card content bottom
|
||||
const CANVAS = H + 16;
|
||||
|
||||
@@ -14,7 +14,7 @@ export interface FreeBudgetPerModel {
|
||||
monthlyTokens: number;
|
||||
creditTokens: number;
|
||||
freeType: string;
|
||||
poolKey: string;
|
||||
poolKey: string | null;
|
||||
tos: string;
|
||||
}
|
||||
|
||||
@@ -27,42 +27,46 @@ export interface FreeBudgetData {
|
||||
modelCount: number;
|
||||
poolCount: number;
|
||||
perModel: FreeBudgetPerModel[];
|
||||
/** Extra recurring tokens/mo unlocked by a one-time small deposit (OpenRouter $10 → 1000 RPD). */
|
||||
boostMonthlyTokens?: number;
|
||||
/** Providers that are permanently free but publish no token cap (rate/concurrency-limited). */
|
||||
uncappedProviders?: string[];
|
||||
headline?: string;
|
||||
}
|
||||
|
||||
export type FreeBudgetSort = "tokens" | "name" | "provider";
|
||||
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
// Helpers
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
function fmt(n: number): string {
|
||||
if (n >= 1e9) return (n / 1e9).toFixed(2).replace(/\.?0+$/, "") + "B";
|
||||
return Math.round(n / 1e6) + "M";
|
||||
if (n >= 1e6) return Math.round(n / 1e6) + "M";
|
||||
if (n >= 1e3) return Math.round(n / 1e3) + "K";
|
||||
return String(n);
|
||||
}
|
||||
|
||||
const FREE_TYPE_LABEL: Record<string, string> = {
|
||||
"recurring-daily": "daily",
|
||||
"recurring-monthly": "monthly",
|
||||
"recurring-credit": "credit/mo",
|
||||
"recurring-uncapped": "uncapped",
|
||||
"one-time-initial": "signup credit",
|
||||
keyless: "keyless",
|
||||
discontinued: "discontinued",
|
||||
};
|
||||
|
||||
// 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
|
||||
"#6366f1", "#10b981", "#f59e0b", "#3b82f6", "#ec4899",
|
||||
"#14b8a6", "#f97316", "#8b5cf6", "#06b6d4", "#84cc16",
|
||||
];
|
||||
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
// 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;
|
||||
@@ -70,19 +74,14 @@ interface BarSegment {
|
||||
|
||||
/**
|
||||
* 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).
|
||||
* Recurring models sharing a poolKey collapse to ONE segment (pool MAX); poolKey===null
|
||||
* models each get a segment. Segments therefore sum to `steadyRecurringTokens`.
|
||||
*/
|
||||
function buildBarSegments(perModel: FreeBudgetPerModel[]): BarSegment[] {
|
||||
// Deterministic color by provider — stable hue even if model order changes
|
||||
const providerColorCache = new Map<string, string>();
|
||||
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]);
|
||||
providerColorCache.set(provider, BAR_HUES[providerColorCache.size % BAR_HUES.length]);
|
||||
}
|
||||
return providerColorCache.get(provider)!;
|
||||
}
|
||||
@@ -104,7 +103,6 @@ function buildBarSegments(perModel: FreeBudgetPerModel[]): BarSegment[] {
|
||||
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 {
|
||||
@@ -120,173 +118,211 @@ function buildBarSegments(perModel: FreeBudgetPerModel[]): BarSegment[] {
|
||||
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<string, string> {
|
||||
// Build: poolKey → color, provider → color from the resolved segments
|
||||
const poolColorMap = new Map<string, string>();
|
||||
const providerColorMap = new Map<string, string>();
|
||||
for (const seg of segments) {
|
||||
if (seg.key.startsWith("pool:")) {
|
||||
const pk = seg.key.slice("pool:".length);
|
||||
poolColorMap.set(pk, seg.color);
|
||||
}
|
||||
}
|
||||
function colorForProvider(perModel: FreeBudgetPerModel[]): Map<string, string> {
|
||||
const cache = new Map<string, string>();
|
||||
for (const m of perModel) {
|
||||
if (m.poolKey && poolColorMap.has(m.poolKey)) {
|
||||
providerColorMap.set(m.provider, poolColorMap.get(m.poolKey)!);
|
||||
}
|
||||
if (!cache.has(m.provider)) cache.set(m.provider, BAR_HUES[cache.size % BAR_HUES.length]);
|
||||
}
|
||||
// For loose segments, map by model key directly
|
||||
const modelColorMap = new Map<string, string>();
|
||||
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<string, string>();
|
||||
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;
|
||||
return cache;
|
||||
}
|
||||
|
||||
function sortRows(rows: FreeBudgetPerModel[], sort: FreeBudgetSort): FreeBudgetPerModel[] {
|
||||
const copy = rows.slice();
|
||||
if (sort === "name") return copy.sort((a, b) => a.displayName.localeCompare(b.displayName));
|
||||
if (sort === "provider")
|
||||
return copy.sort((a, b) => a.provider.localeCompare(b.provider) || b.monthlyTokens - a.monthlyTokens);
|
||||
return copy.sort((a, b) => b.monthlyTokens - a.monthlyTokens || b.creditTokens - a.creditTokens);
|
||||
}
|
||||
|
||||
function tosBadge(tos: string): { icon: string; cls: string; title: string } | null {
|
||||
if (tos === "avoid") return { icon: "warning", cls: "text-amber-400", title: "ToS-restricted — review terms" };
|
||||
if (tos === "caution") return { icon: "bolt", cls: "text-text-muted", title: "Caution — personal-use / proxy clauses" };
|
||||
if (tos === "ok") return { icon: "check_circle", cls: "text-emerald-500", title: "Generally permissive" };
|
||||
return null;
|
||||
}
|
||||
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
// Pure view (SSR-testable — no hooks)
|
||||
// KPI tile
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
export function FreeBudgetView({ data }: { data: FreeBudgetData }) {
|
||||
function Kpi({ label, value, valueClass }: { label: string; value: string; valueClass?: string }) {
|
||||
return (
|
||||
<div className="flex flex-col gap-0.5 px-3 py-2 rounded-md border border-border bg-black/[0.015] dark:bg-white/[0.015]">
|
||||
<span className="text-[10px] uppercase tracking-wide text-text-muted">{label}</span>
|
||||
<span className={`text-[19px] font-bold tabular-nums ${valueClass ?? "text-text-main"}`}>{value}</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
// Pure view (SSR-testable — no hooks). Sort/filter are controlled via props.
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
export function FreeBudgetView({
|
||||
data,
|
||||
sort = "tokens",
|
||||
hideAvoid = false,
|
||||
}: {
|
||||
data: FreeBudgetData;
|
||||
sort?: FreeBudgetSort;
|
||||
hideAvoid?: boolean;
|
||||
}) {
|
||||
const {
|
||||
steadyRecurringTokens,
|
||||
firstMonthRealisticTokens,
|
||||
usedThisMonth,
|
||||
remaining,
|
||||
perModel,
|
||||
boostMonthlyTokens = 0,
|
||||
uncappedProviders = [],
|
||||
} = data;
|
||||
|
||||
const pct =
|
||||
steadyRecurringTokens > 0
|
||||
? Math.round((remaining / steadyRecurringTokens) * 100)
|
||||
: 0;
|
||||
|
||||
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);
|
||||
const providerColor = colorForProvider(perModel);
|
||||
|
||||
// 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);
|
||||
// Table rows: only entries with real budget; optional hide-ToS-avoid; sorted.
|
||||
let rows = perModel.filter((m) => m.monthlyTokens > 0 || m.creditTokens > 0);
|
||||
if (hideAvoid) rows = rows.filter((m) => m.tos !== "avoid");
|
||||
rows = sortRows(rows, sort);
|
||||
|
||||
return (
|
||||
<div className="rounded-lg border border-border bg-surface">
|
||||
{/* Header */}
|
||||
<div className="flex items-center gap-2 px-3 py-2 border-b border-border">
|
||||
<span className="material-symbols-outlined text-[14px] text-text-muted">
|
||||
token
|
||||
</span>
|
||||
<span className="text-[13px] font-semibold text-text-main">
|
||||
Monthly free-token budget
|
||||
</span>
|
||||
<span className="material-symbols-outlined text-[14px] text-text-muted">savings</span>
|
||||
<span className="text-[13px] font-semibold text-text-main">Free-token budget</span>
|
||||
<span className="ml-auto text-[11px] text-text-muted tabular-nums">
|
||||
{fmt(remaining)} remaining · {pct}% of {fmt(steadyRecurringTokens)}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* KPI tiles */}
|
||||
<div className="grid grid-cols-2 sm:grid-cols-3 gap-2 px-3 pt-3">
|
||||
<Kpi label="Steady / month" value={`~${fmt(steadyRecurringTokens)}`} />
|
||||
<Kpi label="First month (+ credits)" value={`~${fmt(firstMonthRealisticTokens)}`} valueClass="text-emerald-500" />
|
||||
<Kpi label="Used this month" value={fmt(usedThisMonth)} valueClass="text-text-muted" />
|
||||
</div>
|
||||
|
||||
{/* Stacked bar — pool-deduped; segments sum to steadyRecurringTokens */}
|
||||
{barSegments.length > 0 && (
|
||||
<div className="px-3 pt-2">
|
||||
<div className="px-3 pt-3">
|
||||
<div className="flex h-3 rounded-sm overflow-hidden w-full" data-testid="budget-bar">
|
||||
{barSegments.map((seg) => {
|
||||
const width =
|
||||
totalBarTokens > 0
|
||||
? ((seg.tokens / totalBarTokens) * 100).toFixed(2)
|
||||
: "0";
|
||||
const width = totalBarTokens > 0 ? ((seg.tokens / totalBarTokens) * 100).toFixed(2) : "0";
|
||||
return (
|
||||
<div
|
||||
key={seg.key}
|
||||
title={`${seg.label}: ${fmt(seg.tokens)}`}
|
||||
data-testid="bar-segment"
|
||||
style={{
|
||||
flexBasis: `${width}%`,
|
||||
background: seg.color,
|
||||
minWidth: "2px",
|
||||
}}
|
||||
style={{ flexBasis: `${width}%`, background: seg.color, minWidth: "2px" }}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<p className="mt-1 text-[10.5px] text-text-muted">
|
||||
Each segment = one free pool · pool-deduped, honest counting (no inflated rate-limit ceilings).
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* First-month callout */}
|
||||
<div className="px-3 py-2 text-[11px] text-text-muted tabular-nums">
|
||||
Up to{" "}
|
||||
<span className="font-semibold text-text-main">
|
||||
{fmt(firstMonthRealisticTokens)}
|
||||
</span>{" "}
|
||||
in your first month with signup credits
|
||||
</div>
|
||||
{/* Boost + uncapped callouts */}
|
||||
{boostMonthlyTokens > 0 && (
|
||||
<div className="mx-3 mt-2 flex items-center gap-2 rounded-md border border-emerald-500/30 bg-emerald-500/10 px-3 py-1.5">
|
||||
<span className="material-symbols-outlined text-[14px] text-emerald-500">bolt</span>
|
||||
<span className="text-[11px] text-emerald-500">
|
||||
Unlock ~{fmt(boostMonthlyTokens)} more/mo with a one-time $10 OpenRouter top-up (50 → 1000 req/day)
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
{uncappedProviders.length > 0 && (
|
||||
<div className="mx-3 mt-2 rounded-md border border-border bg-black/[0.015] dark:bg-white/[0.015] px-3 py-2">
|
||||
<span className="text-[11px] text-text-muted">
|
||||
Permanently free, no published cap (rate-limited) — real access, not counted in the headline:
|
||||
</span>
|
||||
<div className="mt-1 flex flex-wrap gap-1">
|
||||
{uncappedProviders.map((p) => (
|
||||
<span
|
||||
key={p}
|
||||
className="inline-flex items-center rounded-full border border-border px-2 py-0.5 text-[10.5px] text-text-muted tabular-nums"
|
||||
style={{ borderColor: providerColor.get(p) ?? "var(--border)" }}
|
||||
>
|
||||
{p}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* ToS-restricted callout */}
|
||||
{avoidModels.length > 0 && (
|
||||
<div className="mx-3 mb-2 flex items-center gap-2 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-1.5">
|
||||
<span className="material-symbols-outlined text-[14px] text-text-muted">
|
||||
warning
|
||||
</span>
|
||||
<div className="mx-3 mt-2 flex items-center gap-2 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-1.5">
|
||||
<span className="material-symbols-outlined text-[14px] text-text-muted">warning</span>
|
||||
<span className="text-[11px] text-amber-400">
|
||||
{avoidModels.length} model
|
||||
{avoidModels.length !== 1 ? "s" : ""} flagged as ToS-restricted
|
||||
{avoidModels.length} model{avoidModels.length !== 1 ? "s" : ""} flagged as ToS-restricted — you decide
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Per-model legend grid — filtered to non-zero entries; colors match bar */}
|
||||
<div className="px-3 pb-3">
|
||||
<div className="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-x-4 gap-y-0.5 mt-1">
|
||||
{legendModels.map((m) => {
|
||||
const swatchColor = legendColorMap.get(m.modelId) ?? BAR_HUES[0];
|
||||
return (
|
||||
<div
|
||||
key={m.modelId}
|
||||
className="flex items-center gap-1.5 px-0 py-1 hover:bg-black/[0.02] dark:hover:bg-white/[0.02] rounded"
|
||||
title={`${m.provider} · ${m.freeType}${m.tos === "avoid" ? " · ⚠ ToS-restricted" : m.tos === "caution" ? " · ⚡ caution" : ""}`}
|
||||
>
|
||||
<span
|
||||
className="inline-block w-2 h-2 rounded-sm flex-shrink-0"
|
||||
style={{ background: swatchColor }}
|
||||
/>
|
||||
<span className="text-[11px] text-text-muted tabular-nums truncate">
|
||||
{m.displayName}
|
||||
</span>
|
||||
<span className="text-[11px] text-text-muted tabular-nums ml-auto">
|
||||
{m.monthlyTokens >= 1e6 ? fmt(m.monthlyTokens) : m.monthlyTokens.toLocaleString()}
|
||||
</span>
|
||||
{m.tos === "avoid" && (
|
||||
<span className="material-symbols-outlined text-[11px] text-amber-400">
|
||||
warning
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
{/* Per-model table */}
|
||||
<div className="px-3 pb-3 pt-2">
|
||||
<div className="overflow-x-auto">
|
||||
<table className="w-full text-[11px]" data-testid="budget-table">
|
||||
<thead>
|
||||
<tr className="text-text-muted text-left border-b border-border">
|
||||
<th className="font-medium py-1 pr-2">Provider</th>
|
||||
<th className="font-medium py-1 pr-2">Model</th>
|
||||
<th className="font-medium py-1 pr-2">Type</th>
|
||||
<th className="font-medium py-1 pr-2 text-right">Tokens/mo</th>
|
||||
<th className="font-medium py-1 pr-1 text-center">ToS</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{rows.map((m) => {
|
||||
const badge = tosBadge(m.tos);
|
||||
const amount =
|
||||
m.monthlyTokens > 0
|
||||
? fmt(m.monthlyTokens)
|
||||
: m.creditTokens > 0
|
||||
? `${fmt(m.creditTokens)} credit`
|
||||
: "—";
|
||||
return (
|
||||
<tr
|
||||
key={`${m.provider}:${m.modelId}`}
|
||||
className="border-b border-border/40 hover:bg-black/[0.02] dark:hover:bg-white/[0.02]"
|
||||
>
|
||||
<td className="py-1 pr-2">
|
||||
<span className="inline-flex items-center gap-1.5">
|
||||
<span
|
||||
className="inline-block w-2 h-2 rounded-sm flex-shrink-0"
|
||||
style={{ background: providerColor.get(m.provider) ?? BAR_HUES[0] }}
|
||||
/>
|
||||
<span className="text-text-muted">{m.provider}</span>
|
||||
</span>
|
||||
</td>
|
||||
<td className="py-1 pr-2 text-text-main truncate max-w-[180px]" title={m.modelId}>
|
||||
{m.displayName}
|
||||
</td>
|
||||
<td className="py-1 pr-2 text-text-muted">{FREE_TYPE_LABEL[m.freeType] ?? m.freeType}</td>
|
||||
<td className="py-1 pr-2 text-right text-text-main tabular-nums">{amount}</td>
|
||||
<td className="py-1 pr-1 text-center">
|
||||
{badge && (
|
||||
<span
|
||||
className={`material-symbols-outlined text-[13px] ${badge.cls}`}
|
||||
title={badge.title}
|
||||
>
|
||||
{badge.icon}
|
||||
</span>
|
||||
)}
|
||||
</td>
|
||||
</tr>
|
||||
);
|
||||
})}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -294,11 +330,13 @@ export function FreeBudgetView({ data }: { data: FreeBudgetData }) {
|
||||
}
|
||||
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
// Fetch wrapper (client component)
|
||||
// Fetch + interactivity wrapper (client component)
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
export default function FreeBudgetCard() {
|
||||
const [data, setData] = useState<FreeBudgetData | null>(null);
|
||||
const [sort, setSort] = useState<FreeBudgetSort>("tokens");
|
||||
const [hideAvoid, setHideAvoid] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
fetch("/api/free-tier/summary")
|
||||
@@ -313,5 +351,33 @@ export default function FreeBudgetCard() {
|
||||
|
||||
if (!data) return null;
|
||||
|
||||
return <FreeBudgetView data={data} />;
|
||||
return (
|
||||
<div className="flex flex-col gap-2">
|
||||
{/* Controls */}
|
||||
<div className="flex items-center gap-3 px-1 text-[11px] text-text-muted">
|
||||
<label className="inline-flex items-center gap-1.5 cursor-pointer select-none">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={hideAvoid}
|
||||
onChange={(e) => setHideAvoid(e.target.checked)}
|
||||
className="accent-indigo-500"
|
||||
/>
|
||||
Hide ToS-restricted
|
||||
</label>
|
||||
<span className="ml-auto inline-flex items-center gap-1.5">
|
||||
Sort
|
||||
<select
|
||||
value={sort}
|
||||
onChange={(e) => setSort(e.target.value as FreeBudgetSort)}
|
||||
className="rounded border border-border bg-surface px-1.5 py-0.5 text-[11px] text-text-main"
|
||||
>
|
||||
<option value="tokens">Tokens/mo</option>
|
||||
<option value="provider">Provider</option>
|
||||
<option value="name">Model name</option>
|
||||
</select>
|
||||
</span>
|
||||
</div>
|
||||
<FreeBudgetView data={data} sort={sort} hideAvoid={hideAvoid} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -55,8 +55,63 @@ test("FreeBudgetView bar is pool-deduped: two models sharing a poolKey produce o
|
||||
// 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)
|
||||
// Table should show all 3 models (informational, per-model not pool-deduped)
|
||||
assert.match(html, /Gemini Flash/);
|
||||
assert.match(html, /Gemini Pro/);
|
||||
assert.match(html, /GPT Free/);
|
||||
});
|
||||
|
||||
const layoutData = {
|
||||
steadyRecurringTokens: 1_540_000_000,
|
||||
steadyWithRecurringCreditsTokens: 1_540_000_000,
|
||||
firstMonthRealisticTokens: 2_150_000_000,
|
||||
usedThisMonth: 12_000_000,
|
||||
remaining: 1_528_000_000,
|
||||
modelCount: 4,
|
||||
poolCount: 3,
|
||||
boostMonthlyTokens: 24_000_000,
|
||||
uncappedProviders: ["glm-cn", "kilo-gateway", "siliconflow"],
|
||||
perModel: [
|
||||
{ provider: "mistral", modelId: "mistral-small", displayName: "Mistral Small 4", monthlyTokens: 1_000_000_000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "mistral", tos: "caution" },
|
||||
{ provider: "llm7", modelId: "llm7", displayName: "LLM7 pool", monthlyTokens: 150_000_000, creditTokens: 0, freeType: "recurring-daily", poolKey: "llm7", tos: "caution" },
|
||||
{ provider: "kiro", modelId: "kiro", displayName: "Kiro Auto", monthlyTokens: 25_000, creditTokens: 0, freeType: "recurring-monthly", poolKey: "kiro", tos: "avoid" },
|
||||
{ provider: "together", modelId: "together-signup", displayName: "Together credit", monthlyTokens: 0, creditTokens: 25_000_000, freeType: "one-time-initial", poolKey: "together-signup", tos: "caution" },
|
||||
],
|
||||
};
|
||||
|
||||
test("Layout A renders KPI tiles, a per-model table, the boost callout and uncapped chips", () => {
|
||||
const html = renderToStaticMarkup(React.createElement(FreeBudgetView, { data: layoutData }));
|
||||
// KPI tiles
|
||||
assert.match(html, /Steady \/ month/);
|
||||
assert.match(html, /First month/);
|
||||
assert.match(html, /Used this month/);
|
||||
// per-model table present with the model rows
|
||||
assert.match(html, /data-testid="budget-table"/);
|
||||
assert.match(html, /Mistral Small 4/);
|
||||
assert.match(html, /Together credit/);
|
||||
assert.match(html, /25M credit/); // one-time credit rendered as credit, not steady
|
||||
// deposit-unlock boost surfaced separately
|
||||
assert.match(html, /Unlock ~24M more/);
|
||||
// uncapped providers shown as chips, not summed
|
||||
assert.match(html, /no published cap/i);
|
||||
assert.match(html, /siliconflow/);
|
||||
assert.match(html, /kilo-gateway/);
|
||||
});
|
||||
|
||||
// Scope assertions to the table (bar-segment tooltips also contain model names and render first)
|
||||
const tableOf = (h: string) => h.slice(h.indexOf('data-testid="budget-table"'));
|
||||
|
||||
test("hideAvoid drops ToS-restricted rows from the table but keeps the count callout", () => {
|
||||
const shown = renderToStaticMarkup(React.createElement(FreeBudgetView, { data: layoutData, hideAvoid: false }));
|
||||
assert.match(tableOf(shown), /Kiro Auto/);
|
||||
const hidden = renderToStaticMarkup(React.createElement(FreeBudgetView, { data: layoutData, hideAvoid: true }));
|
||||
assert.doesNotMatch(tableOf(hidden), /Kiro Auto/);
|
||||
// the 1-model ToS-restricted callout still reflects the underlying data
|
||||
assert.match(hidden, /1 model.*ToS-restricted/i);
|
||||
});
|
||||
|
||||
test("sort=name orders the table rows alphabetically by display name", () => {
|
||||
const t = tableOf(renderToStaticMarkup(React.createElement(FreeBudgetView, { data: layoutData, sort: "name" })));
|
||||
// Kiro Auto should appear before Mistral Small 4 in the table body when sorted by name
|
||||
assert.ok(t.indexOf("Kiro Auto") < t.indexOf("Mistral Small 4"), "table rows not sorted by name");
|
||||
});
|
||||
|
||||
@@ -1,6 +1,20 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { FREE_MODEL_BUDGETS, computeFreeModelTotals } from "../../open-sse/config/freeModelCatalog.ts";
|
||||
import {
|
||||
FREE_MODEL_BUDGETS,
|
||||
FREE_TIER_BOOSTS,
|
||||
computeFreeModelTotals,
|
||||
} from "../../open-sse/config/freeModelCatalog.ts";
|
||||
|
||||
const FREE_TYPES = [
|
||||
"recurring-daily",
|
||||
"recurring-monthly",
|
||||
"recurring-credit",
|
||||
"recurring-uncapped",
|
||||
"one-time-initial",
|
||||
"keyless",
|
||||
"discontinued",
|
||||
];
|
||||
|
||||
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);
|
||||
@@ -9,20 +23,28 @@ test("FREE_MODEL_BUDGETS is a non-empty array of well-formed per-model records",
|
||||
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));
|
||||
assert.ok(FREE_TYPES.includes(m.freeType), `bad freeType ${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.steadyRecurringTokens >= 1_000_000_000 && t.steadyRecurringTokens <= 3_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");
|
||||
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");
|
||||
});
|
||||
@@ -33,3 +55,39 @@ test("excludeTosAvoid drops avoid-flagged models from the totals", () => {
|
||||
assert.ok(clean.modelCount < all.modelCount);
|
||||
assert.ok(clean.steadyRecurringTokens <= all.steadyRecurringTokens);
|
||||
});
|
||||
|
||||
test("recurring-uncapped models are surfaced but NEVER summed into the steady headline", () => {
|
||||
const t = computeFreeModelTotals();
|
||||
// every uncapped record must carry monthlyTokens 0 (un-quantifiable, not counted)
|
||||
for (const m of FREE_MODEL_BUDGETS) {
|
||||
if (m.freeType === "recurring-uncapped") assert.equal(m.monthlyTokens, 0, `${m.provider}/${m.modelId} uncapped but counted`);
|
||||
}
|
||||
// uncappedProviders is the de-duped provider list and is non-empty (siliconflow, glm-cn, kilo…)
|
||||
assert.ok(Array.isArray(t.uncappedProviders) && t.uncappedProviders.length >= 3);
|
||||
for (const p of ["siliconflow", "glm-cn", "kilo-gateway"]) {
|
||||
assert.ok(t.uncappedProviders.includes(p), `expected ${p} among uncapped providers`);
|
||||
}
|
||||
});
|
||||
|
||||
test("deposit-unlock boost is reported separately, not folded into steady", () => {
|
||||
const t = computeFreeModelTotals();
|
||||
// OpenRouter $10 -> 1000 RPD boost is live (openrouter-free pool present)
|
||||
assert.ok(t.boostMonthlyTokens >= 24_000_000, `boost=${t.boostMonthlyTokens}`);
|
||||
assert.equal(FREE_TIER_BOOSTS["openrouter-free"].provider, "openrouter");
|
||||
// the boost must NOT already be inside the steady number
|
||||
assert.ok(t.boostMonthlyTokens < t.steadyRecurringTokens);
|
||||
});
|
||||
|
||||
test("2026-06-17 refresh: discontinued providers dropped, new free providers added", () => {
|
||||
const providers = new Set(FREE_MODEL_BUDGETS.map((m) => m.provider));
|
||||
// dead in 2026 — must be gone from the budget catalog
|
||||
for (const dead of ["chutes", "phind", "kluster", "glhf", "gitlawb", "aimlapi", "theoldllm"]) {
|
||||
assert.ok(!providers.has(dead), `${dead} should be removed (discontinued)`);
|
||||
}
|
||||
// qwen-web is KEPT on purpose: only its OAuth API tier died — OmniRoute uses the cookie/web path.
|
||||
assert.ok(providers.has("qwen-web"), "qwen-web must stay (cookie path still free)");
|
||||
// discovered in the refresh — must be present
|
||||
for (const fresh of ["kilo-gateway", "opencode-zen", "glm-cn"]) {
|
||||
assert.ok(providers.has(fresh), `${fresh} should be added`);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -32,6 +32,16 @@ test("summary returns per-model totals, used-this-month and remaining", async ()
|
||||
assert.ok(!JSON.stringify(body).includes("at /")); // no stack-trace leak
|
||||
});
|
||||
|
||||
test("summary surfaces the uncapped providers and the deposit-unlock boost", async () => {
|
||||
const res = await GET(new Request("http://localhost/api/free-tier/summary"));
|
||||
const body = await res.json();
|
||||
assert.ok(Array.isArray(body.uncappedProviders) && body.uncappedProviders.length >= 3);
|
||||
assert.equal(typeof body.boostMonthlyTokens, "number");
|
||||
assert.ok(body.boostMonthlyTokens >= 24_000_000);
|
||||
// the boost is reported, not folded into steady
|
||||
assert.ok(body.boostMonthlyTokens < body.steadyRecurringTokens);
|
||||
});
|
||||
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user