Dashboard: current vs all-time labels; leaderboard = last 30 days with total spend (not sub-cent cost/request)
This commit is contained in:
1 parent
4be4dc4d03
commit
7539516c4e
1 file changed
+9
-10
+9
-10
@@ -124,7 +124,7 @@ async def api_usage(request: Request):
|
||||
data["keys"] = keys.get("keys", [])
|
||||
# Co-op-wide model popularity (aggregate, anonymized) for the leaderboard.
|
||||
try:
|
||||
board = await broker_get(identity, "/broker/model-leaderboard")
|
||||
board = await broker_get(identity, "/broker/model-leaderboard?days=30")
|
||||
data["coop_models"] = board.get("models", [])
|
||||
except HTTPException:
|
||||
data["coop_models"] = [] # best-effort; never block the main view
|
||||
@@ -493,14 +493,14 @@ PAGE_HTML = """<!DOCTYPE html>
|
||||
<div id="view-mine">
|
||||
<div class="balance">
|
||||
<span class="big" id="spend">—</span>
|
||||
<span class="lbl" id="of">of your balance used</span>
|
||||
<span class="lbl" id="of">of your current balance used</span>
|
||||
</div>
|
||||
<div class="stats">
|
||||
<div class="stat"><div class="num" id="remaining">—</div><div class="lbl">remaining</div></div>
|
||||
<div class="stat"><div class="num" id="allowance">—</div><div class="lbl">monthly allowance left</div></div>
|
||||
<div class="stat"><div class="num" id="remaining">—</div><div class="lbl">remaining now</div></div>
|
||||
<div class="stat"><div class="num" id="allowance">—</div><div class="lbl">allowance left</div></div>
|
||||
<div class="stat"><div class="num" id="credits">—</div><div class="lbl">credits (never expire)</div></div>
|
||||
<div class="stat"><div class="num" id="tokens">—</div><div class="lbl">tokens used</div></div>
|
||||
<div class="stat"><div class="num" id="calls">—</div><div class="lbl">requests</div></div>
|
||||
<div class="stat"><div class="num" id="tokens">—</div><div class="lbl">tokens, all time</div></div>
|
||||
<div class="stat"><div class="num" id="calls">—</div><div class="lbl">requests, all time</div></div>
|
||||
</div>
|
||||
<div class="bar"><div class="fill" id="fill" style="width:0%"></div></div>
|
||||
<div class="meta" id="meta">Shared across chat and API.</div>
|
||||
@@ -569,7 +569,7 @@ async function load() {
|
||||
const allowanceLeft = Math.max(0, allowance - spentThisCycle);
|
||||
|
||||
$('spend').textContent = fmtMoney(spend);
|
||||
$('of').textContent = 'of ' + fmtMoney(balance) + ' used';
|
||||
$('of').textContent = 'of ' + fmtMoney(balance) + ' current balance used';
|
||||
$('remaining').textContent = fmtMoney(remaining);
|
||||
$('allowance').textContent = fmtMoney(allowanceLeft);
|
||||
$('credits').textContent = fmtMoney(credits);
|
||||
@@ -633,17 +633,16 @@ function renderBoard(models) {
|
||||
const top = Math.max(...rows.map(m => m.requests || 0), 1);
|
||||
el.innerHTML = rows.map((m, i) => {
|
||||
const req = m.requests || 0;
|
||||
const cpr = req > 0 ? (m.spend || 0) / req : 0; // cost per request
|
||||
const pct = Math.round((req / top) * 100);
|
||||
return '<div class="board-row">' +
|
||||
'<div class="board-rank">' + (i + 1) + '</div>' +
|
||||
'<div class="board-main">' +
|
||||
'<div class="board-line">' +
|
||||
'<div class="board-name">' + escapeHtml(m.model) + '</div>' +
|
||||
'<div class="board-cost">' + fmtMoney(cpr) + ' / request</div>' +
|
||||
'<div class="board-cost">' + fmtMoney(m.spend || 0) + ' total</div>' +
|
||||
'</div>' +
|
||||
'<div class="board-bar"><div class="board-fill" style="width:' + pct + '%"></div></div>' +
|
||||
'<div class="board-sub">' + req.toLocaleString() + ' requests by members</div>' +
|
||||
'<div class="board-sub">' + req.toLocaleString() + ' requests by members · last 30 days</div>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
}).join('');
|
||||
|
||||
Reference in new issue
Block a user