diff --git a/README.md b/README.md index 7d82821ca9..985180b87b 100644 --- a/README.md +++ b/README.md @@ -359,7 +359,7 @@ Result: 4 layers of fallback = zero downtime AgentRouter
GPT-5, Claude, Gemini
$100 free credits
Qoder AI
Kimi-K2, DeepSeek-R1
Unlimited FREE
Pollinations
GPT-5, Claude, Llama 4
No key needed
- LongCat
Flash-Lite
50M tokens/day πŸ”₯
+ LongCat
LongCat-2.0
10M tokens one-time (KYC) πŸ”‘
Cloudflare AI
50+ models
10K neurons/day
@@ -726,7 +726,7 @@ podman compose --profile base up -d | **Qoder** | `if/` | kimi-k2-thinking, qwen3-coder-plus, deepseek-r1 | ♾️ Unlimited | | **Qwen** | `qw/` | qwen3-coder-plus/flash/next | ♾️ Unlimited | | **Pollinations** | `pol/` | GPT-5, Claude, Gemini, DeepSeek, Llama 4 | No key needed | -| **LongCat** | `lc/` | LongCat-Flash-Lite | 50M tokens/day πŸ”₯ | +| **LongCat** | `lc/` | LongCat-2.0 | 10M one-time (KYC) | | **Cloudflare AI** | `cf/` | 50+ models | 10K neurons/day | | **NVIDIA NIM** | `nvidia/` | 129 models | ~40 RPM | | **Cerebras** | `cerebras/` | Qwen3 235B, GPT-OSS 120B | 1M tok/day | @@ -748,7 +748,7 @@ podman compose --profile base up -d 1. kr/claude-sonnet-4.5 (Kiro β€” ~50 credits/mo per acct) 2. if/kimi-k2-thinking (Qoder β€” unlimited) 3. pol/gpt-5 (Pollinations β€” no key) -4. lc/longcat-flash-lite (50M tok/day backup) +4. lc/LongCat-2.0 (10M one-time backup, KYC) Compression: aggressive (~50%) β†’ double your free quota Β· Cost: $0/mo ``` diff --git a/docs/getting-started/FREE-TIERS-GUIDE.md b/docs/getting-started/FREE-TIERS-GUIDE.md index a090c89701..c06ad1709e 100644 --- a/docs/getting-started/FREE-TIERS-GUIDE.md +++ b/docs/getting-started/FREE-TIERS-GUIDE.md @@ -23,7 +23,7 @@ These providers are **always free** with no limits: | **Kiro AI** | Claude Sonnet 4.5, Haiku 4.5, Opus 4.6 | 50 credits/month | No auth needed | | **OpenCode Free** | GPT-4o, Claude, Gemini | Unlimited | No auth needed | | **Pollinations** | GPT-5, Claude, Gemini, DeepSeek, Llama 4 | No key needed | No auth needed | -| **LongCat** | LongCat-Flash-Lite | 50M tokens/day | No auth needed | +| **LongCat** | LongCat-2.0 | 10M tokens (one-time) | API key + KYC | | **Cloudflare AI** | 50+ models | 10K neurons/day | No auth needed | | **Qwen** | Qwen3-coder-plus/flash/next | Unlimited | No auth needed | | **Qoder** | Kimi-K2, DeepSeek-R1, Qwen3-coder | Unlimited | No auth needed | @@ -66,7 +66,7 @@ Connect these 4 providers for **unlimited free AI**: 1. **Kiro AI** β€” 50 credits/month (Claude models) 2. **OpenCode Free** β€” Unlimited (GPT models) 3. **Pollinations** β€” No key needed (multiple models) -4. **LongCat** β€” 50M tokens/day (backup) +4. **LongCat** β€” 10M tokens one-time (backup, requires KYC) Then use `model: "auto"` and OmniRoute will: - Try Kiro first (best quality) @@ -98,7 +98,7 @@ Browse the list and select one of these free providers: - **Kiro AI** β€” Free Claude models - **OpenCode Free** β€” Free GPT models - **Pollinations** β€” Free GPT-5, Claude, Gemini -- **LongCat** β€” 50M tokens/day free +- **LongCat** β€” 10M tokens free (one-time, requires KYC) - **Cloudflare AI** β€” 50+ models, 10K neurons/day ### Step 5: Click Connect @@ -136,10 +136,10 @@ Connect 3-4 free providers for the best experience. ### LongCat -- **Models**: LongCat-Flash-Lite -- **Quota**: 50M tokens/day -- **Auth**: No auth needed -- **Best for**: High-volume usage +- **Models**: LongCat-2.0 +- **Quota**: 10M tokens, one-time grant on signup (not recurring daily/monthly) +- **Auth**: API key + KYC verification required to unlock the free grant +- **Best for**: A one-off free allowance; pay-as-you-go beyond it ### Cloudflare AI @@ -222,7 +222,7 @@ Let's calculate how much free AI you can get: | Kiro AI | ~1.7 credits | 50 credits | | OpenCode Free | Unlimited | Unlimited | | Pollinations | Unlimited | Unlimited | -| LongCat | 50M tokens | 1.5B tokens | +| LongCat | β€” (one-time) | 10M tokens (one-time, KYC) | | Cloudflare AI | 10K neurons | 300K neurons | | NVIDIA NIM | ~40 RPM | ~1.7M requests | | Cerebras | 1M tokens | 30M tokens | diff --git a/docs/getting-started/PROVIDERS-GUIDE.md b/docs/getting-started/PROVIDERS-GUIDE.md index 7b7138d61f..94ad92502a 100644 --- a/docs/getting-started/PROVIDERS-GUIDE.md +++ b/docs/getting-started/PROVIDERS-GUIDE.md @@ -29,7 +29,7 @@ Think of a provider like a **phone carrier**. Just as you need a phone carrier t - **Kiro AI** β€” Free Claude models (no auth needed) - **OpenCode Free** β€” Free GPT models (no auth needed) - **Pollinations** β€” Free GPT-5, Claude, Gemini (no key needed) - - **LongCat** β€” 50M tokens/day free + - **LongCat** β€” 10M tokens free (one-time grant, requires account + KYC) - **Cloudflare AI** β€” 50+ models, 10K neurons/day 4. Click **Connect** 5. Done! You now have free AI access. @@ -69,7 +69,7 @@ These providers offer **free access** with no credit card: | **Kiro AI** | 50 credits/month | Claude Sonnet 4.5, Haiku 4.5, Opus 4.6 | No auth needed | | **OpenCode Free** | Unlimited | GPT-4o, Claude, Gemini | No auth needed | | **Pollinations** | No key needed | GPT-5, Claude, Gemini, DeepSeek, Llama 4 | No auth needed | -| **LongCat** | 50M tokens/day | LongCat-Flash-Lite | No auth needed | +| **LongCat** | 10M one-time | LongCat-2.0 | API key + KYC | | **Cloudflare AI** | 10K neurons/day | 50+ models | No auth needed | | **NVIDIA NIM** | ~40 RPM | 129 models | API key needed | | **Cerebras** | 1M tokens/day | Qwen3 235B, GPT-OSS 120B | API key needed | diff --git a/docs/reference/FREE_TIERS.md b/docs/reference/FREE_TIERS.md index 697546df42..5951e1b1d7 100644 --- a/docs/reference/FREE_TIERS.md +++ b/docs/reference/FREE_TIERS.md @@ -25,7 +25,7 @@ lastUpdated: 2026-06-28 > **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, `llm7` 150M, `longcat` 150M (LongCat-2.0), `groq` 117M, `gemini` 60M, `cerebras` 30M, `cloudflare-ai` 30M, `sambanova` 30M. +Biggest **documented** contributors: `mistral` 1.00B, `llm7` 150M, `groq` 117M, `gemini` 60M, `cerebras` 30M, `cloudflare-ai` 30M, `sambanova` 30M. (`longcat` is excluded β€” its 10M LongCat-2.0 grant is a one-time, KYC-gated signup credit, not a recurring monthly budget.) > ⚠️ The theoretical ceiling (~10B) is inflated by rate-limit-only providers with **no published token cap** (`tencent`, `siliconflow`, `nvidia`, `baidu`, `glm-cn`, `sparkdesk`) whose figures would be `RPM/TPM Γ— 24/7 Γ— 30d` β€” a theoretical maximum no single account will sustain. They are **excluded** from the defensible number (shown in the "permanently free, no cap" row instead). This is the same inflation that makes competitors' multi-billion claims unreliable. @@ -38,7 +38,7 @@ A 50-agent web-research pass (official docs + last-7-days news, adversarially ve - **Removed / no free tier (2026):** `chutes` (free tier ended 2026-03), `phind` (company shut down 2026-01), `kluster` (sunset 2026-06-09 β†’ MITO), `glhf` (beta ended), `gitlawb` + `gitlawb-gmi` (MiMo free revoked 2026-05-24, Nemotron promo ended 2026-06 β€” re-verified 2026-06-18), `aimlapi` (free tier paused β€” re-verified 2026-06-18), `yi` (Yi-Light retired, pay-as-you-go β€” re-verified 2026-06-18), `theoldllm` / `featherless-ai` (no current free tier). `iflytek` / `sparkdesk` stay listed but carry a ToS-caution note (Spark Lite is free; the ToS restricts proxy/relay use). - **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. +- **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` Preview ended + Flash models retired β†’ **LongCat-2.0** only, reclassified as a one-time **10M**-token signup credit (KYC-gated, not recurring). - **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. @@ -177,7 +177,7 @@ A 50-agent web-research pass (official docs + last-7-days news, adversarially ve |---|---|---|---|---|---| | `mistral` | recurring | ~1.00B | β€” | caution | 5 | | `llm7` | recurring | ~150M | β€” | caution | 4 | -| `longcat` | recurring | ~150M | β€” | caution | 1 | +| `longcat` | one-time | β€” | 10M | caution | 1 | | `gemini` | recurring | ~60M | β€” | caution | 6 | | `cerebras` | recurring | ~30M | β€” | caution | 2 | | `cloudflare-ai` | recurring | ~30M | β€” | caution | 6 | @@ -297,7 +297,7 @@ A 50-agent web-research pass (official docs + last-7-days news, adversarially ve - **`kiro`** β€” Catalog shipped freeNote "(none)" β€” but Kiro has a documented, perpetual free tier of 50 credits/month. The free tier existed since Kiro's public launch (pricing formalized ~October 2025). This is a … - **`kluster`** β€” The $5 free credits on signup appears to still match. However, there is evidence of an additional permanent free tier (post-credit) with undocumented limits, which may represent an improvement over t… - **`llm7`** β€” Rate limits have increased from the shipped freeNote (20 RPM / 100 req/hr β†’ 40 RPM / 200 req/hr). The "no signup required" claim is now outdated β€” a free token from token.llm7.io is now required (tho… -- **`longcat`** β€” Significant change from shipped freeNote of "(none)": the platform actively provides 5M free tokens/day on a recurring daily basis to all API users during the public beta. +- **`longcat`** β€” The public preview/beta ended and the Flash models were retired; only the GA `LongCat-2.0` remains. The free tier is a **one-time 10M-token grant** unlocked after account signup + **KYC verification** β€” it does **not** reset daily or monthly. Beyond the grant it is pay-as-you-go. - **`mistral`** β€” The shipped freeNote ("Free Experiment tier: rate-limited access to all models") is directionally correct but understated. Current reality adds specific documented limits: 2 RPM, 500K TPM, 1B tokens/… - **`monsterapi`** β€” The shipped freeNote says "Free credits for decentralized GPU inference" which is partially accurate β€” there are one-time trial credits on signup. However, the recurring free tier has 0 credits/month… - **`morph`** β€” The shipped freeNote mentions "250K credits/month" which matches the current credit allocation; however, the more significant constraint is 200 requests/month which was not captured in the original c… diff --git a/docs/reference/PROVIDER_REFERENCE.md b/docs/reference/PROVIDER_REFERENCE.md index a7e3dc0f66..f95ab0ff09 100644 --- a/docs/reference/PROVIDER_REFERENCE.md +++ b/docs/reference/PROVIDER_REFERENCE.md @@ -1,14 +1,14 @@ --- title: "Provider Reference" -version: 3.8.40 -lastUpdated: 2026-06-29 +version: 3.8.42 +lastUpdated: 2026-06-30 --- # Provider Reference > **Auto-generated** from `src/shared/constants/providers.ts` β€” do not edit by hand. > Regenerate with: `npm run gen:provider-reference` -> **Last generated:** 2026-06-29 +> **Last generated:** 2026-06-30 Total providers: **237**. See category breakdown below. @@ -175,7 +175,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `liquid` | `liquid` | Liquid AI | API key | [link](https://liquid.ai) | Get API key at liquid.ai | | `llamagate` | `llamagate` | LlamaGate | API key | [link](https://llamagate.ai) | β€” | | `llm7` | `llm7` | LLM7.io | API key | [link](https://llm7.io) | No signup required - 2 req/s, 20 RPM, 100 req/hr free tier | -| `longcat` | `lc` | LongCat AI | API key | [link](https://longcat.chat/platform/docs) | Free: 5M tokens/day on LongCat-2.0-Preview (Flash models retired 2026-05-29); up to 120M/day via feedback. | +| `longcat` | `lc` | LongCat AI | API key | [link](https://longcat.chat/platform/docs) | Free: one-time 10M-token grant after account signup + KYC verification (LongCat-2.0). One-time only β€” not a recurring daily/monthly allowance. | | `maritalk` | `maritalk` | Maritalk | API key | [link](https://www.maritaca.ai) | β€” | | `meta-llama` | `meta` | Meta Llama API | API key | [link](https://llama.developer.meta.com) | β€” | | `minimax` | `minimax` | Minimax Coding | API key, video | [link](https://www.minimax.io) | β€” | diff --git a/open-sse/config/freeModelCatalog.data.ts b/open-sse/config/freeModelCatalog.data.ts index a25e1e363c..791eec8c43 100644 --- a/open-sse/config/freeModelCatalog.data.ts +++ b/open-sse/config/freeModelCatalog.data.ts @@ -241,7 +241,7 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [ { 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: "longcat", modelId: "LongCat-2.0", displayName: "LongCat-2.0", monthlyTokens: 0, creditTokens: 10000000, freeType: "one-time-initial", 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" }, diff --git a/open-sse/config/freeTierCatalog.ts b/open-sse/config/freeTierCatalog.ts index 30038a48a8..48a08179fb 100644 --- a/open-sse/config/freeTierCatalog.ts +++ b/open-sse/config/freeTierCatalog.ts @@ -13,7 +13,6 @@ export type TosVerdict = "ok" | "caution" | "ambiguous" | "avoid" | "unknown"; export const FREE_TIER_BUDGETS: Record = { mistral: 1_000_000_000, - longcat: 150_000_000, "cloudflare-ai": 122_000_000, gemini: 60_000_000, doubao: 60_000_000, diff --git a/open-sse/config/providers/registry/longcat/index.ts b/open-sse/config/providers/registry/longcat/index.ts index af1569d077..d53c2a32ef 100644 --- a/open-sse/config/providers/registry/longcat/index.ts +++ b/open-sse/config/providers/registry/longcat/index.ts @@ -9,12 +9,15 @@ export const longcatProvider: RegistryEntry = { authType: "apikey", authHeader: "Authorization", authPrefix: "Bearer", - // Sweep 2026-06-19: the LongCat-Flash-* line was officially retired 2026-05-29; the - // current docs (longcat.chat/platform/docs) expose only LongCat-2.0-Preview. + // Sweep 2026-06-30: the LongCat-Flash-* line was retired 2026-05-29 and the Preview + // ended; current docs (longcat.chat/platform/docs) expose only the GA LongCat-2.0 + // (1M context, 128K max output). Free tier is a ONE-TIME 10M-token grant unlocked + // after account signup + KYC verification β€” NOT a recurring daily/monthly allowance. + // Beyond the free quota it is pay-as-you-go (see providerCostData). models: [ { - id: "LongCat-2.0-Preview", - name: "LongCat 2.0 Preview (10M tok/day πŸ†“)", + id: "LongCat-2.0", + name: "LongCat 2.0 (10M tok free πŸ†“)", contextLength: 1048576, }, ], diff --git a/open-sse/services/__tests__/tierResolver.test.ts b/open-sse/services/__tests__/tierResolver.test.ts index 07a91a19fe..458a567627 100644 --- a/open-sse/services/__tests__/tierResolver.test.ts +++ b/open-sse/services/__tests__/tierResolver.test.ts @@ -44,7 +44,7 @@ describe("TierResolver", () => { }); it("classifies LongCat as free", () => { - const result = classifyTier("longcat", "flash-lite"); + const result = classifyTier("longcat", "LongCat-2.0"); assert.equal(result.tier, PROVIDER_TIER.FREE); assert.equal(result.hasFreeTier, true); }); diff --git a/open-sse/services/providerCostData.ts b/open-sse/services/providerCostData.ts index 461caf0046..b1be9d0203 100644 --- a/open-sse/services/providerCostData.ts +++ b/open-sse/services/providerCostData.ts @@ -26,11 +26,11 @@ export const KNOWN_MODEL_PRICING: Record = { "grok-4-fast": { inputCostPer1M: 0.2, outputCostPer1M: 0.5, isFree: false }, "kimi-k2-thinking": { inputCostPer1M: 0, outputCostPer1M: 0, isFree: true }, "qwen3-coder-plus": { inputCostPer1M: 0, outputCostPer1M: 0, isFree: true }, - "longcat-flash-lite": { - inputCostPer1M: 0, - outputCostPer1M: 0, + "longcat-2.0": { + inputCostPer1M: 0.75, + outputCostPer1M: 2.95, isFree: true, - freeQuotaLimit: 50000000, + freeQuotaLimit: 10000000, }, }; diff --git a/src/lib/providers/validation.ts b/src/lib/providers/validation.ts index 091cc51aa6..bb98d818a3 100644 --- a/src/lib/providers/validation.ts +++ b/src/lib/providers/validation.ts @@ -421,7 +421,7 @@ export async function validateProviderApiKey({ provider, apiKey, providerSpecifi method: "POST", headers: buildBearerHeaders(apiKey, providerSpecificData), body: JSON.stringify({ - model: "longcat", + model: "LongCat-2.0", messages: [{ role: "user", content: "test" }], max_tokens: 1, }), diff --git a/src/shared/constants/providers/apikey/regional.ts b/src/shared/constants/providers/apikey/regional.ts index 8e6f8f55e5..3c1dc808fb 100644 --- a/src/shared/constants/providers/apikey/regional.ts +++ b/src/shared/constants/providers/apikey/regional.ts @@ -138,7 +138,7 @@ export const APIKEY_PROVIDERS_REGIONAL = { website: "https://longcat.chat/platform/docs", hasFree: true, freeNote: - "Free: 5M tokens/day on LongCat-2.0-Preview (Flash models retired 2026-05-29); up to 120M/day via feedback.", + "Free: one-time 10M-token grant after account signup + KYC verification (LongCat-2.0). One-time only β€” not a recurring daily/monthly allowance.", }, moonshot: { id: "moonshot", diff --git a/tests/unit/free-tier-catalog.test.ts b/tests/unit/free-tier-catalog.test.ts index ad10a85257..b0845e015b 100644 --- a/tests/unit/free-tier-catalog.test.ts +++ b/tests/unit/free-tier-catalog.test.ts @@ -12,9 +12,11 @@ test("FREE_TIER_BUDGETS holds positive integer monthly-token budgets", () => { assert.ok(Number.isInteger(tokens) && tokens > 0, `${id} must be a positive integer`); } assert.equal(FREE_TIER_BUDGETS.mistral, 1_000_000_000); - assert.equal(FREE_TIER_BUDGETS.longcat, 150_000_000); assert.equal(FREE_TIER_BUDGETS["cloudflare-ai"], 122_000_000); assert.equal(FREE_TIER_BUDGETS.cerebras, 30_000_000); + // LongCat is excluded from this recurring-monthly catalog: its free tier is a + // one-time 10M-token signup grant (not recurring), so it must not appear here. + assert.equal(FREE_TIER_BUDGETS.longcat, undefined); }); test("FREE_TIER_TOS marks proxy-prohibited providers as avoid", () => { @@ -25,16 +27,16 @@ test("FREE_TIER_TOS marks proxy-prohibited providers as avoid", () => { test("computeFreeTierTotals sums the documented budgets", () => { const t = computeFreeTierTotals(); - assert.equal(t.providerCount, 22); - assert.ok(t.documentedMonthlyTokens >= 1_500_000_000); - assert.ok(t.documentedMonthlyTokens <= 1_600_000_000); + assert.equal(t.providerCount, 21); + assert.ok(t.documentedMonthlyTokens >= 1_350_000_000); + assert.ok(t.documentedMonthlyTokens <= 1_450_000_000); assert.equal(typeof t.headline, "string"); - assert.match(t.headline, /1\.5/); + assert.match(t.headline, /1\.3/); }); test("computeFreeTierTotals can exclude ToS-avoid providers", () => { const all = computeFreeTierTotals(); const clean = computeFreeTierTotals({ excludeTosAvoid: true }); assert.equal(all.documentedMonthlyTokens - clean.documentedMonthlyTokens, 25_000); - assert.equal(clean.providerCount, 21); + assert.equal(clean.providerCount, 20); });