Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
1a9bcb3
Added link to paper in nav bar
shenrunzhang Nov 5, 2025
48992c8
updated instructions for submitting to just go to project page and fo…
shenrunzhang Nov 10, 2025
98fabee
Made text on hero section lighter, rephrased cta button 'get started'…
shenrunzhang Nov 10, 2025
3dbff83
Made subtitles one liner
shenrunzhang Nov 10, 2025
e869bd1
Added logo and rescaled 0-100
shenrunzhang Nov 10, 2025
ae04aad
fixed metrics range, and dangling word
shenrunzhang Nov 10, 2025
b18f37f
Changed commercial/academic -> closed/open source. Added Chayan to le…
shenrunzhang Nov 18, 2025
ee68aaf
Fixed col width
shenrunzhang Nov 18, 2025
501520f
changed vllm affiliation to vllm sr team
shenrunzhang Nov 18, 2025
a9c0292
Fixed premature scrollbar on loaderboard
shenrunzhang Nov 18, 2025
9d1024f
added text wrapping to leaderboard affiliations
shenrunzhang Nov 18, 2025
7633325
Added two new metrics accuracy and cost/1k query
shenrunzhang Nov 18, 2025
111258a
Added eval metric explanation
shenrunzhang Nov 18, 2025
2229a48
spelling
shenrunzhang Nov 18, 2025
76628a1
Added website links to all routers and removed dangling word from lea…
shenrunzhang Nov 19, 2025
a85815c
Added beta slider
shenrunzhang Nov 20, 2025
307c9c0
Fixed sizing for mobile screens in homepage and leaderboard page and …
shenrunzhang Nov 20, 2025
05640f2
Fixed homepage padding for phone screens
shenrunzhang Nov 20, 2025
db8b60b
changed get started button color
shenrunzhang Nov 20, 2025
71c1d03
Fixed beta slider
shenrunzhang Nov 20, 2025
5fb3c5b
Merge branch 'main' into feature/dynamic-beta
shenrunzhang Nov 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/components/Header.css
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@
background: rgba(255, 255, 255, 0.1);
}

@media (max-width: 768px) {
@media (max-width: 950px) {
.nav-desktop {
display: none;
}
Expand Down
26 changes: 16 additions & 10 deletions src/pages/HomePage.css
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@
font-weight: 700;
line-height: 1.2;
margin-bottom: 1rem;
padding-right: 4rem;
margin-left: 2rem;
padding-right: 0rem;
margin-left: 0;
width: 100%;

}

.hero-subtitle-short {
Expand All @@ -39,7 +41,7 @@
margin-bottom: 1.5rem;
color: rgba(255, 255, 255, 0.9);
padding-right: 4rem;
margin-left: 2rem;
/* margin-left: 2rem; */
max-width: 400rem;
}

Expand Down Expand Up @@ -67,6 +69,7 @@
padding: 0;
text-align: left;
max-width: 500px;
width: 100%;
}

.cta-heading {
Expand All @@ -75,6 +78,8 @@
color: rgba(255, 255, 255, 0.9);
margin: 0 0 0.5rem 0;
letter-spacing: -0.01em;
width: auto;
text-wrap: wrap;
}

.cta-description {
Expand All @@ -86,19 +91,20 @@
}

.cta-card .btn {
background: linear-gradient(135deg, #fa961c 0%, #ffaa00 100%);
/* background: linear-gradient(135deg, #fa961c 0%, #ffaa00 100%); */
background: rgb(108, 112, 119);
color: white;
font-weight: 500;
padding: 0.5rem 1.25rem;
font-size: 1.1rem;
border: none;
border: 2px solid #4d4d4dd6;
border-radius: 6px;
transition: all 0.2s ease;
letter-spacing: 0.01em;
}

.cta-card .btn:hover {
background: linear-gradient(135deg, #ff9012 0%, #ff8809 100%);
background: #555555d6;
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(79, 70, 229, 0.25);
}
Expand All @@ -122,15 +128,15 @@
}

.btn-primary {
background: #2563eb;
background: #fa961c;
color: white;
font-weight: 600;
font-size: 1.3rem;
border: none;
}

.btn-primary:hover {
background: #1d4ed8;
background: #dd7e09;
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);
}
Expand Down Expand Up @@ -178,8 +184,8 @@
gap: 1.5rem;
align-items: left;
justify-content: left;
margin-left: 2rem;
margin-right: -2rem;
/* margin-left: 2rem;
margin-right: -2rem; */
}

.hero-card {
Expand Down
76 changes: 68 additions & 8 deletions src/pages/LeaderboardPage.css
Original file line number Diff line number Diff line change
Expand Up @@ -172,17 +172,46 @@
display: flex;
flex-direction: column;
gap: 0.35rem;
min-width: 200px;
min-width: 300px;
}

.beta-label {
display: flex;
justify-content: space-between;
font-size: 0.9rem;
.beta-label-link {
display: inline-flex;
align-items: center;
gap: 0.5rem;
font-size: 1rem;
font-weight: 600;
color: #1f2937;
color: #363a42;
background: transparent;
border: none;
padding: 0;
cursor: pointer;
position: relative;
}

.beta-label-text {
position: relative;
display: inline-block;
}

.beta-label-text::after {
content: '';
position: absolute;
bottom: -2px;
left: 0;
width: 100%;
height: 1px;
background: rgba(37, 99, 235, 0.3);
transform: scaleX(0);
transition: transform 0.2s ease;
transform-origin: left;
}

.beta-label-link:hover .beta-label-text::after {
transform: scaleX(1);
}


.beta-value {
font-variant-numeric: tabular-nums;
color: #2563eb;
Expand All @@ -196,8 +225,39 @@
.beta-hints {
display: flex;
justify-content: space-between;
font-size: 0.75rem;
color: #6b7280;
font-size: 0.9rem;
color: #363636;
}

.beta-weights {
display: flex;
gap: 1rem;
align-items: center;
flex-wrap: wrap;
font-size: 0.9rem;
color: #1f2937;
}

.beta-weight {
display: flex;
flex-direction: column;
background: #eef2ff;
border-radius: 8px;
padding: 0.5rem 0.75rem;
}

.beta-weight strong {
font-size: 1rem;
font-weight: 700;
}

.beta-weight-pill {
background: #dbeafe;
border-radius: 999px;
padding: 0.5rem 1rem;
font-weight: 600;
color: #1d4ed8;

}

.filter-group {
Expand Down
49 changes: 35 additions & 14 deletions src/pages/LeaderboardPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,20 @@ const computeArenaScore = (router: Router, beta: number): number => {
return (((1 + beta) * accuracy * normalizedCost) / denominator) * 100;
};

const DEFAULT_BETA = 0.1;
const defaultCostWeight = DEFAULT_BETA / (1 + DEFAULT_BETA);

const LeaderboardPage: React.FC = () => {
const [searchTerm, setSearchTerm] = useState('');
const [filterType, setFilterType] = useState<'all' | 'open-source' | 'closed-source'>('all');
const [activeMetric, setActiveMetric] = useState<
'arena' | 'accuracy' | 'cost' | 'optimalSelection' | 'optimalCost' | 'optimalAcc' | 'latency' | 'robustness'
>('arena');
const [activeTab, setActiveTab] = useState<'spider' | 'deferral'>('spider');
const [beta, setBeta] = useState(0.1);
const [costWeight, setCostWeight] = useState(defaultCostWeight);

const beta = costWeight / (1 - costWeight);
const accuracyWeight = 1 - costWeight;

// Deferral curve data
const openSourcePoints = {
Expand Down Expand Up @@ -239,23 +245,38 @@ const LeaderboardPage: React.FC = () => {
</div>

<div className="beta-control">
<div className="beta-label">
<span>Arena β</span>
<span className="beta-value">{beta.toFixed(2)}</span>
</div>
<button
type="button"
className="beta-label-link"
onClick={() =>
document.getElementById('metrics-explanation')?.scrollIntoView({ behavior: 'smooth' })
}
>
<span className="beta-label-text">Weighted Arena Score</span>
</button>
<input
type="range"
id="beta-slider"
min={0.01}
max={0.1}
step={0.001}
value={beta}
onChange={event => setBeta(parseFloat(event.target.value))}
min={0.05}
max={0.95}
step={0.01}
value={costWeight}
onChange={event => {
const value = parseFloat(event.target.value);
const clamped = Math.min(0.95, Math.max(0.05, value));
setCostWeight(clamped);
}}
className="beta-slider"
/>
<div className="beta-hints">
<span>Accuracy-first</span>
<span>Cost-first</span>
<span>{(costWeight * 100).toFixed(0)}% Cost Weight</span>
<span> Accuracy Weight {(accuracyWeight * 100).toFixed(0)}%</span>
</div>
<div className="beta-weights">

<div className="beta-weight-pill">
β = cost weight&nbsp;: accuracy weight&nbsp;= {beta.toFixed(2)}
</div>
</div>
</div>
</div>
Expand Down Expand Up @@ -447,11 +468,11 @@ const LeaderboardPage: React.FC = () => {
</div>

{/* Metrics Explanation */}
<div className="metrics-explanation">
<div className="metrics-explanation" id="metrics-explanation">
<h2>Evaluation Metrics</h2>
<div className="metrics-grid">
{/* 1️⃣ Arena Score */}
<div className="metric-card">
<div className="metric-card" >
<div className="metric-summary">
<h3>Arena Score</h3>
<p>Weighted harmonic mean capturing the trade-off between accuracy and cost.</p>
Expand Down