From ecc4916b5a9608c30e6dd58a67f2137b594407ca Mon Sep 17 00:00:00 2001 From: Daniel Chen Date: Tue, 6 Oct 2026 15:32:45 -0700 Subject: [PATCH] fix(stats): attribute exo usage to an unknown provider (#53621) --- packages/stats/core/src/domain/inference.test.ts | 5 +++-- packages/stats/core/src/domain/model-normalization.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/stats/core/src/domain/inference.test.ts b/packages/stats/core/src/domain/inference.test.ts index 6ec2cc0177a5..d67beec709ae 100644 --- a/packages/stats/core/src/domain/inference.test.ts +++ b/packages/stats/core/src/domain/inference.test.ts @@ -89,6 +89,7 @@ describe("inference stat normalization", () => { expect(statProvider("OMEN-ALPHA-free:global", "gpt-test-model", "test-provider")).toBe("unknown") expect(statProvider("omen-alpha", "", "test-provider")).toBe("unknown") expect(statProvider("space-bunny-free", "hidden-route-model", "hidden-provider")).toBe("unknown") + expect(statProvider("exo-free", "gpt-test-model", "hidden-provider")).toBe("unknown") const spaceBunny = { ...aggregate("space-bunny-free", "hidden-provider"), provider_model: "hidden-route-model" } expect(toModelAggregate(spaceBunny)).toMatchObject([{ model: "space-bunny", provider: "unknown", requests: 1 }]) @@ -269,7 +270,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', 'space-bunny', 'union-alpha') THEN 'unknown'\n", + "CASE\n WHEN lower(model) IN ('exo', 'omen-alpha', 'space-bunny', 'union-alpha') THEN 'unknown'\n", ) expect(query).toContain("= 'opencode-go/union-alpha' THEN 'union-alpha'") expect(query).toContain("= 'opencode/union-alpha' THEN 'union-alpha'") @@ -342,7 +343,7 @@ describe("inference stat normalization", () => { expect(queries[0]?.query).toContain("AND product = 'go'") expect(queries[0]?.query).toContain("AND lower(model) NOT IN ('alpha-gpt-next')") expect(queries[0]?.query).toContain( - "CASE\n WHEN lower(model) IN ('omen-alpha', 'space-bunny', 'union-alpha') THEN 'unknown'\n", + "CASE\n WHEN lower(model) IN ('exo', 'omen-alpha', 'space-bunny', 'union-alpha') THEN 'unknown'\n", ) expect(queries[0]?.query).toContain("= 'opencode-go/union-alpha' THEN 'union-alpha'") expect(queries[0]?.query).toContain("= 'opencode/union-alpha' THEN 'union-alpha'") diff --git a/packages/stats/core/src/domain/model-normalization.ts b/packages/stats/core/src/domain/model-normalization.ts index 7fff9759d6c2..2ec0c613f490 100644 --- a/packages/stats/core/src/domain/model-normalization.ts +++ b/packages/stats/core/src/domain/model-normalization.ts @@ -16,7 +16,7 @@ export const MODEL_AUTHOR_RULES = [ { match: "qwen", author: "qwen" }, ] as const export const EXCLUDED_MODELS = new Set(["alpha-gpt-next"]) -export const STEALTH_MODELS = new Set(["omen-alpha", "space-bunny", "union-alpha"]) +export const STEALTH_MODELS = new Set(["exo", "omen-alpha", "space-bunny", "union-alpha"]) export const FREE_MODELS = new Set(["gpt-5-nano", "grok-code", "big-pickle"]) export const MODEL_NAME_MAX_LENGTH = 256 export const MODEL_NAME_ALIASES: Record = {