Skip to content

feat(providers): advertise free-tier capability in provider plugin manifest - #12786

Merged
diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
maxmad64bis:feat/manifest-free-tier-capability
Sep 10, 2026
Merged

diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
maxmad64bis:feat/manifest-free-tier-capability

Conversation

@maxmad64bis

@maxmad64bis maxmad64bis commented Sep 5, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ base-red inherited: #12732

Summary

Sidecars and dashboards can now filter free-capable providers straight from the plugin manifest. A provider with documented free models carries a free-tier tag next to its existing capabilities (usage-fetch, usage-supported, ...), so consumers don't need to read the quota catalog. It's display metadata only — routing and quota logic are untouched.

The tag is derived live from the free-model catalog (77 providers at this writing) and only lights up for providers the registry actually serves (76 — one catalog entry, arcee-ai, has no registry entry yet). A STRICT docs gate fails CI if the manifest count ever drifts from the catalog.

Related Issues

Validation

  • Change type: provider
  • Focused tests and category gates from the golden path
  • npm run lint
  • Reconciled with the current active release base; focused checks rerun afterward
  • Production-code changes include a new or updated automated test in this PR

Tests Added Or Updated

  • tests/unit/free-tier-providers.test.ts (new) — leaf set derivation: known free provider, alias contract, non-string rejection, pollinations despite discontinued rows, unknown id excluded (5/5 pass)
  • tests/unit/provider-plugin-manifest.test.ts (extended) — 5 new emission cases, all pass (5/5): id branch, alias-only branch (legacy-free/api-airforce), unknown id omitted, pollinations, capabilities stay sorted (whole file 15/15 with the 10 pre-existing cases)
  • tests/unit/check-docs-counts-sync.test.ts (extended) — gate form pins + buildChecks() contains a free-tier check; node scripts/check/check-docs-counts-sync.mjs shows manifest 76 vs leaf∩registry 76 (leaf 77) green

Coverage Notes

  • Changes open-sse/config/ (new leaf freeTierProviders.ts, union +1 and capabilitiesFor branch in providerPluginManifest.ts) plus the docs-sync gate script. Covered by the three test files above; leaf is a pure derivation with no branches beyond the null-guard.
  • Neighbor suites pass (service-provider-plugin-manifest 4/4, manifest route 10/10). One pre-existing failure is inherited from the red base, not this branch: the "gate exits 0 on synced repo" test trips on the 169-vs-170 migrations doc drift (🔴 Release branch not green: release/v3.8.51 #12732).

Reviewer Notes

  • One judgment call worth flagging: the gate compares the manifest count against the catalog∩registry intersection (76), not the raw catalog size (77), because arcee-ai is cataloged but has no registry entry yet. The raw size is logged in the gate detail line so the gap stays visible. If arcee-ai gets registered, both numbers move together and the gate stays green.
  • No migrations, no flags, no routing changes. Single commit.
  • Known asymmetry: hasFreeTierProvider matches exact ids only (no resolveProviderId — open-sse can't import from src/), unlike providerHasFreeModels which resolves aliases. An alias not declared in the entry's alias field is missed on the manifest side; callers must pass both id and alias (as capabilitiesFor does).

@maxmad64bis
maxmad64bis force-pushed the feat/manifest-free-tier-capability branch from 60222bd to 067a714 Compare September 10, 2026 11:51
@diegosouzapw
diegosouzapw merged commit 0048be7 into diegosouzapw:release/v3.8.51 Sep 10, 2026
9 of 16 checks passed
diegosouzapw pushed a commit that referenced this pull request Sep 10, 2026
…eights, quality gate and scoring diagram now covered (#12507)

Estender o gate de contagens para headings, rankings, catálogo, pesos, quality gate e o diagrama de scoring é exatamente o tipo de trabalho que evita a classe inteira em vez de um caso.

Falo por experiência desta campanha: o `check:docs-counts` caiu **duas vezes** hoje pela mesma causa — contagem de migration escrita à mão em três arquivos mais 41 mirrors, desatualizando a cada migration nova (#12970 e #13209). Cada superfície que este PR passa a cobrir é uma que deixa de virar base-red na mão de quem vier depois.

Revalidei sobre o tip: **19/19**, `check:docs-counts-sync` com 0 drifts, `check:docs-all` PASS, `check:doc-links` PASS.

**Integração:** dois conflitos.

1. `scripts/check/check-docs-counts-sync.mjs` — o bloco de leitura de fatos conflitou com os imports de free-tier que entraram pelo #12786/#12744 nesta campanha. Aditivo, os dois conjuntos ficaram.
2. `docs/diagrams/auto-combo-scoring.mmd` — o seu rótulo dizia `reliability (0.0000)`, mas o #12731 mergeou horas antes e passou a dar peso de reliability a todo mode pack. Ficou o rótulo do tip, `reliability (0.0000 DEFAULT, 0.03 packs, 0.04 reliable)`, que é o número real agora.
@maxmad64bis
maxmad64bis deleted the feat/manifest-free-tier-capability branch September 24, 2026 21:11
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…nifest (diegosouzapw#12786)

Validado numa worktree combinada com a onda de roteamento/free-tier desta leva sobre `release/v3.8.51`: typecheck:core limpo, check-api-typecheck OK (288), check-file-size OK após rebaseline, 84/85 nos testes focados no runner Node.

Metadado de display derivado da mesma fonte da decisão, com um gate STRICT que quebra o CI se a contagem do manifesto divergir do catálogo — é o detalhe que impede a tag de virar mentira daqui a três meses.

Registrar que 77 entradas de catálogo viram 76 no manifesto porque o `arcee-ai` ainda não tem entrada no registry é exatamente o tipo de discrepância que costuma virar bug fantasma.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…eights, quality gate and scoring diagram now covered (diegosouzapw#12507)

Estender o gate de contagens para headings, rankings, catálogo, pesos, quality gate e o diagrama de scoring é exatamente o tipo de trabalho que evita a classe inteira em vez de um caso.

Falo por experiência desta campanha: o `check:docs-counts` caiu **duas vezes** hoje pela mesma causa — contagem de migration escrita à mão em três arquivos mais 41 mirrors, desatualizando a cada migration nova (diegosouzapw#12970 e diegosouzapw#13209). Cada superfície que este PR passa a cobrir é uma que deixa de virar base-red na mão de quem vier depois.

Revalidei sobre o tip: **19/19**, `check:docs-counts-sync` com 0 drifts, `check:docs-all` PASS, `check:doc-links` PASS.

**Integração:** dois conflitos.

1. `scripts/check/check-docs-counts-sync.mjs` — o bloco de leitura de fatos conflitou com os imports de free-tier que entraram pelo diegosouzapw#12786/diegosouzapw#12744 nesta campanha. Aditivo, os dois conjuntos ficaram.
2. `docs/diagrams/auto-combo-scoring.mmd` — o seu rótulo dizia `reliability (0.0000)`, mas o diegosouzapw#12731 mergeou horas antes e passou a dar peso de reliability a todo mode pack. Ficou o rótulo do tip, `reliability (0.0000 DEFAULT, 0.03 packs, 0.04 reliable)`, que é o número real agora.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants