@@ -948,9 +948,11 @@ export function getFullDashboard(days: number = 7): FullDashboard {
948948 GROUP BY user_email
949949 ),
950950 user_cache AS (
951- SELECT user_email as email, ROUND(AVG(cache_read_tokens)) as avg_cache_read
951+ SELECT user_email as email,
952+ ROUND(AVG(CASE WHEN cache_read_tokens > 0 THEN cache_read_tokens END)) as avg_cache_read,
953+ ROUND(100.0 * SUM(CASE WHEN max_mode = 1 THEN 1 ELSE 0 END) / COUNT(*)) as max_mode_pct
952954 FROM usage_events
953- WHERE date(timestamp/1000, 'unixepoch') >= date('now', ?) AND cache_read_tokens > 0
955+ WHERE date(timestamp/1000, 'unixepoch') >= date('now', ?)
954956 GROUP BY user_email
955957 ),
956958 activity AS (
@@ -980,6 +982,7 @@ export function getFullDashboard(days: number = 7): FullDashboard {
980982 COALESCE(a.total_applies, 0) as total_applies,
981983 COALESCE(a.total_accepts, 0) as total_accepts,
982984 COALESCE(uc.avg_cache_read, 0) as avg_cache_read,
985+ COALESCE(uc.max_mode_pct, 0) as max_mode_pct,
983986 RANK() OVER (ORDER BY COALESCE(us.spend_cents, 0) DESC) as spend_rank,
984987 RANK() OVER (ORDER BY COALESCE(a.agent_requests, 0) DESC) as activity_rank
985988 FROM members m
@@ -1025,6 +1028,7 @@ export function getFullDashboard(days: number = 7): FullDashboard {
10251028 COALESCE(a.total_applies, 0) as total_applies,
10261029 COALESCE(a.total_accepts, 0) as total_accepts,
10271030 0 as avg_cache_read,
1031+ 0 as max_mode_pct,
10281032 RANK() OVER (ORDER BY COALESCE(us.spend_cents, 0) DESC) as spend_rank,
10291033 RANK() OVER (ORDER BY COALESCE(a.agent_requests, 0) DESC) as activity_rank
10301034 FROM members m
@@ -1050,6 +1054,7 @@ export function getFullDashboard(days: number = 7): FullDashboard {
10501054 total_applies : number ;
10511055 total_accepts : number ;
10521056 avg_cache_read : number ;
1057+ max_mode_pct : number ;
10531058 spend_rank : number ;
10541059 activity_rank : number ;
10551060 } > ;
@@ -1214,6 +1219,7 @@ function assignBadges(
12141219 total_applies : number ;
12151220 total_accepts : number ;
12161221 avg_cache_read : number ;
1222+ max_mode_pct : number ;
12171223 spend_rank : number ;
12181224 activity_rank : number ;
12191225 } > ,
@@ -1261,7 +1267,7 @@ function assignBadges(
12611267 usage_badge = "light-user" ;
12621268 } else {
12631269 const reqsPerDay = u . active_days > 0 ? u . agent_requests / u . active_days : 0 ;
1264- const usesMax = isMaxModel ( u . most_used_model ) ;
1270+ const usesMax = u . max_mode_pct > 50 || isMaxModel ( u . most_used_model ) ;
12651271
12661272 if ( usesMax ) {
12671273 usage_badge = "deep-thinker" ;
@@ -1278,7 +1284,7 @@ function assignBadges(
12781284
12791285 if ( overBudget ) {
12801286 spend_badge = "over-budget" ;
1281- } else if ( isMaxModel ( u . most_used_model ) && medianCpr > 0 && cpr > medianCpr * 3 ) {
1287+ } else if ( ( u . max_mode_pct > 50 || isMaxModel ( u . most_used_model ) ) && medianCpr > 0 && cpr > medianCpr * 3 ) {
12821288 spend_badge = "premium-model" ;
12831289 } else if ( u . agent_requests >= p80Reqs && medianCpr > 0 && cpr <= medianCpr * 0.5 ) {
12841290 spend_badge = "cost-efficient" ;
@@ -1362,6 +1368,14 @@ export function getUserBadges(
13621368 )
13631369 . get ( email , dateFilter ) as { spend_cents : number } ;
13641370
1371+ const maxModeRow = db
1372+ . prepare (
1373+ `SELECT ROUND(100.0 * SUM(CASE WHEN max_mode = 1 THEN 1 ELSE 0 END) / COUNT(*)) as pct
1374+ FROM usage_events WHERE user_email = ? AND date(timestamp/1000, 'unixepoch') >= date('now', ?)` ,
1375+ )
1376+ . get ( email , dateFilter ) as { pct : number | null } ;
1377+ const userMaxModePct = maxModeRow ?. pct ?? 0 ;
1378+
13651379 const teamStats = db
13661380 . prepare (
13671381 `SELECT email, SUM(agent_requests) as reqs, COALESCE(us.spend, 0) as spend
@@ -1395,7 +1409,7 @@ export function getUserBadges(
13951409 usage = "light-user" ;
13961410 } else {
13971411 const reqsPerDay = userRow . active_days > 0 ? userRow . agent_requests / userRow . active_days : 0 ;
1398- const usesMax = isMaxModel ( userRow . most_used_model ) ;
1412+ const usesMax = userMaxModePct > 50 || isMaxModel ( userRow . most_used_model ) ;
13991413 if ( usesMax ) usage = "deep-thinker" ;
14001414 else if ( reqsPerDay >= 80 ) usage = "power-user" ;
14011415 else usage = null ;
@@ -1406,7 +1420,7 @@ export function getUserBadges(
14061420 const cpr = spendRow . spend_cents / userRow . agent_requests ;
14071421 if ( spendRow . spend_cents > medianSpend * 5 && spendRow . spend_cents > 10000 ) {
14081422 spend = "over-budget" ;
1409- } else if ( isMaxModel ( userRow . most_used_model ) && medianCpr > 0 && cpr > medianCpr * 3 ) {
1423+ } else if ( ( userMaxModePct > 50 || isMaxModel ( userRow . most_used_model ) ) && medianCpr > 0 && cpr > medianCpr * 3 ) {
14101424 spend = "premium-model" ;
14111425 } else if ( userRow . agent_requests >= p80Reqs && medianCpr > 0 && cpr <= medianCpr * 0.5 ) {
14121426 spend = "cost-efficient" ;
0 commit comments