diff --git a/packages/stats/app/src/routes/model-catalog.test.ts b/packages/stats/app/src/routes/model-catalog.test.ts new file mode 100644 index 00000000000..da2aa7bbc0d --- /dev/null +++ b/packages/stats/app/src/routes/model-catalog.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, mock, test } from "bun:test" + +mock.module("@solidjs/router", () => ({ query: (load: () => unknown) => load })) + +const { buildModelCatalog, findModelCatalogEntry } = await import("./model-catalog") + +describe("model catalog pricing", () => { + test("prefers OpenCode Go pricing over a zero-cost coding plan with the same model id", () => { + const catalog = buildModelCatalog( + { + models: { + "zhipuai/glm-5.3": { + id: "zhipuai/glm-5.3", + name: "GLM-5.3", + }, + }, + }, + { + "opencode-go": { + id: "opencode-go", + models: { + "glm-5.3": { + id: "glm-5.3", + cost: { input: 1.4, output: 4.4, cache_read: 0.26 }, + }, + }, + }, + "zhipuai-coding-plan": { + id: "zhipuai-coding-plan", + models: { + "glm-5.3": { + id: "glm-5.3", + cost: { input: 0, output: 0, cache_read: 0 }, + }, + }, + }, + }, + ) + + expect(findModelCatalogEntry(catalog, "glm-5.3")?.cost).toEqual({ + input: 1.4, + output: 4.4, + cacheRead: 0.26, + cacheWrite: undefined, + }) + }) +}) diff --git a/packages/stats/app/src/routes/model-catalog.ts b/packages/stats/app/src/routes/model-catalog.ts index 47fa1cf3474..40ca60c10ec 100644 --- a/packages/stats/app/src/routes/model-catalog.ts +++ b/packages/stats/app/src/routes/model-catalog.ts @@ -119,7 +119,7 @@ export function catalogSlug(value: string) { .replace(/-{2,}/g, "-") } -function buildModelCatalog(payload: unknown, pricingPayload?: unknown, labPayload?: unknown): ModelCatalog { +export function buildModelCatalog(payload: unknown, pricingPayload?: unknown, labPayload?: unknown): ModelCatalog { const costs = readCatalogCosts(pricingPayload) const labDescriptions = readCatalogLabDescriptions(payload, pricingPayload, labPayload) const models = readCatalogModels(payload) @@ -129,6 +129,7 @@ function buildModelCatalog(payload: unknown, pricingPayload?: unknown, labPayloa cost: costs.get(catalogIdKey(model.id)) ?? costs.get(`${model.lab}/${model.slug}`) ?? + costs.get(`opencode-go/${model.slug}`) ?? costs.get(model.slug) ?? model.cost, }))