mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-15 19:32:20 +03:00
Um modelo grátis fora da tabela herdando $5/$15 por milhão e afundando no roteamento cost-aware é o defeito mais caro desta onda: silencioso, e inverte exatamente a decisão que o operador quer. Parar de chutar 1500ms de latência para modelo desconhecido e usar a mediana observada do pool — com contador de quantas vezes o chute dispara — é trocar heurística por medição do jeito certo. O contador é o que permite saber se valeu. Revalidei após reconstruir a branch sobre o tip: **33/33** nas suítes da PR, typecheck:core limpo, `check-api-typecheck` OK (289). **Duas integrações:** 1. `computeSnapshotWeights` conflitou com o #12794 (health via breaker + quality), já mergeado. Os dois compõem e ambos ficaram: o seu termo de `reliability` — que era a única chave que o caminho de snapshot ainda ignorava — mais o health observado e o quality do #12794. 2. `scripts/quality/run-all-gates.mjs` conflitou com o `check:provider-order-sync` do #12790. Aditivo, os dois gates coexistem. **Nota de dívida:** o `virtualFactory.ts` cruzou o teto de 1200 linhas pela primeira vez (1187 → 1207) somando esta onda. Congelei em vez de dividir e registrei os dois candidatos a extração na justificativa — `computeSnapshotWeights` (~85 linhas) e o grupo de elegibilidade de credencial (~70). Qualquer um dos dois volta o arquivo para baixo do cap.
27 lines
1023 B
JavaScript
27 lines
1023 B
JavaScript
#!/usr/bin/env node
|
|
// STRICT gate: KNOWN_MODEL_PRICING must have been touched within PRICING_STALE_AFTER_DAYS,
|
|
// or tiers silently drift from real prices. Exits 1 on stale, 0 on fresh.
|
|
// Run: node scripts/check/check-pricing-freshness.mjs
|
|
import { execFileSync } from "node:child_process";
|
|
|
|
const PRICING_STALE_AFTER_DAYS = 90;
|
|
const TARGET = "open-sse/services/providerCostData.ts";
|
|
|
|
function lastTouchDays() {
|
|
const out = execFileSync("git", ["log", "--follow", "-1", "--format=%ct", "--", TARGET], {
|
|
encoding: "utf8",
|
|
}).trim();
|
|
const touched = Number(out);
|
|
if (!Number.isFinite(touched) || touched <= 0) return Infinity;
|
|
return (Date.now() / 1000 - touched) / 86400;
|
|
}
|
|
|
|
const days = lastTouchDays();
|
|
if (days > PRICING_STALE_AFTER_DAYS) {
|
|
console.error(
|
|
`STALE: ${TARGET} untouched for ${Math.floor(days)}d (> ${PRICING_STALE_AFTER_DAYS}d) — refresh prices or bump the gate with justification`
|
|
);
|
|
process.exit(1);
|
|
}
|
|
console.log(`pricing fresh: ${TARGET} touched ${Math.floor(days)}d ago`);
|