mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-14 10:52:17 +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.
34 lines
1.4 KiB
TypeScript
34 lines
1.4 KiB
TypeScript
// tests/unit/pricing-fallback.test.ts
|
|
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { getModelPricing, KNOWN_MODEL_PRICING } from "../../open-sse/services/providerCostData.ts";
|
|
|
|
// `ai21/jamba-large-1.7` is a documented free model (FREE_MODEL_BUDGETS,
|
|
// one-time-initial) that is NOT in the table (grep jamba -> 0 hit).
|
|
// `openai/gpt-4o` is paid. Fixtures are verbatim catalog ids — never a suffixed
|
|
// invention (Set.has is exact: a mutilated id is no longer in the catalog).
|
|
test("off-table free model is free, never premium-priced", () => {
|
|
const p = getModelPricing("ai21", "jamba-large-1.7");
|
|
assert.equal(p.isFree, true);
|
|
assert.equal(p.inputCostPer1M, 0);
|
|
assert.equal(p.outputCostPer1M, 0);
|
|
});
|
|
|
|
test("prefixed model id still resolves through the catalog", () => {
|
|
const p = getModelPricing("ai21", "ai21/jamba-large-1.7");
|
|
assert.equal(p.isFree, true);
|
|
});
|
|
|
|
test("off-table paid model keeps the conservative fallback", () => {
|
|
const p = getModelPricing("openai", "gpt-9-never-existed");
|
|
assert.equal(p.isFree, false);
|
|
assert.equal(p.inputCostPer1M, 5.0);
|
|
assert.equal(p.outputCostPer1M, 15.0);
|
|
});
|
|
|
|
test("table hits are untouched", () => {
|
|
assert.equal(Object.keys(KNOWN_MODEL_PRICING).length, 21);
|
|
assert.deepEqual(getModelPricing("openai", "gpt-4o"), KNOWN_MODEL_PRICING["gpt-4o"]);
|
|
assert.deepEqual(getModelPricing("longcat", "LongCat-2.0"), KNOWN_MODEL_PRICING["longcat-2.0"]);
|
|
});
|