Skip to content

fix(auto-combo): give every mode pack quality and reliability weights - #12731

Merged
diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
maxmad64bis:fix/batch2-scoring-packs-quality-reliability
Sep 10, 2026
Merged

diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
maxmad64bis:fix/batch2-scoring-packs-quality-reliability

Conversation

@maxmad64bis

@maxmad64bis maxmad64bis commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ base-red inherited: #12732

Summary

Picking a mode like reliable or quality used to mute two signals the scorer already knows: how good the output was (quality) and how often the provider failed in the last 24 h (reliability). So reliability-first didn't actually weigh reliability at all (open-sse/services/autoCombo/modePacks.ts:13 replaces the defaults wholesale). Now every pack carries both — quality 0.02 except quality-first 0.03 (same as the default, so quality-first isn't weaker than balanced), reliability 0.03 except reliability-first 0.04. Funding comes from quota/costInv/tierPriority; health (the circuit-breaker — open/half-open/closed) and stability (how steady the latency is) stay untouched, and each pack still sums to 1.0 (0.9999 as printed at four decimals).

Related Issues

Validation

  • Change type: routing
  • Focused tests and category gates from the golden path
  • npm run lint (pre-existing suppressions only; touched files clean when grepped by relative path)
  • 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

  • open-sse/services/autoCombo/__tests__/autoCombo.test.ts — gates that each pack has quality and reliability, a cold pool (no observations) doesn't change ranking, a warm pool does, NaN maps to neutral, and a healthy provider still beats a flaky one. (63/63 green).
  • tests/unit/auto-combos-suffixes-4235.test.ts — same per-pack gate (9/9).
  • tests/unit/check-docs-counts-quality-pinning.test.ts (new) — locks that every pack pins quality explicitly and the scoring fallback stays neutral, plus a strict gate (6/6).
  • docs/routing/AUTO-COMBO.md — emphasis prose rebased on the rebalanced packs.

Coverage Notes

Touches open-sse/services/autoCombo/modePacks.ts and scoring.ts; covered by the two files above. No change to the default path (reliability stays 0 there).

Reviewer Notes

Docs (AUTO-COMBO.md:187/210/218/236/243 and auto-combo-scoring.mmd f16) updated alongside the code. When a pool has no observations, packs add a flat baseline — ranking only shifts once real failure-rate data fills up, and a closed breaker still outweighs a bad failure rate.

  • Pack quality/reliability locks live here — same scoring concern as the packs.

@maxmad64bis
maxmad64bis force-pushed the fix/batch2-scoring-packs-quality-reliability branch 2 times, most recently from 9c94ffd to 1aa284b Compare September 4, 2026 14:07
@maxmad64bis maxmad64bis changed the title fix(auto-combo): give every mode pack quality and reliability weights (N11+N53) fix(auto-combo): give every mode pack quality and reliability weights Sep 4, 2026
@maxmad64bis
maxmad64bis force-pushed the fix/batch2-scoring-packs-quality-reliability branch 2 times, most recently from 3b0b960 to d08fe12 Compare September 6, 2026 01:32
@maxmad64bis
maxmad64bis force-pushed the fix/batch2-scoring-packs-quality-reliability branch from d08fe12 to b4e8b65 Compare September 10, 2026 11:51
diegosouzapw pushed a commit that referenced this pull request Sep 10, 2026
…ty/breaker (#12794)

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.

Tratar breaker aberto como equivalente a fechado no scoring de snapshot é pior que não pontuar: afirma saúde onde há falha conhecida. Trocar as três constantes neutras por valor observado é a correção, e manter preço e orçamento fora do escopo mantém a PR revisável.

**Integração:** o `computeSnapshotWeights` conflitou com o #12731, que adiciona peso de `reliability` a partir de `failureRate`/`errorRate`. Os dois cobrem chaves diferentes e compõem — ficaram ambos: reliability do #12731, health via breaker e quality desta PR, quota neutro nos dois. Nenhum dos dois lados foi descartado.
@diegosouzapw
diegosouzapw merged commit 9795372 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.
diegosouzapw added a commit that referenced this pull request Sep 10, 2026
#12731 added the "Mode pack ranking gates (cold/warm/health)" block to
open-sse/services/autoCombo/__tests__/autoCombo.test.ts with seven
ProviderCandidate literals that omit three required fields (provider,
model, errorRate). check:open-sse-typecheck reports them as
'TS2739 (baseline 0, live 7)', which fails Fast Quality Gates on the tip
and therefore on every open PR.

The fields are filled with neutral values that preserve each case's
intent: provider/model are identical across every candidate (so
classifyTier cannot skew a comparison), and errorRate is 0 — which is
only read when failureRate is absent, i.e. the two 'cold pool' candidates
the test itself describes as 'reliability 1'.

Validation: npm run check:open-sse-typecheck goes from
'FAIL - 1 new/regressed error' to 'OK - 0 pre-existing error(s)'.
The suite itself does not execute in CI: vitest.config.ts excludes this
file (#8618), so typecheck is its only gate.

Refs #12732
diegosouzapw added a commit that referenced this pull request Sep 11, 2026
#12731 added the "Mode pack ranking gates (cold/warm/health)" block to
open-sse/services/autoCombo/__tests__/autoCombo.test.ts with seven
ProviderCandidate literals that omit three required fields (provider,
model, errorRate). check:open-sse-typecheck reports them as
'TS2739 (baseline 0, live 7)', which fails Fast Quality Gates on the tip
and therefore on every open PR.

The fields are filled with neutral values that preserve each case's
intent: provider/model are identical across every candidate (so
classifyTier cannot skew a comparison), and errorRate is 0 — which is
only read when failureRate is absent, i.e. the two 'cold pool' candidates
the test itself describes as 'reliability 1'.

Validation: npm run check:open-sse-typecheck goes from
'FAIL - 1 new/regressed error' to 'OK - 0 pre-existing error(s)'.
The suite itself does not execute in CI: vitest.config.ts excludes this
file (#8618), so typecheck is its only gate.

Refs #12732
@maxmad64bis
maxmad64bis deleted the fix/batch2-scoring-packs-quality-reliability branch September 24, 2026 21:12
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…ty/breaker (diegosouzapw#12794)

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.

Tratar breaker aberto como equivalente a fechado no scoring de snapshot é pior que não pontuar: afirma saúde onde há falha conhecida. Trocar as três constantes neutras por valor observado é a correção, e manter preço e orçamento fora do escopo mantém a PR revisável.

**Integração:** o `computeSnapshotWeights` conflitou com o diegosouzapw#12731, que adiciona peso de `reliability` a partir de `failureRate`/`errorRate`. Os dois cobrem chaves diferentes e compõem — ficaram ambos: reliability do diegosouzapw#12731, health via breaker e quality desta PR, quota neutro nos dois. Nenhum dos dois lados foi descartado.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…diegosouzapw#12731)

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.

`reliability-first` que não pesava reliability é o defeito mais constrangedor possível num mode pack, e a causa é clara: `modePacks.ts:13` substituía os defaults por inteiro. Financiar os novos pesos com `quota`/`costInv`/`tierPriority` mantendo cada pack somando 1.0 é a parte que exige cuidado e você fez.

Manter `quality-first` em 0.03, igual ao default, para que ele não fique mais fraco que `balanced`, é o tipo de detalhe que só aparece quando se checa a tabela inteira.

**Integração:** conflitou com o diegosouzapw#12794 no `computeSnapshotWeights`; os dois compõem e ambos ficaram.
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