From a9a4b2f00fcb2c9b228fc9d95b9a684fce83b8a5 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Sun, 14 Jun 2026 20:21:39 -0500 Subject: [PATCH] fix(stats): scope data charts to go --- packages/stats/app/src/routes/index.tsx | 6 ++---- packages/stats/core/src/domain/geo.ts | 10 +++++++++- packages/stats/core/src/domain/home.ts | 23 ++++++++++++---------- packages/stats/core/src/domain/model.ts | 9 ++++++++- packages/stats/core/src/domain/provider.ts | 9 ++++++++- 5 files changed, 40 insertions(+), 17 deletions(-) diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx index 9df086fc8..6ee3b46e2 100644 --- a/packages/stats/app/src/routes/index.tsx +++ b/packages/stats/app/src/routes/index.tsx @@ -810,10 +810,8 @@ function stackedTopModelsSegments(point: UsagePoint, order: Map) } function getTopModelsSegmentOrder(data: UsagePoint[]) { - return getRankOrder( - data.flatMap((point) => - point.segments.map((segment, index) => ({ key: segment.model, value: segment.value, index })), - ), + return new Map( + data.find((point) => point.segments.length > 0)?.segments.map((segment, index) => [segment.model, index]) ?? [], ) } diff --git a/packages/stats/core/src/domain/geo.ts b/packages/stats/core/src/domain/geo.ts index 2512ffa49..c58195c77 100644 --- a/packages/stats/core/src/domain/geo.ts +++ b/packages/stats/core/src/domain/geo.ts @@ -86,7 +86,15 @@ export class GeoStatRepo extends Context.Service DatabaseError.make({ cause }), }) diff --git a/packages/stats/core/src/domain/home.ts b/packages/stats/core/src/domain/home.ts index c9c9c4b28..6561aef91 100644 --- a/packages/stats/core/src/domain/home.ts +++ b/packages/stats/core/src/domain/home.ts @@ -96,6 +96,8 @@ 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 TOP_MODEL_SEGMENT_LIMIT = 9 +const SITE_PRODUCT = "Go" const LEADERBOARD_CHANGE_MIN_MULTIPLE = 10 const months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"] as const @@ -227,15 +229,15 @@ 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 currentRows = rowsForProduct(modelScopedRows, "All Users", window.start, window.end) - const previousRows = rowsForProduct(modelScopedRows, "All Users", window.previousStart, window.previousEnd) + 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, "All Users", window.start, window.end)) + 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 previousPeers = aggregateByModelName( - rowsForProduct(normalized, "All Users", window.previousStart, window.previousEnd), + rowsForProduct(normalized, SITE_PRODUCT, window.previousStart, window.previousEnd), ) .filter((item) => item.totalTokens > 0) .toSorted((a, b) => b.totalTokens - a.totalTokens || a.model.localeCompare(b.model)) @@ -289,11 +291,11 @@ function buildStatsLabData(providerParam: string, modelRows: ModelStatMetric[]): const latest = Math.max(...normalized.map((row) => row.periodStart)) const latestUpdate = Math.max(...providerRows.map((row) => row.updatedAt)) const window = getWindow("2M", earliest, latest) - const currentRows = rowsForProduct(providerRows, "All Users", window.start, window.end) - const previousRows = rowsForProduct(providerRows, "All Users", window.previousStart, window.previousEnd) + const currentRows = rowsForProduct(providerRows, SITE_PRODUCT, window.start, window.end) + const previousRows = rowsForProduct(providerRows, SITE_PRODUCT, window.previousStart, window.previousEnd) const current = combineRowsForModel("", currentRows) const previous = combineRowsForModel("", previousRows) - const allCurrent = aggregateByModel(rowsForProduct(normalized, "All Users", window.start, window.end)) + const allCurrent = aggregateByModel(rowsForProduct(normalized, SITE_PRODUCT, window.start, window.end)) const totalTokens = allCurrent.reduce((sum, item) => sum + item.totalTokens, 0) const models = aggregateByModel(currentRows) .filter((item) => item.totalTokens > 0) @@ -337,9 +339,10 @@ function emptyStatsHomeData(): StatsHomeData { function buildUsagePoints(rows: StatMetricRow[], product: UsageProduct, range: UsageRange, window: DateWindow) { const windowRows = rowsForProduct(rows, product, window.start, window.end) - const modelOrder = aggregateByModel(windowRows) + const rankStart = Math.max(window.start, window.end - 7 * DAY_MS) + const modelOrder = aggregateByModel(rowsForProduct(rows, product, rankStart, window.end)) .toSorted((a, b) => b.totalTokens - a.totalTokens) - .slice(0, 6) + .slice(0, TOP_MODEL_SEGMENT_LIMIT) .map((item) => ({ key: modelKey(item.provider, item.model), model: item.model })) return createBuckets(window, range).map((bucket) => { @@ -408,7 +411,7 @@ function buildMarketShare(rows: ProviderMetricRow[], product: UsageProduct, rang } function buildCountryStats(rows: GeoMetricRow[], window: DateWindow) { - const countries = aggregateByCountry(rowsForProduct(rows, "All Users", window.start, window.end)) + const countries = aggregateByCountry(rowsForProduct(rows, SITE_PRODUCT, window.start, window.end)) .filter((item) => item.tokens > 0 && item.country !== "AQ") .toSorted((a, b) => b.tokens - a.tokens) const totalTokens = countries.reduce((sum, item) => sum + item.tokens, 0) diff --git a/packages/stats/core/src/domain/model.ts b/packages/stats/core/src/domain/model.ts index fa70fd4ce..0d40a51c5 100644 --- a/packages/stats/core/src/domain/model.ts +++ b/packages/stats/core/src/domain/model.ts @@ -74,7 +74,14 @@ export class ModelStatRepo extends Context.Service DatabaseError.make({ cause }), }) diff --git a/packages/stats/core/src/domain/provider.ts b/packages/stats/core/src/domain/provider.ts index 3a480b3cb..4875d11c1 100644 --- a/packages/stats/core/src/domain/provider.ts +++ b/packages/stats/core/src/domain/provider.ts @@ -62,7 +62,14 @@ export class ProviderStatRepo extends Context.Service DatabaseError.make({ cause }), })