From 1338d7b47ae8855b81a3b88f87f59a567c7a3021 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Sun, 14 Jun 2026 21:00:35 -0500 Subject: [PATCH] fix(stats): rank model pages by week --- .../stats/app/src/routes/[lab]/[model].tsx | 18 +++++++++------- packages/stats/core/src/domain/home.ts | 21 ++++++++++++------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index 1754539b2..2accce529 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -262,8 +262,10 @@ function ModelHero(props: { data: StatsModelData | null; catalog: ModelCatalogEn > {(data) => (

- Ranked #{data().rank} across recent OpenCode token usage with {formatPercent(data().tokenShare)} of - observed volume. + {data().rank === null + ? "Unranked across last week's OpenCode Go usage" + : `Ranked #${data().rank} across last week's OpenCode Go usage`}{" "} + with {formatPercent(data().tokenShare)} of observed 2M volume.

)} @@ -278,9 +280,9 @@ function ModelHero(props: { data: StatsModelData | null; catalog: ModelCatalogEn }> {(data) => (
- Current Rank - #{data().rank} -

{formatRankMoveLabel(data().previousRank, data().rank)}

+ 7D Rank + {data().rank === null ? "—" : `#${data().rank}`} +

{formatModelRankMoveLabel(data())}

)}
@@ -810,8 +812,10 @@ function formatRankMove(previousRank: number, rank: number) { return "Even" } -function formatRankMoveLabel(previousRank: number | null, rank: number) { - return previousRank === null ? "New in window" : `${formatRankMove(previousRank, rank)} vs previous window` +function formatModelRankMoveLabel(data: StatsModelData) { + if (data.rank === null) return "No usage last week" + if (data.previousRank === null) return "New this week" + return `${formatRankMove(data.previousRank, data.rank)} vs previous week` } function formatTokens(value: number) { diff --git a/packages/stats/core/src/domain/home.ts b/packages/stats/core/src/domain/home.ts index 6561aef91..a819bdb06 100644 --- a/packages/stats/core/src/domain/home.ts +++ b/packages/stats/core/src/domain/home.ts @@ -47,7 +47,7 @@ export type StatsModelData = { slug: string provider: string author: string - rank: number + rank: number | null previousRank: number | null totalModels: number tokenShare: number @@ -229,20 +229,27 @@ function buildStatsModelData( const latest = Math.max(...normalized.map((row) => row.periodStart)) const latestUpdate = Math.max(...modelScopedRows.map((row) => row.updatedAt)) const window = getWindow("2M", earliest, latest) + const rankWindow = getWindow("1W", earliest, latest) const currentRows = rowsForProduct(modelScopedRows, SITE_PRODUCT, window.start, window.end) const previousRows = rowsForProduct(modelScopedRows, SITE_PRODUCT, window.previousStart, window.previousEnd) const current = combineRowsForModel(model, currentRows) const previous = combineRowsForModel(model, previousRows) - const peers = aggregateByModelName(rowsForProduct(normalized, SITE_PRODUCT, window.start, window.end)) + const rankPeers = aggregateByModelName(rowsForProduct(normalized, SITE_PRODUCT, rankWindow.start, rankWindow.end)) .filter((item) => item.totalTokens > 0) .toSorted((a, b) => b.totalTokens - a.totalTokens || a.model.localeCompare(b.model)) - const previousPeers = aggregateByModelName( - rowsForProduct(normalized, SITE_PRODUCT, window.previousStart, window.previousEnd), + const previousRankPeers = aggregateByModelName( + rowsForProduct(normalized, SITE_PRODUCT, rankWindow.previousStart, rankWindow.previousEnd), ) .filter((item) => item.totalTokens > 0) .toSorted((a, b) => b.totalTokens - a.totalTokens || a.model.localeCompare(b.model)) - const rank = Math.max(1, peers.findIndex((item) => item.model === model) + 1) - const previousRankIndex = previousPeers.findIndex((item) => item.model === model) + const peers = aggregateByModelName(rowsForProduct(normalized, SITE_PRODUCT, window.start, window.end)) + .filter((item) => item.totalTokens > 0) + .toSorted((a, b) => b.totalTokens - a.totalTokens || a.model.localeCompare(b.model)) + const rankIndex = rankPeers.findIndex((item) => item.model === model) + const rank = rankIndex >= 0 ? rankIndex + 1 : null + const previousRankIndex = previousRankPeers.findIndex((item) => item.model === model) + const peerRankIndex = peers.findIndex((item) => item.model === model) + const peerRank = peerRankIndex >= 0 ? peerRankIndex + 1 : 1 const totalTokens = peers.reduce((sum, item) => sum + item.totalTokens, 0) return { @@ -273,7 +280,7 @@ function buildStatsModelData( tokenMix: buildModelTokenMix(current), productMix: buildModelProductMix(modelScopedRows, window, current), country: createRangeRecord((range) => buildCountryStats(geo, getWindow(range, earliest, latest))), - peers: buildModelPeers(peers, rank, totalTokens), + peers: buildModelPeers(peers, peerRank, totalTokens), } }