From 193de13a88d62a6409c6d385831180f1def527dc Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Thu, 10 Sep 2026 15:33:35 -0500 Subject: [PATCH] fix(stats): normalize deepseek v4.1 flash --- .../stats/core/src/domain/inference.test.ts | 32 ++++++++++++++++++- .../core/src/domain/model-normalization.ts | 1 + 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/packages/stats/core/src/domain/inference.test.ts b/packages/stats/core/src/domain/inference.test.ts index 8267b3c8605..8f6dbeaf023 100644 --- a/packages/stats/core/src/domain/inference.test.ts +++ b/packages/stats/core/src/domain/inference.test.ts @@ -7,7 +7,13 @@ import { toProviderAggregate, toRetentionAggregate, } from "./inference" -import { modelAuthor, normalizeInferenceModel, statModel, statProvider } from "./model-normalization" +import { + modelAuthor, + normalizeInferenceModel, + RETIRED_STAT_MODELS, + statModel, + statProvider, +} from "./model-normalization" describe("inference stat normalization", () => { test("normalizes model suffixes used by router/provider variants", () => { @@ -86,6 +92,26 @@ describe("inference stat normalization", () => { expect(toProviderAggregate(aggregate("ox-alpha", "unknown"))).toMatchObject([{ provider: "zhipu" }]) }) + test("renames DeepSeek Flash to V4.1 without merging V4 or vision usage", () => { + ;["deepseek-flash", "DEEPSEEK-FLASH-free:global", "deepseek-v4.1-flash"].forEach((model) => { + expect(statModel(model, "")).toBe("deepseek-v4.1-flash") + expect(toModelAggregate(aggregate(model, "deepseek"))).toMatchObject([ + { model: "deepseek-v4.1-flash", provider: "deepseek" }, + ]) + expect(toGeoAggregate({ ...aggregate(model, "deepseek"), country: "US" })).toMatchObject([ + { model: "deepseek-v4.1-flash", provider: "deepseek", country: "US" }, + ]) + expect(toRetentionAggregate({ ...aggregate(model, "deepseek"), cohort_date: "2026-08-10" })).toMatchObject([ + { model: "deepseek-v4.1-flash", provider: "deepseek" }, + ]) + }) + expect(statModel("big-pickle", "deepseek/deepseek-flash")).toBe("deepseek-v4.1-flash") + expect(statModel("deepseek-v4-flash", "")).toBe("deepseek-v4-flash") + expect(statModel("deepseek-v4-flash-vision-exp", "")).toBe("deepseek-v4-flash-vision-exp") + expect(RETIRED_STAT_MODELS).toContain("deepseek-flash") + expect(RETIRED_STAT_MODELS).not.toContain("deepseek-v4.1-flash") + }) + test("model aggregates prefer provider.model and use normalized model", () => { expect(toModelAggregate(aggregate("alpha-gpt-next", "openai"))).toEqual([]) @@ -145,6 +171,7 @@ describe("inference stat normalization", () => { queries.forEach((query) => { expect(query).toContain("WHERE lower(model) NOT IN ('alpha-gpt-next')") expect(query).toContain("CASE\n WHEN lower(model) IN ('omen-alpha') THEN 'unknown'\n") + expect(query).toContain("= 'deepseek-flash' THEN 'deepseek-v4.1-flash'") }) expect(queries[0]).toContain("'week' AS grain") expect(queries[0]).toContain("'2026-W33' AS period_key") @@ -206,6 +233,9 @@ describe("inference stat normalization", () => { }) expect(queries).toHaveLength(2) + queries.forEach(({ query }) => { + expect(query).toContain("= 'deepseek-flash' THEN 'deepseek-v4.1-flash'") + }) expect(queries.map((query) => query.cohortDates)).toEqual([["2026-08-10"], ["2026-08-17"]]) expect(queries[0]?.query).toContain("AND product = 'go'") expect(queries[0]?.query).toContain("AND lower(model) NOT IN ('alpha-gpt-next')") diff --git a/packages/stats/core/src/domain/model-normalization.ts b/packages/stats/core/src/domain/model-normalization.ts index cbceca34867..4f0ec064882 100644 --- a/packages/stats/core/src/domain/model-normalization.ts +++ b/packages/stats/core/src/domain/model-normalization.ts @@ -17,6 +17,7 @@ export const EXCLUDED_MODELS = new Set(["alpha-gpt-next"]) export const STEALTH_MODELS = new Set(["omen-alpha"]) export const FREE_MODELS = new Set(["gpt-5-nano", "grok-code", "big-pickle"]) export const MODEL_NAME_ALIASES: Record = { + "deepseek-flash": "deepseek-v4.1-flash", "deepseek-v4-flash-0731": "deepseek-v4-flash", "deepseek-v4-flash-dsv4-flash-final-rnaovd": "deepseek-v4-flash", "ox-alpha": "glm-5.3-flash",