feat(catalog): eligibility-gated free-tier bucket - #12669
Merged
Merged
Conversation
…, ollama-cloud, groq, nara and mistral
…gainst official pages
… its regression test
… fix catalog header
… the last "14.4K RPD" Groq texts
…x-parsing the catalog
…ier-quota-reaudit # Conflicts: # README.md # docs/diagrams/readme-hero.svg # src/i18n/messages/in.json
… and the summary API
…ier-quota-reaudit
…ier-quota-reaudit # Conflicts: # README.md # docs/diagrams/free-tier-budget.svg # docs/diagrams/readme-hero.svg # open-sse/config/freeModelCatalog.data.ts
…bucket # Conflicts: # src/i18n/messages/in.json
…nt the gated bucket and how we count
…c the guide counts
…bucket # Conflicts: # README.md
…he current catalog
…ier-quota-reaudit # Conflicts: # README.md # docs/diagrams/README.md # docs/diagrams/free-tier-budget.svg # docs/diagrams/readme-hero.svg # docs/getting-started/FREE-TIERS-GUIDE.md # docs/reference/FREE_TIERS.md # open-sse/config/freeTierCatalog.ts # tests/unit/free-tier-catalog.test.ts
…bras reclassified upstream)
…bucket # Conflicts: # README.md # docs/diagrams/README.md # docs/diagrams/free-tier-budget.svg # docs/diagrams/promise-pillars.svg # docs/diagrams/readme-hero.svg # docs/getting-started/FREE-TIERS-GUIDE.md # docs/reference/FREE_TIERS.md # docs/screenshots/free-tier-budget-card.svg # open-sse/config/freeTierCatalog.ts # tests/unit/free-tier-catalog.test.ts # tests/unit/free-tier-reaudit-2026-09.test.ts
…cker; rebaseline gateways.ts (+3)
…ent figure
The eligibility gate was honored by the steady headline and the pool count, but
three adjacent figures still counted gated rows: the credit reductions feeding
steadyWithRecurringCreditsTokens/firstMonthRealisticTokens, the uncappedProviders
list ("permanently free, no cap"), and the docs gate's free-forever provider set,
which was built from freeType alone.
- computeFreeModelTotals: filter !isGated in the recurring-credit, one-time-credit
and uncapped predicates; gatedProviders semantics unchanged (steady rows only).
- check-docs-counts-sync: exclude eligibility-gated rows from the FOREVER set,
which moves the live free-forever count 53 -> 52 (the base's value). README,
promise-pillars.svg and FREE-TIERS-GUIDE re-synced.
- gen-budget-card-svg: skip gated one-time credits like the totals do, and fail
loudly on `--out` without a path.
- Tests: gated one-time credit does not move firstMonthRealisticTokens; a gated
uncapped row is not in uncappedProviders; shipped gated rows carry no credit
tokens; the committed budget card is byte-identical to a fresh generation.
…bucket # Conflicts: # docs/reference/FREE_TIERS.md
diegosouzapw
changed the base branch from
fix/free-tier-quota-reaudit
to
release/v3.8.51
September 4, 2026 02:26
…tier-gated-bucket # Conflicts: # README.md # docs/diagrams/free-tier-budget.svg # docs/getting-started/FREE-TIERS-GUIDE.md # docs/reference/FREE_TIERS.md # tests/unit/free-tier-reaudit-2026-09.test.ts
…owlist The allowlist landed on the base with #12318, after this branch's field was designed; eligibilityGate says who may claim a quota, not how much a row can be trusted.
diegosouzapw
added a commit
to PixmaNts/OmniRoute
that referenced
this pull request
Sep 4, 2026
Keep Lyceum on top of the later catalog/docs tip, including diegosouzapw#12669 eligibility-gated free-tier. Provider count 356 -> 357; restore i18n llm.txt five-part mirror headers; keep origin's ~1.47B / 52 free-forever headline (Lyceum is pay-per-use, not in the free-budget catalog). Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
diegosouzapw
added a commit
to jeanbispo/OmniRoute
that referenced
this pull request
Sep 4, 2026
Keep notrack-web and the later catalog (diegosouzapw#12669 eligibility-gated free-tier + SeekAi). Live count is 357 providers / 444 free-tier entries. Align unique catalog/docs/i18n counts with a notrack-web specific assert. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
diegosouzapw
added a commit
to jackjinke/OmniRoute
that referenced
this pull request
Sep 4, 2026
Preserve BigModel.cn next to SeekAi and diegosouzapw#12669's eligibility-gated free-tier catalog (~1.47B / 52 free-forever). Live unique counts stay APIKEY 239, reserved prefixes 409, providers 357, with BigModel-specific asserts. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
diegosouzapw
added a commit
to Abhishekchhetri020/OmniRoute
that referenced
this pull request
Sep 4, 2026
Keep Gemini 3.8 Flash high/medium/low on the eligibility-gated free-tier catalog from diegosouzapw#12669, and align unique docs/SVG counts to 447 entries. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
5 tasks done
muhamadgalihsaputra
pushed a commit
to niyatna/NiyatnaRoute
that referenced
this pull request
Sep 27, 2026
* test(catalog): pin the 2026-09-02 free-tier re-audit facts for gemini, ollama-cloud, groq, nara and mistral
* fix(catalog): re-audit gemini, ollama-cloud, groq, nara and mistral against official pages
* fix(catalog): restore the console-verified Mistral 1B pool and harden its regression test
* docs(free-tiers): move headline to the re-audited ~1.50B and refresh pool counts
* chore(free-tiers): retire stale Groq free-tier text and preset model; fix catalog header
* feat(catalog): eligibilityGate field and gatedRecurringTokens total
* docs(free-tiers): state the evidence-comment rule honestly and retire the last "14.4K RPD" Groq texts
* feat(check): docs-counts gate validates the eligibility-gated free-tier figure
* fix(docs): budget card reads computeFreeModelTotals() instead of regex-parsing the catalog
* docs(free-tiers): retire the stale Gemini onboarding quota text
* feat(radar): carry eligibilityGate through the feed schema, the merge and the summary API
* feat(dashboard): show the eligibility-gated free-tier figure apart from the headline
* docs(free-tier): refresh catalog-entry counts to 442 after base sync
* feat(catalog): ModelScope as the first eligibility-gated pool; document the gated bucket and how we count
* docs(free-tiers): restore README spacing lost in the merge and re-sync the guide counts
* docs(free-tiers): correct the unsummed-catalog comparison figure to the current catalog
* docs(free-tiers): re-sync numbers after merging release/v3.8.51 (Cerebras reclassified upstream)
* docs(free-tiers): re-sync numbers after merging PR1 (Cerebras reclassified upstream)
* fix(docs): keep the NaraRouter plans endpoint out of the API-path checker; rebaseline gateways.ts (+3)
* fix(catalog): keep eligibility-gated rows out of every headline-adjacent figure
The eligibility gate was honored by the steady headline and the pool count, but
three adjacent figures still counted gated rows: the credit reductions feeding
steadyWithRecurringCreditsTokens/firstMonthRealisticTokens, the uncappedProviders
list ("permanently free, no cap"), and the docs gate's free-forever provider set,
which was built from freeType alone.
- computeFreeModelTotals: filter !isGated in the recurring-credit, one-time-credit
and uncapped predicates; gatedProviders semantics unchanged (steady rows only).
- check-docs-counts-sync: exclude eligibility-gated rows from the FOREVER set,
which moves the live free-forever count 53 -> 52 (the base's value). README,
promise-pillars.svg and FREE-TIERS-GUIDE re-synced.
- gen-budget-card-svg: skip gated one-time credits like the totals do, and fail
loudly on `--out` without a path.
- Tests: gated one-time credit does not move firstMonthRealisticTokens; a gated
uncapped row is not in uncappedProviders; shipped gated rows carry no credit
tokens; the committed budget card is byte-identical to a fresh generation.
* test(catalog): allow eligibilityGate in the no-per-row-rating key allowlist
The allowlist landed on the base with diegosouzapw#12318, after this branch's field was designed;
eligibilityGate says who may claim a quota, not how much a row can be trusted.
---------
Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>
Co-authored-by: diegosouzapw <diegosouzapw24@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a second, honest free-tier figure to the catalog: quotas that are real and recurring but only
open after a region-bound identity check (today: ModelScope, behind Alibaba Cloud binding +
mainland-China real-name verification). Decisions D1/D4 of the "free-tier honest growth" plan:
catalog; a gated quota never inflates it.
gatedRecurringTokens/gatedProviders, rendered apart on the dashboard, and validated bynpm run check:docs-countsagainst the docs (anchor:
behind regional identity verification).The regime is untouched:
eligibilityGateis an orthogonal field,freeTypeand every budgetstay as they were, so routing behavior is unchanged by this PR.
What changed
eligibilityGatefield on free-model rows ("regional-identity"today) and two new totals from
computeFreeModelTotals():gatedRecurringTokensandgatedProviders. Gated rows are pool-deduped with the same rule as the steady bucket and areexcluded from
steadyRecurringTokens.modelscope-free, 6,000,000 tokens/mo (250 魔粒/day → 6M/mo),freeType: recurring-daily,tos: caution,eligibilityGate: regional-identity, with an// evidence:comment citing the provider's own page.check-docs-counts-syncnow validates the gated line alongside the steady/poolclaims, so the "+~6M behind regional identity verification" sentence cannot drift.
scripts/research/gen-budget-card-svg.mjsrewritten to readcomputeFreeModelTotals()instead of regex-parsing the catalog file. The old regex silentlyskipped 20 rows and printed 1.44B; the generator now emits the real totals plus a gated
line.
docs/screenshots/free-tier-budget-card.svgis regenerated from it.FreeBudgetCardrenders the gated figure as a callout under the headline, behindthe new i18n key
freeBudget.gated(translated invi; 39 locales carry the usual__MISSING__sentinel until the translation batch runs).eligibilityGatecarried through the feed schema,applyFeed()merge and the/api/free-tier/summarypassthrough, with the documented semantics: absent preserves,null clears, override wins.
bullet, and a new "Why our number is smaller than other aggregators'" section explaining the
pool-dedupe rule (our own catalog summed per model would read ~7.4B).
Numbers (live, from
computeFreeModelTotals()on this branch)modelscope)The ~1.47B/2.10B figures come from PR1 + the base's #12591 (Cerebras reclassified as a one-time $5
signup credit); this PR moves neither.
Depends on
Depends on #12649 (PR1, the free-tier quota re-audit) — this branch already contains it
(merged in, conflicts resolved, numbers re-synced through the gate).
Validation
npm run check:docs-countsnpm run check:docs-syncnpm run check:provider-consistencynpm run typecheck:corenpm run check:dashboard-typechecknpx vitest run tests/unit/ui/free-budget-card-gated.test.tsxnpm run i18n:check-ui-coverage.ts/.tsx)Focused tests run:
free-model-catalog-gated-bucket,free-tier-reaudit-2026-09,free-providers-batch-2026-07,check-docs-counts-sync,gen-budget-card-svg,radar-feed-eligibility-gate,radar-apply-feed,radar-localized-feed,radar-sync,free-tier-summary-radar-overlay,free-tier-summary-route,free-model-catalog,free-tier-catalog,i18n-vi-completeness,removed-providers-blocklist.Full suites and the production build are left to CI.
Follow-ups
FREE_TIERS.mdis not CI-gated — re-measure itwhenever the catalog changes (a note next to it says so).
/v1/modelslist (needs a key) — confirm one id live before enabling routing by default.vitranslations of the new i18n strings need a native-speaker review.FreeBudgetCardcontains a hardcoded Chinese literal (not introduced here).CI triage (run 33831114014 on ed1bc26, base release/v3.8.51 @ c41ec7f)
free-catalog-no-confidence-fieldrejected the neweligibilityGatekeyopen-sse/executors/glm.ts TS2554tests/unit/reset-aware-request-scope-12600.test.tsmissing fromstryker.conf.jsonopen-sse/services/genericQuotaFetcher.ts 0 → 1changelog.d/fixes/reset-aware-model-family.mdmust start with a bullet