Spaces:
Running
Running
final udpates
Browse files- app.py +54 -42
- full_price_report.csv +0 -1
app.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
import pandas as pd
|
| 3 |
import plotly.graph_objects as go
|
| 4 |
-
import plotly.express as px
|
| 5 |
import numpy as np
|
| 6 |
from model_handler import (
|
| 7 |
ModelHandler,
|
|
@@ -75,22 +74,28 @@ def create_leaderboard_chart(leaderboard_df):
|
|
| 75 |
if leaderboard_df.empty or "Average" not in leaderboard_df.columns:
|
| 76 |
return None
|
| 77 |
|
| 78 |
-
# Get top 20 models
|
| 79 |
-
top_20 = leaderboard_df.head(20).copy().
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
orientation="h",
|
| 88 |
-
|
| 89 |
-
|
|
|
|
| 90 |
textposition="outside",
|
| 91 |
hovertemplate="<b>%{y}</b><br>Avg Score: %{x:.4f}<extra></extra>",
|
| 92 |
-
)
|
| 93 |
-
])
|
| 94 |
|
| 95 |
fig.update_layout(
|
| 96 |
title="Top 20 Models by Average Score",
|
|
@@ -99,6 +104,8 @@ def create_leaderboard_chart(leaderboard_df):
|
|
| 99 |
xaxis_range = [0,1],
|
| 100 |
height=600,
|
| 101 |
hovermode="y unified",
|
|
|
|
|
|
|
| 102 |
margin=dict(l=100),
|
| 103 |
paper_bgcolor="rgba(30,30,30,0.85)",
|
| 104 |
plot_bgcolor="rgba(30,30,30,0.85)",
|
|
@@ -114,6 +121,8 @@ def create_leaderboard_chart(leaderboard_df):
|
|
| 114 |
dtick=1,
|
| 115 |
tickfont=dict(color="white"),
|
| 116 |
title_font=dict(color="white"),
|
|
|
|
|
|
|
| 117 |
)
|
| 118 |
)
|
| 119 |
|
|
@@ -175,28 +184,28 @@ def create_spend_report_chart(leaderboard_df):
|
|
| 175 |
# font=dict(size=11),
|
| 176 |
# margin=dict(l=80, r=80, t=80, b=80),
|
| 177 |
# )
|
| 178 |
-
# === Small jitter so points don't land exactly on top of each other ===
|
| 179 |
-
merged["Cost_jitter"] = merged["Total Cost ($)"] + np.random.normal(0, 0.8, len(merged))
|
| 180 |
merged["Model"] = merged["Model"].str.split("/").str[-1]
|
| 181 |
-
fig = px.scatter(
|
| 182 |
-
merged,
|
| 183 |
-
x="Total Cost ($)", # jittered X so points separate
|
| 184 |
-
y="Average",
|
| 185 |
-
text="Model", # ← model name appears on the plot
|
| 186 |
-
# color="Average", # color by accuracy (green = better)
|
| 187 |
-
# color_continuous_scale=px.colors.sequential.Viridis,
|
| 188 |
-
hover_name="Model",
|
| 189 |
-
hover_data=["Total Cost ($)", "Total Tokens"],
|
| 190 |
-
title="Model Evaluation: Cost vs Accuracy<br><sub>Hover or read labels for full details</sub>",
|
| 191 |
-
labels={"Average": "Accuracy (Average Score)"},
|
| 192 |
-
log_x=True,
|
| 193 |
-
)
|
| 194 |
|
| 195 |
-
fig.
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 200 |
|
| 201 |
fig.update_layout(
|
| 202 |
paper_bgcolor="rgba(30,30,30,0.85)",
|
|
@@ -205,13 +214,16 @@ def create_spend_report_chart(leaderboard_df):
|
|
| 205 |
height=650,
|
| 206 |
xaxis_title="Total Cost ($)",
|
| 207 |
yaxis=dict(range=[0, 1], showgrid=False),
|
| 208 |
-
xaxis=dict(showgrid=False),
|
| 209 |
-
showlegend=
|
|
|
|
| 210 |
margin=dict(l=40, r=40, t=80, b=40)
|
| 211 |
)
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
|
|
|
|
|
|
| 215 |
|
| 216 |
return fig
|
| 217 |
|
|
@@ -337,7 +349,7 @@ def refresh_data():
|
|
| 337 |
"detailed": prepare_detailed_leaderboard(detailed_results, leaderboard),
|
| 338 |
"task_scores": task_scores,
|
| 339 |
}
|
| 340 |
-
|
| 341 |
return (
|
| 342 |
create_leaderboard_chart(global_data["leaderboard"]),
|
| 343 |
global_data["leaderboard"],
|
|
@@ -398,7 +410,7 @@ def main():
|
|
| 398 |
)
|
| 399 |
|
| 400 |
gr.Markdown(
|
| 401 |
-
"> **Note:** We observed significant reliability issues with Claude 4.6 (
|
| 402 |
"To preserve the integrity of the benchmark, all Claude 4.6 (4.5) models have been excluded from the leaderboard. "
|
| 403 |
"You can learn more about the issue in [this GitHub issue](https://github.com/anthropics/claude-code/issues/17357)."
|
| 404 |
)
|
|
@@ -425,7 +437,7 @@ def main():
|
|
| 425 |
|
| 426 |
**Notes:**
|
| 427 |
- Token counts are approximations based on API usage patterns
|
| 428 |
-
- Spend data is only reported for
|
| 429 |
"""
|
| 430 |
)
|
| 431 |
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
import pandas as pd
|
| 3 |
import plotly.graph_objects as go
|
|
|
|
| 4 |
import numpy as np
|
| 5 |
from model_handler import (
|
| 6 |
ModelHandler,
|
|
|
|
| 74 |
if leaderboard_df.empty or "Average" not in leaderboard_df.columns:
|
| 75 |
return None
|
| 76 |
|
| 77 |
+
# Get top 20 models sorted by average, best at top in horizontal bar
|
| 78 |
+
top_20 = leaderboard_df.head(20).copy().sort_values("Average", ascending=True)
|
| 79 |
+
# Split into two traces for legend
|
| 80 |
+
closed_mask = top_20['Size'] == '-'
|
| 81 |
+
open_mask = ~closed_mask
|
| 82 |
+
|
| 83 |
+
fig = go.Figure()
|
| 84 |
+
for mask, label, color in [
|
| 85 |
+
(closed_mask, "Closed Source", "#F4DD2C"),
|
| 86 |
+
(open_mask, "Open Source", "#7DCEF1"),
|
| 87 |
+
]:
|
| 88 |
+
subset = top_20[mask]
|
| 89 |
+
fig.add_trace(go.Bar(
|
| 90 |
+
y=subset["Model"],
|
| 91 |
+
x=subset["Average"],
|
| 92 |
orientation="h",
|
| 93 |
+
name=label,
|
| 94 |
+
marker_color=color,
|
| 95 |
+
text=subset["Average"].round(4),
|
| 96 |
textposition="outside",
|
| 97 |
hovertemplate="<b>%{y}</b><br>Avg Score: %{x:.4f}<extra></extra>",
|
| 98 |
+
))
|
|
|
|
| 99 |
|
| 100 |
fig.update_layout(
|
| 101 |
title="Top 20 Models by Average Score",
|
|
|
|
| 104 |
xaxis_range = [0,1],
|
| 105 |
height=600,
|
| 106 |
hovermode="y unified",
|
| 107 |
+
showlegend=True,
|
| 108 |
+
legend=dict(x=1, y=1, xanchor="right", yanchor="top", bgcolor="rgba(0,0,0,0)", font=dict(color="white")),
|
| 109 |
margin=dict(l=100),
|
| 110 |
paper_bgcolor="rgba(30,30,30,0.85)",
|
| 111 |
plot_bgcolor="rgba(30,30,30,0.85)",
|
|
|
|
| 121 |
dtick=1,
|
| 122 |
tickfont=dict(color="white"),
|
| 123 |
title_font=dict(color="white"),
|
| 124 |
+
categoryorder="array",
|
| 125 |
+
categoryarray=top_20["Model"].tolist(),
|
| 126 |
)
|
| 127 |
)
|
| 128 |
|
|
|
|
| 184 |
# font=dict(size=11),
|
| 185 |
# margin=dict(l=80, r=80, t=80, b=80),
|
| 186 |
# )
|
|
|
|
|
|
|
| 187 |
merged["Model"] = merged["Model"].str.split("/").str[-1]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
|
| 189 |
+
fig = go.Figure()
|
| 190 |
+
for mask, label, color in [
|
| 191 |
+
(merged['Size'] == '-', "Closed Source", "#F4DD2C"),
|
| 192 |
+
(merged['Size'] != '-', "Open Source", "#7DCEF1"),
|
| 193 |
+
]:
|
| 194 |
+
subset = merged[mask]
|
| 195 |
+
print('[MODELS]',subset['Model'].tolist())
|
| 196 |
+
fig.add_trace(go.Scatter(
|
| 197 |
+
x=subset["Total Cost ($)"],
|
| 198 |
+
y=subset["Average"],
|
| 199 |
+
mode="markers+text",
|
| 200 |
+
name=label,
|
| 201 |
+
marker=dict(size=14, color=color, line=dict(width=1, color="white")),
|
| 202 |
+
text=subset["Model"],
|
| 203 |
+
textposition=["top right","middle right","middle right","middle right","top right","middle right","top right","middle right","bottom left","middle left","middle left","middle left","middle right"] if len(subset)>2 else ['bottom right','middle right'],
|
| 204 |
+
textfont=dict(size=11, color="white"),
|
| 205 |
+
hovertemplate="<b>%{text}</b><br>Cost: $%{x:.2f}<br>Avg Score: %{y:.4f}<extra></extra>",
|
| 206 |
+
))
|
| 207 |
+
|
| 208 |
+
fig.update_layout(title="Model Evaluation: Cost vs Accuracy<br><sub>Hover or read labels for full details</sub>")
|
| 209 |
|
| 210 |
fig.update_layout(
|
| 211 |
paper_bgcolor="rgba(30,30,30,0.85)",
|
|
|
|
| 214 |
height=650,
|
| 215 |
xaxis_title="Total Cost ($)",
|
| 216 |
yaxis=dict(range=[0, 1], showgrid=False),
|
| 217 |
+
# xaxis=dict(showgrid=False, dtick=10, tickprefix="$"),
|
| 218 |
+
showlegend=True,
|
| 219 |
+
legend=dict(x=1, y=1, xanchor="right", yanchor="top", bgcolor="rgba(0,0,0,0)", font=dict(color="white")),
|
| 220 |
margin=dict(l=40, r=40, t=80, b=40)
|
| 221 |
)
|
| 222 |
+
fig.update_xaxes(
|
| 223 |
+
showgrid=False,
|
| 224 |
+
tickprefix="$",
|
| 225 |
+
tickmode="auto",
|
| 226 |
+
)
|
| 227 |
|
| 228 |
return fig
|
| 229 |
|
|
|
|
| 349 |
"detailed": prepare_detailed_leaderboard(detailed_results, leaderboard),
|
| 350 |
"task_scores": task_scores,
|
| 351 |
}
|
| 352 |
+
global_data["leaderboard"].to_csv('leaderboard.csv',index =False)
|
| 353 |
return (
|
| 354 |
create_leaderboard_chart(global_data["leaderboard"]),
|
| 355 |
global_data["leaderboard"],
|
|
|
|
| 410 |
)
|
| 411 |
|
| 412 |
gr.Markdown(
|
| 413 |
+
"> **Note:** We observed significant reliability issues with Claude 4.6 (4.5) during evaluation. "
|
| 414 |
"To preserve the integrity of the benchmark, all Claude 4.6 (4.5) models have been excluded from the leaderboard. "
|
| 415 |
"You can learn more about the issue in [this GitHub issue](https://github.com/anthropics/claude-code/issues/17357)."
|
| 416 |
)
|
|
|
|
| 437 |
|
| 438 |
**Notes:**
|
| 439 |
- Token counts are approximations based on API usage patterns
|
| 440 |
+
- Spend data is only reported for models having more than 50B parameters.
|
| 441 |
"""
|
| 442 |
)
|
| 443 |
|
full_price_report.csv
CHANGED
|
@@ -13,5 +13,4 @@ openai/gpt-5.4-nano,1105571,0.623154
|
|
| 13 |
x-ai/grok-4-fast,10881722,2.711288
|
| 14 |
x-ai/grok-4.1-fast,12961678,3.236579
|
| 15 |
x-ai/grok-4.20-beta,1554643,2.749659
|
| 16 |
-
z-ai/glm-4.7-flash,15109580,2.976598
|
| 17 |
z-ai/glm-5,17845348,26.480097
|
|
|
|
| 13 |
x-ai/grok-4-fast,10881722,2.711288
|
| 14 |
x-ai/grok-4.1-fast,12961678,3.236579
|
| 15 |
x-ai/grok-4.20-beta,1554643,2.749659
|
|
|
|
| 16 |
z-ai/glm-5,17845348,26.480097
|