From f116a55e4a69407629ce1069b8e1220201442aa3 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 8 Jun 2026 08:34:24 -0500 Subject: [PATCH] fix(stats): show new for leaderboard deltas --- packages/stats/app/src/routes/index.tsx | 9 +++++++-- packages/stats/core/src/domain/home.ts | 11 +++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx index fb03b0e2f..cad1706bc 100644 --- a/packages/stats/app/src/routes/index.tsx +++ b/packages/stats/app/src/routes/index.tsx @@ -956,7 +956,11 @@ function LeaderboardCard(props: {
{props.entry.author} - + {formatChange(props.entry.change)}
@@ -978,7 +982,8 @@ function formatBillions(value: number) { return `${value}B` } -function formatChange(value: number) { +function formatChange(value: number | null) { + if (value === null) return "New" if (value > 0) return `+${value}%` return `${value}%` } diff --git a/packages/stats/core/src/domain/home.ts b/packages/stats/core/src/domain/home.ts index 4a8bb4303..1bdb11355 100644 --- a/packages/stats/core/src/domain/home.ts +++ b/packages/stats/core/src/domain/home.ts @@ -14,7 +14,7 @@ export type LeaderboardEntry = { provider: string author: string tokens: number - change: number + change: number | null rank: number } export type TokenCostEntry = { model: string; total: number; input: number; output: number; cached: number } @@ -96,6 +96,7 @@ const DAY_MS = 86_400_000 const TOKEN_SCALE = 1_000_000 const DOLLARS_PER_MICROCENT = 1 / 100_000_000 const METRIC_MODEL_LIMIT = 10 +const LEADERBOARD_CHANGE_MIN_MULTIPLE = 10 const months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"] as const type StatMetricRow = Omit & { @@ -373,7 +374,7 @@ function buildLeaderboard(rows: StatMetricRow[], product: UsageProduct, window: provider: item.provider, author: formatProvider(item.provider), tokens: Math.round(item.totalTokens / 1_000_000_000), - change: percentChange(item.totalTokens, previous.get(modelKey(item.provider, item.model)) ?? 0), + change: leaderboardChange(item.totalTokens, previous.get(modelKey(item.provider, item.model)) ?? 0), rank: index + 1, })) } @@ -864,6 +865,12 @@ function percentChange(current: number, previous: number) { return Math.round(((current - previous) / previous) * 100) } +function leaderboardChange(current: number, previous: number) { + if (current <= 0) return 0 + if (previous <= 0 || current >= previous * LEADERBOARD_CHANGE_MIN_MULTIPLE) return null + return percentChange(current, previous) +} + function round(value: number, digits: number) { return Number(value.toFixed(digits)) }