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))
}