| <!doctype html> |
| <html lang="en"> |
| <head><script>window.huggingface={variables:{"SPACE_CREATOR_USER_ID":"671b8822cca657cc83e23281"}};</script> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <meta name="description" content="AutoMedBench Lite leaderboard: average scores, cost, time, and turns across seven released medical AI tracks."> |
| <meta name="color-scheme" content="light"> |
| <title>AutoMedBench Lite Leaderboard</title> |
| <style> |
| :root { |
| --canvas: #f6f1e6; |
| --panel: #faf6ee; |
| --panel-strong: #fffdf8; |
| --ink: #3b4538; |
| --ink-soft: #737a6d; |
| --ink-faint: #9aa093; |
| --edge: #e6decc; |
| --edge-strong: #d9d0bc; |
| --primary: #4a7355; |
| --primary-dark: #3e6248; |
| --primary-soft: #e6ede5; |
| --overall: #111411; |
| --metric: #7f877b; |
| --gold: #c9a35a; |
| --silver: #a9afb7; |
| --bronze: #b88556; |
| --shadow: 0 12px 32px rgba(59, 69, 56, 0.08); |
| } |
| |
| * { box-sizing: border-box; } |
| |
| html { background: var(--canvas); } |
| |
| body { |
| margin: 0; |
| min-width: 320px; |
| color: var(--ink); |
| background: |
| radial-gradient(circle at 15% 0%, rgba(74, 115, 85, 0.08), transparent 30rem), |
| var(--canvas); |
| font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; |
| font-size: 15px; |
| line-height: 1.5; |
| -webkit-font-smoothing: antialiased; |
| } |
| |
| a { color: inherit; } |
| |
| .page { |
| width: min(100% - 32px, 1180px); |
| margin: 0 auto; |
| padding: 44px 0 36px; |
| } |
| |
| .hero { |
| display: flex; |
| align-items: flex-start; |
| justify-content: space-between; |
| gap: 24px; |
| margin-bottom: 24px; |
| } |
| |
| .brand { |
| display: flex; |
| align-items: center; |
| gap: 14px; |
| } |
| |
| .brand-mark { |
| display: grid; |
| width: 42px; |
| height: 42px; |
| flex: 0 0 auto; |
| place-items: center; |
| border-radius: 11px; |
| color: #fff; |
| background: var(--primary); |
| box-shadow: 0 5px 14px rgba(74, 115, 85, 0.2); |
| font-family: Georgia, "Times New Roman", serif; |
| font-size: 23px; |
| font-weight: 700; |
| } |
| |
| .eyebrow { |
| margin: 0 0 2px; |
| color: var(--primary); |
| font-size: 12px; |
| font-weight: 750; |
| letter-spacing: 0.11em; |
| text-transform: uppercase; |
| } |
| |
| h1 { |
| margin: 0; |
| font-family: Georgia, "Times New Roman", serif; |
| font-size: clamp(28px, 4vw, 38px); |
| font-weight: 650; |
| letter-spacing: -0.025em; |
| line-height: 1.1; |
| } |
| |
| .subtitle { |
| margin: 9px 0 0 56px; |
| color: var(--ink-soft); |
| font-size: 15px; |
| } |
| |
| .actions { |
| display: flex; |
| flex: 0 0 auto; |
| gap: 8px; |
| } |
| |
| .button { |
| display: inline-flex; |
| align-items: center; |
| min-height: 36px; |
| padding: 7px 12px; |
| border: 1px solid var(--edge-strong); |
| border-radius: 8px; |
| color: var(--ink); |
| background: rgba(255, 253, 248, 0.72); |
| font-size: 13px; |
| font-weight: 650; |
| text-decoration: none; |
| transition: border-color 140ms ease, background 140ms ease, color 140ms ease; |
| } |
| |
| .button:hover, |
| .button:focus-visible { |
| border-color: var(--primary); |
| color: var(--primary-dark); |
| background: var(--panel-strong); |
| outline: none; |
| } |
| |
| .score-chart { |
| overflow: hidden; |
| margin-bottom: 20px; |
| border: 1px solid var(--edge-strong); |
| border-radius: 12px; |
| background: var(--panel-strong); |
| box-shadow: var(--shadow); |
| } |
| |
| .score-chart-head { |
| display: flex; |
| align-items: flex-start; |
| justify-content: space-between; |
| gap: 24px; |
| padding: 18px 20px 16px; |
| border-bottom: 1px solid var(--edge); |
| background: var(--panel); |
| } |
| |
| .score-chart-copy { min-width: 0; } |
| |
| .score-chart-kicker { |
| margin: 0 0 4px; |
| color: var(--primary); |
| font-size: 11px; |
| font-weight: 800; |
| letter-spacing: 0.09em; |
| text-transform: uppercase; |
| } |
| |
| .score-chart h2 { |
| margin: 0; |
| color: var(--ink); |
| font-family: Georgia, "Times New Roman", serif; |
| font-size: clamp(21px, 3vw, 27px); |
| font-weight: 650; |
| letter-spacing: -0.02em; |
| line-height: 1.15; |
| } |
| |
| .score-chart-subtitle { |
| max-width: 650px; |
| margin: 6px 0 0; |
| color: var(--ink-soft); |
| font-size: 13px; |
| } |
| |
| .metric-switcher { |
| display: inline-flex; |
| flex: 0 0 auto; |
| gap: 3px; |
| padding: 3px; |
| border: 1px solid var(--edge); |
| border-radius: 9px; |
| background: #eee9df; |
| } |
| |
| .metric-button { |
| min-height: 32px; |
| padding: 5px 11px; |
| border: 0; |
| border-radius: 6px; |
| color: var(--ink-soft); |
| background: transparent; |
| font: inherit; |
| font-size: 12px; |
| font-weight: 750; |
| cursor: pointer; |
| } |
| |
| .metric-button:hover { color: var(--ink); } |
| |
| .metric-button:focus-visible { |
| outline: 2px solid var(--primary); |
| outline-offset: 2px; |
| } |
| |
| .metric-button[aria-pressed="true"] { |
| color: #fff; |
| background: var(--primary); |
| box-shadow: 0 2px 6px rgba(59, 69, 56, 0.14); |
| } |
| |
| .score-chart-body { padding: 12px 18px 10px; } |
| |
| .column-chart-scroll { |
| width: 100%; |
| overflow-x: auto; |
| overflow-y: hidden; |
| overscroll-behavior-inline: contain; |
| scrollbar-color: #aeb8aa #ece8df; |
| scrollbar-width: thin; |
| } |
| |
| .column-chart-scroll:focus-visible { |
| border-radius: 8px; |
| outline: 2px solid var(--primary); |
| outline-offset: 2px; |
| } |
| |
| .column-chart-frame { |
| --axis-left: 58px; |
| --plot-top: 38px; |
| --plot-height: 268px; |
| --label-height: 116px; |
| position: relative; |
| height: calc(var(--plot-top) + var(--plot-height) + var(--label-height) + 22px); |
| min-width: max(100%, calc(var(--model-count) * 54px + var(--axis-left) + 12px)); |
| } |
| |
| .chart-y-title { |
| position: absolute; |
| top: var(--plot-top); |
| bottom: calc(var(--label-height) + 22px); |
| left: 0; |
| display: grid; |
| place-items: center; |
| color: var(--ink-faint); |
| font-size: 10px; |
| font-weight: 750; |
| letter-spacing: 0.08em; |
| text-transform: uppercase; |
| writing-mode: vertical-rl; |
| transform: rotate(180deg); |
| } |
| |
| .chart-y-axis { |
| position: absolute; |
| top: var(--plot-top); |
| left: 18px; |
| display: flex; |
| width: 30px; |
| height: var(--plot-height); |
| flex-direction: column; |
| justify-content: space-between; |
| color: var(--ink-faint); |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| font-size: 9px; |
| line-height: 1; |
| text-align: right; |
| } |
| |
| .chart-grid { |
| position: absolute; |
| top: var(--plot-top); |
| right: 8px; |
| left: var(--axis-left); |
| display: flex; |
| height: var(--plot-height); |
| flex-direction: column; |
| justify-content: space-between; |
| pointer-events: none; |
| } |
| |
| .chart-grid-line { |
| display: block; |
| width: 100%; |
| border-top: 1px dashed rgba(115, 122, 109, 0.2); |
| } |
| |
| .chart-grid-line:last-child { |
| border-color: rgba(77, 87, 75, 0.36); |
| border-top-style: solid; |
| } |
| |
| .score-bars { |
| position: absolute; |
| top: var(--plot-top); |
| right: 8px; |
| left: var(--axis-left); |
| display: grid; |
| height: calc(var(--plot-height) + var(--label-height)); |
| grid-template-columns: repeat(var(--model-count), minmax(0, 1fr)); |
| gap: clamp(4px, 0.65vw, 10px); |
| margin: 0; |
| padding: 0; |
| list-style: none; |
| } |
| |
| .score-bar-row { |
| display: grid; |
| min-width: 0; |
| grid-template-rows: var(--plot-height) var(--label-height); |
| } |
| |
| .bar-rank { display: none; } |
| |
| .bar-column-slot { |
| position: relative; |
| display: flex; |
| min-width: 0; |
| align-items: flex-end; |
| justify-content: center; |
| } |
| |
| .bar-stack { |
| position: relative; |
| width: clamp(20px, 68%, 35px); |
| min-height: 2px; |
| height: calc(var(--score) * 1%); |
| } |
| |
| .bar-fill { |
| position: absolute; |
| inset: 0; |
| display: block; |
| border-radius: 5px 5px 1px 1px; |
| background: var(--model-color); |
| box-shadow: |
| inset 0 -1px 0 rgba(0, 0, 0, 0.12), |
| 0 2px 5px color-mix(in srgb, var(--model-color) 18%, transparent); |
| transform-origin: bottom; |
| transition: filter 160ms ease, transform 160ms ease; |
| } |
| |
| .score-bar-row:hover .bar-fill { |
| filter: saturate(1.08) brightness(0.96); |
| transform: scaleX(1.08); |
| } |
| |
| .bar-value { |
| position: absolute; |
| top: -20px; |
| left: 50%; |
| color: var(--ink); |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| font-size: 9px; |
| font-weight: 800; |
| line-height: 1; |
| white-space: nowrap; |
| transform: translateX(-50%); |
| } |
| |
| .bar-model { |
| position: relative; |
| display: flex; |
| min-width: 0; |
| align-items: flex-start; |
| justify-content: center; |
| padding-top: 7px; |
| } |
| |
| .bar-logo { |
| position: relative; |
| display: grid; |
| width: 24px; |
| height: 24px; |
| flex: 0 0 auto; |
| place-items: center; |
| overflow: hidden; |
| border: 1px solid color-mix(in srgb, var(--model-color) 28%, var(--edge)); |
| border-radius: 7px; |
| color: var(--ink-soft); |
| background: color-mix(in srgb, var(--model-color) 8%, #f4f0e7); |
| font-size: 9px; |
| font-weight: 800; |
| } |
| |
| .bar-logo img { |
| position: relative; |
| z-index: 1; |
| display: block; |
| width: 15px; |
| height: 15px; |
| opacity: 0.88; |
| } |
| |
| .bar-logo img.is-missing { display: none; } |
| |
| .bar-model-copy { |
| position: absolute; |
| top: 35px; |
| right: 50%; |
| width: 112px; |
| min-width: 0; |
| transform: translateX(10px) rotate(-56deg); |
| transform-origin: top right; |
| text-align: right; |
| } |
| |
| .bar-model-name { |
| display: block; |
| overflow: hidden; |
| color: var(--ink); |
| font-size: 10px; |
| font-weight: 690; |
| letter-spacing: -0.015em; |
| line-height: 1.15; |
| text-overflow: ellipsis; |
| white-space: nowrap; |
| } |
| |
| .bar-provider { display: none; } |
| |
| .chart-x-title { |
| position: absolute; |
| right: 8px; |
| bottom: 0; |
| left: var(--axis-left); |
| color: var(--ink-faint); |
| font-size: 10px; |
| font-weight: 750; |
| letter-spacing: 0.08em; |
| text-align: center; |
| text-transform: uppercase; |
| } |
| |
| .chart-scroll-hint { |
| margin: 4px 0 0; |
| color: var(--ink-faint); |
| font-size: 10px; |
| text-align: center; |
| } |
| |
| .chart-scroll-hint[hidden] { display: none; } |
| |
| .score-chart-foot { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 16px; |
| padding: 11px 20px; |
| border-top: 1px solid var(--edge); |
| color: var(--ink-soft); |
| background: #faf7f0; |
| font-size: 11px; |
| } |
| |
| .score-chart-foot strong { color: var(--ink); } |
| |
| .chart-scale-note { |
| flex: 0 0 auto; |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| white-space: nowrap; |
| } |
| |
| .chart-error, |
| .chart-noscript { |
| margin: 0; |
| padding: 18px 20px; |
| color: #7c473f; |
| background: #fbefec; |
| font-size: 13px; |
| } |
| |
| .sr-only { |
| position: absolute; |
| width: 1px; |
| height: 1px; |
| padding: 0; |
| overflow: hidden; |
| clip: rect(0, 0, 0, 0); |
| white-space: nowrap; |
| border: 0; |
| } |
| |
| .leaderboard { |
| overflow: hidden; |
| border: 1px solid var(--edge-strong); |
| border-radius: 12px; |
| background: var(--panel-strong); |
| box-shadow: var(--shadow); |
| } |
| |
| .leaderboard-head { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 16px; |
| min-height: 52px; |
| padding: 10px 15px; |
| border-bottom: 1px solid var(--edge); |
| background: var(--panel); |
| } |
| |
| .leaderboard-title { |
| display: flex; |
| align-items: center; |
| gap: 9px; |
| min-width: 0; |
| font-weight: 750; |
| } |
| |
| .chart-icon { |
| display: inline-flex; |
| align-items: flex-end; |
| gap: 2px; |
| width: 18px; |
| height: 16px; |
| color: var(--primary); |
| } |
| |
| .chart-icon i { |
| display: block; |
| width: 4px; |
| border-radius: 2px 2px 0 0; |
| background: currentColor; |
| } |
| |
| .chart-icon i:nth-child(1) { height: 8px; opacity: 0.45; } |
| .chart-icon i:nth-child(2) { height: 15px; } |
| .chart-icon i:nth-child(3) { height: 11px; opacity: 0.7; } |
| |
| .badge { |
| overflow: hidden; |
| padding: 2px 7px; |
| border: 1px solid #bed0c0; |
| border-radius: 5px; |
| color: var(--primary-dark); |
| background: var(--primary-soft); |
| font-size: 11px; |
| font-weight: 700; |
| text-overflow: ellipsis; |
| white-space: nowrap; |
| } |
| |
| .formula { |
| flex: 0 0 auto; |
| color: var(--ink-soft); |
| font-size: 12px; |
| } |
| |
| .formula strong { |
| color: var(--ink); |
| font-variant-numeric: tabular-nums; |
| } |
| |
| .table-scroll { overflow-x: auto; } |
| |
| table { |
| width: 100%; |
| min-width: 1130px; |
| border-collapse: collapse; |
| font-variant-numeric: tabular-nums; |
| } |
| |
| th { |
| height: 38px; |
| padding: 8px 12px; |
| border-bottom: 1px solid var(--edge); |
| color: var(--ink-soft); |
| background: #f9f5ec; |
| font-size: 11px; |
| font-weight: 750; |
| letter-spacing: 0.055em; |
| text-align: right; |
| text-transform: uppercase; |
| vertical-align: middle; |
| } |
| |
| th.rank, |
| td.rank { width: 58px; text-align: center; } |
| |
| th.model, |
| td.model { width: 230px; text-align: left; } |
| |
| th.parameter, |
| td.parameter { width: 96px; } |
| |
| th.score, |
| td.score { width: 84px; } |
| |
| th.release, |
| td.release { width: 112px; } |
| |
| th.operational, |
| td.operational { width: 88px; } |
| |
| th.parameter, |
| td.parameter, |
| th.release, |
| td.release, |
| th.score, |
| td.score, |
| th.operational, |
| td.operational { text-align: right; } |
| |
| tbody tr:nth-child(odd) { background: var(--panel-strong); } |
| tbody tr:nth-child(even) { background: #f8f5ed; } |
| tbody tr:first-child { background: #f1f6ef; } |
| |
| tbody tr { |
| border-bottom: 1px solid var(--edge); |
| transition: background 120ms ease; |
| } |
| |
| tbody tr:last-child { border-bottom: 0; } |
| tbody tr:hover { background: #edf3eb; } |
| |
| td { |
| height: 62px; |
| padding: 10px 12px; |
| text-align: right; |
| vertical-align: middle; |
| } |
| |
| .model-cell { |
| display: flex; |
| align-items: center; |
| gap: 10px; |
| min-width: 0; |
| } |
| |
| .logo-wrap { |
| display: grid; |
| width: 32px; |
| height: 32px; |
| flex: 0 0 auto; |
| place-items: center; |
| border: 1px solid var(--edge); |
| border-radius: 8px; |
| background: #f4f0e7; |
| } |
| |
| .company-logo { |
| display: block; |
| width: 19px; |
| height: 19px; |
| opacity: 0.86; |
| } |
| |
| .model-copy { min-width: 0; } |
| |
| .model-name { |
| display: block; |
| overflow: hidden; |
| color: var(--ink); |
| font-weight: 680; |
| letter-spacing: -0.01em; |
| text-overflow: ellipsis; |
| white-space: nowrap; |
| } |
| |
| .provider { |
| display: block; |
| margin-top: 1px; |
| color: var(--metric); |
| font-size: 11px; |
| } |
| |
| td.score, |
| td.parameter, |
| td.release, |
| td.operational { |
| color: var(--metric); |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| font-size: 12px; |
| font-weight: 600; |
| white-space: nowrap; |
| } |
| |
| .free-cost { |
| display: inline-block; |
| color: var(--ink-faint); |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| font-size: 11px; |
| font-weight: 600; |
| } |
| |
| td.overall { |
| color: var(--overall); |
| font-size: 14px; |
| font-weight: 850; |
| } |
| |
| .release-link { |
| color: var(--metric); |
| text-decoration: none; |
| } |
| |
| .release-link:hover, |
| .release-link:focus-visible { |
| color: var(--primary-dark); |
| text-decoration: underline; |
| outline: none; |
| } |
| |
| .rank-mark { |
| display: inline-grid; |
| width: 25px; |
| height: 25px; |
| place-items: center; |
| border-radius: 50%; |
| color: var(--ink-soft); |
| background: #ede9df; |
| font-family: "SFMono-Regular", Consolas, monospace; |
| font-size: 11px; |
| font-weight: 800; |
| } |
| |
| tr:nth-child(1) .rank-mark { color: #fff; background: var(--gold); } |
| tr:nth-child(2) .rank-mark { color: #fff; background: var(--silver); } |
| tr:nth-child(3) .rank-mark { color: #fff; background: var(--bronze); } |
| |
| .leaderboard-foot { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 20px; |
| padding: 12px 15px; |
| border-top: 1px solid var(--edge); |
| color: var(--ink-soft); |
| background: var(--panel); |
| font-size: 12px; |
| } |
| |
| .tracks { margin: 0; } |
| |
| .source { |
| flex: 0 0 auto; |
| color: var(--primary-dark); |
| font-weight: 650; |
| text-decoration: none; |
| } |
| |
| .source:hover, |
| .source:focus-visible { text-decoration: underline; outline: none; } |
| |
| .note { |
| margin: 16px auto 0; |
| color: var(--ink-faint); |
| font-size: 12px; |
| text-align: center; |
| } |
| |
| @media (max-width: 720px) { |
| .page { width: min(100% - 20px, 1180px); padding-top: 26px; } |
| .hero { display: block; } |
| .actions { margin: 20px 0 0 56px; } |
| .score-chart-head { display: block; padding: 16px; } |
| .metric-switcher { display: flex; width: 100%; margin-top: 14px; } |
| .metric-button { flex: 1; } |
| .score-chart-body { padding: 10px 8px 8px; } |
| .column-chart-frame { |
| --axis-left: 52px; |
| --plot-top: 36px; |
| --plot-height: 244px; |
| --label-height: 112px; |
| min-width: max(100%, calc(var(--model-count) * 52px + var(--axis-left) + 10px)); |
| } |
| .chart-y-axis { left: 14px; width: 28px; } |
| .bar-stack { width: clamp(18px, 70%, 32px); } |
| .bar-model-copy { width: 106px; } |
| .bar-model-name { font-size: 9.5px; } |
| .score-chart-foot { display: block; padding: 10px 16px; } |
| .chart-scale-note { display: block; margin-top: 4px; } |
| .leaderboard-head { align-items: flex-start; } |
| .formula { display: none; } |
| .leaderboard-foot { display: block; } |
| .source { display: inline-block; margin-top: 7px; } |
| } |
| |
| @media (max-width: 460px) { |
| .subtitle, |
| .actions { margin-left: 0; } |
| .brand-mark { width: 38px; height: 38px; } |
| .actions { width: 100%; } |
| .button { flex: 1; justify-content: center; } |
| } |
| |
| .eff-tabbar { |
| display: grid; |
| grid-template-columns: repeat(4, minmax(0, 1fr)); |
| gap: 4px; |
| padding: 6px; |
| border-bottom: 1px solid var(--edge); |
| background: var(--panel); |
| } |
| |
| .eff-tab { |
| min-height: 44px; |
| padding: 7px 10px; |
| border: 0; |
| border-radius: 8px; |
| color: var(--ink-soft); |
| background: transparent; |
| font: inherit; |
| font-size: 14px; |
| font-weight: 700; |
| cursor: pointer; |
| transition: background 140ms ease, color 140ms ease, box-shadow 140ms ease; |
| } |
| |
| .eff-tab small { |
| display: block; |
| font-size: 10.5px; |
| font-weight: 650; |
| letter-spacing: 0.06em; |
| text-transform: uppercase; |
| opacity: 0.75; |
| } |
| |
| .eff-tab:hover { color: var(--ink); background: rgba(255, 253, 248, 0.7); } |
| |
| .eff-tab:focus-visible { |
| outline: 2px solid var(--primary); |
| outline-offset: 2px; |
| } |
| |
| .eff-tab[aria-selected="true"] { |
| color: #fff; |
| background: var(--primary); |
| box-shadow: 0 2px 6px rgba(59, 69, 56, 0.14); |
| } |
| |
| .eff-head { |
| display: flex; |
| align-items: flex-start; |
| justify-content: space-between; |
| gap: 24px; |
| padding: 18px 20px 12px; |
| } |
| |
| .eff-copy { min-width: 0; } |
| |
| .eff-title { |
| margin: 0; |
| color: var(--ink); |
| font-family: Georgia, "Times New Roman", serif; |
| font-size: clamp(21px, 3vw, 27px); |
| font-weight: 650; |
| letter-spacing: -0.02em; |
| line-height: 1.15; |
| } |
| |
| .eff-subtitle { |
| max-width: 680px; |
| margin: 6px 0 0; |
| color: var(--ink-soft); |
| font-size: 13.5px; |
| } |
| |
| .eff-controls { |
| display: flex; |
| flex: 0 0 auto; |
| align-items: center; |
| gap: 8px; |
| padding-top: 4px; |
| } |
| |
| .eff-count { |
| display: inline-flex; |
| align-items: center; |
| min-height: 34px; |
| padding: 5px 13px; |
| border: 1px solid var(--edge); |
| border-radius: 999px; |
| color: var(--ink-soft); |
| background: var(--panel); |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| font-size: 12px; |
| font-weight: 600; |
| white-space: nowrap; |
| } |
| |
| .eff-oss { |
| display: inline-flex; |
| align-items: center; |
| gap: 7px; |
| min-height: 34px; |
| padding: 5px 13px; |
| border: 1px dashed var(--edge-strong); |
| border-radius: 8px; |
| color: var(--ink-soft); |
| background: var(--panel); |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| font-size: 12.5px; |
| font-weight: 700; |
| cursor: pointer; |
| transition: background 140ms ease, color 140ms ease, border-color 140ms ease; |
| } |
| |
| .eff-oss .glyph { color: var(--primary); font-weight: 800; } |
| |
| .eff-oss:hover { border-color: var(--primary); color: var(--ink); } |
| |
| .eff-oss:focus-visible { |
| outline: 2px solid var(--primary); |
| outline-offset: 2px; |
| } |
| |
| .eff-oss[aria-pressed="true"] { |
| border-style: solid; |
| border-color: var(--primary-dark); |
| color: #fff; |
| background: var(--primary); |
| } |
| |
| .eff-oss[aria-pressed="true"] .glyph { color: #d7e4d8; } |
| |
| .eff-legend { |
| display: flex; |
| flex-wrap: wrap; |
| align-items: center; |
| gap: 8px 14px; |
| padding: 2px 20px 12px; |
| color: var(--ink-soft); |
| font-size: 13.5px; |
| } |
| |
| .eff-legend-item { |
| display: inline-flex; |
| align-items: center; |
| gap: 7px; |
| white-space: nowrap; |
| } |
| |
| .eff-legend-sep { |
| width: 1px; |
| height: 16px; |
| background: var(--edge-strong); |
| } |
| |
| .eff-legend-button { |
| display: inline-flex; |
| align-items: center; |
| gap: 7px; |
| padding: 3px 9px; |
| border: 1px solid transparent; |
| border-radius: 7px; |
| color: var(--ink-soft); |
| background: transparent; |
| font: inherit; |
| font-size: 13.5px; |
| white-space: nowrap; |
| cursor: pointer; |
| transition: border-color 140ms ease, color 140ms ease, background 140ms ease; |
| } |
| |
| .eff-legend-button:hover { |
| border-color: var(--edge-strong); |
| color: var(--ink); |
| background: var(--panel); |
| } |
| |
| .eff-legend-button:focus-visible { |
| outline: 2px solid var(--primary); |
| outline-offset: 2px; |
| } |
| |
| .eff-legend-button[aria-pressed="true"] { |
| border-color: var(--primary); |
| color: var(--primary-dark); |
| background: var(--primary-soft); |
| font-weight: 700; |
| } |
| |
| .eff-swatch-quad { |
| width: 15px; |
| height: 11px; |
| border: 1px solid rgba(74, 115, 85, 0.35); |
| border-radius: 2px; |
| background: rgba(74, 115, 85, 0.1); |
| } |
| |
| .eff-swatch-pareto { |
| width: 20px; |
| border-top: 2px dotted #6b7263; |
| } |
| |
| .eff-provider-dot { |
| width: 9px; |
| height: 9px; |
| flex: 0 0 auto; |
| border-radius: 50%; |
| background: var(--dot-color); |
| } |
| |
| .eff-provider-logo { |
| display: block; |
| width: 16px; |
| height: 16px; |
| flex: 0 0 auto; |
| } |
| |
| .eff-plot-wrap { |
| position: relative; |
| padding: 0 10px; |
| } |
| |
| #eff-plot { |
| display: block; |
| width: 100%; |
| height: auto; |
| } |
| |
| .eff-tooltip { |
| position: fixed; |
| z-index: 20; |
| max-width: 320px; |
| padding: 12px 14px; |
| border: 1px solid var(--edge-strong); |
| border-radius: 9px; |
| color: var(--ink); |
| background: var(--panel-strong); |
| box-shadow: var(--shadow); |
| font-size: 14px; |
| line-height: 1.5; |
| pointer-events: none; |
| } |
| |
| .eff-tooltip .tt-name { |
| display: flex; |
| align-items: center; |
| gap: 7px; |
| margin-bottom: 2px; |
| font-weight: 750; |
| font-size: 15px; |
| } |
| |
| .eff-tooltip .tt-chip { |
| padding: 1px 6px; |
| border: 1px solid #bed0c0; |
| border-radius: 5px; |
| color: var(--primary-dark); |
| background: var(--primary-soft); |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| font-size: 11px; |
| font-weight: 700; |
| } |
| |
| .eff-tooltip .tt-provider { |
| color: var(--ink-soft); |
| margin-bottom: 6px; |
| } |
| |
| .eff-tooltip .tt-row { |
| display: flex; |
| justify-content: space-between; |
| gap: 18px; |
| } |
| |
| .eff-tooltip .tt-row span:first-child { color: var(--ink-faint); } |
| |
| .eff-tooltip .tt-row span:last-child { |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| font-size: 12.5px; |
| font-weight: 600; |
| } |
| |
| .eff-tooltip .tt-or { |
| margin-top: 6px; |
| padding-top: 6px; |
| border-top: 1px dashed var(--edge); |
| color: var(--ink-faint); |
| font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| font-size: 12px; |
| word-break: break-all; |
| } |
| |
| .eff-foot { |
| display: flex; |
| align-items: center; |
| justify-content: flex-end; |
| gap: 16px; |
| padding: 11px 20px; |
| border-top: 1px solid var(--edge); |
| color: var(--ink-soft); |
| background: #faf7f0; |
| font-size: 12.5px; |
| } |
| |
| .eff-note { margin: 0; text-align: right; } |
| |
| [data-view-panel] { |
| display: flex; |
| flex-direction: column; |
| background: var(--panel); |
| animation: panel-in 240ms ease; |
| } |
| |
| [data-view-panel][hidden] { display: none; } |
| |
| [data-view-panel="performance"] .score-chart-body { |
| background: var(--panel-strong); |
| border-bottom: 1px solid var(--edge); |
| } |
| |
| .score-chart-foot, |
| .eff-foot { margin-top: auto; } |
| |
| @keyframes panel-in { |
| from { opacity: 0.35; transform: translateY(4px); } |
| to { opacity: 1; transform: none; } |
| } |
| |
| .view-switcher { |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| padding: 12px; |
| border-top: 1px solid var(--edge); |
| background: var(--panel); |
| } |
| |
| .view-seg { |
| position: relative; |
| display: grid; |
| grid-template-columns: 1fr 1fr; |
| padding: 4px; |
| border: 1px solid var(--edge-strong); |
| border-radius: 999px; |
| background: #eae4d6; |
| box-shadow: inset 0 1px 3px rgba(59, 69, 56, 0.08); |
| } |
| |
| .view-thumb { |
| position: absolute; |
| top: 4px; |
| left: 4px; |
| width: calc(50% - 4px); |
| height: calc(100% - 8px); |
| border-radius: 999px; |
| background: var(--panel-strong); |
| box-shadow: 0 1px 4px rgba(59, 69, 56, 0.2), 0 0 0 1px rgba(59, 69, 56, 0.06); |
| transition: transform 240ms cubic-bezier(0.22, 0.8, 0.26, 1); |
| will-change: transform; |
| } |
| |
| .view-seg[data-active="efficiency"] .view-thumb { transform: translateX(100%); } |
| |
| .view-button { |
| position: relative; |
| z-index: 1; |
| min-width: 160px; |
| min-height: 38px; |
| padding: 8px 26px; |
| border: 0; |
| border-radius: 999px; |
| color: var(--ink-soft); |
| background: transparent; |
| font: inherit; |
| font-size: 14.5px; |
| font-weight: 700; |
| letter-spacing: -0.005em; |
| cursor: pointer; |
| transition: color 180ms ease; |
| } |
| |
| .view-button:hover { color: var(--ink); } |
| |
| .view-button:focus-visible { |
| outline: 2px solid var(--primary); |
| outline-offset: 2px; |
| } |
| |
| .view-button[aria-pressed="true"] { |
| color: var(--primary-dark); |
| font-weight: 750; |
| } |
| |
| @media (max-width: 860px) { |
| .eff-head { flex-direction: column; gap: 12px; } |
| .eff-controls { padding-top: 0; } |
| .eff-tab { font-size: 11px; padding: 6px 4px; } |
| .eff-tab small { display: none; } |
| .eff-foot { justify-content: flex-start; } |
| .eff-note { text-align: left; } |
| } |
| |
| @media (prefers-reduced-motion: reduce) { |
| *, *::before, *::after { scroll-behavior: auto !important; transition: none !important; } |
| } |
| </style> |
| <style> |
| |
| :root { |
| --pen: #3b4538; |
| --pen-shadow: rgba(59, 69, 56, 0.16); |
| --r1: 255px 15px 225px 15px / 15px 225px 15px 255px; |
| --r2: 15px 225px 15px 255px / 225px 15px 255px 15px; |
| --r3: 125px 10px 115px 10px / 10px 115px 10px 125px; |
| } |
| |
| [data-theme="dark"] { |
| --canvas: #20241d; |
| --panel: #262b21; |
| --panel-strong: #2b3126; |
| --ink: #e9e5d7; |
| --ink-soft: #aab09f; |
| --ink-faint: #7f8474; |
| --edge: #3a4033; |
| --edge-strong: #464d3c; |
| --primary: #82a98d; |
| --primary-dark: #9abea3; |
| --primary-soft: #333f2e; |
| --overall: #e9e5d7; |
| --metric: #8f9484; |
| --shadow: 0 12px 32px rgba(0, 0, 0, 0.35); |
| --pen: #e9e5d7; |
| --pen-shadow: rgba(0, 0, 0, 0.45); |
| } |
| |
| body { |
| background: |
| radial-gradient(circle at 15% 0%, rgba(74, 115, 85, 0.08), transparent 30rem), |
| repeating-linear-gradient(0deg, transparent 0 27px, rgba(74, 115, 85, 0.05) 27px 28px), |
| var(--canvas) !important; |
| } |
| |
| [data-theme="dark"] body { |
| background: |
| radial-gradient(circle at 15% 0%, rgba(130, 169, 141, 0.07), transparent 30rem), |
| repeating-linear-gradient(0deg, transparent 0 27px, rgba(233, 229, 215, 0.04) 27px 28px), |
| var(--canvas) !important; |
| } |
| |
| body::before { |
| content: ""; |
| position: fixed; |
| inset: 0; |
| z-index: 9999; |
| pointer-events: none; |
| opacity: 0.05; |
| mix-blend-mode: multiply; |
| background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)' opacity='0.6'/%3E%3C/svg%3E"); |
| } |
| |
| [data-theme="dark"] body::before { mix-blend-mode: screen; opacity: 0.045; } |
| |
| .brand-mark { |
| border: 2px solid var(--pen); |
| border-radius: var(--r3); |
| box-shadow: 2px 3px 0 var(--pen-shadow); |
| transform: rotate(-4deg); |
| } |
| |
| h1 { |
| text-decoration: underline wavy var(--primary); |
| text-decoration-thickness: 2px; |
| text-underline-offset: 8px; |
| } |
| |
| .button { |
| border: 2px solid var(--pen) !important; |
| border-radius: var(--r2) !important; |
| box-shadow: 2px 3px 0 var(--pen-shadow) !important; |
| transform: rotate(var(--rot, 0deg)); |
| } |
| .actions .button:first-child { --rot: -0.6deg; } |
| .actions .button:last-child { --rot: 0.5deg; } |
| .button:hover, .button:focus-visible { transform: translateY(-1px) rotate(var(--rot, 0deg)); } |
| |
| .score-chart, .leaderboard { |
| border: 2px solid var(--pen) !important; |
| border-radius: var(--r1) !important; |
| box-shadow: 3px 4px 0 var(--pen-shadow), var(--shadow) !important; |
| } |
| |
| .metric-switcher, .view-seg { |
| border: 2px solid var(--pen) !important; |
| border-radius: 999px !important; |
| box-shadow: 2px 3px 0 var(--pen-shadow); |
| } |
| .metric-button, .view-button { border-radius: 999px !important; } |
| |
| .eff-tab { border-radius: var(--r2) !important; } |
| .eff-tab[aria-selected="true"] { border: 2px solid var(--pen) !important; } |
| .eff-oss { |
| border: 2px dashed var(--pen) !important; |
| border-radius: var(--r2) !important; |
| box-shadow: 2px 3px 0 var(--pen-shadow); |
| } |
| .eff-oss[aria-pressed="true"] { border-style: solid !important; } |
| .eff-count { border: 2px dashed var(--pen) !important; } |
| |
| .leaderboard td { border-top: 2px dashed var(--edge-strong) !important; } |
| .rank-mark { |
| border: 2px solid var(--pen); |
| border-radius: 46% 54% 52% 48% / 48% 46% 54% 52%; |
| } |
| .badge { border: 2px dashed var(--pen) !important; border-radius: 999px !important; } |
| |
| .chart-icon i, .chart-grid-line { filter: url(#pen-chart); } |
| #eff-plot circle, #eff-plot line, #eff-plot path, #eff-plot rect { filter: url(#pen-chart); } |
| .score-bars > li { filter: url(#pen-soft); } |
| |
| .eff-tooltip { |
| border: 2px solid var(--pen) !important; |
| border-radius: var(--r2) !important; |
| box-shadow: 3px 4px 0 var(--pen-shadow), var(--shadow) !important; |
| } |
| |
| [data-theme="dark"] #eff-plot { filter: invert(0.86) hue-rotate(180deg); } |
| [data-theme="dark"] .bar-logo { background: color-mix(in srgb, var(--model-color) 10%, #2f352a); } |
| |
| |
| [data-theme="dark"] th { background: #2f352a; } |
| [data-theme="dark"] tbody tr:nth-child(odd) { background: var(--panel-strong); } |
| [data-theme="dark"] tbody tr:nth-child(even) { background: #282e23; } |
| [data-theme="dark"] tbody tr:first-child { background: #2b3729; } |
| [data-theme="dark"] tbody tr:hover { background: #35402e; } |
| [data-theme="dark"] .button { background: rgba(43, 49, 38, 0.72); } |
| [data-theme="dark"] .metric-switcher, |
| [data-theme="dark"] .view-seg { background: #1f231c; } |
| [data-theme="dark"] .score-chart-foot, |
| [data-theme="dark"] .eff-foot { background: var(--panel); } |
| [data-theme="dark"] .logo-wrap { background: #2f352a; } |
| [data-theme="dark"] .rank-mark { background: #3a4033; } |
| [data-theme="dark"] .eff-tab:hover { background: rgba(233, 229, 215, 0.08); } |
| [data-theme="dark"] .chart-error, |
| [data-theme="dark"] .chart-noscript { background: #3a2a26; color: #d8a79f; } |
| |
| .theme-fab { |
| position: fixed; |
| right: 22px; |
| bottom: 22px; |
| z-index: 400; |
| min-height: 50px; |
| padding: 13px 22px; |
| border: 2px solid var(--pen); |
| border-radius: var(--r3); |
| color: #fff; |
| background: var(--primary); |
| font: inherit; |
| font-size: 16px; |
| font-weight: 750; |
| letter-spacing: 0.01em; |
| box-shadow: 3px 4px 0 var(--pen-shadow), 0 10px 26px rgba(0, 0, 0, 0.28); |
| transform: rotate(-1.5deg); |
| cursor: pointer; |
| } |
| .theme-fab:hover, .theme-fab:focus-visible { |
| background: var(--primary-dark); |
| transform: rotate(-1.5deg) translateY(-1px); |
| } |
| |
| |
| .or-thumb { |
| position: fixed; |
| left: 12px; |
| bottom: 12px; |
| z-index: 400; |
| width: 136px; |
| overflow: hidden; |
| background: var(--panel-strong); |
| border: 2px solid var(--pen); |
| border-radius: var(--r2); |
| box-shadow: 3px 4px 0 var(--pen-shadow), var(--shadow); |
| transform: rotate(-1.2deg); |
| cursor: pointer; |
| transition: transform 280ms cubic-bezier(0.22, 1, 0.36, 1), opacity 280ms ease, box-shadow 280ms ease; |
| } |
| .or-thumb:hover, .or-thumb:focus-visible { |
| transform: rotate(0deg) translateY(-3px); |
| box-shadow: 4px 6px 0 var(--pen-shadow), var(--shadow); |
| outline: none; |
| } |
| .or-thumb.away { |
| opacity: 0; |
| transform: scale(0.9) rotate(-1.2deg); |
| pointer-events: none; |
| } |
| .or-thumb-title { |
| padding: 5px 7px 0; |
| color: var(--primary-dark); |
| font-size: 7px; |
| font-weight: 750; |
| letter-spacing: 0.05em; |
| text-transform: uppercase; |
| } |
| #or-thumb-svg { display: block; width: 100%; height: auto; } |
| .or-cta { |
| padding: 1px 7px 6px; |
| color: var(--ink-faint); |
| font-family: var(--mono); |
| font-size: 7px; |
| } |
| |
| .or-backdrop { |
| position: fixed; |
| inset: 0; |
| z-index: 800; |
| background: rgba(59, 69, 56, 0.32); |
| backdrop-filter: blur(2px); |
| opacity: 0; |
| transition: opacity 320ms ease; |
| } |
| .or-backdrop.show { opacity: 1; } |
| |
| .or-modal { |
| position: fixed; |
| left: 22px; |
| bottom: 22px; |
| z-index: 900; |
| width: min(1020px, calc(100vw - 44px)); |
| } |
| .or-panel { |
| overflow: hidden; |
| background: var(--panel-strong); |
| border: 2px solid var(--pen); |
| border-radius: var(--r1); |
| box-shadow: 4px 5px 0 var(--pen-shadow), var(--shadow); |
| opacity: 0; |
| transform: scale(0.32) translateY(60px) rotate(-2deg); |
| transform-origin: left bottom; |
| transition: transform 480ms cubic-bezier(0.22, 1, 0.36, 1), opacity 300ms ease; |
| } |
| .or-modal.show .or-panel { |
| opacity: 1; |
| transform: scale(1) translateY(0) rotate(0deg); |
| } |
| |
| .or-head { |
| display: flex; |
| align-items: center; |
| gap: 14px; |
| padding: 16px 18px 6px; |
| } |
| .or-kicker { |
| margin: 0; |
| color: var(--primary); |
| font-size: 11px; |
| font-weight: 800; |
| letter-spacing: 0.09em; |
| text-transform: uppercase; |
| } |
| .or-title { |
| margin: 2px 0 0; |
| font-family: Georgia, "Times New Roman", serif; |
| font-size: 22px; |
| font-weight: 650; |
| letter-spacing: -0.02em; |
| } |
| .or-switch { |
| display: inline-flex; |
| gap: 2px; |
| margin-left: auto; |
| padding: 3px; |
| border: 2px solid var(--pen); |
| border-radius: 999px; |
| background: var(--panel); |
| box-shadow: 2px 3px 0 var(--pen-shadow); |
| } |
| .or-io { |
| min-width: 56px; |
| padding: 4px 14px; |
| border: 0; |
| border-radius: 999px; |
| color: var(--ink-soft); |
| background: transparent; |
| font: inherit; |
| font-size: 14px; |
| font-weight: 750; |
| cursor: pointer; |
| } |
| .or-io[aria-selected="true"] { color: #fff; background: var(--primary); } |
| |
| .or-close { |
| width: 32px; |
| height: 32px; |
| flex: 0 0 auto; |
| border: 2px solid var(--pen); |
| border-radius: 46% 54% 52% 48% / 48% 46% 54% 52%; |
| color: var(--ink); |
| background: transparent; |
| font-size: 19px; |
| line-height: 1; |
| cursor: pointer; |
| transition: background 140ms ease; |
| } |
| .or-close:hover { background: var(--primary-soft); } |
| |
| #or-chart { display: block; width: 100%; height: auto; } |
| .or-note { |
| margin: 2px 18px 14px; |
| color: var(--ink-faint); |
| font-size: 12.5px; |
| } |
| |
| </style> |
| </head> |
| <body> |
| <main class="page"> |
| <header class="hero"> |
| <div> |
| <div class="brand"> |
| <div class="brand-mark" aria-hidden="true">A</div> |
| <div> |
| <p class="eyebrow">AutoMedBench Lite</p> |
| <h1>Leaderboard</h1> |
| </div> |
| </div> |
| <p class="subtitle">Average model performance across all seven released Lite tracks.</p> |
| </div> |
| <nav class="actions" aria-label="Related links"> |
| <a class="button" href="https://huggingface.co/datasets/MitakaKuma/AutoMedBench-Lite-release" target="_blank" rel="noreferrer">Dataset</a> |
| <a class="button" href="https://automedbench.github.io/" target="_blank" rel="noreferrer">Project</a> |
| </nav> |
| </header> |
|
|
| <section class="score-chart" data-score-chart data-active-metric="overall" aria-labelledby="score-chart-title"> |
| <div data-view-panel="performance"> |
| <div class="score-chart-head"> |
| <div class="score-chart-copy"> |
| <p class="score-chart-kicker">7-track average</p> |
| <h2 id="score-chart-title">Model score comparison</h2> |
| <p class="score-chart-subtitle" id="score-chart-description">Compare every model on the same 0–100 scale. Model-colored columns are generated directly from the leaderboard values below.</p> |
| </div> |
| <div class="metric-switcher" role="group" aria-label="Chart metric"> |
| <button class="metric-button" type="button" data-metric="overall" aria-pressed="true">Overall</button> |
| <button class="metric-button" type="button" data-metric="agentic" aria-pressed="false">Agentic</button> |
| <button class="metric-button" type="button" data-metric="task" aria-pressed="false">Task</button> |
| </div> |
| </div> |
| <div class="score-chart-body"> |
| <div class="column-chart-scroll" data-chart-scroll tabindex="0" aria-label="Model score column chart"> |
| <div class="column-chart-frame" data-column-chart style="--model-count: 1"> |
| <span class="chart-y-title" aria-hidden="true">Score</span> |
| <span class="chart-y-axis" aria-hidden="true"><span>100</span><span>75</span><span>50</span><span>25</span><span>0</span></span> |
| <span class="chart-grid" aria-hidden="true"><i class="chart-grid-line"></i><i class="chart-grid-line"></i><i class="chart-grid-line"></i><i class="chart-grid-line"></i><i class="chart-grid-line"></i></span> |
| <ol class="score-bars" data-score-bars aria-describedby="score-chart-description"></ol> |
| <span class="chart-x-title" aria-hidden="true">Model</span> |
| </div> |
| </div> |
| <p class="chart-scroll-hint" data-chart-scroll-hint hidden>Scroll horizontally to compare every model.</p> |
| <p class="sr-only" data-chart-status aria-live="polite"></p> |
| <noscript><p class="chart-noscript">The interactive chart requires JavaScript. The complete scores remain available in the leaderboard table below.</p></noscript> |
| </div> |
| <div class="score-chart-foot"> |
| <span data-chart-caption><strong>Overall</strong> = 1/2 Agentic + 1/2 Task</span> |
| <span class="chart-scale-note">Muted model colors · Higher is better · 0–100</span> |
| </div> |
| </div> |
|
|
| <div data-view-panel="efficiency" hidden> |
| <div class="eff-tabbar" role="tablist" aria-label="Efficiency metric"> |
| <button class="eff-tab" role="tab" data-eff-metric="cost" aria-selected="true"><small>Overall vs.</small>Cost per Task</button> |
| <button class="eff-tab" role="tab" data-eff-metric="time" aria-selected="false"><small>Overall vs.</small>Time per Task</button> |
| <button class="eff-tab" role="tab" data-eff-metric="tokens" aria-selected="false"><small>Overall vs.</small>Tokens per Task</button> |
| <button class="eff-tab" role="tab" data-eff-metric="turns" aria-selected="false"><small>Overall vs.</small>Turns per Task</button> |
| </div> |
| <div class="eff-head"> |
| <div class="eff-copy"> |
| <p class="score-chart-kicker">7-track average</p> |
| <h2 class="eff-title" id="eff-title">Overall score vs. Cost per Task</h2> |
| <p class="eff-subtitle" id="eff-subtitle"></p> |
| </div> |
| <div class="eff-controls"> |
| <span class="eff-count" id="eff-count">28 of 28 models</span> |
| <button class="eff-oss" id="eff-oss" type="button" aria-pressed="false" title="Show only open-weight models"><span class="glyph"></></span>Open Source Only</button> |
| </div> |
| </div> |
| <div class="eff-legend" id="eff-legend"> |
| <span class="eff-legend-item"><i class="eff-swatch-quad" aria-hidden="true"></i>Most attractive quadrant</span> |
| <span class="eff-legend-item"><i class="eff-swatch-pareto" aria-hidden="true"></i>Pareto line</span> |
| <span class="eff-legend-sep" aria-hidden="true"></span> |
| </div> |
| <div class="eff-plot-wrap"> |
| <svg id="eff-plot" viewBox="0 0 1120 440" role="img" aria-label="Scatter plot of overall score against per-task efficiency metric"></svg> |
| <div class="eff-tooltip" id="eff-tooltip" hidden></div> |
| </div> |
| <div class="eff-foot"> |
| <p class="eff-note" id="eff-note"></p> |
| </div> |
| </div> |
|
|
| <div class="view-switcher"> |
| <div class="view-seg" role="group" aria-label="Chart view" data-active="performance"> |
| <span class="view-thumb" aria-hidden="true"></span> |
| <button class="view-button" type="button" data-view="performance" aria-pressed="true">Performance</button> |
| <button class="view-button" type="button" data-view="efficiency" aria-pressed="false">Efficiency</button> |
| </div> |
| </div> |
| </section> |
|
|
| <section class="leaderboard" aria-labelledby="leaderboard-title"> |
| <div class="leaderboard-head"> |
| <div class="leaderboard-title"> |
| <span class="chart-icon" aria-hidden="true"><i></i><i></i><i></i></span> |
| <span id="leaderboard-title">Leaderboard</span> |
| <span class="badge">7-track average</span> |
| </div> |
| <div class="formula"><strong>Overall</strong> = 1/2 Agentic + 1/2 Task</div> |
| </div> |
|
|
| <div class="table-scroll"> |
| <table> |
| <thead> |
| <tr> |
| <th class="rank" scope="col">Rank</th> |
| <th class="model" scope="col">Model</th> |
| <th class="parameter" scope="col">Parameter size</th> |
| <th class="release" scope="col">Release</th> |
| <th class="score" scope="col">Overall</th> |
| <th class="score" scope="col">Agentic</th> |
| <th class="score" scope="col">Task</th> |
| <th class="operational" scope="col">Avg cost</th> |
| <th class="operational" scope="col">Avg time</th> |
| <th class="operational" scope="col">Avg turns</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="rank"><span class="rank-mark">1</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/anthropic.svg" alt="Anthropic logo"></span> |
| <span class="model-copy"><span class="model-name">Claude Opus 4.8</span><span class="provider">Anthropic</span></span> |
| </div> |
| </td> |
| <td class="parameter"><code class="free-cost">undisclosed</code></td> |
| <td class="release"><a class="release-link" href="https://www.anthropic.com/news/claude-opus-4-8" target="_blank" rel="noreferrer">2026-05-28</a></td> |
| <td class="score overall">81.94</td> |
| <td class="score">88.10</td> |
| <td class="score">75.77</td> |
| <td class="operational" title="Price source: OpenRouter">$2.14</td> |
| <td class="operational">14.5 min</td> |
| <td class="operational">18.7</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">2</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/anthropic.svg" alt="Anthropic logo"></span> |
| <span class="model-copy"><span class="model-name">Claude Opus 4.6</span><span class="provider">Anthropic</span></span> |
| </div> |
| </td> |
| <td class="parameter"><code class="free-cost">undisclosed</code></td> |
| <td class="release"><a class="release-link" href="https://www.anthropic.com/news/claude-opus-4-6" target="_blank" rel="noreferrer">2026-02-05</a></td> |
| <td class="score overall">77.23</td> |
| <td class="score">89.10</td> |
| <td class="score">65.36</td> |
| <td class="operational" title="Price source: OpenRouter">$6.57</td> |
| <td class="operational">18.2 min</td> |
| <td class="operational">18.3</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">3</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/gemini.svg" alt="Google Gemini logo"></span> |
| <span class="model-copy"><span class="model-name">Gemini 3.1 Pro</span><span class="provider">Google</span></span> |
| </div> |
| </td> |
| <td class="parameter"><code class="free-cost">undisclosed</code></td> |
| <td class="release"><a class="release-link" href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-pro/" target="_blank" rel="noreferrer">2026-02-19</a></td> |
| <td class="score overall">75.21</td> |
| <td class="score">83.49</td> |
| <td class="score">66.93</td> |
| <td class="operational" title="Price source: OpenRouter">$3.85</td> |
| <td class="operational">18.0 min</td> |
| <td class="operational">18.1</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">4</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/openai.svg" alt="OpenAI logo"></span> |
| <span class="model-copy"><span class="model-name">GPT-5.6 Sol</span><span class="provider">OpenAI</span></span> |
| </div> |
| </td> |
| <td class="parameter"><code class="free-cost">undisclosed</code></td> |
| <td class="release"><a class="release-link" href="https://openai.com/index/gpt-5-6/" target="_blank" rel="noreferrer">2026-07-09</a></td> |
| <td class="score overall">75.05</td> |
| <td class="score">80.09</td> |
| <td class="score">70.01</td> |
| <td class="operational" title="Price source: OpenRouter">$0.95</td> |
| <td class="operational">10.8 min</td> |
| <td class="operational">11.7</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">5</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/anthropic.svg" alt="Anthropic logo"></span> |
| <span class="model-copy"><span class="model-name">Claude Sonnet 5</span><span class="provider">Anthropic</span></span> |
| </div> |
| </td> |
| <td class="parameter"><code class="free-cost">undisclosed</code></td> |
| <td class="release"><a class="release-link" href="https://www.anthropic.com/news/claude-sonnet-5" target="_blank" rel="noreferrer">2026-06-30</a></td> |
| <td class="score overall">75.04</td> |
| <td class="score">80.53</td> |
| <td class="score">69.53</td> |
| <td class="operational" title="Price source: OpenRouter">$2.29</td> |
| <td class="operational">15.1 min</td> |
| <td class="operational">30.5</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">6</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/openai.svg" alt="OpenAI logo"></span> |
| <span class="model-copy"><span class="model-name">GPT-5.5</span><span class="provider">OpenAI</span></span> |
| </div> |
| </td> |
| <td class="parameter"><code class="free-cost">undisclosed</code></td> |
| <td class="release"><a class="release-link" href="https://openai.com/index/introducing-gpt-5-5/" target="_blank" rel="noreferrer">2026-04-23</a></td> |
| <td class="score overall">74.14</td> |
| <td class="score">85.38</td> |
| <td class="score">62.90</td> |
| <td class="operational" title="Price source: OpenRouter">$1.90</td> |
| <td class="operational">20.5 min</td> |
| <td class="operational">15.4</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">7</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/zai.svg" alt="Z.ai logo"></span> |
| <span class="model-copy"><span class="model-name">GLM-5</span><span class="provider">Z.ai</span></span> |
| </div> |
| </td> |
| <td class="parameter">744B</td> |
| <td class="release"><a class="release-link" href="https://z.ai/blog/glm-5?id=GLM5" target="_blank" rel="noreferrer">2026-02-12</a></td> |
| <td class="score overall">72.86</td> |
| <td class="score">89.35</td> |
| <td class="score">56.38</td> |
| <td class="operational" title="Price source: OpenRouter">$1.29</td> |
| <td class="operational">17.8 min</td> |
| <td class="operational">31.3</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">8</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/deepseek.svg" alt="DeepSeek logo"></span> |
| <span class="model-copy"><span class="model-name">DeepSeek V4 Pro</span><span class="provider">DeepSeek</span></span> |
| </div> |
| </td> |
| <td class="parameter">1.6T</td> |
| <td class="release"><a class="release-link" href="https://api-docs.deepseek.com/news/news260424/" target="_blank" rel="noreferrer">2026-04-24</a></td> |
| <td class="score overall">72.43</td> |
| <td class="score">81.34</td> |
| <td class="score">63.51</td> |
| <td class="operational" title="Price source: OpenRouter">$0.30</td> |
| <td class="operational">18.3 min</td> |
| <td class="operational">24.6</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">9</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/qwen.svg" alt="Qwen logo"></span> |
| <span class="model-copy"><span class="model-name">Qwen3.5-397B</span><span class="provider">Alibaba Cloud</span></span> |
| </div> |
| </td> |
| <td class="parameter">397B</td> |
| <td class="release"><a class="release-link" href="https://qwen.ai/blog?id=qwen3.5" target="_blank" rel="noreferrer">2026-02-15</a></td> |
| <td class="score overall">69.87</td> |
| <td class="score">80.46</td> |
| <td class="score">59.27</td> |
| <td class="operational" title="Price source: OpenRouter">$1.01</td> |
| <td class="operational">20.8 min</td> |
| <td class="operational">25.1</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">10</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/openai.svg" alt="OpenAI logo"></span> |
| <span class="model-copy"><span class="model-name">GPT-5.6 Terra</span><span class="provider">OpenAI</span></span> |
| </div> |
| </td> |
| <td class="parameter"><code class="free-cost">undisclosed</code></td> |
| <td class="release"><a class="release-link" href="https://openai.com/index/gpt-5-6/" target="_blank" rel="noreferrer">2026-07-09</a></td> |
| <td class="score overall">68.29</td> |
| <td class="score">74.05</td> |
| <td class="score">62.53</td> |
| <td class="operational" title="Price source: OpenRouter">$0.45</td> |
| <td class="operational">10.7 min</td> |
| <td class="operational">10.2</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">11</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/minimax.svg" alt="MiniMax logo"></span> |
| <span class="model-copy"><span class="model-name">MiniMax M2.5</span><span class="provider">MiniMax</span></span> |
| </div> |
| </td> |
| <td class="parameter">230B</td> |
| <td class="release"><a class="release-link" href="https://www.minimax.io/news/minimax-m25" target="_blank" rel="noreferrer">2026-02-12</a></td> |
| <td class="score overall">66.31</td> |
| <td class="score">77.71</td> |
| <td class="score">54.91</td> |
| <td class="operational" title="Price source: OpenRouter">$1.36</td> |
| <td class="operational">20.6 min</td> |
| <td class="operational">28.5</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">12</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/openai.svg" alt="OpenAI logo"></span> |
| <span class="model-copy"><span class="model-name">GPT-5.4</span><span class="provider">OpenAI</span></span> |
| </div> |
| </td> |
| <td class="parameter"><code class="free-cost">undisclosed</code></td> |
| <td class="release"><a class="release-link" href="https://openai.com/index/introducing-gpt-5-4/" target="_blank" rel="noreferrer">2026-03-05</a></td> |
| <td class="score overall">66.09</td> |
| <td class="score">76.76</td> |
| <td class="score">55.43</td> |
| <td class="operational" title="Price source: OpenRouter">$2.36</td> |
| <td class="operational">16.7 min</td> |
| <td class="operational">10.4</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">13</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/qwen.svg" alt="Qwen logo"></span> |
| <span class="model-copy"><span class="model-name">Qwen3.6-27B</span><span class="provider">Alibaba Cloud</span></span> |
| </div> |
| </td> |
| <td class="parameter">27B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/Qwen/Qwen3.6-27B" target="_blank" rel="noreferrer">2026-04-21</a></td> |
| <td class="score overall">65.29</td> |
| <td class="score">73.27</td> |
| <td class="score">57.30</td> |
| <td class="operational"><code class="free-cost">free</code></td> |
| <td class="operational">23.0 min</td> |
| <td class="operational">32.0</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">14</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/openai.svg" alt="OpenAI logo"></span> |
| <span class="model-copy"><span class="model-name">GPT-5.6 Luna</span><span class="provider">OpenAI</span></span> |
| </div> |
| </td> |
| <td class="parameter"><code class="free-cost">undisclosed</code></td> |
| <td class="release"><a class="release-link" href="https://openai.com/index/gpt-5-6/" target="_blank" rel="noreferrer">2026-07-09</a></td> |
| <td class="score overall">63.98</td> |
| <td class="score">70.77</td> |
| <td class="score">57.20</td> |
| <td class="operational" title="Price source: OpenRouter">$0.21</td> |
| <td class="operational">8.9 min</td> |
| <td class="operational">13.4</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">15</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/qwen.svg" alt="Qwen logo"></span> |
| <span class="model-copy"><span class="model-name">Qwen3.5-35B-A3B</span><span class="provider">Alibaba Cloud</span></span> |
| </div> |
| </td> |
| <td class="parameter">35B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/Qwen/Qwen3.5-35B-A3B" target="_blank" rel="noreferrer">2026-02-24</a></td> |
| <td class="score overall">57.94</td> |
| <td class="score">68.91</td> |
| <td class="score">46.97</td> |
| <td class="operational"><code class="free-cost">free</code></td> |
| <td class="operational">28.4 min</td> |
| <td class="operational">30.5</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">16</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/zai.svg" alt="Z.ai logo"></span> |
| <span class="model-copy"><span class="model-name">GLM-5.2</span><span class="provider">Z.ai</span></span> |
| </div> |
| </td> |
| <td class="parameter">753B</td> |
| <td class="release"><a class="release-link" href="https://z.ai/blog/glm-5.2" target="_blank" rel="noreferrer">2026-06-16</a></td> |
| <td class="score overall">56.32</td> |
| <td class="score">64.39</td> |
| <td class="score">48.24</td> |
| <td class="operational" title="Price source: OpenRouter">$0.73</td> |
| <td class="operational">15.7 min</td> |
| <td class="operational">28.6</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">17</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/nvidia.svg" alt="NVIDIA logo"></span> |
| <span class="model-copy"><span class="model-name">Nemotron 3.5 Lightning 30B-A3B</span><span class="provider">NVIDIA</span></span> |
| </div> |
| </td> |
| <td class="parameter">30B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4" target="_blank" rel="noreferrer">2026-08-11</a></td> |
| <td class="score overall">39.65</td> |
| <td class="score">46.93</td> |
| <td class="score">32.38</td> |
| <td class="operational" title="Price source: OpenRouter">$0.09</td> |
| <td class="operational">14.3 min</td> |
| <td class="operational">42.5</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">18</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/google.svg" alt="Google logo"></span> |
| <span class="model-copy"><span class="model-name">Gemma 4 26B-A4B</span><span class="provider">Google</span></span> |
| </div> |
| </td> |
| <td class="parameter">26B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/google/gemma-4-26B-A4B-it" target="_blank" rel="noreferrer">2026-03-11</a></td> |
| <td class="score overall">33.89</td> |
| <td class="score">39.63</td> |
| <td class="score">33.97</td> |
| <td class="operational" title="Price source: OpenRouter">$0.05</td> |
| <td class="operational">17.3 min</td> |
| <td class="operational">14.8</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">19</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/google.svg" alt="Google logo"></span> |
| <span class="model-copy"><span class="model-name">Gemma 4 31B</span><span class="provider">Google</span></span> |
| </div> |
| </td> |
| <td class="parameter">31B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/google/gemma-4-31B-it" target="_blank" rel="noreferrer">2026-03-11</a></td> |
| <td class="score overall">30.43</td> |
| <td class="score">35.14</td> |
| <td class="score">31.79</td> |
| <td class="operational" title="Price source: OpenRouter">$0.02</td> |
| <td class="operational">27.9 min</td> |
| <td class="operational">8.1</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">20</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/openai.svg" alt="OpenAI logo"></span> |
| <span class="model-copy"><span class="model-name">GPT-OSS-120B</span><span class="provider">OpenAI</span></span> |
| </div> |
| </td> |
| <td class="parameter">117B</td> |
| <td class="release"><a class="release-link" href="https://openai.com/index/introducing-gpt-oss/" target="_blank" rel="noreferrer">2025-08-05</a></td> |
| <td class="score overall">24.33</td> |
| <td class="score">35.35</td> |
| <td class="score">13.31</td> |
| <td class="operational" title="Price source: OpenRouter">$0.00</td> |
| <td class="operational">4.4 min</td> |
| <td class="operational">9.4</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">21</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/google.svg" alt="Google logo"></span> |
| <span class="model-copy"><span class="model-name">Gemma 4 12B</span><span class="provider">Google</span></span> |
| </div> |
| </td> |
| <td class="parameter">12B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/google/gemma-4-12B-it" target="_blank" rel="noreferrer">2026-05-23</a></td> |
| <td class="score overall">22.43</td> |
| <td class="score">20.19</td> |
| <td class="score">36.78</td> |
| <td class="operational" title="Price source: OpenRouter">$0.02</td> |
| <td class="operational">24.0 min</td> |
| <td class="operational">17.1</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">22</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/google.svg" alt="Google logo"></span> |
| <span class="model-copy"><span class="model-name">Gemma 4 E4B</span><span class="provider">Google</span></span> |
| </div> |
| </td> |
| <td class="parameter">8B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/google/gemma-4-E4B-it" target="_blank" rel="noreferrer">2026-03-02</a></td> |
| <td class="score overall">21.94</td> |
| <td class="score">26.17</td> |
| <td class="score">19.61</td> |
| <td class="operational" title="Price source: OpenRouter">$0.01</td> |
| <td class="operational">7.4 min</td> |
| <td class="operational">6.8</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">23</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/qwen.svg" alt="Qwen logo"></span> |
| <span class="model-copy"><span class="model-name">Qwen3.5-9B</span><span class="provider">Alibaba Cloud</span></span> |
| </div> |
| </td> |
| <td class="parameter">9B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/Qwen/Qwen3.5-9B" target="_blank" rel="noreferrer">2026-02-27</a></td> |
| <td class="score overall">19.87</td> |
| <td class="score">11.33</td> |
| <td class="score">28.41</td> |
| <td class="operational"><code class="free-cost">free</code></td> |
| <td class="operational">19.3 min</td> |
| <td class="operational">52.4</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">24</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/nvidia.svg" alt="NVIDIA logo"></span> |
| <span class="model-copy"><span class="model-name">Nemotron Nano 9B v2</span><span class="provider">NVIDIA</span></span> |
| </div> |
| </td> |
| <td class="parameter">9B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/nvidia/NVIDIA-Nemotron-Nano-9B-v2" target="_blank" rel="noreferrer">2025-08-18</a></td> |
| <td class="score overall">18.68</td> |
| <td class="score">24.52</td> |
| <td class="score">12.84</td> |
| <td class="operational"><code class="free-cost">free</code></td> |
| <td class="operational">12.0 min</td> |
| <td class="operational">22.8</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">25</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/nvidia.svg" alt="NVIDIA logo"></span> |
| <span class="model-copy"><span class="model-name">Nemotron 3 Nano 30B-A3B</span><span class="provider">NVIDIA</span></span> |
| </div> |
| </td> |
| <td class="parameter">30B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16" target="_blank" rel="noreferrer">2025-12-04</a></td> |
| <td class="score overall">18.01</td> |
| <td class="score">25.54</td> |
| <td class="score">13.46</td> |
| <td class="operational" title="Price source: OpenRouter">$0.02</td> |
| <td class="operational">2.5 min</td> |
| <td class="operational">16.3</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">26</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/openai.svg" alt="OpenAI logo"></span> |
| <span class="model-copy"><span class="model-name">GPT-OSS-20B</span><span class="provider">OpenAI</span></span> |
| </div> |
| </td> |
| <td class="parameter">21B</td> |
| <td class="release"><a class="release-link" href="https://openai.com/index/introducing-gpt-oss/" target="_blank" rel="noreferrer">2025-08-05</a></td> |
| <td class="score overall">17.63</td> |
| <td class="score">25.33</td> |
| <td class="score">9.93</td> |
| <td class="operational" title="Price source: OpenRouter">$0.00</td> |
| <td class="operational">2.7 min</td> |
| <td class="operational">5.1</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">27</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/nvidia.svg" alt="NVIDIA logo"></span> |
| <span class="model-copy"><span class="model-name">Nemotron 3 Nano 4B</span><span class="provider">NVIDIA</span></span> |
| </div> |
| </td> |
| <td class="parameter">4B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-4B-BF16" target="_blank" rel="noreferrer">2026-03-07</a></td> |
| <td class="score overall">9.06</td> |
| <td class="score">18.12</td> |
| <td class="score">0.00</td> |
| <td class="operational" title="Price source: OpenRouter">$0.01</td> |
| <td class="operational">5.9 min</td> |
| <td class="operational">9.7</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">28</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/google.svg" alt="Google logo"></span> |
| <span class="model-copy"><span class="model-name">Gemma 4 E2B</span><span class="provider">Google</span></span> |
| </div> |
| </td> |
| <td class="parameter">2B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/google/gemma-4-E2B-it" target="_blank" rel="noreferrer">2026-03-02</a></td> |
| <td class="score overall">9.02</td> |
| <td class="score">18.04</td> |
| <td class="score">0.00</td> |
| <td class="operational" title="Price source: OpenRouter">$0.02</td> |
| <td class="operational">4.3 min</td> |
| <td class="operational">18.9</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">29</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/mistral.svg" alt="Mistral AI logo"></span> |
| <span class="model-copy"><span class="model-name">Mistral 7B Instruct v0.3</span><span class="provider">Mistral AI</span></span> |
| </div> |
| </td> |
| <td class="parameter">7B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3" target="_blank" rel="noreferrer">2024-05-22</a></td> |
| <td class="score overall">6.80</td> |
| <td class="score">13.50</td> |
| <td class="score">0.00</td> |
| <td class="operational">$0.00</td> |
| <td class="operational">1.5 min</td> |
| <td class="operational">2.7</td> |
| </tr> |
| <tr> |
| <td class="rank"><span class="rank-mark">30</span></td> |
| <td class="model"> |
| <div class="model-cell"> |
| <span class="logo-wrap"><img class="company-logo" src="assets/qwen.svg" alt="Qwen logo"></span> |
| <span class="model-copy"><span class="model-name">Qwen3.5-4B</span><span class="provider">Alibaba Cloud</span></span> |
| </div> |
| </td> |
| <td class="parameter">4B</td> |
| <td class="release"><a class="release-link" href="https://huggingface.co/Qwen/Qwen3.5-4B" target="_blank" rel="noreferrer">2026-02-27</a></td> |
| <td class="score overall">6.05</td> |
| <td class="score">12.10</td> |
| <td class="score">0.00</td> |
| <td class="operational"><code class="free-cost">free</code></td> |
| <td class="operational">13.6 min</td> |
| <td class="operational">72.6</td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
|
|
| <footer class="leaderboard-foot"> |
| <p class="tracks">Classification · Synthesis · Detection · Segmentation · VQA · Report Generation · Enhancement</p> |
| <a class="source" href="https://automedbench.github.io/" target="_blank" rel="noreferrer">Score source -></a> |
| </footer> |
| </section> |
|
|
| </main> |
| <script> |
| (() => { |
| const chart = document.querySelector("[data-score-chart]"); |
| const table = document.querySelector(".leaderboard table"); |
| if (!chart || !table) return; |
| |
| const bars = chart.querySelector("[data-score-bars]"); |
| const columnChart = chart.querySelector("[data-column-chart]"); |
| const scroller = chart.querySelector("[data-chart-scroll]"); |
| const scrollHint = chart.querySelector("[data-chart-scroll-hint]"); |
| const status = chart.querySelector("[data-chart-status]"); |
| const caption = chart.querySelector("[data-chart-caption]"); |
| const buttons = Array.from(chart.querySelectorAll("[data-metric]")); |
| const metricLabels = { |
| overall: "Overall", |
| agentic: "Agentic", |
| task: "Task" |
| }; |
| const metricCaptions = { |
| overall: "<strong>Overall</strong> = 1/2 Agentic + 1/2 Task", |
| agentic: "<strong>Agentic</strong> measures the Plan → Setup → Validate → Inference → Submit workflow", |
| task: "<strong>Task</strong> measures final benchmark output quality" |
| }; |
| const modelColors = new Map([ |
| ["claude opus 4.8", "#b98272"], |
| ["claude opus 4.6", "#c0917f"], |
| ["claude sonnet 5", "#c9a08f"], |
| ["gemini 3.1 pro", "#829b84"], |
| ["gpt-5.6 sol", "#788b84"], |
| ["gpt-5.5", "#87968f"], |
| ["gpt-5.6 terra", "#96a29a"], |
| ["gpt-5.4", "#8f9188"], |
| ["chatgpt 5.4", "#8f9188"], |
| ["gpt-5.6 luna", "#a2aaa3"], |
| ["gpt-oss-120b", "#777f79"], |
| ["glm-5", "#7d95a7"], |
| ["glm-5.2", "#91a5b2"], |
| ["deepseek v4 pro", "#858ca5"], |
| ["qwen3.5-397b", "#b8896c"], |
| ["qwen3.6-27b", "#bd9477"], |
| ["qwen3.5-35b-a3b", "#c2a083"], |
| ["qwen3.5-9b", "#aa8f7c"], |
| ["qwen3.5-4b", "#9e8574"], |
| ["qwen3.5", "#b47f62"], |
| ["minimax m2.5", "#9d8794"] |
| ]); |
| const familyPalette = [ |
| { match: /anthropic|claude/i, color: "#bd907d" }, |
| { match: /openai|chatgpt|gpt-/i, color: "#858e87" }, |
| { match: /google|gemini/i, color: "#8da28e" }, |
| { match: /z\.ai|glm-/i, color: "#8ca1af" }, |
| { match: /deepseek/i, color: "#8d93a8" }, |
| { match: /alibaba|qwen/i, color: "#b99a7c" }, |
| { match: /minimax/i, color: "#a18d99" } |
| ]; |
| const fallbackColors = ["#9a8fa2", "#899da0", "#a29b84", "#a78e86", "#8f99a6"]; |
| |
| const modelColor = (name, provider) => { |
| const exactColor = modelColors.get(name.toLowerCase()); |
| if (exactColor) return exactColor; |
| const identity = `${name} ${provider}`; |
| const paletteMatch = familyPalette.find(({ match }) => match.test(identity)); |
| if (paletteMatch) return paletteMatch.color; |
| const hash = Array.from(identity).reduce( |
| (total, character) => (total * 31 + character.charCodeAt(0)) >>> 0, |
| 0 |
| ); |
| return fallbackColors[hash % fallbackColors.length]; |
| }; |
| |
| const updateScrollState = () => { |
| const scrollable = scroller.scrollWidth > scroller.clientWidth + 1; |
| scrollHint.hidden = !scrollable; |
| scroller.setAttribute( |
| "aria-label", |
| scrollable |
| ? "Model score column chart. Scroll horizontally to compare every model." |
| : "Model score column chart." |
| ); |
| }; |
| |
| const showError = (message) => { |
| bars.replaceChildren(); |
| const error = document.createElement("p"); |
| error.className = "chart-error"; |
| error.textContent = message; |
| bars.replaceWith(error); |
| }; |
| |
| try { |
| const headers = Array.from(table.querySelectorAll("thead th")).map((header) => |
| header.textContent.trim().toLowerCase() |
| ); |
| const indexes = Object.fromEntries( |
| Object.keys(metricLabels).map((metric) => [metric, headers.indexOf(metric)]) |
| ); |
| if (Object.values(indexes).some((index) => index < 0)) { |
| throw new Error("Required score columns were not found."); |
| } |
| |
| const models = Array.from(table.querySelectorAll("tbody tr")).map((row, originalIndex) => { |
| const cells = Array.from(row.cells); |
| const name = row.querySelector(".model-name")?.textContent.trim(); |
| const provider = row.querySelector(".provider")?.textContent.trim() || "Model provider"; |
| const logo = row.querySelector(".company-logo"); |
| if (!name || !logo) throw new Error("A leaderboard row is missing its model name or icon."); |
| |
| const scores = Object.fromEntries( |
| Object.entries(indexes).map(([metric, index]) => { |
| const value = Number.parseFloat(cells[index]?.textContent.trim()); |
| if (!Number.isFinite(value) || value < 0 || value > 100) { |
| throw new Error(`Invalid ${metric} score for ${name}.`); |
| } |
| return [metric, value]; |
| }) |
| ); |
| |
| return { |
| name, |
| provider, |
| logoSrc: logo.getAttribute("src"), |
| logoAlt: logo.getAttribute("alt") || "", |
| originalIndex, |
| color: modelColor(name, provider), |
| scores |
| }; |
| }); |
| |
| if (!models.length) throw new Error("No leaderboard models were found."); |
| |
| const render = (metric) => { |
| if (!metricLabels[metric]) return; |
| chart.dataset.activeMetric = metric; |
| buttons.forEach((button) => { |
| button.setAttribute("aria-pressed", String(button.dataset.metric === metric)); |
| }); |
| |
| const ranked = [...models].sort( |
| (a, b) => b.scores[metric] - a.scores[metric] || a.originalIndex - b.originalIndex |
| ); |
| const fragment = document.createDocumentFragment(); |
| columnChart.style.setProperty("--model-count", ranked.length); |
| |
| ranked.forEach((model, index) => { |
| const rank = index + 1; |
| const score = model.scores[metric]; |
| const item = document.createElement("li"); |
| item.className = "score-bar-row"; |
| item.style.setProperty("--score", score.toFixed(2)); |
| item.style.setProperty("--model-color", model.color); |
| item.dataset.modelColor = model.color; |
| item.title = `${model.name} · ${metricLabels[metric]} ${score.toFixed(2)}`; |
| item.setAttribute( |
| "aria-label", |
| `${rank}. ${model.name} by ${model.provider}, ${metricLabels[metric]} score ${score.toFixed(2)} out of 100` |
| ); |
| |
| const rankMark = document.createElement("span"); |
| rankMark.className = "bar-rank"; |
| rankMark.textContent = rank; |
| |
| const columnSlot = document.createElement("span"); |
| columnSlot.className = "bar-column-slot"; |
| |
| const stack = document.createElement("span"); |
| stack.className = "bar-stack"; |
| |
| const fill = document.createElement("span"); |
| fill.className = "bar-fill"; |
| fill.setAttribute("aria-hidden", "true"); |
| |
| const value = document.createElement("span"); |
| value.className = "bar-value"; |
| value.textContent = score.toFixed(2); |
| |
| stack.append(fill, value); |
| columnSlot.append(stack); |
| |
| const modelCell = document.createElement("span"); |
| modelCell.className = "bar-model"; |
| |
| const logoWrap = document.createElement("span"); |
| logoWrap.className = "bar-logo"; |
| logoWrap.setAttribute("aria-hidden", "true"); |
| |
| const logo = document.createElement("img"); |
| logo.src = new URL(model.logoSrc, document.baseURI).href; |
| logo.alt = ""; |
| logo.addEventListener("error", () => logo.classList.add("is-missing"), { once: true }); |
| |
| const modelCopy = document.createElement("span"); |
| modelCopy.className = "bar-model-copy"; |
| |
| const modelName = document.createElement("span"); |
| modelName.className = "bar-model-name"; |
| modelName.textContent = model.name; |
| |
| const provider = document.createElement("span"); |
| provider.className = "bar-provider"; |
| provider.textContent = model.provider; |
| |
| logoWrap.append(logo); |
| modelCopy.append(modelName, provider); |
| modelCell.append(logoWrap, modelCopy); |
| item.append(rankMark, columnSlot, modelCell); |
| fragment.append(item); |
| }); |
| |
| bars.replaceChildren(fragment); |
| caption.innerHTML = metricCaptions[metric]; |
| status.textContent = `Showing ${metricLabels[metric]} scores for ${models.length} models as model-colored vertical columns, ranked from highest to lowest.`; |
| requestAnimationFrame(updateScrollState); |
| }; |
| |
| buttons.forEach((button) => { |
| button.addEventListener("click", () => render(button.dataset.metric)); |
| }); |
| window.addEventListener("resize", updateScrollState); |
| render("overall"); |
| } catch (error) { |
| showError(`The score chart could not be generated: ${error.message}`); |
| } |
| })(); |
| </script> |
| <script> |
| (() => { |
| const MODELS = [ |
| { name: "Claude Opus 4.8", provider: "Anthropic", open: false, overall: 81.94, cost: 2.14, time: 14.5, turns: 18.7, slug: "anthropic/claude-opus-4.8", pin: 5, pout: 25 }, |
| { name: "Claude Opus 4.6", provider: "Anthropic", open: false, overall: 77.23, cost: 6.57, time: 18.2, turns: 18.3, slug: "anthropic/claude-opus-4.6", pin: 5, pout: 25 }, |
| { name: "Gemini 3.1 Pro", provider: "Google", open: false, overall: 75.21, cost: 3.85, time: 18.0, turns: 18.1, slug: "google/gemini-3.1-pro-preview", pin: 2, pout: 12 }, |
| { name: "GPT-5.6 Sol", provider: "OpenAI", open: false, overall: 75.05, cost: 0.95, time: 10.8, turns: 11.7, slug: "openai/gpt-5.6-sol", pin: 5, pout: 30 }, |
| { name: "Claude Sonnet 5", provider: "Anthropic", open: false, overall: 75.04, cost: 2.29, time: 15.1, turns: 30.5, slug: "anthropic/claude-sonnet-5", pin: 2, pout: 10 }, |
| { name: "GPT-5.5", provider: "OpenAI", open: false, overall: 74.14, cost: 1.90, time: 20.5, turns: 15.4, slug: "openai/gpt-5.5", pin: 5, pout: 30 }, |
| { name: "GLM-5", provider: "Z.ai", open: true, overall: 72.86, cost: 1.29, time: 17.8, turns: 31.3, slug: "z-ai/glm-5", pin: 0.95, pout: 2.55 }, |
| { name: "DeepSeek V4 Pro", provider: "DeepSeek", open: true, overall: 72.43, cost: 0.30, time: 18.3, turns: 24.6, slug: "deepseek/deepseek-v4-pro", pin: 0.435, pout: 0.87 }, |
| { name: "Qwen3.5-397B", provider: "Alibaba Cloud", open: true, overall: 69.87, cost: 1.01, time: 20.8, turns: 25.1, slug: "qwen/qwen3.5-397b-a17b", pin: 0.39, pout: 2.34 }, |
| { name: "GPT-5.6 Terra", provider: "OpenAI", open: false, overall: 68.29, cost: 0.45, time: 10.7, turns: 10.2, slug: "openai/gpt-5.6-terra", pin: 1, pout: 6 }, |
| { name: "MiniMax M2.5", provider: "MiniMax", open: true, overall: 66.31, cost: 1.36, time: 20.6, turns: 28.5, slug: "minimax/minimax-m2.5", pin: 0.15, pout: 0.9 }, |
| { name: "GPT-5.4", provider: "OpenAI", open: false, overall: 66.09, cost: 2.36, time: 16.7, turns: 10.4, slug: "openai/gpt-5.4", pin: 2.5, pout: 15 }, |
| { name: "Qwen3.6-27B", provider: "Alibaba Cloud", open: true, overall: 65.29, cost: 0, time: 23.0, turns: 32.0, slug: "qwen/qwen3.6-27b", pin: 0.3, pout: 2, local: true }, |
| { name: "GPT-5.6 Luna", provider: "OpenAI", open: false, overall: 63.98, cost: 0.21, time: 8.9, turns: 13.4, slug: "openai/gpt-5.6-luna", pin: 0.1, pout: 0.6 }, |
| { name: "Qwen3.5-35B-A3B", provider: "Alibaba Cloud", open: true, overall: 57.94, cost: 0, time: 28.4, turns: 30.5, slug: "qwen/qwen3.5-35b-a3b", pin: 0.14, pout: 1, local: true }, |
| { name: "GLM-5.2", provider: "Z.ai", open: true, overall: 56.32, cost: 0.73, time: 15.7, turns: 28.6, slug: "z-ai/glm-5.2", pin: 1.19, pout: 3.74 }, |
| { name: "Nemotron 3.5 Lightning 30B-A3B", provider: "NVIDIA", open: true, overall: 39.65, cost: 0.09, time: 14.3, turns: 42.5, slug: "nvidia/nemotron-3.5-lightning", pin: 0.1, pout: 0.25 }, |
| { name: "Gemma 4 26B-A4B", provider: "Google", open: true, overall: 33.89, cost: 0.04885072, time: 17.3, turns: 14.8, tokens: 384651, slug: "google/gemma-4-26b-a4b-it", pin: 0.12, pout: 0.40 }, |
| { name: "Gemma 4 31B", provider: "Google", open: true, overall: 30.43, cost: 0.01653110, time: 27.9, turns: 8.1, tokens: 154003, slug: "google/gemma-4-31b-it", pin: 0.10, pout: 0.34 }, |
| { name: "GPT-OSS-120B", provider: "OpenAI", open: true, overall: 24.33, cost: 0, time: 4.4, turns: 9.4, slug: "openai/gpt-oss-120b", pin: 0.037, pout: 0.17 }, |
| { name: "Gemma 4 12B", provider: "Google", open: true, overall: 22.43, cost: 0.0239965, time: 24.0, turns: 17.1, tokens: 455099, slug: null, pin: 0.05, pout: 0.15, proxy: true }, |
| { name: "Gemma 4 E4B", provider: "Google", open: true, overall: 21.94, cost: 0.007112, time: 7.4, turns: 6.8, tokens: 110196, slug: null, pin: 0.06, pout: 0.12, proxy: true }, |
| { name: "Qwen3.5-9B", provider: "Alibaba Cloud", open: true, overall: 19.87, cost: 0, time: 19.3, turns: 52.4, slug: "qwen/qwen3.5-9b", pin: 0.1, pout: 0.15, local: true }, |
| { name: "Nemotron Nano 9B v2", provider: "NVIDIA", open: true, overall: 18.68, cost: 0, time: 12.0, turns: 22.8, slug: "nvidia/nemotron-nano-9b-v2:free", pin: 0, pout: 0, local: true }, |
| { name: "Nemotron 3 Nano 30B-A3B", provider: "NVIDIA", open: true, overall: 18.01, cost: 0.01507026, time: 2.5, turns: 16.3, tokens: 249310, slug: "nvidia/nemotron-3-nano-30b-a3b", pin: 0.05, pout: 0.20 }, |
| { name: "GPT-OSS-20B", provider: "OpenAI", open: true, overall: 17.63, cost: 0, time: 2.7, turns: 5.1, slug: "openai/gpt-oss-20b", pin: 0.03, pout: 0.13 }, |
| { name: "Nemotron 3 Nano 4B", provider: "NVIDIA", open: true, overall: 9.06, cost: 0.00673588, time: 5.9, turns: 9.7, tokens: 118117, slug: null, pin: 0.05, pout: 0.20, proxy: true }, |
| { name: "Gemma 4 E2B", provider: "Google", open: true, overall: 9.02, cost: 0.02203914, time: 4.3, turns: 18.9, tokens: 359541, slug: null, pin: 0.06, pout: 0.12, proxy: true }, |
| { name: "Mistral 7B Instruct v0.3", provider: "Mistral AI", open: true, overall: 6.80, cost: 0, time: 1.5, turns: 2.7, tokens: 42507, slug: null, pin: null, pout: null }, |
| { name: "Qwen3.5-4B", provider: "Alibaba Cloud", open: true, overall: 6.05, cost: 0, time: 13.6, turns: 72.6, slug: null, pin: null, pout: null, local: true } |
| ]; |
| |
| const blended = (m) => 0.75 * m.pin + 0.25 * m.pout; |
| for (const m of MODELS) { |
| m.tokens = m.tokens ?? ((m.cost > 0 && m.pin != null) ? (m.cost / blended(m)) * 1e6 : null); |
| } |
| const perTurn = MODELS.filter((m) => m.tokens).map((m) => m.tokens / m.turns).sort((a, b) => a - b); |
| const MED_TOK_PER_TURN = perTurn[Math.floor(perTurn.length / 2)]; |
| for (const m of MODELS) { |
| if (m.tokens == null) m.tokens = MED_TOK_PER_TURN * m.turns; |
| m.costEst = (m.cost === 0 && m.pin) ? (m.tokens / 1e6) * blended(m) : 0; |
| } |
| const effCost = (m) => (m.cost > 0 ? m.cost : m.costEst); |
| |
| const FLAGSHIPS = new Set(); |
| { |
| const bestByProvider = new Map(); |
| for (const m of MODELS) { |
| const cur = bestByProvider.get(m.provider); |
| if (!cur || m.overall > cur.overall) bestByProvider.set(m.provider, m); |
| } |
| for (const m of bestByProvider.values()) FLAGSHIPS.add(m.name); |
| } |
| |
| const modelColors = new Map([ |
| ["claude opus 4.8", "#b98272"], ["claude opus 4.6", "#c0917f"], ["claude sonnet 5", "#c9a08f"], |
| ["gemini 3.1 pro", "#829b84"], ["gpt-5.6 sol", "#788b84"], ["gpt-5.5", "#87968f"], |
| ["gpt-5.6 terra", "#96a29a"], ["gpt-5.4", "#8f9188"], ["gpt-5.6 luna", "#a2aaa3"], |
| ["gpt-oss-120b", "#777f79"], ["glm-5", "#7d95a7"], ["glm-5.2", "#91a5b2"], |
| ["deepseek v4 pro", "#858ca5"], ["qwen3.5-397b", "#b8896c"], ["qwen3.6-27b", "#bd9477"], |
| ["qwen3.5-35b-a3b", "#c2a083"], ["qwen3.5-9b", "#aa8f7c"], ["qwen3.5-4b", "#9e8574"], |
| ["minimax m2.5", "#9d8794"] |
| ]); |
| const familyPalette = [ |
| { match: /anthropic|claude/i, color: "#bd907d" }, |
| { match: /openai|chatgpt|gpt-/i, color: "#858e87" }, |
| { match: /google|gemini/i, color: "#8da28e" }, |
| { match: /z\.ai|glm-/i, color: "#8ca1af" }, |
| { match: /deepseek/i, color: "#8d93a8" }, |
| { match: /alibaba|qwen/i, color: "#b99a7c" }, |
| { match: /minimax/i, color: "#a18d99" } |
| ]; |
| const fallbackColors = ["#9a8fa2", "#899da0", "#a29b84", "#a78e86", "#8f99a6"]; |
| const modelColor = (name, provider) => { |
| const exact = modelColors.get(name.toLowerCase()); |
| if (exact) return exact; |
| const identity = `${name} ${provider}`; |
| const family = familyPalette.find(({ match }) => match.test(identity)); |
| if (family) return family.color; |
| const hash = Array.from(identity).reduce((t, c) => (t * 31 + c.charCodeAt(0)) >>> 0, 0); |
| return fallbackColors[hash % fallbackColors.length]; |
| }; |
| |
| const fmtTok = (v) => v >= 1e6 ? (v / 1e6).toFixed(2) + "M" : Math.round(v / 1e3) + "K"; |
| |
| const METRICS = { |
| cost: { |
| title: "Overall score vs. Cost per Task", |
| sub: "AutoMedBench Lite Overall \u00b7 average cost (USD) per task at OpenRouter list prices", |
| xTitle: "Cost per Task (USD, log scale)", |
| dmin: 0.006, dmax: 9, |
| ticks: [[0.01, "$0*"], [0.02, "$0.02"], [0.05, "$0.05"], [0.1, "$0.10"], [0.2, "$0.20"], [0.5, "$0.50"], [1, "$1"], [2, "$2"], [4, "$4"], [8, "$8"]], |
| value: (m) => (effCost(m) > 0 ? effCost(m) : 0.01), |
| note: "Price standard: OpenRouter API rates checked Aug 12, 2026. Exact listing unavailable \u2192 comparable proxy rate." |
| }, |
| time: { |
| title: "Overall score vs. Time per Task", |
| sub: "AutoMedBench Lite Overall \u00b7 average wall-clock minutes per task", |
| xTitle: "Time per Task (minutes, log scale)", |
| dmin: 3, dmax: 34, |
| ticks: [[5, "5 min"], [10, "10"], [15, "15"], [20, "20"], [30, "30 min"]], |
| value: (m) => m.time, |
| note: "Average wall-clock minutes per task." |
| }, |
| tokens: { |
| title: "Overall score vs. Tokens per Task", |
| sub: "AutoMedBench Lite Overall \u00b7 estimated total tokens per task (input + output)", |
| xTitle: "Estimated tokens per Task (log scale)", |
| dmin: 8e4, dmax: 6e6, |
| ticks: [[1e5, "100K"], [2e5, "200K"], [5e5, "500K"], [1e6, "1M"], [2e6, "2M"], [4e6, "4M"]], |
| value: (m) => m.tokens, |
| note: "Tokens per task use recorded input plus output tokens when available; remaining models use the displayed estimate method." |
| }, |
| turns: { |
| title: "Overall score vs. Turns per Task", |
| sub: "AutoMedBench Lite Overall \u00b7 average conversational turns per task", |
| xTitle: "Turns per Task (log scale)", |
| dmin: 6, dmax: 90, |
| ticks: [[10, "10"], [15, "15"], [20, "20"], [30, "30"], [50, "50"], [70, "70"]], |
| value: (m) => m.turns, |
| note: "Average conversational turns per task." |
| } |
| }; |
| |
| const P = { |
| grid: "rgba(115,122,109,0.2)", base: "rgba(77,87,75,0.36)", tickText: "#9aa093", |
| vgrid: "rgba(115,122,109,0.12)", tickMark: "#c8c0ad", |
| quadFill: "rgba(74,115,85,0.09)", quadLine: "rgba(74,115,85,0.25)", |
| pareto: "#6b7263", label: "#3b4538", pointStroke: "#fffdf8" |
| }; |
| |
| const SVGNS = "http://www.w3.org/2000/svg"; |
| const W = 1120, H = 440, M = { t: 26, r: 26, b: 64, l: 66 }; |
| const PW = W - M.l - M.r, PH = H - M.t - M.b; |
| const YMAX = 90, YTICKS = [0, 15, 30, 45, 60, 75, 90]; |
| const QY = 55; |
| |
| const svg = document.getElementById("eff-plot"); |
| const tooltip = document.getElementById("eff-tooltip"); |
| const countPill = document.getElementById("eff-count"); |
| const ossToggle = document.getElementById("eff-oss"); |
| const tabs = Array.from(document.querySelectorAll("[data-eff-metric]")); |
| const titleEl = document.getElementById("eff-title"); |
| const subEl = document.getElementById("eff-subtitle"); |
| const noteEl = document.getElementById("eff-note"); |
| if (!svg || !tooltip || !countPill || !ossToggle || !titleEl) return; |
| |
| let activeMetric = "cost"; |
| let openOnly = false; |
| let activeProvider = null; |
| |
| const el = (tag, attrs = {}) => { |
| const node = document.createElementNS(SVGNS, tag); |
| for (const [k, v] of Object.entries(attrs)) node.setAttribute(k, v); |
| return node; |
| }; |
| const text = (x, y, content, attrs = {}) => { |
| const node = el("text", { x, y, ...attrs }); |
| node.textContent = content; |
| return node; |
| }; |
| |
| function render() { |
| const cfg = METRICS[activeMetric]; |
| titleEl.textContent = cfg.title; |
| subEl.textContent = cfg.sub; |
| noteEl.textContent = cfg.note; |
| |
| const shown = MODELS |
| .filter((m) => (openOnly ? m.open : true)) |
| .filter((m) => (activeProvider ? m.provider === activeProvider : true)); |
| countPill.textContent = `${shown.length} of ${MODELS.length} models`; |
| |
| const xS = (v) => M.l + ((Math.log10(v) - Math.log10(cfg.dmin)) / (Math.log10(cfg.dmax) - Math.log10(cfg.dmin))) * PW; |
| const yS = (s) => M.t + ((YMAX - s) / YMAX) * PH; |
| |
| svg.replaceChildren(); |
| |
| const qx = Math.sqrt(cfg.dmin * cfg.dmax); |
| svg.append(el("rect", { x: M.l, y: M.t, width: xS(qx) - M.l, height: yS(QY) - M.t, fill: P.quadFill })); |
| svg.append(el("line", { x1: xS(qx), y1: M.t, x2: xS(qx), y2: yS(QY), stroke: P.quadLine, "stroke-dasharray": "3 4" })); |
| svg.append(el("line", { x1: M.l, y1: yS(QY), x2: xS(qx), y2: yS(QY), stroke: P.quadLine, "stroke-dasharray": "3 4" })); |
| |
| for (const t of YTICKS) { |
| const y = yS(t); |
| svg.append(el("line", { |
| x1: M.l, y1: y, x2: M.l + PW, y2: y, |
| stroke: t === 0 ? P.base : P.grid, |
| "stroke-dasharray": t === 0 ? "none" : "4 4" |
| })); |
| svg.append(text(M.l - 10, y + 4, String(t), { "text-anchor": "end", fill: P.tickText, "font-size": "11.5", "font-family": "SFMono-Regular, Consolas, monospace" })); |
| } |
| for (const [v, label] of cfg.ticks) { |
| const x = xS(v); |
| svg.append(el("line", { x1: x, y1: M.t, x2: x, y2: M.t + PH, stroke: P.vgrid })); |
| svg.append(el("line", { x1: x, y1: M.t + PH, x2: x, y2: M.t + PH + 5, stroke: P.tickMark })); |
| svg.append(text(x, M.t + PH + 20, label, { "text-anchor": "middle", fill: P.tickText, "font-size": "11.5", "font-family": "SFMono-Regular, Consolas, monospace" })); |
| } |
| |
| const yTitle = text(18, M.t + PH / 2, "AutoMedBench Lite Overall Score", { |
| "text-anchor": "middle", fill: P.tickText, "font-size": "11.5", "font-weight": "750", |
| "letter-spacing": "0.08em", transform: `rotate(-90 18 ${M.t + PH / 2})` |
| }); |
| yTitle.style.textTransform = "uppercase"; |
| svg.append(yTitle); |
| const xTitle = text(M.l + PW / 2, H - 10, cfg.xTitle, { |
| "text-anchor": "middle", fill: P.tickText, "font-size": "11.5", "font-weight": "750", "letter-spacing": "0.08em" |
| }); |
| xTitle.style.textTransform = "uppercase"; |
| svg.append(xTitle); |
| |
| const pts = shown.map((m) => ({ m, x: xS(cfg.value(m)), y: yS(m.overall), color: modelColor(m.name, m.provider) })); |
| |
| const sorted = [...pts].sort((a, b) => a.x - b.x || b.m.overall - a.m.overall); |
| const frontier = []; |
| let best = -Infinity; |
| for (const p of sorted) { |
| if (p.m.overall > best) { frontier.push(p); best = p.m.overall; } |
| } |
| if (frontier.length > 1) { |
| const d = frontier.map((p, i) => `${i === 0 ? "M" : "L"}${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(" "); |
| svg.append(el("path", { d, fill: "none", stroke: P.pareto, "stroke-width": "2", "stroke-dasharray": "1 6", "stroke-linecap": "round", opacity: "0.85" })); |
| } |
| |
| const labels = []; |
| const placedBoxes = []; |
| const byScore = [...pts].sort((a, b) => |
| (FLAGSHIPS.has(b.m.name) - FLAGSHIPS.has(a.m.name)) || b.m.overall - a.m.overall |
| ); |
| for (const p of byScore) { |
| const flagship = FLAGSHIPS.has(p.m.name); |
| const w = 10 + p.m.name.length * 7.4; |
| let anchor = "start"; |
| let lx = p.x + 12; |
| let x0 = lx, x1 = lx + w; |
| if (x1 > W - 4) { |
| if (!flagship) continue; |
| anchor = "end"; |
| lx = p.x - 12; |
| x0 = lx - w; x1 = lx; |
| } |
| const fits = (ly) => |
| ly >= M.t + 10 && ly <= M.t + PH - 2 && |
| !placedBoxes.some((b) => Math.abs(b.y - ly) < 16 && x0 < b.x1 && b.x0 < x1) && |
| !pts.some((q) => q !== p && q.x > x0 - 9 && q.x < x1 + 9 && Math.abs(q.y - ly + 4) < 12); |
| let ly = null; |
| for (const dy of flagship ? [0, -16, 16, -30, 30, -44, 44] : [0]) { |
| if (fits(p.y + 4.5 + dy)) { ly = p.y + 4.5 + dy; break; } |
| } |
| if (ly == null) { |
| if (!flagship) continue; |
| ly = Math.max(M.t + 10, Math.min(M.t + PH - 2, p.y + 4.5)); |
| } |
| placedBoxes.push({ y: ly, x0, x1 }); |
| labels.push({ p, x: lx, y: ly, anchor }); |
| } |
| |
| for (const p of pts) { |
| const g = el("g", { cursor: "pointer" }); |
| g.append(el("circle", { cx: p.x, cy: p.y, r: 12, fill: "transparent" })); |
| g.append(el("circle", { cx: p.x, cy: p.y, r: 7, fill: p.color, stroke: P.pointStroke, "stroke-width": "1.6" })); |
| g.addEventListener("mouseenter", (e) => showTip(e, p.m)); |
| g.addEventListener("mousemove", moveTip); |
| g.addEventListener("mouseleave", hideTip); |
| svg.append(g); |
| } |
| for (const l of labels) { |
| if (Math.abs(l.y - (l.p.y + 4.5)) > 8) { |
| svg.append(el("line", { |
| x1: l.p.x + (l.anchor === "start" ? 8 : -8), y1: l.p.y, |
| x2: l.x + (l.anchor === "start" ? -2 : 2), y2: l.y - 4, |
| stroke: P.tickMark, "stroke-width": "1" |
| })); |
| } |
| svg.append(text(l.x, l.y, l.p.m.name, { |
| "text-anchor": l.anchor, |
| fill: P.label, "font-size": "13.5", "font-weight": "600", "letter-spacing": "-0.01em", |
| stroke: P.pointStroke, "stroke-width": "3", "paint-order": "stroke", "stroke-linejoin": "round" |
| })); |
| } |
| } |
| |
| function tipHtml(m) { |
| const rows = [ |
| ["Overall", m.overall.toFixed(2)], |
| ["Cost / task", m.cost > 0 ? "$" + m.cost.toFixed(2) : m.costEst > 0 ? "~$" + m.costEst.toFixed(2) + " (est. API)" : "$0"], |
| ["Time / task", m.time.toFixed(1) + " min"], |
| ["Tokens / task", "~" + fmtTok(m.tokens)], |
| ["Turns / task", m.turns.toFixed(1)] |
| ].map(([k, v]) => `<div class="tt-row"><span>${k}</span><span>${v}</span></div>`).join(""); |
| const or = (m.pin != null && m.pin > 0) |
| ? `$${m.pin}/M in \u00b7 $${m.pout}/M out${m.proxy ? " \u00b7 proxy" : ""}` |
| : "$0"; |
| return `<div class="tt-name">${m.name}${m.open ? '<span class="tt-chip">open source</span>' : ""}</div> |
| <div class="tt-provider">${m.provider}</div>${rows}<div class="tt-or">${or}</div>`; |
| } |
| function showTip(e, m) { |
| tooltip.innerHTML = tipHtml(m); |
| tooltip.hidden = false; |
| moveTip(e); |
| } |
| function moveTip(e) { |
| const pad = 14; |
| const r = tooltip.getBoundingClientRect(); |
| let x = e.clientX + pad, y = e.clientY + pad; |
| if (x + r.width > window.innerWidth - 8) x = e.clientX - r.width - pad; |
| if (y + r.height > window.innerHeight - 8) y = e.clientY - r.height - pad; |
| tooltip.style.left = x + "px"; |
| tooltip.style.top = y + "px"; |
| } |
| function hideTip() { tooltip.hidden = true; } |
| |
| const LOGOS = {"Anthropic": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjNzM3YTZkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMWVtIiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+QW50aHJvcGljPC90aXRsZT48cGF0aCBkPSJNMTMuODI3IDMuNTJoMy42MDNMMjQgMjBoLTMuNjAzbC02LjU3LTE2LjQ4em0tNy4yNTggMGgzLjc2N0wxNi45MDYgMjBoLTMuNjc0bC0xLjM0My0zLjQ2MUg1LjAxN2wtMS4zNDQgMy40NkgwTDYuNTcgMy41MjJ6bTQuMTMyIDkuOTU5TDguNDUzIDcuNjg3IDYuMjA1IDEzLjQ4SDEwLjd6Ij48L3BhdGg+PC9zdmc+Cg==", "OpenAI": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjNzM3YTZkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMWVtIiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+T3BlbkFJPC90aXRsZT48cGF0aCBkPSJNOS4yMDUgOC42NTh2LTIuMjZjMC0uMTkuMDcyLS4zMzMuMjM4LS40MjhsNC41NDMtMi42MTZjLjYxOS0uMzU3IDEuMzU2LS41MjMgMi4xMTctLjUyMyAyLjg1NCAwIDQuNjYyIDIuMjEyIDQuNjYyIDQuNTY2IDAgLjE2NyAwIC4zNTctLjAyNC41NDdsLTQuNzEtMi43NTlhLjc5Ny43OTcgMCAwMC0uODU2IDBsLTUuOTcgMy40NzN6bTEwLjYwOSA4LjhWMTIuMDZjMC0uMzMzLS4xNDMtLjU3LS40MjktLjczN2wtNS45Ny0zLjQ3MyAxLjk1LTEuMTE4YS40MzMuNDMzIDAgMDEuNDc2IDBsNC41NDMgMi42MTdjMS4zMDkuNzYgMi4xODkgMi4zNzggMi4xODkgMy45NDggMCAxLjgwOC0xLjA3IDMuNDczLTIuNzYgNC4xNjN6TTcuODAyIDEyLjcwM2wtMS45NS0xLjE0MmMtLjE2Ny0uMDk1LS4yMzktLjIzOC0uMjM5LS40MjhWNS44OTljMC0yLjU0NSAxLjk1LTQuNDcyIDQuNTkxLTQuNDcyIDEgMCAxLjkyNy4zMzMgMi43MTIuOTI4TDguMjMgNS4wNjdjLS4yODUuMTY2LS40MjguNDA0LS40MjguNzM3djYuODk4ek0xMiAxNS4xMjhsLTIuNzk1LTEuNTd2LTMuMzNMMTIgOC42NThsMi43OTUgMS41N3YzLjMzTDEyIDE1LjEyOHptMS43OTYgNy4yM2MtMSAwLTEuOTI3LS4zMzItMi43MTItLjkyN2w0LjY4Ni0yLjcxMmMuMjg1LS4xNjYuNDI4LS40MDQuNDI4LS43Mzd2LTYuODk4bDEuOTc0IDEuMTQyYy4xNjcuMDk1LjIzOC4yMzguMjM4LjQyOHY1LjIzM2MwIDIuNTQ1LTEuOTc0IDQuNDcyLTQuNjE0IDQuNDcyem0tNS42MzctNS4zMDNsLTQuNTQ0LTIuNjE3Yy0xLjMwOC0uNzYxLTIuMTg4LTIuMzc4LTIuMTg4LTMuOTQ4QTQuNDgyIDQuNDgyIDAgMDE0LjIxIDYuMzI3djUuNDIzYzAgLjMzMy4xNDMuNTcxLjQyOC43MzhsNS45NDcgMy40NDktMS45NSAxLjExOGEuNDMyLjQzMiAwIDAxLS40NzYgMHptLS4yNjIgMy45Yy0yLjY4OCAwLTQuNjYyLTIuMDIxLTQuNjYyLTQuNTE5IDAtLjE5LjAyNC0uMzguMDQ3LS41N2w0LjY4NiAyLjcxYy4yODYuMTY3LjU3MS4xNjcuODU2IDBsNS45Ny0zLjQ0OHYyLjI2YzAgLjE5LS4wNy4zMzMtLjIzNy40MjhsLTQuNTQzIDIuNjE2Yy0uNjE5LjM1Ny0xLjM1Ni41MjMtMi4xMTcuNTIzem01Ljg5OSAyLjgzYTUuOTQ3IDUuOTQ3IDAgMDA1LjgyNy00Ljc1NkMyMi4yODcgMTguMzM5IDI0IDE1Ljg0IDI0IDEzLjI5NmMwLTEuNjY1LS43MTMtMy4yODItMS45OTgtNC40NDguMTE5LS41LjE5LS45OTkuMTktMS40OTggMC0zLjQwMS0yLjc1OS01Ljk0Ny01Ljk0Ni01Ljk0Ny0uNjQyIDAtMS4yNi4wOTUtMS44OC4zMUE1Ljk2MiA1Ljk2MiAwIDAwMTAuMjA1IDBhNS45NDcgNS45NDcgMCAwMC01LjgyNyA0Ljc1N0MxLjcxMyA1LjQ0NyAwIDcuOTQ1IDAgMTAuNDljMCAxLjY2Ni43MTMgMy4yODMgMS45OTggNC40NDgtLjExOS41LS4xOSAxLS4xOSAxLjQ5OSAwIDMuNDAxIDIuNzU5IDUuOTQ2IDUuOTQ2IDUuOTQ2LjY0MiAwIDEuMjYtLjA5NSAxLjg4LS4zMDlhNS45NiA1Ljk2IDAgMDA0LjE2MiAxLjcxM3oiPjwvcGF0aD48L3N2Zz4K", "Google": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjNzM3YTZkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMWVtIiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+R2VtaW5pPC90aXRsZT48cGF0aCBkPSJNMjAuNjE2IDEwLjgzNWExNC4xNDcgMTQuMTQ3IDAgMDEtNC40NS0zLjAwMSAxNC4xMTEgMTQuMTExIDAgMDEtMy42NzgtNi40NTIuNTAzLjUwMyAwIDAwLS45NzUgMCAxNC4xMzQgMTQuMTM0IDAgMDEtMy42NzkgNi40NTIgMTQuMTU1IDE0LjE1NSAwIDAxLTQuNDUgMy4wMDFjLS42NS4yOC0xLjMxOC41MDUtMi4wMDIuNjc4YS41MDIuNTAyIDAgMDAwIC45NzVjLjY4NC4xNzIgMS4zNS4zOTcgMi4wMDIuNjc3YTE0LjE0NyAxNC4xNDcgMCAwMTQuNDUgMy4wMDEgMTQuMTEyIDE0LjExMiAwIDAxMy42NzkgNi40NTMuNTAyLjUwMiAwIDAwLjk3NSAwYy4xNzItLjY4NS4zOTctMS4zNTEuNjc3LTIuMDAzYTE0LjE0NSAxNC4xNDUgMCAwMTMuMDAxLTQuNDUgMTQuMTEzIDE0LjExMyAwIDAxNi40NTMtMy42NzguNTAzLjUwMyAwIDAwMC0uOTc1IDEzLjI0NSAxMy4yNDUgMCAwMS0yLjAwMy0uNjc4eiI+PC9wYXRoPjwvc3ZnPgo=", "Z.ai": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjNzM3YTZkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMWVtIiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+Wi5haTwvdGl0bGU+PHBhdGggZD0iTTEyLjEwNSAyTDkuOTI3IDQuOTUzSC42NTNMMi44MyAyaDkuMjc2ek0yMy4yNTQgMTkuMDQ4TDIxLjA3OCAyMmgtOS4yNDJsMi4xNzQtMi45NTJoOS4yNDR6TTI0IDJMOS4yNjQgMjJIMEwxNC43MzYgMkgyNHoiPjwvcGF0aD48L3N2Zz4K", "DeepSeek": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjNzM3YTZkIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+RGVlcFNlZWs8L3RpdGxlPjxwYXRoIGQ9Ik0yMy43NDggNC42NTFjLS4yNTQtLjEyNC0uMzY0LjExMy0uNTEyLjIzMy0uMDUxLjA0LS4wOTQuMDktLjEzNy4xMzctLjM3Mi4zOTctLjgwNi42NTctMS4zNzMuNjI2LS44MjktLjA0Ni0xLjUzNy4yMTQtMi4xNjMuODQ4LS4xMzMtLjc4Mi0uNTc1LTEuMjQ4LTEuMjQ3LTEuNTQ4LS4zNTItLjE1NS0uNzA4LS4zMTEtLjk1NS0uNjUtLjE3Mi0uMjQtLjIxOS0uNTA5LS4zMDUtLjc3NC0uMDU1LS4xNi0uMTEtLjMyMy0uMjkzLS4zNS0uMi0uMDMxLS4yNzguMTM2LS4zNTYuMjc2LS4zMTMuNTcyLS40MzQgMS4yMDItLjQyMiAxLjg0LjAyNyAxLjQzNi42MzMgMi41OCAxLjgzOCAzLjM5My4xMzcuMDk0LjE3Mi4xODcuMTI5LjMyMy0uMDgyLjI4LS4xOC41NTMtLjI2Ni44MzMtLjA1NS4xNzktLjEzNy4yMTgtLjMyOC4xNGE1LjUgNS41IDAgMCAxLTEuNzM3LTEuMTc5Yy0uODU3LS44MjgtMS42MzEtMS43NDMtMi41OTctMi40NmExMiAxMiAwIDAgMC0uNjg5LS40N2MtLjk4NS0uOTU3LjEzLTEuNzQzLjM4Ny0xLjgzNi4yNy0uMDk4LjA5NC0uNDMzLS43NzgtLjQyOC0uODcyLjAwMy0xLjY3LjI5NS0yLjY4Ny42ODVhMyAzIDAgMCAxLS40NjUuMTM2IDkuNiA5LjYgMCAwIDAtMi44ODMtLjEwMWMtMS44ODUuMjEtMy4zOSAxLjEtNC40OTcgMi42MjJDLjA4MiA4Ljc3Ni0uMjMxIDEwLjg1NC4xNTIgMTMuMDJjLjQwMyAyLjI4NCAxLjU2OCA0LjE3NSAzLjM2IDUuNjUzIDEuODU3IDEuNTMzIDMuOTk3IDIuMjg0IDYuNDM4IDIuMTQgMS40ODItLjA4NSAzLjEzMi0uMjg0IDQuOTk0LTEuODYuNDcuMjM0Ljk2Mi4zMjggMS43OC4zOTguNjI5LjA1OCAxLjIzNS0uMDMxIDEuNzA1LS4xMjkuNzM1LS4xNTUuNjg0LS44MzYuNDE4LS45NjEtMi4xNTUtMS4wMDQtMS42ODItLjU5NS0yLjExMi0uOTI2IDEuMDk1LTEuMjk1IDIuNzY4LTMuNTk4IDMuMjg0LTYuNzMzLjA1LS4zNDYuMTE1LS44MzQuMTA4LTEuMTE0LS4wMDQtLjE3MS4wMzUtLjIzOC4yMy0uMjU3YTQuMiA0LjIgMCAwIDAgMS41NDUtLjQ3NWMxLjM5Ny0uNzYzIDEuOTYtMi4wMTYgMi4wOTMtMy41MTcuMDItLjIzLS4wMDQtLjQ2Ny0uMjQ3LS41ODhNMTEuNTggMTguMTY4Yy0yLjA4OC0xLjY0Mi0zLjEwMS0yLjE4My0zLjUyLTIuMTYtLjM5LjAyNC0uMzIuNDcyLS4yMzQuNzYzLjA5LjI4OC4yMDcuNDg3LjM3MS43NC4xMTQuMTY3LjE5Mi40MTYtLjExMy42MDMtLjY3My40MTYtMS44NDItLjE0LTEuODk3LS4xNjgtMS4zNjEtLjgwMS0yLjUtMS44Ni0zLjMwMS0zLjMwNi0uNzc1LTEuMzkzLTEuMjI1LTIuODg4LTEuMjk5LTQuNDgyLS4wMi0uMzg1LjA5NC0uNTIyLjQ3Ny0uNTkyYTQuNyA0LjcgMCAwIDEgMS41My0uMDM4YzIuMTMxLjMxMSAzLjk0NiAxLjI2NCA1LjQ2NyAyLjc3NC44NjguODYgMS41MjUgMS44ODcgMi4yMDIgMi44OS43MiAxLjA2NiAxLjQ5NCAyLjA4MiAyLjQ4IDIuOTE1LjM0OC4yOTEuNjI2LjUxMy44OTIuNjc3LS44MDIuMDktMi4xNC4xMDktMy4wNTUtLjYxNXptMS4wMDEtNi40NGEuMzA2LjMwNiAwIDAgMSAuNDE1LS4yODcuMy4zIDAgMCAxIC4xMTMuMDc0LjMuMyAwIDAgMSAuMDg2LjIxNGMwIC4xNy0uMTM2LjMwNy0uMzA4LjMwN2EuMzAzLjMwMyAwIDAgMS0uMzA2LS4zMDdtMy4xMSAxLjU5NmMtLjIuMDgxLS40LjE1MS0uNTkxLjE2YTEuMjUgMS4yNSAwIDAgMS0uNzk4LS4yNTRjLS4yNzQtLjIzLS40Ny0uMzU4LS41NTEtLjc1OGExLjcgMS43IDAgMCAxIC4wMTUtLjU4OGMuMDctLjMyNy0uMDA3LS41MzctLjIzOC0uNzI3LS4xODgtLjE1Ni0uNDI2LS4xOTktLjY4OS0uMTk5YS42LjYgMCAwIDEtLjI1NC0uMDc4LjI1My4yNTMgMCAwIDEtLjExNC0uMzU4IDEgMSAwIDAgMSAuMTkyLS4yMWMuMzU2LS4yMDIuNzY3LS4xMzYgMS4xNDYuMDE2LjM1Mi4xNDQuNjE4LjQwOCAxLjAwMS43ODIuMzkyLjQ1MS40NjIuNTc2LjY4NS45MTUuMTc2LjI2NC4zMzYuNTM2LjQ0Ni44NDguMDY2LjE5NC0uMDIuMzUzLS4yNS40NSIvPjwvc3ZnPgo=", "Alibaba Cloud": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjNzM3YTZkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMWVtIiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+UXdlbjwvdGl0bGU+PHBhdGggZD0iTTEyLjYwNCAxLjM0Yy4zOTMuNjkuNzg0IDEuMzgyIDEuMTc0IDIuMDc1YS4xOC4xOCAwIDAwLjE1Ny4wOTFoNS41NTJjLjE3NCAwIC4zMjIuMTEuNDQ2LjMyN2wxLjQ1NCAyLjU3Yy4xOS4zMzcuMjQuNDc4LjAyNC44MzctLjI2LjQzLS41MTMuODY0LS43NiAxLjNsLS4zNjcuNjU4Yy0uMTA2LjE5Ni0uMjIzLjI4LS4wNC41MTJsMi42NTIgNC42MzdjLjE3Mi4zMDEuMTExLjQ5NC0uMDQzLjc3LS40MzcuNzg1LS44ODIgMS41NjQtMS4zMzUgMi4zNC0uMTU5LjI3Mi0uMzUyLjM3NS0uNjguMzctLjc3Ny0uMDE2LTEuNTUyLS4wMS0yLjMyNy4wMTZhLjA5OS4wOTkgMCAwMC0uMDgxLjA1IDU3NS4wOTcgNTc1LjA5NyAwIDAxLTIuNzA1IDQuNzRjLS4xNjkuMjkzLS4zOC4zNjMtLjcyNS4zNjQtLjk5Ny4wMDMtMi4wMDIuMDA0LTMuMDE3LjAwMmEuNTM3LjUzNyAwIDAxLS40NjUtLjI3MWwtMS4zMzUtMi4zMjNhLjA5LjA5IDAgMDAtLjA4My0uMDQ5SDQuOTgyYy0uMjg1LjAzLS41NTMtLjAwMS0uODA1LS4wOTJsLTEuNjAzLTIuNzdhLjU0My41NDMgMCAwMS0uMDAyLS41NGwxLjIwNy0yLjEyYS4xOTguMTk4IDAgMDAwLS4xOTcgNTUwLjk1MSA1NTAuOTUxIDAgMDEtMS44NzUtMy4yNzJsLS43OS0xLjM5NWMtLjE2LS4zMS0uMTczLS40OTYuMDk1LS45NjUuNDY1LS44MTMuOTI3LTEuNjI1IDEuMzg3LTIuNDM2LjEzMi0uMjM0LjMwNC0uMzM0LjU4NC0uMzM1YTMzOC4zIDMzOC4zIDAgMDEyLjU4OS0uMDAxLjEyNC4xMjQgMCAwMC4xMDctLjA2M2wyLjgwNi00Ljg5NWEuNDg4LjQ4OCAwIDAxLjQyMi0uMjQ2Yy41MjQtLjAwMSAxLjA1MyAwIDEuNTgzLS4wMDZMMTEuNzA0IDFjLjM0MS0uMDAzLjcyNC4wMzIuOS4zNHptLTMuNDMyLjQwM2EuMDYuMDYgMCAwMC0uMDUyLjAzTDYuMjU0IDYuNzg4YS4xNTcuMTU3IDAgMDEtLjEzNS4wNzhIMy4yNTNjLS4wNTYgMC0uMDcuMDI1LS4wNDEuMDc0bDUuODEgMTAuMTU2Yy4wMjUuMDQyLjAxMy4wNjItLjAzNC4wNjNsLTIuNzk1LjAxNWEuMjE4LjIxOCAwIDAwLS4yLjExNmwtMS4zMiAyLjMxYy0uMDQ0LjA3OC0uMDIxLjExOC4wNjguMTE4bDUuNzE2LjAwOGMuMDQ2IDAgLjA4LjAyLjEwNC4wNjFsMS40MDMgMi40NTRjLjA0Ni4wODEuMDkyLjA4Mi4xMzkgMGw1LjAwNi04Ljc2Ljc4My0xLjM4MmEuMDU1LjA1NSAwIDAxLjA5NiAwbDEuNDI0IDIuNTNhLjEyMi4xMjIgMCAwMC4xMDcuMDYybDIuNzYzLS4wMmEuMDQuMDQgMCAwMC4wMzUtLjAyLjA0MS4wNDEgMCAwMDAtLjA0bC0yLjktNS4wODZhLjEwOC4xMDggMCAwMTAtLjExM2wuMjkzLS41MDcgMS4xMi0xLjk3N2MuMDI0LS4wNDEuMDEyLS4wNjItLjAzNS0uMDYySDkuMmMtLjA1OSAwLS4wNzMtLjAyNi0uMDQzLS4wNzdsMS40MzQtMi41MDVhLjEwNy4xMDcgMCAwMDAtLjExNEw5LjIyNSAxLjc3NGEuMDYuMDYgMCAwMC0uMDUzLS4wMzF6bTYuMjkgOC4wMmMuMDQ2IDAgLjA1OC4wMi4wMzQuMDZsLS44MzIgMS40NjUtMi42MTMgNC41ODVhLjA1Ni4wNTYgMCAwMS0uMDUuMDI5LjA1OC4wNTggMCAwMS0uMDUtLjAyOUw4LjQ5OCA5Ljg0MWMtLjAyLS4wMzQtLjAxLS4wNTIuMDI4LS4wNTRsLjIxNi0uMDEyIDYuNzIyLS4wMTJ6Ij48L3BhdGg+PC9zdmc+Cg==", "MiniMax": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjNzM3YTZkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMWVtIiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+TWluaW1heDwvdGl0bGU+PHBhdGggZD0iTTE2LjI3OCAyYzEuMTU2IDAgMi4wOTMuOTI3IDIuMDkzIDIuMDd2MTIuNTAxYS43NC43NCAwIDAwLjc0NC43MDkuNzQuNzQgMCAwMC43NDMtLjcwOVY5LjA5OWEyLjA2IDIuMDYgMCAwMTIuMDcxLTIuMDQ5QTIuMDYgMi4wNiAwIDAxMjQgOS4xdjYuNTYxYS42NDkuNjQ5IDAgMDEtLjY1Mi42NDUuNjQ5LjY0OSAwIDAxLS42NTMtLjY0NVY5LjFhLjc2Mi43NjIgMCAwMC0uNzY2LS43NTguNzYyLjc2MiAwIDAwLS43NjYuNzU4djcuNDcyYTIuMDM3IDIuMDM3IDAgMDEtMi4wNDggMi4wMjYgMi4wMzcgMi4wMzcgMCAwMS0yLjA0OC0yLjAyNnYtMTIuNWEuNzg1Ljc4NSAwIDAwLS43ODgtLjc1My43ODUuNzg1IDAgMDAtLjc4OS43NTJsLS4wMDEgMTUuOTA0QTIuMDM3IDIuMDM3IDAgMDExMy40NDEgMjJhMi4wMzcgMi4wMzcgMCAwMS0yLjA0OC0yLjAyNlYxOC4wNGMwLS4zNTYuMjkyLS42NDUuNjUyLS42NDUuMzYgMCAuNjUyLjI4OS42NTIuNjQ1djEuOTM0YzAgLjI2My4xNDIuNTA2LjM3Mi42MzguMjMuMTMxLjUxNC4xMzEuNzQ0IDBhLjczNC43MzQgMCAwMC4zNzItLjYzOFY0LjA3YzAtMS4xNDMuOTM3LTIuMDcgMi4wOTMtMi4wN3ptLTUuNjc0IDBjMS4xNTYgMCAyLjA5My45MjcgMi4wOTMgMi4wN3YxMS41MjNhLjY0OC42NDggMCAwMS0uNjUyLjY0NS42NDguNjQ4IDAgMDEtLjY1Mi0uNjQ1VjQuMDdhLjc4NS43ODUgMCAwMC0uNzg5LS43OC43ODUuNzg1IDAgMDAtLjc4OS43OHYxNC4wMTNhMi4wNiAyLjA2IDAgMDEtMi4wNyAyLjA0OCAyLjA2IDIuMDYgMCAwMS0yLjA3MS0yLjA0OFY5LjFhLjc2Mi43NjIgMCAwMC0uNzY2LS43NTguNzYyLjc2MiAwIDAwLS43NjYuNzU4djMuOGEyLjA2IDIuMDYgMCAwMS0yLjA3MSAyLjA0OUEyLjA2IDIuMDYgMCAwMTAgMTIuOXYtMS4zNzhjMC0uMzU3LjI5Mi0uNjQ2LjY1Mi0uNjQ2LjM2IDAgLjY1My4yOS42NTMuNjQ2VjEyLjljMCAuNDE4LjM0My43NTcuNzY2Ljc1N3MuNzY2LS4zMzkuNzY2LS43NTdWOS4wOTlhMi4wNiAyLjA2IDAgMDEyLjA3LTIuMDQ4IDIuMDYgMi4wNiAwIDAxMi4wNzEgMi4wNDh2OC45ODRjMCAuNDE5LjM0My43NTguNzY3Ljc1OC40MjMgMCAuNzY2LS4zMzkuNzY2LS43NThWNC4wN2MwLTEuMTQzLjkzNy0yLjA3IDIuMDkzLTIuMDd6Ij48L3BhdGg+PC9zdmc+Cg==", "NVIDIA": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjNzM3YTZkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMWVtIiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+TnZpZGlhPC90aXRsZT48cGF0aCBkPSJNMTAuMjEyIDguOTc2VjcuNjJjLjEyNy0uMDEuMjU2LS4wMTcuMzg4LS4wMjEgMy41OTYtLjExNyA1Ljk1NyAzLjE4NCA1Ljk1NyAzLjE4NHMtMi41NDggMy42NDctNS4yODIgMy42NDdhMy4yMjcgMy4yMjcgMCAwMS0xLjA2My0uMTc1di00LjEwOWMxLjQuMTc0IDEuNjgxLjgxMiAyLjUyMyAyLjI1OGwxLjg3My0xLjYyN2E0LjkwNSA0LjkwNSAwIDAwLTMuNjctMS44NDYgNi41OTQgNi41OTQgMCAwMC0uNzI5LjA0NG0wLTQuNDc2djIuMDI1Yy4xMy0uMDEuMjU5LS4wMTkuMzg4LS4wMjQgNS4wMDItLjE3NCA4LjI2MSA0LjIyNiA4LjI2MSA0LjIyNnMtMy43NDMgNC42OS03LjY0MyA0LjY5Yy0uMzM4IDAtLjY3NS0uMDMxLTEuMDA3LS4wOTJ2MS4yNWMuMjc4LjAzOC41NTguMDU3LjgzOC4wNTcgMy42MjkgMCA2LjI1My0xLjkxIDguNzk0LTQuMTY5LjQyMS4zNDcgMi4xNDYgMS4xOTMgMi41MDEgMS41NjQtMi40MTYgMi4wODMtOC4wNDggMy43NjMtMTEuMjQgMy43NjMtLjMwOCAwLS42MDMtLjAyLS44OTQtLjA0OFYxOS41SDI0di0xNUgxMC4yMXptMCA5Ljc1NnYxLjA2OGMtMy4zNTYtLjYxNi00LjI4Ny00LjIxLTQuMjg3LTQuMjFhNy4xNzMgNy4xNzMgMCAwMTQuMjg3LTIuMTM4djEuMTcyaC0uMDA1YTMuMTgyIDMuMTgyIDAgMDAtMi41MDIgMS4xNzhzLjYxNSAyLjI3NiAyLjUwNyAyLjkzMW0tNS45NjEtMy4zYzEuNDM2LTEuOTM1IDMuNjA0LTMuMTQ4IDUuOTYxLTMuMzM2VjYuNTIzQzUuODEgNi44ODcgMiAxMC43MjMgMiAxMC43MjNzMi4xNTggNi40MjcgOC4yMSA3LjAxNXYtMS4xNjZDNS43NyAxNiA0LjI1IDEwLjk1OCA0LjI1IDEwLjk1OGgtLjAwMnoiPjwvcGF0aD48L3N2Zz4K"}; |
| |
| LOGOS.Google = "assets/google.svg"; |
| const legend = document.getElementById("eff-legend"); |
| const providerButtons = []; |
| for (const provider of ["Anthropic", "OpenAI", "Google", "Z.ai", "DeepSeek", "Alibaba Cloud", "MiniMax", "NVIDIA"]) { |
| const sample = MODELS.find((m) => m.provider === provider); |
| const btn = document.createElement("button"); |
| btn.type = "button"; |
| btn.className = "eff-legend-button"; |
| btn.dataset.provider = provider; |
| btn.setAttribute("aria-pressed", "false"); |
| btn.title = `Show only ${provider} models`; |
| const dot = document.createElement("i"); |
| dot.className = "eff-provider-dot"; |
| dot.style.setProperty("--dot-color", modelColor(sample.name, sample.provider)); |
| btn.append(dot, document.createTextNode(provider)); |
| if (LOGOS[provider]) { |
| const logo = document.createElement("img"); |
| logo.className = "eff-provider-logo"; |
| logo.src = LOGOS[provider]; |
| logo.alt = ""; |
| btn.append(logo); |
| } |
| btn.addEventListener("click", () => { |
| activeProvider = activeProvider === provider ? null : provider; |
| syncControls(); |
| render(); |
| }); |
| legend.append(btn); |
| providerButtons.push(btn); |
| } |
| |
| function syncControls() { |
| tabs.forEach((t) => t.setAttribute("aria-selected", String(t.dataset.effMetric === activeMetric))); |
| ossToggle.setAttribute("aria-pressed", String(openOnly)); |
| providerButtons.forEach((b) => b.setAttribute("aria-pressed", String(b.dataset.provider === activeProvider))); |
| } |
| |
| tabs.forEach((tab) => { |
| tab.addEventListener("click", () => { |
| activeMetric = tab.dataset.effMetric; |
| syncControls(); |
| render(); |
| }); |
| }); |
| ossToggle.addEventListener("click", () => { |
| openOnly = !openOnly; |
| syncControls(); |
| render(); |
| }); |
| |
| |
| const panels = { |
| performance: document.querySelector('[data-view-panel="performance"]'), |
| efficiency: document.querySelector('[data-view-panel="efficiency"]') |
| }; |
| const seg = document.querySelector(".view-seg"); |
| const viewButtons = Array.from(document.querySelectorAll("[data-view]")); |
| const setView = (view) => { |
| panels.performance.hidden = view !== "performance"; |
| panels.efficiency.hidden = view !== "efficiency"; |
| seg.dataset.active = view; |
| viewButtons.forEach((b) => b.setAttribute("aria-pressed", String(b.dataset.view === view))); |
| }; |
| viewButtons.forEach((btn) => { |
| btn.addEventListener("click", () => setView(btn.dataset.view)); |
| }); |
| |
| syncControls(); |
| render(); |
| |
| |
| const equalize = () => { |
| panels.performance.style.minHeight = ""; |
| panels.efficiency.style.minHeight = ""; |
| const width = panels.performance.parentElement.clientWidth; |
| const measure = (panel) => { |
| const wasHidden = panel.hidden; |
| const css = panel.style.cssText; |
| panel.hidden = false; |
| panel.style.cssText = `position:absolute;visibility:hidden;left:-9999px;top:0;width:${width}px;`; |
| const h = panel.offsetHeight; |
| panel.style.cssText = css; |
| panel.hidden = wasHidden; |
| return h; |
| }; |
| const target = Math.max(measure(panels.performance), measure(panels.efficiency)); |
| panels.performance.style.minHeight = target + "px"; |
| panels.efficiency.style.minHeight = target + "px"; |
| }; |
| equalize(); |
| window.addEventListener("load", equalize); |
| let eqTimer; |
| window.addEventListener("resize", () => { |
| clearTimeout(eqTimer); |
| eqTimer = setTimeout(equalize, 150); |
| }); |
| |
| if (location.hash.includes("view=efficiency")) setView("efficiency"); |
| })(); |
| </script> |
|
|
| <svg width="0" height="0" style="position:absolute" aria-hidden="true"> |
| <defs> |
| <filter id="pen-chart" x="-3%" y="-3%" width="106%" height="106%"> |
| <feTurbulence type="fractalNoise" baseFrequency="0.03" numOctaves="2" seed="5" result="n" /> |
| <feDisplacementMap in="SourceGraphic" in2="n" scale="2.2" /> |
| </filter> |
| <filter id="pen-soft" x="-3%" y="-3%" width="106%" height="106%"> |
| <feTurbulence type="fractalNoise" baseFrequency="0.05" numOctaves="2" seed="8" result="n" /> |
| <feDisplacementMap in="SourceGraphic" in2="n" scale="1.1" /> |
| </filter> |
| </defs> |
| </svg> |
| <div class="or-thumb" id="or-thumb" role="button" tabindex="0" aria-label="Open API price chart"> |
| <div class="or-thumb-title">API $/M tokens</div> |
| <svg id="or-thumb-svg" viewBox="0 0 320 300" aria-hidden="true"></svg> |
| <div class="or-cta">Tap to enlarge · OpenRouter</div> |
| </div> |
| <div class="or-backdrop" id="or-backdrop" hidden></div> |
| <div class="or-modal" id="or-modal" hidden role="dialog" aria-modal="true" aria-label="API price chart"> |
| <div class="or-panel"> |
| <div class="or-head"> |
| <div> |
| <p class="or-kicker">OpenRouter · Aug 2026</p> |
| <h3 class="or-title" id="or-title">Input price per 1M tokens</h3> |
| </div> |
| <div class="or-switch" role="tablist" aria-label="Price direction"> |
| <button class="or-io" data-io="in" aria-selected="true" type="button">In</button> |
| <button class="or-io" data-io="out" aria-selected="false" type="button">Out</button> |
| </div> |
| <button class="or-close" id="or-close" type="button" aria-label="Close">×</button> |
| </div> |
| <svg id="or-chart" viewBox="0 0 1120 608" role="img" aria-label="Dot chart of API prices per million tokens"></svg> |
| <p class="or-note">26 priced AutoMedBench Lite models · log scale · sorted by blended (3:1) price</p> |
| </div> |
| </div> |
| <button class="theme-fab" id="amb-theme-toggle" type="button" aria-pressed="false">☾ Dark mode</button> |
| <script> |
| |
| (() => { |
| |
| const MODELS = [ |
| { n: "Claude Opus 4.8", p: "Anthropic", i: 5, o: 25 }, |
| { n: "Claude Opus 4.6", p: "Anthropic", i: 5, o: 25 }, |
| { n: "Gemini 3.1 Pro", p: "Google", i: 2, o: 12 }, |
| { n: "GPT-5.6 Sol", p: "OpenAI", i: 5, o: 30 }, |
| { n: "Claude Sonnet 5", p: "Anthropic", i: 2, o: 10 }, |
| { n: "GPT-5.5", p: "OpenAI", i: 5, o: 30 }, |
| { n: "GLM-5", p: "Z.ai", i: 0.95, o: 2.55 }, |
| { n: "DeepSeek V4 Pro", p: "DeepSeek", i: 0.435, o: 0.87 }, |
| { n: "Qwen3.5-397B", p: "Alibaba Cloud", i: 0.39, o: 2.34 }, |
| { n: "GPT-5.6 Terra", p: "OpenAI", i: 1, o: 6 }, |
| { n: "MiniMax M2.5", p: "MiniMax", i: 0.15, o: 0.9 }, |
| { n: "GPT-5.4", p: "OpenAI", i: 2.5, o: 15 }, |
| { n: "Qwen3.6-27B", p: "Alibaba Cloud", i: 0.289, o: 2.4 }, |
| { n: "GPT-5.6 Luna", p: "OpenAI", i: 0.1, o: 0.6 }, |
| { n: "Qwen3.5-35B-A3B", p: "Alibaba Cloud", i: 0.14, o: 1 }, |
| { n: "GLM-5.2", p: "Z.ai", i: 0.76, o: 2.42 }, |
| { n: "Nemotron 3.5 Lightning 30B-A3B", p: "NVIDIA", i: 0.1, o: 0.25 }, |
| { n: "Gemma 4 26B-A4B", p: "Google", i: 0.12, o: 0.40 }, |
| { n: "Gemma 4 31B", p: "Google", i: 0.10, o: 0.34 }, |
| { n: "Gemma 4 12B", p: "Google", i: 0.05, o: 0.15 }, |
| { n: "Gemma 4 E4B", p: "Google", i: 0.06, o: 0.12 }, |
| { n: "Nemotron 3 Nano 30B-A3B", p: "NVIDIA", i: 0.05, o: 0.20 }, |
| { n: "Nemotron 3 Nano 4B", p: "NVIDIA", i: 0.05, o: 0.20 }, |
| { n: "Gemma 4 E2B", p: "Google", i: 0.06, o: 0.12 }, |
| { n: "GPT-OSS-120B", p: "OpenAI", i: 0.037, o: 0.17 }, |
| { n: "GPT-OSS-20B", p: "OpenAI", i: 0.03, o: 0.13 }, |
| { n: "Qwen3.5-9B", p: "Alibaba Cloud", i: 0.1, o: 0.15 } |
| ]; |
| for (const m of MODELS) m.blend = 0.75 * m.i + 0.25 * m.o; |
| const ROWS = [...MODELS].sort((a, b) => b.blend - a.blend); |
| |
| const COLORS = { |
| "Anthropic": "#bd907d", "OpenAI": "#858e87", "Google": "#8da28e", |
| "Z.ai": "#8ca1af", "DeepSeek": "#8d93a8", "Alibaba Cloud": "#b99a7c", |
| "MiniMax": "#a18d99", "NVIDIA": "#8f99a6" |
| }; |
| const PAL = { |
| light: { grid: "rgba(115,122,109,0.14)", tick: "#9aa093", label: "#3b4538", ink: "#3b4538" }, |
| dark: { grid: "rgba(170,176,159,0.12)", tick: "#8f9484", label: "#e9e5d7", ink: "#d8d3c3" } |
| }; |
| const isDark = () => document.documentElement.dataset.theme === "dark"; |
| const pal = () => (isDark() ? PAL.dark : PAL.light); |
| |
| const SVGNS = "http://www.w3.org/2000/svg"; |
| const el = (tag, attrs = {}) => { |
| const node = document.createElementNS(SVGNS, tag); |
| for (const [k, v] of Object.entries(attrs)) node.setAttribute(k, v); |
| return node; |
| }; |
| const text = (x, y, content, attrs = {}) => { |
| const node = el("text", { x, y, ...attrs }); |
| node.textContent = content; |
| return node; |
| }; |
| const fmtPrice = (v) => |
| Number.isInteger(v) ? "$" + v |
| : v >= 1 ? "$" + v.toFixed(2) |
| : "$" + (Math.round(v * 1000) / 1000); |
| |
| const DMIN = 0.03, DMAX = 40; |
| const TICKS = [[0.05, "$0.05"], [0.1, "$0.10"], [0.2, "$0.20"], [0.5, "$0.50"], [1, "$1"], [2, "$2"], [5, "$5"], [10, "$10"], [20, "$20"], [30, "$30"]]; |
| const xLog = (v, l, w) => l + ((Math.log10(v) - Math.log10(DMIN)) / (Math.log10(DMAX) - Math.log10(DMIN))) * w; |
| |
| let activeIO = "in"; |
| const chart = document.getElementById("or-chart"); |
| const titleEl = document.getElementById("or-title"); |
| |
| function renderChart() { |
| const P = pal(); |
| const W = 1120, M = { t: 30, r: 76, b: 56, l: 190 }, ROW = 29; |
| const plotH = ROWS.length * ROW; |
| const H = M.t + plotH + M.b; |
| const PW = W - M.l - M.r; |
| chart.setAttribute("viewBox", "0 0 " + W + " " + H); |
| chart.replaceChildren(); |
| titleEl.textContent = (activeIO === "in" ? "Input" : "Output") + " price per 1M tokens"; |
| |
| const sketch = el("g", { filter: "url(#pen-chart)" }); |
| chart.append(sketch); |
| const xS = (v) => xLog(v, M.l, PW); |
| |
| for (const [v, label] of TICKS) { |
| const x = xS(v); |
| sketch.append(el("line", { x1: x, y1: M.t, x2: x, y2: M.t + plotH, stroke: P.grid })); |
| chart.append(text(x, M.t + plotH + 22, label, { "text-anchor": "middle", fill: P.tick, "font-size": "12.5", "font-family": "SFMono-Regular, Consolas, monospace" })); |
| } |
| sketch.append(el("line", { x1: M.l, y1: M.t, x2: M.l, y2: M.t + plotH, stroke: P.ink, "stroke-width": "2" })); |
| const xt = text(M.l + PW / 2, H - 10, (activeIO === "in" ? "Input" : "Output") + " $/M tokens (log)", { |
| "text-anchor": "middle", fill: P.tick, "font-size": "12.5", "font-weight": "750", "letter-spacing": "0.08em" |
| }); |
| xt.style.textTransform = "uppercase"; |
| chart.append(xt); |
| |
| ROWS.forEach((m, i) => { |
| const y = M.t + (i + 0.5) * ROW; |
| const c = COLORS[m.p] || "#9a8fa2"; |
| chart.append(text(M.l - 24, y + 5, m.n, { |
| "text-anchor": "end", fill: P.label, "font-size": "14.5", "font-weight": "600", "letter-spacing": "-0.01em" |
| })); |
| sketch.append(el("circle", { cx: M.l - 12, cy: y, r: 4, fill: c })); |
| const xv = xS(activeIO === "in" ? m.i : m.o); |
| sketch.append(el("circle", { cx: xv, cy: y, r: 9.5, fill: c, stroke: P.ink, "stroke-width": "1.6" })); |
| chart.append(text(xv + 16, y + 5, fmtPrice(activeIO === "in" ? m.i : m.o), { |
| "text-anchor": "start", fill: P.tick, "font-size": "13", "font-family": "SFMono-Regular, Consolas, monospace" |
| })); |
| }); |
| } |
| |
| const thumbSvg = document.getElementById("or-thumb-svg"); |
| function renderThumb() { |
| const P = pal(); |
| const W = 320, ROW = 15, MT = 14, ML = 14, MR = 14; |
| const H = MT + ROWS.length * ROW + 12; |
| const PW = W - ML - MR; |
| thumbSvg.setAttribute("viewBox", "0 0 " + W + " " + H); |
| thumbSvg.replaceChildren(); |
| const sketch = el("g", { filter: "url(#pen-chart)" }); |
| thumbSvg.append(sketch); |
| const xS = (v) => xLog(v, ML, PW); |
| for (const v of [0.1, 1, 10]) { |
| sketch.append(el("line", { x1: xS(v), y1: MT - 4, x2: xS(v), y2: H - 8, stroke: P.grid })); |
| } |
| sketch.append(el("line", { x1: ML, y1: MT - 4, x2: ML, y2: H - 8, stroke: P.ink, "stroke-width": "1.6" })); |
| ROWS.forEach((m, i) => { |
| const y = MT + (i + 0.5) * ROW; |
| const c = COLORS[m.p] || "#9a8fa2"; |
| sketch.append(el("circle", { cx: xS(m.i), cy: y, r: 3.6, fill: "none", stroke: c, "stroke-width": "1.6" })); |
| sketch.append(el("circle", { cx: xS(m.o), cy: y, r: 4.2, fill: c })); |
| }); |
| } |
| |
| document.querySelectorAll(".or-io").forEach((btn) => { |
| btn.addEventListener("click", () => { |
| activeIO = btn.dataset.io; |
| document.querySelectorAll(".or-io").forEach((b) => |
| b.setAttribute("aria-selected", String(b === btn))); |
| renderChart(); |
| }); |
| }); |
| |
| const thumb = document.getElementById("or-thumb"); |
| const backdrop = document.getElementById("or-backdrop"); |
| const modal = document.getElementById("or-modal"); |
| function openOR() { |
| backdrop.hidden = false; |
| modal.hidden = false; |
| thumb.classList.add("away"); |
| requestAnimationFrame(() => requestAnimationFrame(() => { |
| backdrop.classList.add("show"); |
| modal.classList.add("show"); |
| })); |
| } |
| function closeOR() { |
| backdrop.classList.remove("show"); |
| modal.classList.remove("show"); |
| thumb.classList.remove("away"); |
| setTimeout(() => { backdrop.hidden = true; modal.hidden = true; }, 480); |
| } |
| thumb.addEventListener("click", openOR); |
| thumb.addEventListener("keydown", (e) => { |
| if (e.key === "Enter" || e.key === " ") { e.preventDefault(); openOR(); } |
| }); |
| backdrop.addEventListener("click", closeOR); |
| document.getElementById("or-close").addEventListener("click", closeOR); |
| document.addEventListener("keydown", (e) => { |
| if (e.key === "Escape" && !modal.hidden) closeOR(); |
| }); |
| |
| const fab = document.getElementById("amb-theme-toggle"); |
| let theme = null; |
| try { theme = localStorage.getItem("amb-theme"); } catch (_) {} |
| if (theme !== "dark" && theme !== "light") { |
| theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; |
| } |
| function syncTheme() { |
| document.documentElement.dataset.theme = theme; |
| fab.setAttribute("aria-pressed", String(theme === "dark")); |
| fab.innerHTML = theme === "dark" ? "☼ Light mode" : "☾ Dark mode"; |
| } |
| fab.addEventListener("click", () => { |
| theme = theme === "dark" ? "light" : "dark"; |
| try { localStorage.setItem("amb-theme", theme); } catch (_) {} |
| syncTheme(); |
| renderThumb(); |
| renderChart(); |
| }); |
| |
| syncTheme(); |
| renderThumb(); |
| renderChart(); |
| })(); |
| |
| </script> |
| </body> |
| </html> |
|
|