docs(bench): dark leaderboard styling for all benchmark charts

Leaderboard restyled to the LLM-benchmark look: dark background, rank-numbered labels, per-rank color palette, 'NN / 100 - grade' annotations. The live-run, task-matrix and performance charts share the same dark theme for a consistent README identity. Charts regenerated deterministically from their data files.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Umutcan Edizsalan
2026-07-23 16:14:04 +03:00
co-authored by Cursor
parent af4813e7b6
commit bae0750d4c
8 changed files with 1112 additions and 863 deletions
+36 -17
View File
@@ -66,24 +66,43 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
matplotlib.rcParams["svg.hashsalt"] = "autocad-mcp-source-review-v1"
projects = sorted(data["projects"], key=lambda item: item["score"])
labels = [item["repository"] for item in projects]
total = len(projects)
# rank 1 = highest score (drawn topmost by barh with ascending sort)
labels = [
f"{total - index}. {item['repository']}" for index, item in enumerate(projects)
]
scores = [item["score"] for item in projects]
grades = [item["evidence_grade"] for item in projects]
colors = ["#0969da" if label == "U-C4N/Autocad-MCP" else "#6e7781" for label in labels]
# leaderboard palette by rank (rank 1 first), canvas/LLM-benchmark style
rank_palette = [
"#3fb950", # 1 green
"#58a6ff", # 2 sky
"#6e7ce0", # 3 indigo
"#d29922", # 4 amber
"#c4622d", # 5 rust
"#e3b341", # 6 yellow
"#bf4b8a", # 7 magenta
"#f0876e", # 8 salmon
"#8957e5", # 9 purple
]
colors = [
rank_palette[(total - 1 - index) % len(rank_palette)]
for index in range(total)
]
fig, ax = plt.subplots(figsize=(12, 6.4), constrained_layout=True)
fig.patch.set_facecolor("#f6f8fa")
ax.set_facecolor("#f6f8fa")
fig, ax = plt.subplots(figsize=(12, 0.62 * total + 2.4), constrained_layout=True)
fig.patch.set_facecolor("#0d1117")
ax.set_facecolor("#0d1117")
bars = ax.barh(labels, scores, color=colors, height=0.62)
ax.set_xlim(0, 100)
ax.set_xlabel("Weighted capability score / 100", color="#24292f", labelpad=10)
ax.set_xlabel("Weighted capability score / 100", color="#e6edf3", labelpad=10)
ax.set_title(
"Source-reviewed capability benchmark",
"Public AutoCAD MCP leaderboard — Source-reviewed capability benchmark",
loc="left",
fontsize=18,
fontsize=17,
fontweight="bold",
color="#24292f",
color="#e6edf3",
pad=28,
)
ax.text(
@@ -91,17 +110,17 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
1.02,
f"Fixed rubric · reviewed {data['reviewed_at']} · evidence grade shown per project",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=10,
)
for bar, score, grade in zip(bars, scores, grades, strict=True):
ax.text(
min(score + 1.2, 96),
min(score + 1.2, 88),
bar.get_y() + bar.get_height() / 2,
f"{score} · {grade}",
f"{score} / 100 · {grade}",
va="center",
color="#24292f",
color="#e6edf3",
fontweight="bold",
)
@@ -110,13 +129,13 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
-0.17,
"Shared live-run results are not implied. Scores reflect public-source and recorded test evidence.",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=9,
)
ax.grid(axis="x", color="#d0d7de", linewidth=0.8, alpha=0.8)
ax.grid(axis="x", color="#30363d", linewidth=0.8, alpha=0.9)
ax.set_axisbelow(True)
ax.tick_params(axis="x", colors="#57606a")
ax.tick_params(axis="y", colors="#24292f", length=0, pad=8)
ax.tick_params(axis="x", colors="#8b949e")
ax.tick_params(axis="y", colors="#e6edf3", length=0, pad=8)
for spine in ax.spines.values():
spine.set_visible(False)
+11 -11
View File
@@ -51,23 +51,23 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
coverage = [item["summary"]["coverage_percent"] for item in reports]
passed = [item["summary"]["passed"] for item in reports]
attempted = [item["summary"]["attempted"] for item in reports]
colors = ["#0969da" if label == "autocad-mcp-pro" else "#6e7781" for label in labels]
colors = ["#58a6ff" if label == "autocad-mcp-pro" else "#484f58" for label in labels]
fig, ax = plt.subplots(figsize=(12, 4.8), constrained_layout=True)
fig.patch.set_facecolor("#f6f8fa")
ax.set_facecolor("#f6f8fa")
fig.patch.set_facecolor("#0d1117")
ax.set_facecolor("#0d1117")
bars = ax.barh(labels, scores, color=colors, height=0.58)
ax.set_xlim(0, 100)
ax.set_xlabel(
"Weighted live-run score / 100 (fixed 10-task matrix)", color="#24292f", labelpad=10
"Weighted live-run score / 100 (fixed 10-task matrix)", color="#e6edf3", labelpad=10
)
ax.set_title(
"Live-run benchmark - headless ezdxf lane",
loc="left",
fontsize=18,
fontweight="bold",
color="#24292f",
color="#e6edf3",
pad=28,
)
ax.text(
@@ -75,7 +75,7 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
1.02,
"Same 10 tasks, same harness, pinned competitor commits; artifacts verified by re-opening the DXF",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=10,
)
@@ -85,7 +85,7 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
bar.get_y() + bar.get_height() / 2,
f"{score:g} ({ok}/{total} pass, {cov:g}% coverage)",
va="center",
color="#24292f",
color="#e6edf3",
fontweight="bold",
)
@@ -94,13 +94,13 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
-0.22,
"Unsupported tasks score 0 in the fixed matrix; per-task statuses and reasons are in benchmarks/results/published/.",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=9,
)
ax.grid(axis="x", color="#d0d7de", linewidth=0.8, alpha=0.8)
ax.grid(axis="x", color="#30363d", linewidth=0.8, alpha=0.8)
ax.set_axisbelow(True)
ax.tick_params(axis="x", colors="#57606a")
ax.tick_params(axis="y", colors="#24292f", length=0, pad=8)
ax.tick_params(axis="x", colors="#8b949e")
ax.tick_params(axis="y", colors="#e6edf3", length=0, pad=8)
for spine in ax.spines.values():
spine.set_visible(False)
+13 -12
View File
@@ -20,12 +20,12 @@ DEFAULT_INPUT_DIR = ROOT / "benchmarks" / "results" / "published"
DEFAULT_OUTPUT = ROOT / "docs" / "assets" / "autocad-mcp-taskmatrix.svg"
STATUS_COLORS = {
"pass": "#2da44e",
"partial": "#d4a72c",
"fail": "#cf222e",
"pass": "#238636",
"partial": "#d29922",
"fail": "#da3633",
"timeout": "#a40e26",
"unsupported": "#d0d7de",
"not_run": "#f6f8fa",
"unsupported": "#30363d",
"not_run": "#161b22",
}
STATUS_GLYPHS = {
@@ -78,8 +78,8 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
figsize=(3.4 + 2.4 * len(servers), 1.8 + 0.52 * len(task_ids)),
constrained_layout=True,
)
fig.patch.set_facecolor("#f6f8fa")
ax.set_facecolor("#f6f8fa")
fig.patch.set_facecolor("#0d1117")
ax.set_facecolor("#0d1117")
for row, task_id in enumerate(task_ids):
for col, server in enumerate(servers):
@@ -91,11 +91,11 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
0.88,
0.84,
facecolor=color,
edgecolor="#d0d7de",
edgecolor="#30363d",
linewidth=0.8,
)
)
glyph_color = "#ffffff" if status in ("pass", "fail", "timeout") else "#24292f"
glyph_color = "#ffffff" if status in ("pass", "fail", "timeout") else "#e6edf3"
ax.text(
col + 0.5,
row + 0.5,
@@ -110,10 +110,10 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
ax.set_xlim(0, len(servers))
ax.set_ylim(len(task_ids), 0)
ax.set_xticks([index + 0.5 for index in range(len(servers))])
ax.set_xticklabels(servers, color="#24292f", fontsize=10, fontweight="bold")
ax.set_xticklabels(servers, color="#e6edf3", fontsize=10, fontweight="bold")
ax.xaxis.set_ticks_position("top")
ax.set_yticks([index + 0.5 for index in range(len(task_ids))])
ax.set_yticklabels(task_labels, color="#24292f", fontsize=9)
ax.set_yticklabels(task_labels, color="#e6edf3", fontsize=9)
ax.tick_params(length=0)
for spine in ax.spines.values():
spine.set_visible(False)
@@ -123,7 +123,7 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
loc="left",
fontsize=17,
fontweight="bold",
color="#24292f",
color="#e6edf3",
pad=34,
)
@@ -140,6 +140,7 @@ def render_chart(reports: list[dict[str, Any]], output: Path) -> None:
ncol=4,
frameon=False,
fontsize=9,
labelcolor="#e6edf3",
)
output.parent.mkdir(parents=True, exist_ok=True)
+11 -11
View File
@@ -61,18 +61,18 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
values = [item["wall_ms"] for item in workloads]
fig, ax = plt.subplots(figsize=(12, 4.6), constrained_layout=True)
fig.patch.set_facecolor("#f6f8fa")
ax.set_facecolor("#f6f8fa")
bars = ax.barh(labels, values, color="#0969da", height=0.58)
fig.patch.set_facecolor("#0d1117")
ax.set_facecolor("#0d1117")
bars = ax.barh(labels, values, color="#58a6ff", height=0.58)
ax.set_xscale("log")
ax.set_xlabel("Wall time in ms (log scale) — lower is better", color="#24292f", labelpad=10)
ax.set_xlabel("Wall time in ms (log scale) — lower is better", color="#e6edf3", labelpad=10)
ax.set_title(
"Headless performance — ezdxf engine",
loc="left",
fontsize=18,
fontweight="bold",
color="#24292f",
color="#e6edf3",
pad=28,
)
env = data.get("environment", {})
@@ -82,7 +82,7 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
f"Fixed workloads via the same backend methods the MCP tools call · "
f"Python {env.get('python', '?')} · {env.get('platform', '?')}",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=9,
)
@@ -92,7 +92,7 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
bar.get_y() + bar.get_height() / 2,
_annotation(item),
va="center",
color="#24292f",
color="#e6edf3",
fontweight="bold",
fontsize=9,
)
@@ -104,13 +104,13 @@ def render_chart(data: dict[str, Any], output: Path) -> None:
"Self-measurement only: competitor servers would pay extra stdio serialization cost in-process runs do not. "
"Reproduce: python -m benchmarks.perf_suite",
transform=ax.transAxes,
color="#57606a",
color="#8b949e",
fontsize=9,
)
ax.grid(axis="x", color="#d0d7de", linewidth=0.8, alpha=0.8)
ax.grid(axis="x", color="#30363d", linewidth=0.8, alpha=0.8)
ax.set_axisbelow(True)
ax.tick_params(axis="x", colors="#57606a")
ax.tick_params(axis="y", colors="#24292f", length=0, pad=8)
ax.tick_params(axis="x", colors="#8b949e")
ax.tick_params(axis="y", colors="#e6edf3", length=0, pad=8)
for spine in ax.spines.values():
spine.set_visible(False)