Broker: co-op-wide model leaderboard endpoint for member dashboard (aggregate, anonymized)

This commit is contained in:
inference-bot committed 2026-10-01 15:35:57 -06:00
1 parent 778a7f8fd2
commit 69beb9c002
1 file changed
+29
+29
View File
@@ -2245,6 +2245,35 @@ async def broker_usage(request: Request, days: int = 0):
return await broker_get_usage(email, days=days)
@app.get("/broker/model-leaderboard")
@limiter.limit("30/minute")
async def broker_model_leaderboard(request: Request, days: int = 0):
"""Co-op-wide model popularity for the member dashboard.
Same aggregation as the admin model-usage view (spend/tokens/requests per
model, across all members) but served through the broker so members can
see which models the co-op uses most — social guidance for model choice.
No per-member data; aggregate totals only.
"""
_verify_broker_secret(request)
if litellm_db_ready():
try:
usage = aggregate_model_usage(days=days)
except Exception as e:
logger.warning("broker leaderboard: DB path failed (%s)", e)
usage = None
if usage:
return {
"models": [
{"model": m["model"], "spend": m["spend"],
"tokens": m["tokens"], "requests": m["requests"]}
for m in usage["models"][:10]
]
}
# Fallback: empty (rare; the DB path is the norm)
return {"models": []}
async def reconcile_memberships() -> dict:
"""Reconcile the portal against the live Open Collective member list.