@@ -492,26 +492,26 @@ function Dashboard({ stats, dailyStats, modelUsage, hourlyStats, loading, isRefr
492492 } ) )
493493 } , [ filteredDailyStats ] )
494494
495- // Top 5 Models for Trends
495+ // Top 10 Models for Trends
496496 const topRequestModels = useMemo ( ( ) => {
497497 return [ ...filteredModelUsage ]
498498 . sort ( ( a , b ) => ( b . request_count || 0 ) - ( a . request_count || 0 ) )
499- . slice ( 0 , 5 )
499+ . slice ( 0 , 10 )
500500 . map ( m => m . model_name )
501501 } , [ filteredModelUsage ] )
502502
503503 const topTokenModels = useMemo ( ( ) => {
504504 return [ ...filteredModelUsage ]
505505 . sort ( ( a , b ) => ( b . total_tokens || 0 ) - ( a . total_tokens || 0 ) )
506- . slice ( 0 , 5 )
506+ . slice ( 0 , 10 )
507507 . map ( m => m . model_name )
508508 } , [ filteredModelUsage ] )
509509
510510 // Top models sorted by requests (chart always shows requests)
511511 const activeTopModels = useMemo ( ( ) => {
512512 return [ ...filteredModelUsage ]
513513 . sort ( ( a , b ) => ( b . request_count || 0 ) - ( a . request_count || 0 ) )
514- . slice ( 0 , 5 )
514+ . slice ( 0 , 10 )
515515 . map ( m => m . model_name )
516516 } , [ filteredModelUsage ] )
517517
@@ -622,28 +622,28 @@ function Dashboard({ stats, dailyStats, modelUsage, hourlyStats, loading, isRefr
622622 const sparklineData = hourlyChartData . slice ( - 12 )
623623 const costSparkline = dailyChartData . length >= 2 ? dailyChartData : [ ...Array ( 7 ) ] . map ( ( _ , i ) => ( { cost : i === 6 ? totalCost : totalCost * ( i * 0.1 ) } ) )
624624
625- // Cost breakdown datasets (same top 5 model scope as Usage Trends)
626- const top5ModelSet = useMemo ( ( ) => new Set ( activeTopModels ) , [ activeTopModels ] )
625+ // Cost breakdown datasets
626+ const topModelSet = useMemo ( ( ) => new Set ( activeTopModels ) , [ activeTopModels ] )
627627
628- const costBreakdownBase = useMemo ( ( ) => {
629- const top5Models = ( filteredModelUsage || [ ] ) . filter ( m => top5ModelSet . has ( m . model_name ) )
630- const top5TotalCost = top5Models . reduce ( ( sum , m ) => sum + ( m . estimated_cost_usd || 0 ) , 0 )
631-
632- return top5Models . map ( ( m ) => ( {
628+ // Full dataset for Details tab (unlimited)
629+ const costBreakdownAllBase = useMemo ( ( ) => {
630+ return ( filteredModelUsage || [ ] ) . map ( ( m ) => ( {
633631 ...m ,
634- percentage : top5TotalCost > 0 ? ( ( m . estimated_cost_usd || 0 ) / top5TotalCost * 100 ) . toFixed ( 0 ) : '0' ,
632+ percentage : totalCost > 0 ? ( ( m . estimated_cost_usd || 0 ) / totalCost * 100 ) . toFixed ( 0 ) : '0' ,
635633 color : getModelColor ( m . model_name )
636634 } ) )
637- } , [ filteredModelUsage , top5ModelSet ] )
635+ } , [ filteredModelUsage , totalCost ] )
638636
639- // Legend always sorted by cost (desc)
637+ // Chart/legend dataset follows same top model scope as Usage Trends
640638 const costLegend = useMemo ( ( ) => {
641- return [ ...costBreakdownBase ] . sort ( ( a , b ) => ( b . estimated_cost_usd || 0 ) - ( a . estimated_cost_usd || 0 ) )
642- } , [ costBreakdownBase ] )
639+ return costBreakdownAllBase
640+ . filter ( m => topModelSet . has ( m . model_name ) )
641+ . sort ( ( a , b ) => ( b . estimated_cost_usd || 0 ) - ( a . estimated_cost_usd || 0 ) )
642+ } , [ costBreakdownAllBase , topModelSet ] )
643643
644644 // Table sorting honors user-selected column/direction
645645 const costBreakdown = useMemo ( ( ) => {
646- return [ ...costBreakdownBase ] . sort ( ( a , b ) => {
646+ return [ ...costBreakdownAllBase ] . sort ( ( a , b ) => {
647647 let aVal = a [ tableSort . column ]
648648 let bVal = b [ tableSort . column ]
649649
@@ -657,7 +657,7 @@ function Dashboard({ stats, dailyStats, modelUsage, hourlyStats, loading, isRefr
657657
658658 return tableSort . direction === 'asc' ? aVal - bVal : bVal - aVal
659659 } )
660- } , [ costBreakdownBase , tableSort ] )
660+ } , [ costBreakdownAllBase , tableSort ] )
661661
662662 // Handle table sort
663663 const handleSort = ( column ) => {
@@ -1150,7 +1150,7 @@ function Dashboard({ stats, dailyStats, modelUsage, hourlyStats, loading, isRefr
11501150 gap : '4px' ,
11511151 paddingRight : '4px'
11521152 } } >
1153- < span > Top 5 Models</ span >
1153+ < span > Top 10 Models</ span >
11541154 < span style = { { textAlign : 'right' } } > Req</ span >
11551155 < span style = { { textAlign : 'right' } } > Tokens</ span >
11561156 < span style = { { textAlign : 'right' , color : isDarkMode ? '#10b981' : '#059669' } } > Cost</ span >
@@ -1448,7 +1448,7 @@ function Dashboard({ stats, dailyStats, modelUsage, hourlyStats, loading, isRefr
14481448 justifyContent : 'space-between' ,
14491449 paddingRight : '8px'
14501450 } } >
1451- < span > Top 5 Models</ span >
1451+ < span > Top 10 Models</ span >
14521452 < span > Cost / %</ span >
14531453 </ div >
14541454 { costLegend . map ( ( model , index ) => (
0 commit comments