Skip to content

Commit 0fdf50a

Browse files
committed
feat: Swap cost value for bar for easier visual comparison
1 parent 950247e commit 0fdf50a

File tree

2 files changed

+43
-6
lines changed

2 files changed

+43
-6
lines changed

src/components/merbench/LeaderboardTable.astro

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ export interface Props {
77
}
88
99
const { leaderboard } = Astro.props;
10+
11+
// Calculate cost range for progress bar normalization
12+
const costs = leaderboard.map((entry) => entry.Avg_Cost || calculateCost(entry.Avg_Tokens));
13+
const minCost = Math.min(...costs);
14+
const maxCost = Math.max(...costs);
15+
const costRange = maxCost - minCost;
1016
---
1117

1218
<section class="leaderboard-section">
@@ -46,7 +52,17 @@ const { leaderboard } = Astro.props;
4652
<span class="progress-text">{entry.Success_Rate.toFixed(1)}%</span>
4753
</div>
4854
</td>
49-
<td class="cost">${calculateCost(entry.Avg_Tokens).toFixed(4)}</td>
55+
<td class="cost">
56+
<div class="progress-bar">
57+
<div
58+
class="progress-fill progress-fill--cost"
59+
style={`width: ${costRange > 0 ? ((entry.Avg_Cost || calculateCost(entry.Avg_Tokens)) / maxCost) * 100 : 0}%`}
60+
/>
61+
<span class="progress-text">
62+
${(entry.Avg_Cost || calculateCost(entry.Avg_Tokens)).toFixed(4)}
63+
</span>
64+
</div>
65+
</td>
5066
<td class="duration">{entry.Avg_Duration.toFixed(2)}s</td>
5167
<td class="tokens">{entry.Avg_Tokens.toLocaleString()}</td>
5268
<td class="runs">{entry.Runs}</td>
@@ -265,6 +281,11 @@ const { leaderboard } = Astro.props;
265281
background-color: var(--progress-low);
266282
}
267283

284+
/* Cost progress bar - single muted color */
285+
.progress-fill--cost {
286+
background-color: #9ca3af; /* Muted gray for all cost bars */
287+
}
288+
268289
@media (max-width: 768px) {
269290
.leaderboard-section {
270291
padding: 0.5rem;

src/lib/merbench.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -303,9 +303,20 @@ export const updateLeaderboard = (filteredData: FilteredData): void => {
303303
const tbody = document.querySelector('.leaderboard-table tbody');
304304
if (!tbody) return;
305305

306+
// Calculate cost range for progress bar normalization
307+
const costs = filteredData.leaderboard.map(
308+
(entry) => entry.Avg_Cost || calculateCost(entry.Avg_Tokens)
309+
);
310+
const minCost = Math.min(...costs);
311+
const maxCost = Math.max(...costs);
312+
const costRange = maxCost - minCost;
313+
306314
tbody.innerHTML = filteredData.leaderboard
307-
.map(
308-
(entry, index) => `
315+
.map((entry, index) => {
316+
const currentCost = entry.Avg_Cost || calculateCost(entry.Avg_Tokens);
317+
const costWidth = costRange > 0 ? (currentCost / maxCost) * 100 : 0;
318+
319+
return `
309320
<tr>
310321
<td class="rank">${index + 1}</td>
311322
<td class="model-name">${entry.Model}</td>
@@ -317,14 +328,19 @@ export const updateLeaderboard = (filteredData: FilteredData): void => {
317328
<span class="progress-text">${entry.Success_Rate.toFixed(1)}%</span>
318329
</div>
319330
</td>
320-
<td class="cost">$${(entry.Avg_Cost || calculateCost(entry.Avg_Tokens)).toFixed(4)}</td>
331+
<td class="cost">
332+
<div class="progress-bar">
333+
<div class="progress-fill progress-fill--cost" style="width: ${costWidth}%"></div>
334+
<span class="progress-text">$${currentCost.toFixed(4)}</span>
335+
</div>
336+
</td>
321337
<td class="duration">${entry.Avg_Duration.toFixed(2)}s</td>
322338
<td class="tokens">${entry.Avg_Tokens.toLocaleString()}</td>
323339
<td class="runs">${entry.Runs}</td>
324340
<td class="provider">${entry.Provider}</td>
325341
</tr>
326-
`
327-
)
342+
`;
343+
})
328344
.join('');
329345
};
330346

0 commit comments

Comments
 (0)