{props.entry.model}
diff --git a/packages/stats/core/src/domain/home.test.ts b/packages/stats/core/src/domain/home.test.ts
index 3608d56d6a7..f2f98168d6d 100644
--- a/packages/stats/core/src/domain/home.test.ts
+++ b/packages/stats/core/src/domain/home.test.ts
@@ -1,10 +1,50 @@
import { describe, expect, test } from "bun:test"
+import type { ModelStatMetric } from "./model"
import type { RetentionMetricRow } from "./home"
process.env.SST_RESOURCE_App = JSON.stringify({ name: "opencode", stage: "test" })
process.env.SST_RESOURCE_StatsDatabase = JSON.stringify({ url: "mysql://localhost/stats" })
-const { buildRetentionEntries } = await import("./home")
+const { buildRetentionEntries, buildStatsHomeData } = await import("./home")
+
+test("daily rankings use the latest day while weekly rankings retain seven days and their previous-period change", () => {
+ const rows = Array.from({ length: 14 }, (_, index) =>
+ [
+ { model: "model-a", totalTokens: index === 13 ? 3_000_000_000 : 1_000_000_000 },
+ { model: "model-b", totalTokens: index === 13 ? 2_000_000_000 : 4_000_000_000 },
+ ].map(
+ (item) =>
+ ({
+ periodKey: `2026-09-${String(index + 1).padStart(2, "0")}`,
+ updatedAt: new Date(Date.UTC(2026, 8, index + 1)),
+ tier: "Go",
+ provider: "test",
+ model: item.model,
+ sessions: 1,
+ uniqueUsers: 1,
+ inputTokens: item.totalTokens,
+ outputTokens: 0,
+ reasoningTokens: 0,
+ cacheReadTokens: 0,
+ totalTokens: item.totalTokens,
+ inputCostMicrocents: 0,
+ outputCostMicrocents: 0,
+ totalCostMicrocents: 0,
+ }) satisfies ModelStatMetric,
+ ),
+ ).flat()
+ const rankings = buildStatsHomeData(rows, [], []).leaderboard.Go
+
+ expect(rankings["1D"].map((item) => [item.model, item.tokens, item.change])).toEqual([
+ ["model-a", 3, 200],
+ ["model-b", 2, -50],
+ ])
+ expect(rankings["1W"].map((item) => [item.model, item.tokens])).toEqual([
+ ["model-b", 26],
+ ["model-a", 9],
+ ])
+ expect(rankings["2M"]).toEqual(rankings["1W"])
+})
describe("retention aggregates", () => {
test("pools the latest seven weekly cohorts and ranks models above the sample floor", () => {
diff --git a/packages/stats/core/src/domain/home.ts b/packages/stats/core/src/domain/home.ts
index 6df9315ac79..f9cdf101f19 100644
--- a/packages/stats/core/src/domain/home.ts
+++ b/packages/stats/core/src/domain/home.ts
@@ -378,7 +378,7 @@ export const getStatsModelComparisonData = (
{ provider: secondProvider, model: secondModel },
])
-function buildStatsHomeData(
+export function buildStatsHomeData(
modelRows: ModelStatMetric[],
countryRows: CountryTotalRow[],
retentionRows: RetentionMetricRow[],
@@ -416,7 +416,9 @@ function buildStatsHomeData(
),
),
leaderboard: createUsageProductRecord((product) =>
- createRangeRecord((_range) => buildLeaderboard(normalized, product, getWindow("1W", earliest, latest))),
+ createRangeRecord((range) =>
+ buildLeaderboard(normalized, product, getWindow(range === "1D" ? "1D" : "1W", earliest, latest)),
+ ),
),
market: createRangeRecord((range) => buildMarketShare(normalized, "Go", range, getWindow(range, earliest, latest))),
tokenCost: createTokenProductRecord((product) =>