SatoSakula commited on
Commit
b7673e6
·
verified ·
1 Parent(s): 3c0db96

English by default with an EN / 中文 switch; remove header links

Browse files
Files changed (1) hide show
  1. index.html +71 -91
index.html CHANGED
@@ -1,5 +1,5 @@
1
  <!doctype html>
2
- <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
3
  <title>MoveBench Leaderboard</title>
4
  <link rel="icon" href="https://keep-tech.github.io/MoveBench/assets/brand/movebench-mb-square.png">
5
  <style>
@@ -14,7 +14,7 @@ header{position:sticky;top:0;z-index:10;background:rgba(7,7,8,.86);backdrop-filt
14
  header .wrap{display:flex;align-items:center;gap:16px;height:58px}
15
  .brand{display:flex;align-items:center;gap:10px;font-weight:700;color:var(--ink);font-size:16px}
16
  .brand img{width:26px;height:26px;border-radius:6px}
17
- header nav{margin-left:auto;display:flex;gap:18px;font-size:13.5px}header nav a{color:var(--muted)}header nav a:hover{color:var(--ink);text-decoration:none}
18
  .hero{position:relative;overflow:hidden;border-bottom:1px solid var(--line)}
19
  .hero:before{content:"";position:absolute;inset:-40% -10% auto -10%;height:140%;background:radial-gradient(40% 50% at 20% 40%,rgba(95,227,154,.22),transparent 70%),radial-gradient(35% 45% at 55% 30%,rgba(246,164,58,.18),transparent 70%),radial-gradient(40% 50% at 85% 50%,rgba(232,92,200,.2),transparent 70%);pointer-events:none}
20
  .hero .wrap{position:relative;padding:56px 20px 40px}
@@ -76,127 +76,107 @@ th.l,td.l{text-align:left}
76
  .about{display:grid;grid-template-columns:1fr 1fr;gap:14px}.about h3{margin:0 0 8px;font-size:16px}.about ul{margin:0;padding-left:18px;color:var(--muted)}.about li{margin:4px 0}
77
  .pill{display:inline-block;font-size:12px;padding:2px 10px;border-radius:999px;border:1px solid var(--line2);color:var(--muted);margin:0 6px 6px 0}
78
  footer{border-top:1px solid var(--line);color:var(--faint);font-size:12.5px;padding:22px 0 40px}
79
- @media (max-width:860px){.stats{grid-template-columns:repeat(2,1fr)}.grid3,.prog,.about{grid-template-columns:1fr}.gb{grid-template-columns:120px 1fr}header nav{display:none}input{min-width:0;flex:1}}
80
  </style></head><body>
81
  <header><div class="wrap"><a class="brand" href="https://keep-tech.github.io/MoveBench/"><img src="https://keep-tech.github.io/MoveBench/assets/brand/movebench-mb-square.png" alt="">MoveBench</a>
82
- <nav><a href="https://huggingface.co/datasets/KeepaceAI/MoveBench">Dataset</a><a href="https://arxiv.org/abs/2610.26185">Paper</a><a href="https://github.com/Keep-Tech/MoveBench">GitHub</a><a href="https://keep-tech.github.io/MoveBench/">Website</a><a href="https://github.com/Keep-Tech/MoveBench/blob/main/docs/SUBMISSION.md">Submit</a></nav></div></header>
83
  <div class="hero"><div class="wrap">
84
- <div class="eyebrow">Leaderboard · Movement intelligence</div>
85
- <h1>MoveBench <span class="gt">运动科学大模型榜单</span></h1>
86
- <p class="lead">以专业、安全、体验为统一评价框架,在运动数据解读、个性化课程方案、专业知识问答三个真实服务场景中衡量大模型的能力与边界。A leaderboard for LLMs as sports and health coaches.</p>
87
  <div class="stats">
88
- <div class="stat"><b>25</b><span>参评模型 · models evaluated</span></div>
89
- <div class="stat"><b>809</b><span>评测题 · 499 open-ended + 310 choice</span></div>
90
- <div class="stat"><b>3</b><span>业务主题 · DA / PG / QA</span></div>
91
- <div class="stat"><b>3</b><span>评价层面 · safety / expertise / experience</span></div>
92
  </div></div></div>
93
  <main class="wrap">
94
  <div class="tabs" role="tablist">
95
- <button class="tab" role="tab" data-t="overall" aria-selected="true">总榜 Overall</button>
96
- <button class="tab" role="tab" data-t="scene">主题榜 Scenarios</button>
97
- <button class="tab" role="tab" data-t="cap">能力榜 Capability</button>
98
- <button class="tab" role="tab" data-t="type">题型榜 Question type</button>
99
- <button class="tab" role="tab" data-t="prog">进步榜 Progress</button>
100
- <button class="tab" role="tab" data-t="about">说明 About</button>
101
  </div>
102
-
103
  <section class="panel on" id="p-overall">
104
- <h2>总榜</h2><p class="sub">809 题全量评测,分数为百分制。点击表头排序。</p>
105
- <div class="controls"><input id="q" placeholder="搜索模型 Search models" aria-label="搜索模型"><select id="fam" aria-label="模型系列"><option value="all">全部系列 All families</option></select></div>
106
  <div class="tw"><table id="tbl"><thead>
107
- <tr class="grp"><th class="nosort" colspan="3"></th><th class="nosort" colspan="3">题型 Format</th><th class="nosort" colspan="3">主题 Scenario</th><th class="nosort" colspan="3">评价层面 Layer</th><th class="nosort"></th></tr>
108
  <tr id="hdr"></tr></thead><tbody></tbody></table></div>
109
- <p class="notes">† GPT-6 为 808 题(少 1 道选择题)。‡ DeepSeek V3.2 / V3:开放题用 V3.2、选择题用 V3 的混合结果。总分沿用原表,不由分项均值重算。带 <span class="hfb">HF</span> 标记的模型可跳转到其 Hugging Face 模型页。</p>
110
  </section>
111
-
112
- <section class="panel" id="p-scene">
113
- <h2>主题榜</h2><p class="sub">三个业务场景各自排名。所有模型在 PG 个性化课程方案上的得分普遍最低。</p>
114
- <div class="grid3" id="scenes"></div>
115
- </section>
116
-
117
- <section class="panel" id="p-cap">
118
- <h2>能力榜</h2><p class="sub">安全层、专业层、体验层并排对照。</p>
119
- <div class="controls"><select id="capSort" aria-label="排序"><option value="total">按总分排序</option><option value="safe">按安全层排序</option><option value="pro">按专业层排序</option><option value="exp">按体验层排序</option></select></div>
120
- <div class="card"><div class="legend" id="capLeg"></div><div class="gb" id="capChart"></div></div>
121
- </section>
122
-
123
- <section class="panel" id="p-type">
124
- <h2>题型榜</h2><p class="sub">单选、多选、开放问答并排对照。单选题已全部满分,区分度主要来自开放问答。</p>
125
- <div class="controls"><select id="typeSort" aria-label="排序"><option value="total">按总分排序</option><option value="ms">按多选排序</option><option value="oq">按开放问答排序</option></select></div>
126
- <div class="card"><div class="legend" id="typeLeg"></div><div class="gb" id="typeChart"></div></div>
127
- </section>
128
-
129
- <section class="panel" id="p-prog">
130
- <h2>进步榜</h2><p class="sub">同系列两个版本之间的总分变化。这里的“进步”指版本间分数差,不代表时间速度,也不能单独归因于版本升级。</p>
131
- <div class="prog" id="progCards"></div>
132
- <p class="notes">Qwen 系列只连接 Max → Max;32B、27B、35B-A3B、235B-A22B、397B-A17B 属于不同规模或架构,不作为连续升级链。</p>
133
- </section>
134
-
135
- <section class="panel" id="p-about">
136
- <h2>评测说明</h2><p class="sub">评价框架、评分方式与数据口径。</p>
137
  <div class="about">
138
- <div class="card"><h3>评价框架</h3>
139
- <span class="pill">安全 Safety</span><span class="pill">专业 Expertise</span><span class="pill">体验 Experience</span>
140
- <ul><li><b>DA 运动数据解读</b>:数据理解、指标解释与行动建议</li><li><b>PG 个性化课程方案</b>:目标适配、课程选择与方案编排</li><li><b>QA 专业知识问答</b>:知识准确、适用条件与表达质量</li></ul></div>
141
- <div class="card"><h3>评分方式</h3><ul>
142
- <li>开放题由三个 LLM judge 组成的加权评审团,依据专家编写的逐题 rubric 评分。</li>
143
- <li>选择题(单选、多选)按标准答案精确匹配评分。</li>
144
- <li>触犯安全红线的开放题记 0 分;总榜“红线置零”列为每个模型被置零的题数。</li></ul></div>
145
- <div class="card"><h3>数据口径</h3><ul>
146
- <li>分数为原表分数 × 100,保留 1 位小数。</li>
147
- <li>本页为 809 题全量评测结果。公开的 80 题子集成绩见 <a href="https://huggingface.co/datasets/KeepaceAI/MoveBench">数据集页</a>,两者不可混用。</li>
148
- <li>模型名称沿用原表写法。</li></ul></div>
149
- <div class="card"><h3>参与评测</h3><ul>
150
- <li>下载 <a href="https://huggingface.co/datasets/KeepaceAI/MoveBench">数据集</a>,用你的模型生成答案。</li>
151
- <li>按 <a href="https://github.com/Keep-Tech/MoveBench/blob/main/docs/SUBMISSION.md">提交指南</a> 提交答案文件,维护方评分审核后更新榜单。</li>
152
- <li>引用:<a href="https://arxiv.org/abs/2610.26185">MoveBench 论文</a>(arXiv 2610.26185)。</li></ul></div>
153
  </div></section>
154
  </main>
155
- <footer><div class="wrap">MoveBench Team × 首都体育学院 · 数据集与文档采用 CC BY 4.0 许可 · <a href="https://keep-tech.github.io/MoveBench/">keep-tech.github.io/MoveBench</a></div></footer>
156
  <script>
157
- const M=[{"rank": 1, "name": "GPT-5.2", "cov": "全量", "total": 0.924, "oq": 0.895, "mcq": 0.971, "DA": 0.94, "PG": 0.872, "QA": 0.957, "ss": 1.0, "ms": 0.954, "safe": 0.891, "pro": 0.922, "exp": 0.909, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "GPT", "hf": null}, {"rank": 2, "name": "GLM-5.3", "cov": "全量", "total": 0.922, "oq": 0.889, "mcq": 0.974, "DA": 0.935, "PG": 0.873, "QA": 0.955, "ss": 1.0, "ms": 0.959, "safe": 0.905, "pro": 0.913, "exp": 0.907, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "GLM", "hf": "zai-org/GLM-5.3"}, {"rank": 3, "name": "Claude Opus 5.5", "cov": "全量", "total": 0.921, "oq": 0.895, "mcq": 0.965, "DA": 0.926, "PG": 0.88, "QA": 0.957, "ss": 1.0, "ms": 0.944, "safe": 0.916, "pro": 0.919, "exp": 0.915, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Claude", "hf": null}, {"rank": 4, "name": "Claude 4.6 Opus", "cov": "全量", "total": 0.912, "oq": 0.87, "mcq": 0.981, "DA": 0.925, "PG": 0.859, "QA": 0.95, "ss": 1.0, "ms": 0.97, "safe": 0.856, "pro": 0.909, "exp": 0.895, "n": 809, "nOq": 499, "nMcq": 310, "zero": 1, "family": "Claude", "hf": null}, {"rank": 5, "name": "Qwen3.8 Max", "cov": "全量", "total": 0.912, "oq": 0.868, "mcq": 0.984, "DA": 0.918, "PG": 0.881, "QA": 0.936, "ss": 1.0, "ms": 0.975, "safe": 0.915, "pro": 0.88, "exp": 0.9, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Qwen", "hf": null}, {"rank": 6, "name": "Doubao Seed 2.1 Pro", "cov": "全量", "total": 0.91, "oq": 0.861, "mcq": 0.987, "DA": 0.907, "PG": 0.882, "QA": 0.94, "ss": 1.0, "ms": 0.98, "safe": 0.892, "pro": 0.879, "exp": 0.898, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Doubao", "hf": null}, {"rank": 7, "name": "Kimi K3", "cov": "全量", "total": 0.909, "oq": 0.865, "mcq": 0.981, "DA": 0.922, "PG": 0.863, "QA": 0.941, "ss": 1.0, "ms": 0.97, "safe": 0.895, "pro": 0.89, "exp": 0.891, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Kimi", "hf": "moonshotai/Kimi-K3"}, {"rank": 8, "name": "Qwen3.5 397B-A17B", "cov": "全量", "total": 0.909, "oq": 0.872, "mcq": 0.968, "DA": 0.929, "PG": 0.83, "QA": 0.964, "ss": 1.0, "ms": 0.949, "safe": 0.894, "pro": 0.91, "exp": 0.901, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Qwen", "hf": "Qwen/Qwen3.5-397B-A17B"}, {"rank": 9, "name": "MiniMax M3", "cov": "全量", "total": 0.907, "oq": 0.874, "mcq": 0.961, "DA": 0.927, "PG": 0.838, "QA": 0.954, "ss": 1.0, "ms": 0.939, "safe": 0.926, "pro": 0.909, "exp": 0.879, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "MiniMax", "hf": "MiniMaxAI/MiniMax-M3"}, {"rank": 10, "name": "Qwen3.5 27B", "cov": "全量", "total": 0.899, "oq": 0.856, "mcq": 0.968, "DA": 0.925, "PG": 0.808, "QA": 0.96, "ss": 1.0, "ms": 0.949, "safe": 0.869, "pro": 0.897, "exp": 0.894, "n": 809, "nOq": 499, "nMcq": 310, "zero": 1, "family": "Qwen", "hf": "Qwen/Qwen3.5-27B"}, {"rank": 11, "name": "MiMo v2.6 Pro", "cov": "全量", "total": 0.898, "oq": 0.85, "mcq": 0.974, "DA": 0.917, "PG": 0.855, "QA": 0.918, "ss": 1.0, "ms": 0.959, "safe": 0.869, "pro": 0.872, "exp": 0.876, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "MiMo", "hf": null}, {"rank": 12, "name": "Qwen3.5 35B-A3B", "cov": "全量", "total": 0.891, "oq": 0.849, "mcq": 0.958, "DA": 0.921, "PG": 0.799, "QA": 0.948, "ss": 1.0, "ms": 0.934, "safe": 0.858, "pro": 0.889, "exp": 0.885, "n": 809, "nOq": 499, "nMcq": 310, "zero": 3, "family": "Qwen", "hf": "Qwen/Qwen3.5-35B-A3B"}, {"rank": 13, "name": "Gemini 4 Argon", "cov": "全量", "total": 0.89, "oq": 0.83, "mcq": 0.987, "DA": 0.918, "PG": 0.84, "QA": 0.908, "ss": 1.0, "ms": 0.98, "safe": 0.824, "pro": 0.874, "exp": 0.867, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Gemini", "hf": null}, {"rank": 14, "name": "HY3", "cov": "全量", "total": 0.887, "oq": 0.845, "mcq": 0.955, "DA": 0.909, "PG": 0.826, "QA": 0.924, "ss": 1.0, "ms": 0.929, "safe": 0.868, "pro": 0.886, "exp": 0.867, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "HY", "hf": "tencent/Hy3"}, {"rank": 15, "name": "GPT-6", "cov": "全量", "total": 0.88, "oq": 0.846, "mcq": 0.935, "DA": 0.885, "PG": 0.858, "QA": 0.898, "ss": 1.0, "ms": 0.898, "safe": 0.889, "pro": 0.869, "exp": 0.873, "n": 808, "nOq": 499, "nMcq": 309, "zero": 0, "family": "GPT", "hf": null}, {"rank": 16, "name": "Qwen3 Max", "cov": "全量", "total": 0.873, "oq": 0.806, "mcq": 0.981, "DA": 0.905, "PG": 0.804, "QA": 0.906, "ss": 1.0, "ms": 0.97, "safe": 0.772, "pro": 0.851, "exp": 0.861, "n": 809, "nOq": 499, "nMcq": 310, "zero": 2, "family": "Qwen", "hf": null}, {"rank": 17, "name": "DeepSeek R1", "cov": "全量", "total": 0.861, "oq": 0.797, "mcq": 0.965, "DA": 0.892, "PG": 0.78, "QA": 0.907, "ss": 1.0, "ms": 0.944, "safe": 0.788, "pro": 0.84, "exp": 0.852, "n": 809, "nOq": 499, "nMcq": 310, "zero": 2, "family": "DeepSeek", "hf": "deepseek-ai/DeepSeek-R1"}, {"rank": 18, "name": "Doubao Seed 2.0 Pro", "cov": "全量", "total": 0.856, "oq": 0.786, "mcq": 0.968, "DA": 0.877, "PG": 0.783, "QA": 0.903, "ss": 1.0, "ms": 0.949, "safe": 0.784, "pro": 0.836, "exp": 0.849, "n": 809, "nOq": 499, "nMcq": 310, "zero": 2, "family": "Doubao", "hf": null}, {"rank": 19, "name": "Kimi K2", "cov": "全量", "total": 0.847, "oq": 0.765, "mcq": 0.981, "DA": 0.895, "PG": 0.737, "QA": 0.903, "ss": 1.0, "ms": 0.97, "safe": 0.753, "pro": 0.83, "exp": 0.822, "n": 809, "nOq": 499, "nMcq": 310, "zero": 6, "family": "Kimi", "hf": null}, {"rank": 20, "name": "GLM-4.7", "cov": "全量", "total": 0.843, "oq": 0.79, "mcq": 0.929, "DA": 0.894, "PG": 0.716, "QA": 0.911, "ss": 1.0, "ms": 0.888, "safe": 0.752, "pro": 0.854, "exp": 0.854, "n": 809, "nOq": 499, "nMcq": 310, "zero": 4, "family": "GLM", "hf": "zai-org/GLM-4.7"}, {"rank": 21, "name": "Grok 4.1 Fast", "cov": "全量", "total": 0.842, "oq": 0.77, "mcq": 0.958, "DA": 0.869, "PG": 0.766, "QA": 0.887, "ss": 1.0, "ms": 0.934, "safe": 0.714, "pro": 0.809, "exp": 0.834, "n": 809, "nOq": 499, "nMcq": 310, "zero": 3, "family": "Grok", "hf": null}, {"rank": 22, "name": "DeepSeek V3.2/DeepSeek V3", "cov": "全量(OQ=V3.2/MCQ=V3)", "total": 0.842, "oq": 0.769, "mcq": 0.958, "DA": 0.847, "PG": 0.787, "QA": 0.89, "ss": 1.0, "ms": 0.934, "safe": 0.737, "pro": 0.808, "exp": 0.832, "n": 809, "nOq": 499, "nMcq": 310, "zero": 8, "family": "DeepSeek", "hf": null}, {"rank": 23, "name": "GPT-OSS 120B", "cov": "全量", "total": 0.81, "oq": 0.723, "mcq": 0.952, "DA": 0.827, "PG": 0.723, "QA": 0.878, "ss": 1.0, "ms": 0.924, "safe": 0.672, "pro": 0.769, "exp": 0.799, "n": 809, "nOq": 499, "nMcq": 310, "zero": 10, "family": "GPT", "hf": "openai/gpt-oss-120b"}, {"rank": 24, "name": "Qwen3 235B-A22B", "cov": "全量", "total": 0.78, "oq": 0.672, "mcq": 0.955, "DA": 0.81, "PG": 0.686, "QA": 0.84, "ss": 1.0, "ms": 0.929, "safe": 0.59, "pro": 0.721, "exp": 0.769, "n": 809, "nOq": 499, "nMcq": 310, "zero": 10, "family": "Qwen", "hf": "Qwen/Qwen3-235B-A22B"}, {"rank": 25, "name": "Qwen3 32B", "cov": "全量", "total": 0.734, "oq": 0.595, "mcq": 0.958, "DA": 0.77, "PG": 0.636, "QA": 0.79, "ss": 1.0, "ms": 0.934, "safe": 0.516, "pro": 0.636, "exp": 0.711, "n": 809, "nOq": 499, "nMcq": 310, "zero": 21, "family": "Qwen", "hf": "Qwen/Qwen3-32B"}];
 
 
158
  const f=v=>(v*100).toFixed(1);
159
  const esc=s=>String(s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
160
  const flag=m=>m.name==='GPT-6'?'†':m.name.startsWith('DeepSeek V3')?'‡':'';
161
  const S=['var(--s1)','var(--s2)','var(--s3)'];
162
- // tabs
163
  document.querySelectorAll('.tab').forEach(b=>b.onclick=()=>{document.querySelectorAll('.tab').forEach(x=>x.setAttribute('aria-selected',x===b));document.querySelectorAll('.panel').forEach(p=>p.classList.toggle('on',p.id==='p-'+b.dataset.t));try{history.replaceState(null,'','#'+b.dataset.t)}catch(e){}});
164
  const fromHash=()=>{const h=location.hash.slice(1);const b=h&&document.querySelector(`.tab[data-t="${h}"]`);if(b)b.click();};fromHash();addEventListener('hashchange',fromHash);
165
- // overall table
166
- const COLS=[['rank','#','l'],['name','模型 Model','l'],['total','总分 Overall'],['oq','开放题 OQ'],['mcq','选择题 MCQ'],['ss','单选 SS'],['DA','DA'],['PG','PG'],['QA','QA'],['safe','安全'],['pro','专业'],['exp','体验'],['zero','红线置零']];
167
- // rebalance grouping: OQ/MCQ/SS? keep format = OQ, MCQ, SS
168
  let sk='total',sd=true;
169
- const fams=[...new Set(M.map(m=>m.family))];document.getElementById('fam').innerHTML+=fams.map(x=>`<option>${esc(x)}</option>`).join('');
170
  function rankOf(rows,k){let prev=null,r=0;return rows.map((m,i)=>{if(prev===null||Math.abs(m[k]-prev)>1e-9)r=i+1;prev=m[k];return r;});}
171
  function renderTable(){
172
- document.getElementById('hdr').innerHTML=COLS.map(([k,t,c])=>`<th class="${c||''} ${k===sk?'act':''}" data-k="${k}" aria-sort="${k===sk?(sd?'descending':'ascending'):'none'}">${t}${k===sk?` <span class="ar">${sd?'↓':'↑'}</span>`:''}</th>`).join('');
173
  document.querySelectorAll('#hdr th').forEach(th=>th.onclick=()=>{const k=th.dataset.k;if(k===sk)sd=!sd;else{sk=k;sd=!(k==='rank'||k==='name'||k==='zero');}renderTable();});
174
- const q=document.getElementById('q').value.toLowerCase().trim(),fa=document.getElementById('fam').value;
175
  let rows=M.filter(m=>(fa==='all'||m.family===fa)&&(m.name+' '+m.family).toLowerCase().includes(q));
176
  const k=sk==='rank'?'total':sk;
177
- rows.sort((a,b)=>{if(k==='name')return sd?b.name.localeCompare(a.name):a.name.localeCompare(b.name);const d=sd?b[k]-a[k]:a[k]-b[k];return d||a.rank-b.rank;});
178
  if(sk==='rank'&&!sd)rows.reverse();
179
- document.querySelector('#tbl tbody').innerHTML=rows.length?rows.map(m=>{const r=m.rank;return `<tr class="r${r}">
180
- <td class="l"><span class="rk">${r}</span></td>
181
  <td class="l"><span class="mname">${esc(m.name)}${flag(m)}</span>${m.hf?`<a class="hfb" href="https://huggingface.co/${m.hf}" title="${m.hf}">HF</a>`:''}<span class="fam">${esc(m.family)}</span></td>
182
  <td><div class="tot"><b>${f(m.total)}</b><div class="mini"><i style="width:${m.total*100}%"></i></div></div></td>
183
- <td>${f(m.oq)}</td><td>${f(m.mcq)}</td><td>${f(m.ss)}</td><td>${f(m.DA)}</td><td>${f(m.PG)}</td><td>${f(m.QA)}</td><td>${f(m.safe)}</td><td>${f(m.pro)}</td><td>${f(m.exp)}</td><td>${m.zero}</td></tr>`}).join(''):'<tr><td colspan="13" class="l">没有匹配的模型</td></tr>';
184
  }
185
- document.getElementById('q').oninput=renderTable;document.getElementById('fam').onchange=renderTable;renderTable();
186
- // scenarios
187
- const SC=[['DA','运动数据解读','数据理解、指标解释与行动建议','var(--g1)'],['PG','个性化课程方案','目标适配、课程选择与方案编排','var(--g3)'],['QA','专业知识问答','知识准确、适用条件与表达质量','var(--g5)']];
188
- document.getElementById('scenes').innerHTML=SC.map(([k,t,d,c])=>{const rows=[...M].sort((a,b)=>b[k]-a[k]||a.rank-b.rank);const rk=rankOf(rows,k);return `<div class="card sc"><h3>${k} · ${t}</h3><div class="d">${d} · 最高 ${f(rows[0][k])}</div><div class="bars">${rows.map((m,i)=>`<div class="bar" title="${esc(m.name)} · ${k} ${f(m[k])}"><span class="n">${rk[i]}</span><span class="nm2">${esc(m.name)}${flag(m)}</span><div class="t"><i style="width:${m[k]*100}%;background:${c}"></i></div><span class="v">${f(m[k])}</span></div>`).join('')}</div></div>`}).join('');
189
- // grouped
190
- function grouped(el,leg,keys,labels,sortKey){
191
- document.getElementById(leg).innerHTML=labels.map((l,i)=>`<span><i style="background:${S[i]}"></i>${l}</span>`).join('');
192
  const rows=[...M].sort((a,b)=>b[sortKey]-a[sortKey]||a.rank-b.rank);
193
- document.getElementById(el).innerHTML=rows.map(m=>`<div class="nm" title="${esc(m.name)}">${esc(m.name)}${flag(m)}</div><div class="rows">${keys.map((k,i)=>`<div class="rr" title="${esc(m.name)} · ${labels[i]} ${f(m[k])}"><div class="tr"><i style="width:${m[k]*100}%;background:${S[i]}"></i></div><b>${f(m[k])}</b></div>`).join('')}</div>`).join('');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  }
195
- const cs=document.getElementById('capSort'),ts=document.getElementById('typeSort');
196
- const rc=()=>grouped('capChart','capLeg',['safe','pro','exp'],['安全层 Safety','专业层 Expertise','体验层 Experience'],cs.value);
197
- const rt=()=>grouped('typeChart','typeLeg',['ss','ms','oq'],['单选 SS','多选 MS','开放问答 OQ'],ts.value);
198
- cs.onchange=rc;ts.onchange=rt;rc();rt();
199
- // progress
200
- const P=[['GLM','GLM-4.7','GLM-5.3'],['Qwen Max','Qwen3 Max','Qwen3.8 Max'],['Claude Opus','Claude 4.6 Opus','Claude Opus 5.5']].map(([fa,a,b])=>{const A=M.find(m=>m.name===a),B=M.find(m=>m.name===b);return {fa,A,B,d:(B.total-A.total)*100,rel:(B.total/A.total-1)*100};}).sort((x,y)=>y.d-x.d);
201
- document.getElementById('progCards').innerHTML=P.map((p,i)=>`<div class="card pc"><div class="fam2">${p.fa} · 增幅第 ${i+1}</div><div class="dl" style="color:${['var(--g1)','var(--g2)','var(--g3)'][i]}">+${p.d.toFixed(1)}<small>分 · +${p.rel.toFixed(1)}%</small></div><div class="pair"><div>${esc(p.A.name)}<b>${f(p.A.total)}</b></div><span class="arrow">→</span><div>${esc(p.B.name)}<b>${f(p.B.total)}</b></div></div><p>安全 ${f(p.A.safe)} → ${f(p.B.safe)} · PG ${f(p.A.PG)} → ${f(p.B.PG)}</p></div>`).join('');
202
  </script></body></html>
 
1
  <!doctype html>
2
+ <html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
3
  <title>MoveBench Leaderboard</title>
4
  <link rel="icon" href="https://keep-tech.github.io/MoveBench/assets/brand/movebench-mb-square.png">
5
  <style>
 
14
  header .wrap{display:flex;align-items:center;gap:16px;height:58px}
15
  .brand{display:flex;align-items:center;gap:10px;font-weight:700;color:var(--ink);font-size:16px}
16
  .brand img{width:26px;height:26px;border-radius:6px}
17
+ .lang{margin-left:auto;display:flex;background:var(--panel);border:1px solid var(--line2);border-radius:999px;padding:3px}.lang button{background:none;border:0;color:var(--muted);font:inherit;font-size:13px;padding:5px 14px;border-radius:999px;cursor:pointer}.lang button[aria-pressed=true]{background:var(--ink);color:#0b0b0c;font-weight:600}
18
  .hero{position:relative;overflow:hidden;border-bottom:1px solid var(--line)}
19
  .hero:before{content:"";position:absolute;inset:-40% -10% auto -10%;height:140%;background:radial-gradient(40% 50% at 20% 40%,rgba(95,227,154,.22),transparent 70%),radial-gradient(35% 45% at 55% 30%,rgba(246,164,58,.18),transparent 70%),radial-gradient(40% 50% at 85% 50%,rgba(232,92,200,.2),transparent 70%);pointer-events:none}
20
  .hero .wrap{position:relative;padding:56px 20px 40px}
 
76
  .about{display:grid;grid-template-columns:1fr 1fr;gap:14px}.about h3{margin:0 0 8px;font-size:16px}.about ul{margin:0;padding-left:18px;color:var(--muted)}.about li{margin:4px 0}
77
  .pill{display:inline-block;font-size:12px;padding:2px 10px;border-radius:999px;border:1px solid var(--line2);color:var(--muted);margin:0 6px 6px 0}
78
  footer{border-top:1px solid var(--line);color:var(--faint);font-size:12.5px;padding:22px 0 40px}
79
+ @media (max-width:860px){.stats{grid-template-columns:repeat(2,1fr)}.grid3,.prog,.about{grid-template-columns:1fr}.gb{grid-template-columns:120px 1fr}input{min-width:0;flex:1}}
80
  </style></head><body>
81
  <header><div class="wrap"><a class="brand" href="https://keep-tech.github.io/MoveBench/"><img src="https://keep-tech.github.io/MoveBench/assets/brand/movebench-mb-square.png" alt="">MoveBench</a>
82
+ <div class="lang" role="group" aria-label="Language"><button data-lang="en" aria-pressed="true">EN</button><button data-lang="zh" aria-pressed="false">中文</button></div></div></header>
83
  <div class="hero"><div class="wrap">
84
+ <div class="eyebrow" data-i18n="eyebrow"></div>
85
+ <h1><span data-i18n="h1a"></span> <span class="gt" data-i18n="h1b"></span></h1>
86
+ <p class="lead" data-i18n="lead"></p>
87
  <div class="stats">
88
+ <div class="stat"><b>25</b><span data-i18n="st1"></span></div><div class="stat"><b>809</b><span data-i18n="st2"></span></div><div class="stat"><b>3</b><span data-i18n="st3"></span></div><div class="stat"><b>3</b><span data-i18n="st4"></span></div>
 
 
 
89
  </div></div></div>
90
  <main class="wrap">
91
  <div class="tabs" role="tablist">
92
+ <button class="tab" role="tab" data-t="overall" aria-selected="true" data-i18n="t_overall"></button>
93
+ <button class="tab" role="tab" data-t="scene" data-i18n="t_scene"></button>
94
+ <button class="tab" role="tab" data-t="cap" data-i18n="t_cap"></button>
95
+ <button class="tab" role="tab" data-t="type" data-i18n="t_type"></button>
96
+ <button class="tab" role="tab" data-t="prog" data-i18n="t_prog"></button>
97
+ <button class="tab" role="tab" data-t="about" data-i18n="t_about"></button>
98
  </div>
 
99
  <section class="panel on" id="p-overall">
100
+ <h2 data-i18n="h_overall"></h2><p class="sub" data-i18n="s_overall"></p>
101
+ <div class="controls"><input id="q"><select id="fam"></select></div>
102
  <div class="tw"><table id="tbl"><thead>
103
+ <tr class="grp"><th class="nosort" colspan="3"></th><th class="nosort" colspan="3" data-i18n="g_fmt"></th><th class="nosort" colspan="3" data-i18n="g_sc"></th><th class="nosort" colspan="3" data-i18n="g_layer"></th><th class="nosort"></th></tr>
104
  <tr id="hdr"></tr></thead><tbody></tbody></table></div>
105
+ <p class="notes" data-i18n-html="n_overall"></p>
106
  </section>
107
+ <section class="panel" id="p-scene"><h2 data-i18n="h_scene"></h2><p class="sub" data-i18n="s_scene"></p><div class="grid3" id="scenes"></div></section>
108
+ <section class="panel" id="p-cap"><h2 data-i18n="h_cap"></h2><p class="sub" data-i18n="s_cap"></p>
109
+ <div class="controls"><select id="capSort"><option value="total" data-i18n="so_total"></option><option value="safe" data-i18n="so_safe"></option><option value="pro" data-i18n="so_pro"></option><option value="exp" data-i18n="so_exp"></option></select></div>
110
+ <div class="card"><div class="legend" id="capLeg"></div><div class="gb" id="capChart"></div></div></section>
111
+ <section class="panel" id="p-type"><h2 data-i18n="h_type"></h2><p class="sub" data-i18n="s_type"></p>
112
+ <div class="controls"><select id="typeSort"><option value="total" data-i18n="so_total"></option><option value="ms" data-i18n="so_ms"></option><option value="oq" data-i18n="so_oq"></option></select></div>
113
+ <div class="card"><div class="legend" id="typeLeg"></div><div class="gb" id="typeChart"></div></div></section>
114
+ <section class="panel" id="p-prog"><h2 data-i18n="h_prog"></h2><p class="sub" data-i18n="s_prog"></p><div class="prog" id="progCards"></div><p class="notes" data-i18n="n_prog"></p></section>
115
+ <section class="panel" id="p-about"><h2 data-i18n="h_about"></h2><p class="sub" data-i18n="s_about"></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  <div class="about">
117
+ <div class="card"><h3 data-i18n="a_fw"></h3><span class="pill" data-i18n="p_safe"></span><span class="pill" data-i18n="p_pro"></span><span class="pill" data-i18n="p_exp"></span><ul data-i18n-html="a_fw_l"></ul></div>
118
+ <div class="card"><h3 data-i18n="a_sc"></h3><ul data-i18n-html="a_sc_l"></ul></div>
119
+ <div class="card"><h3 data-i18n="a_dn"></h3><ul data-i18n-html="a_dn_l"></ul></div>
120
+ <div class="card"><h3 data-i18n="a_sub"></h3><ul data-i18n-html="a_sub_l"></ul></div>
 
 
 
 
 
 
 
 
 
 
 
121
  </div></section>
122
  </main>
123
+ <footer><div class="wrap"><span data-i18n="foot"></span> · <a href="https://keep-tech.github.io/MoveBench/">keep-tech.github.io/MoveBench</a></div></footer>
124
  <script>
125
+ const M=[{"rank": 1, "name": "GPT-5.2", "cov": "全量", "total": 0.924, "oq": 0.895, "mcq": 0.971, "DA": 0.94, "PG": 0.872, "QA": 0.957, "ss": 1.0, "ms": 0.954, "safe": 0.891, "pro": 0.922, "exp": 0.909, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "GPT", "hf": null}, {"rank": 2, "name": "GLM-5.3", "cov": "全量", "total": 0.922, "oq": 0.889, "mcq": 0.974, "DA": 0.935, "PG": 0.873, "QA": 0.955, "ss": 1.0, "ms": 0.959, "safe": 0.905, "pro": 0.913, "exp": 0.907, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "GLM", "hf": "zai-org/GLM-5.3"}, {"rank": 3, "name": "Claude Opus 5.5", "cov": "全量", "total": 0.921, "oq": 0.895, "mcq": 0.965, "DA": 0.926, "PG": 0.88, "QA": 0.957, "ss": 1.0, "ms": 0.944, "safe": 0.916, "pro": 0.919, "exp": 0.915, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Claude", "hf": null}, {"rank": 4, "name": "Claude 4.6 Opus", "cov": "全量", "total": 0.912, "oq": 0.87, "mcq": 0.981, "DA": 0.925, "PG": 0.859, "QA": 0.95, "ss": 1.0, "ms": 0.97, "safe": 0.856, "pro": 0.909, "exp": 0.895, "n": 809, "nOq": 499, "nMcq": 310, "zero": 1, "family": "Claude", "hf": null}, {"rank": 5, "name": "Qwen3.8 Max", "cov": "全量", "total": 0.912, "oq": 0.868, "mcq": 0.984, "DA": 0.918, "PG": 0.881, "QA": 0.936, "ss": 1.0, "ms": 0.975, "safe": 0.915, "pro": 0.88, "exp": 0.9, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Qwen", "hf": null}, {"rank": 6, "name": "Doubao Seed 2.1 Pro", "cov": "全量", "total": 0.91, "oq": 0.861, "mcq": 0.987, "DA": 0.907, "PG": 0.882, "QA": 0.94, "ss": 1.0, "ms": 0.98, "safe": 0.892, "pro": 0.879, "exp": 0.898, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Doubao", "hf": null}, {"rank": 7, "name": "Kimi K3", "cov": "全量", "total": 0.909, "oq": 0.865, "mcq": 0.981, "DA": 0.922, "PG": 0.863, "QA": 0.941, "ss": 1.0, "ms": 0.97, "safe": 0.895, "pro": 0.89, "exp": 0.891, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Kimi", "hf": "moonshotai/Kimi-K3"}, {"rank": 8, "name": "Qwen3.5 397B-A17B", "cov": "全量", "total": 0.909, "oq": 0.872, "mcq": 0.968, "DA": 0.929, "PG": 0.83, "QA": 0.964, "ss": 1.0, "ms": 0.949, "safe": 0.894, "pro": 0.91, "exp": 0.901, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Qwen", "hf": "Qwen/Qwen3.5-397B-A17B"}, {"rank": 9, "name": "MiniMax M3", "cov": "全量", "total": 0.907, "oq": 0.874, "mcq": 0.961, "DA": 0.927, "PG": 0.838, "QA": 0.954, "ss": 1.0, "ms": 0.939, "safe": 0.926, "pro": 0.909, "exp": 0.879, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "MiniMax", "hf": "MiniMaxAI/MiniMax-M3"}, {"rank": 10, "name": "Qwen3.5 27B", "cov": "全量", "total": 0.899, "oq": 0.856, "mcq": 0.968, "DA": 0.925, "PG": 0.808, "QA": 0.96, "ss": 1.0, "ms": 0.949, "safe": 0.869, "pro": 0.897, "exp": 0.894, "n": 809, "nOq": 499, "nMcq": 310, "zero": 1, "family": "Qwen", "hf": "Qwen/Qwen3.5-27B"}, {"rank": 11, "name": "MiMo v2.6 Pro", "cov": "全量", "total": 0.898, "oq": 0.85, "mcq": 0.974, "DA": 0.917, "PG": 0.855, "QA": 0.918, "ss": 1.0, "ms": 0.959, "safe": 0.869, "pro": 0.872, "exp": 0.876, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "MiMo", "hf": null}, {"rank": 12, "name": "Qwen3.5 35B-A3B", "cov": "全量", "total": 0.891, "oq": 0.849, "mcq": 0.958, "DA": 0.921, "PG": 0.799, "QA": 0.948, "ss": 1.0, "ms": 0.934, "safe": 0.858, "pro": 0.889, "exp": 0.885, "n": 809, "nOq": 499, "nMcq": 310, "zero": 3, "family": "Qwen", "hf": "Qwen/Qwen3.5-35B-A3B"}, {"rank": 13, "name": "Gemini 4 Argon", "cov": "全量", "total": 0.89, "oq": 0.83, "mcq": 0.987, "DA": 0.918, "PG": 0.84, "QA": 0.908, "ss": 1.0, "ms": 0.98, "safe": 0.824, "pro": 0.874, "exp": 0.867, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Gemini", "hf": null}, {"rank": 14, "name": "HY3", "cov": "全量", "total": 0.887, "oq": 0.845, "mcq": 0.955, "DA": 0.909, "PG": 0.826, "QA": 0.924, "ss": 1.0, "ms": 0.929, "safe": 0.868, "pro": 0.886, "exp": 0.867, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "HY", "hf": "tencent/Hy3"}, {"rank": 15, "name": "GPT-6", "cov": "全量", "total": 0.88, "oq": 0.846, "mcq": 0.935, "DA": 0.885, "PG": 0.858, "QA": 0.898, "ss": 1.0, "ms": 0.898, "safe": 0.889, "pro": 0.869, "exp": 0.873, "n": 808, "nOq": 499, "nMcq": 309, "zero": 0, "family": "GPT", "hf": null}, {"rank": 16, "name": "Qwen3 Max", "cov": "全量", "total": 0.873, "oq": 0.806, "mcq": 0.981, "DA": 0.905, "PG": 0.804, "QA": 0.906, "ss": 1.0, "ms": 0.97, "safe": 0.772, "pro": 0.851, "exp": 0.861, "n": 809, "nOq": 499, "nMcq": 310, "zero": 2, "family": "Qwen", "hf": null}, {"rank": 17, "name": "DeepSeek R1", "cov": "全量", "total": 0.861, "oq": 0.797, "mcq": 0.965, "DA": 0.892, "PG": 0.78, "QA": 0.907, "ss": 1.0, "ms": 0.944, "safe": 0.788, "pro": 0.84, "exp": 0.852, "n": 809, "nOq": 499, "nMcq": 310, "zero": 2, "family": "DeepSeek", "hf": "deepseek-ai/DeepSeek-R1"}, {"rank": 18, "name": "Doubao Seed 2.0 Pro", "cov": "全量", "total": 0.856, "oq": 0.786, "mcq": 0.968, "DA": 0.877, "PG": 0.783, "QA": 0.903, "ss": 1.0, "ms": 0.949, "safe": 0.784, "pro": 0.836, "exp": 0.849, "n": 809, "nOq": 499, "nMcq": 310, "zero": 2, "family": "Doubao", "hf": null}, {"rank": 19, "name": "Kimi K2", "cov": "全量", "total": 0.847, "oq": 0.765, "mcq": 0.981, "DA": 0.895, "PG": 0.737, "QA": 0.903, "ss": 1.0, "ms": 0.97, "safe": 0.753, "pro": 0.83, "exp": 0.822, "n": 809, "nOq": 499, "nMcq": 310, "zero": 6, "family": "Kimi", "hf": null}, {"rank": 20, "name": "GLM-4.7", "cov": "全量", "total": 0.843, "oq": 0.79, "mcq": 0.929, "DA": 0.894, "PG": 0.716, "QA": 0.911, "ss": 1.0, "ms": 0.888, "safe": 0.752, "pro": 0.854, "exp": 0.854, "n": 809, "nOq": 499, "nMcq": 310, "zero": 4, "family": "GLM", "hf": "zai-org/GLM-4.7"}, {"rank": 21, "name": "Grok 4.1 Fast", "cov": "全量", "total": 0.842, "oq": 0.77, "mcq": 0.958, "DA": 0.869, "PG": 0.766, "QA": 0.887, "ss": 1.0, "ms": 0.934, "safe": 0.714, "pro": 0.809, "exp": 0.834, "n": 809, "nOq": 499, "nMcq": 310, "zero": 3, "family": "Grok", "hf": null}, {"rank": 22, "name": "DeepSeek V3.2/DeepSeek V3", "cov": "全量(OQ=V3.2/MCQ=V3)", "total": 0.842, "oq": 0.769, "mcq": 0.958, "DA": 0.847, "PG": 0.787, "QA": 0.89, "ss": 1.0, "ms": 0.934, "safe": 0.737, "pro": 0.808, "exp": 0.832, "n": 809, "nOq": 499, "nMcq": 310, "zero": 8, "family": "DeepSeek", "hf": null}, {"rank": 23, "name": "GPT-OSS 120B", "cov": "全量", "total": 0.81, "oq": 0.723, "mcq": 0.952, "DA": 0.827, "PG": 0.723, "QA": 0.878, "ss": 1.0, "ms": 0.924, "safe": 0.672, "pro": 0.769, "exp": 0.799, "n": 809, "nOq": 499, "nMcq": 310, "zero": 10, "family": "GPT", "hf": "openai/gpt-oss-120b"}, {"rank": 24, "name": "Qwen3 235B-A22B", "cov": "全量", "total": 0.78, "oq": 0.672, "mcq": 0.955, "DA": 0.81, "PG": 0.686, "QA": 0.84, "ss": 1.0, "ms": 0.929, "safe": 0.59, "pro": 0.721, "exp": 0.769, "n": 809, "nOq": 499, "nMcq": 310, "zero": 10, "family": "Qwen", "hf": "Qwen/Qwen3-235B-A22B"}, {"rank": 25, "name": "Qwen3 32B", "cov": "全量", "total": 0.734, "oq": 0.595, "mcq": 0.958, "DA": 0.77, "PG": 0.636, "QA": 0.79, "ss": 1.0, "ms": 0.934, "safe": 0.516, "pro": 0.636, "exp": 0.711, "n": 809, "nOq": 499, "nMcq": 310, "zero": 21, "family": "Qwen", "hf": "Qwen/Qwen3-32B"}],T={"en": {"eyebrow": "Leaderboard · Movement intelligence", "h1a": "MoveBench", "h1b": "Sports Science LLM Leaderboard", "lead": "A unified framework of expertise, safety and experience, measuring what large language models can and cannot do across three real coaching scenarios: workout data analysis, personalized training plans and expert knowledge QA.", "st1": "models evaluated", "st2": "questions · 499 open-ended + 310 multiple-choice", "st3": "scenarios · DA / PG / QA", "st4": "evaluation layers · safety / expertise / experience", "t_overall": "Overall", "t_scene": "Scenarios", "t_cap": "Capability", "t_type": "Question type", "t_prog": "Progress", "t_about": "About", "h_overall": "Overall leaderboard", "s_overall": "Full 809-question evaluation, scores out of 100. Click a column header to sort.", "search": "Search models", "allfam": "All families", "g_fmt": "Format", "g_sc": "Scenario", "g_layer": "Layer", "c_rank": "#", "c_name": "Model", "c_total": "Overall", "c_oq": "OQ", "c_mcq": "MCQ", "c_ss": "SS", "c_safe": "Safety", "c_pro": "Expertise", "c_exp": "Experience", "c_zero": "Zeroed", "n_overall": "OQ = open-ended, MCQ = multiple-choice, SS = single-select; Zeroed = open-ended answers scored 0 for a safety red-line violation. † GPT-6 answered 808 questions (one multiple-choice question missing). ‡ DeepSeek V3.2 / V3 combines V3.2 on open-ended and V3 on multiple-choice questions. Overall scores are taken from the source table, not recomputed from sub-scores. Models marked <span class=\"hfb\">HF</span> link to their Hugging Face model page.", "empty": "No matching models", "h_scene": "Scenario leaderboards", "s_scene": "Each scenario ranked separately. Personalized training plans (PG) are the lowest-scoring scenario for nearly every model.", "DA_t": "Workout data analysis", "DA_d": "Data understanding, metric interpretation and action advice", "PG_t": "Personalized training plans", "PG_d": "Goal fit, course selection and plan structure", "QA_t": "Expert knowledge QA", "QA_d": "Knowledge accuracy, applicability and clarity", "top": "Top", "h_cap": "Capability leaderboard", "s_cap": "Safety, expertise and experience layers side by side.", "so_total": "Sort by overall", "so_safe": "Sort by safety", "so_pro": "Sort by expertise", "so_exp": "Sort by experience", "so_ms": "Sort by multi-select", "so_oq": "Sort by open-ended", "l_safe": "Safety", "l_pro": "Expertise", "l_exp": "Experience", "l_ss": "Single-select", "l_ms": "Multi-select", "l_oq": "Open-ended", "h_type": "Question-type leaderboard", "s_type": "Single-select, multi-select and open-ended side by side. Every model scores 100 on single-select, so open-ended questions do most of the separating.", "h_prog": "Progress leaderboard", "s_prog": "Change in overall score between two versions in the same model family. This is a score difference between versions, not a rate over time, and is not attributable to the version upgrade alone.", "n_prog": "For Qwen, only Max → Max is linked. 32B, 27B, 35B-A3B, 235B-A22B and 397B-A17B differ in size or architecture and are not treated as an upgrade chain.", "rankN": "Gain #", "pts": "pts", "safeL": "Safety", "h_about": "About the evaluation", "s_about": "Framework, scoring and data notes.", "a_fw": "Framework", "p_safe": "Safety", "p_pro": "Expertise", "p_exp": "Experience", "a_fw_l": "<li><b>DA · Workout data analysis</b>: data understanding, metric interpretation and action advice</li><li><b>PG · Personalized training plans</b>: goal fit, course selection and plan structure</li><li><b>QA · Expert knowledge QA</b>: knowledge accuracy, applicability and clarity</li>", "a_sc": "Scoring", "a_sc_l": "<li>Open-ended answers are graded against expert-written, per-question rubrics by a three-judge weighted LLM panel.</li><li>Single- and multi-select questions are scored by exact match against the gold answer.</li><li>An open-ended answer that violates a safety red line scores 0. The \"Zeroed\" column counts these for each model.</li>", "a_dn": "Data notes", "a_dn_l": "<li>Scores are the source scores × 100, rounded to one decimal.</li><li>This page reports the full 809-question evaluation. Scores on the 80-question public subset are on the <a href=\"https://huggingface.co/datasets/KeepaceAI/MoveBench\">dataset page</a>; the two are not interchangeable.</li><li>Model names follow the source table.</li>", "a_sub": "Get your model listed", "a_sub_l": "<li>Download the <a href=\"https://huggingface.co/datasets/KeepaceAI/MoveBench\">dataset</a> and generate answers with your model.</li><li>Submit the answer file following the <a href=\"https://github.com/Keep-Tech/MoveBench/blob/main/docs/SUBMISSION.md\">submission guide</a>. Maintainers score and review submissions before updating the leaderboard.</li><li>Cite the <a href=\"https://arxiv.org/abs/2610.26185\">MoveBench paper</a> (arXiv 2610.26185).</li>", "foot": "MoveBench Team × Capital University of Physical Education and Sports · Dataset and documentation licensed under CC BY 4.0"}, "zh": {"eyebrow": "Leaderboard · Movement intelligence", "h1a": "MoveBench", "h1b": "运动科学大模型榜单", "lead": "以专业、安全、体验为统一评价框架,在运动数据解读、个性化课程方案、专业知识问答三个真实服务场景中衡量大模型的能力与边界。", "st1": "参评模型", "st2": "评测题 · 499 道开放题 + 310 道选择题", "st3": "业务主题 · DA / PG / QA", "st4": "评价层面 · 安全 / 专业 / 体验", "t_overall": "总榜", "t_scene": "主题榜", "t_cap": "能力榜", "t_type": "题型榜", "t_prog": "进步榜", "t_about": "说明", "h_overall": "总榜", "s_overall": "809 题全量评测,分数为百分制。点击表头排序。", "search": "搜索模型", "allfam": "全部系列", "g_fmt": "题型", "g_sc": "主题", "g_layer": "评价层面", "c_rank": "#", "c_name": "模型", "c_total": "总分", "c_oq": "开放题", "c_mcq": "选择题", "c_ss": "单选", "c_safe": "安全", "c_pro": "专业", "c_exp": "体验", "c_zero": "红线置零", "n_overall": "OQ = open-ended, MCQ = multiple-choice, SS = single-select; Zeroed = open-ended answers scored 0 for a safety red-line violation. † GPT-6 为 808 题(少 1 道选择题)。‡ DeepSeek V3.2 / V3:开放题用 V3.2、选择题用 V3 的混合结果。总分沿用原表,不由分项均值重算。带 <span class=\"hfb\">HF</span> 标记的模型可跳转到其 Hugging Face 模型页。", "empty": "没有匹配的模型", "h_scene": "主题榜", "s_scene": "三个业务场景各自排名。几乎所有模型都在 PG 个性化课程方案上得分最低。", "DA_t": "运动数据解读", "DA_d": "数据理解、指标解释与行动建议", "PG_t": "个性化课程方案", "PG_d": "目标适配、课程选择与方案编排", "QA_t": "专业知识问答", "QA_d": "知识准确、适用条件与表达质量", "top": "最高", "h_cap": "能力榜", "s_cap": "安全层、专业层、体验层并排对照。", "so_total": "按总分排序", "so_safe": "按安全层排序", "so_pro": "按专业层排序", "so_exp": "按体验层排序", "so_ms": "按多选排序", "so_oq": "按开放问答排序", "l_safe": "安全层", "l_pro": "专业层", "l_exp": "体验层", "l_ss": "单选", "l_ms": "多选", "l_oq": "开放问答", "h_type": "题型榜", "s_type": "单选、多选、开放问答并排对照。单选题全部满分,区分度主要来自开放问答。", "h_prog": "进步榜", "s_prog": "同系列两个版本之间的总分变化。这里的“进步”指版本间分数差,不代表时间速度,也不能单独归因于版本升级。", "n_prog": "Qwen 系列只连接 Max → Max;32B、27B、35B-A3B、235B-A22B、397B-A17B 属于不同规模或架构,不作为连续升级链。", "rankN": "增幅第 ", "pts": "分", "safeL": "安全", "h_about": "评测说明", "s_about": "评价框架、评分方式与数据口径。", "a_fw": "评价框架", "p_safe": "安全", "p_pro": "专业", "p_exp": "体验", "a_fw_l": "<li><b>DA 运动数据解读</b>:数据理解、指标解释与行动建议</li><li><b>PG 个性化课程方案</b>:目标适配、课程选择与方案编排</li><li><b>QA 专业知识问答</b>:知识准确、适用条件与表达质量</li>", "a_sc": "评分方式", "a_sc_l": "<li>开放题由三个 LLM judge 组成的加权评审团,依据专家编写的逐题 rubric 评分。</li><li>选择题(单选、多选)按标准答案精确匹配评分。</li><li>触犯安全红线的开放题记 0 分;总榜“红线置零”列为每个模型被置零的题数。</li>", "a_dn": "数据口径", "a_dn_l": "<li>分数为原表分数 × 100,保留 1 位小数。</li><li>本页为 809 题全量评测结果。公开的 80 题子集成绩见<a href=\"https://huggingface.co/datasets/KeepaceAI/MoveBench\">数据集页</a>,两者不可混用。</li><li>模型名称沿用原表写法。</li>", "a_sub": "参与评测", "a_sub_l": "<li>下载<a href=\"https://huggingface.co/datasets/KeepaceAI/MoveBench\">数据集</a>,用你的模型生成答案。</li><li>按<a href=\"https://github.com/Keep-Tech/MoveBench/blob/main/docs/SUBMISSION.md\">提交指南</a>提交答案文件,维护方评分审核后更新榜单。</li><li>引用:<a href=\"https://arxiv.org/abs/2610.26185\">MoveBench 论文</a>(arXiv 2610.26185)。</li>", "foot": "MoveBench Team × 首都体育学院 · 数据集与文档采用 CC BY 4.0 许可"}};
126
+ let L='en';try{const s=localStorage.getItem('mb-lang');if(s==='zh'||s==='en')L=s;}catch(e){}
127
+ const t=k=>T[L][k];
128
  const f=v=>(v*100).toFixed(1);
129
  const esc=s=>String(s).replace(/[&<>"]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]));
130
  const flag=m=>m.name==='GPT-6'?'†':m.name.startsWith('DeepSeek V3')?'‡':'';
131
  const S=['var(--s1)','var(--s2)','var(--s3)'];
132
+ const $=id=>document.getElementById(id);
133
  document.querySelectorAll('.tab').forEach(b=>b.onclick=()=>{document.querySelectorAll('.tab').forEach(x=>x.setAttribute('aria-selected',x===b));document.querySelectorAll('.panel').forEach(p=>p.classList.toggle('on',p.id==='p-'+b.dataset.t));try{history.replaceState(null,'','#'+b.dataset.t)}catch(e){}});
134
  const fromHash=()=>{const h=location.hash.slice(1);const b=h&&document.querySelector(`.tab[data-t="${h}"]`);if(b)b.click();};fromHash();addEventListener('hashchange',fromHash);
135
+ const COLS=['rank','name','total','oq','mcq','ss','DA','PG','QA','safe','pro','exp','zero'];
136
+ const CL={rank:'c_rank',name:'c_name',total:'c_total',oq:'c_oq',mcq:'c_mcq',ss:'c_ss',safe:'c_safe',pro:'c_pro',exp:'c_exp',zero:'c_zero'};
 
137
  let sk='total',sd=true;
138
+ const fams=[...new Set(M.map(m=>m.family))];
139
  function rankOf(rows,k){let prev=null,r=0;return rows.map((m,i)=>{if(prev===null||Math.abs(m[k]-prev)>1e-9)r=i+1;prev=m[k];return r;});}
140
  function renderTable(){
141
+ $('hdr').innerHTML=COLS.map(k=>`<th class="${k==='rank'||k==='name'?'l':''} ${k===sk?'act':''}" data-k="${k}" aria-sort="${k===sk?(sd?'descending':'ascending'):'none'}">${CL[k]?t(CL[k]):k}${k===sk?` <span class="ar">${sd?'↓':'↑'}</span>`:''}</th>`).join('');
142
  document.querySelectorAll('#hdr th').forEach(th=>th.onclick=()=>{const k=th.dataset.k;if(k===sk)sd=!sd;else{sk=k;sd=!(k==='rank'||k==='name'||k==='zero');}renderTable();});
143
+ const q=$('q').value.toLowerCase().trim(),fa=$('fam').value;
144
  let rows=M.filter(m=>(fa==='all'||m.family===fa)&&(m.name+' '+m.family).toLowerCase().includes(q));
145
  const k=sk==='rank'?'total':sk;
146
+ rows.sort((a,b)=>{if(k==='name')return sd?b.name.localeCompare(a.name):a.name.localeCompare(b.name);return (sd?b[k]-a[k]:a[k]-b[k])||a.rank-b.rank;});
147
  if(sk==='rank'&&!sd)rows.reverse();
148
+ document.querySelector('#tbl tbody').innerHTML=rows.length?rows.map(m=>`<tr class="r${m.rank}">
149
+ <td class="l"><span class="rk">${m.rank}</span></td>
150
  <td class="l"><span class="mname">${esc(m.name)}${flag(m)}</span>${m.hf?`<a class="hfb" href="https://huggingface.co/${m.hf}" title="${m.hf}">HF</a>`:''}<span class="fam">${esc(m.family)}</span></td>
151
  <td><div class="tot"><b>${f(m.total)}</b><div class="mini"><i style="width:${m.total*100}%"></i></div></div></td>
152
+ <td>${f(m.oq)}</td><td>${f(m.mcq)}</td><td>${f(m.ss)}</td><td>${f(m.DA)}</td><td>${f(m.PG)}</td><td>${f(m.QA)}</td><td>${f(m.safe)}</td><td>${f(m.pro)}</td><td>${f(m.exp)}</td><td>${m.zero}</td></tr>`).join(''):`<tr><td colspan="13" class="l">${t('empty')}</td></tr>`;
153
  }
154
+ function renderScenes(){
155
+ const SC=[['DA','var(--g1)'],['PG','var(--g3)'],['QA','var(--g5)']];
156
+ $('scenes').innerHTML=SC.map(([k,c])=>{const rows=[...M].sort((a,b)=>b[k]-a[k]||a.rank-b.rank);const rk=rankOf(rows,k);return `<div class="card sc"><h3>${k} · ${t(k+'_t')}</h3><div class="d">${t(k+'_d')} · ${t('top')} ${f(rows[0][k])}</div><div class="bars">${rows.map((m,i)=>`<div class="bar" title="${esc(m.name)} · ${k} ${f(m[k])}"><span class="n">${rk[i]}</span><span class="nm2">${esc(m.name)}${flag(m)}</span><div class="t"><i style="width:${m[k]*100}%;background:${c}"></i></div><span class="v">${f(m[k])}</span></div>`).join('')}</div></div>`}).join('');
157
+ }
158
+ function grouped(el,leg,keys,sortKey){
159
+ const labels=keys.map(k=>t('l_'+k));
160
+ $(leg).innerHTML=labels.map((l,i)=>`<span><i style="background:${S[i]}"></i>${l}</span>`).join('');
161
  const rows=[...M].sort((a,b)=>b[sortKey]-a[sortKey]||a.rank-b.rank);
162
+ $(el).innerHTML=rows.map(m=>`<div class="nm" title="${esc(m.name)}">${esc(m.name)}${flag(m)}</div><div class="rows">${keys.map((k,i)=>`<div class="rr" title="${esc(m.name)} · ${labels[i]} ${f(m[k])}"><div class="tr"><i style="width:${m[k]*100}%;background:${S[i]}"></i></div><b>${f(m[k])}</b></div>`).join('')}</div>`).join('');
163
+ }
164
+ const rc=()=>grouped('capChart','capLeg',['safe','pro','exp'],$('capSort').value);
165
+ const rt=()=>grouped('typeChart','typeLeg',['ss','ms','oq'],$('typeSort').value);
166
+ function renderProg(){
167
+ const P=[['GLM','GLM-4.7','GLM-5.3'],['Qwen Max','Qwen3 Max','Qwen3.8 Max'],['Claude Opus','Claude 4.6 Opus','Claude Opus 5.5']].map(([fa,a,b])=>{const A=M.find(m=>m.name===a),B=M.find(m=>m.name===b);return {fa,A,B,d:(B.total-A.total)*100,rel:(B.total/A.total-1)*100};}).sort((x,y)=>y.d-x.d);
168
+ $('progCards').innerHTML=P.map((p,i)=>`<div class="card pc"><div class="fam2">${p.fa} · ${t('rankN')}${i+1}</div><div class="dl" style="color:${['var(--g1)','var(--g2)','var(--g3)'][i]}">+${p.d.toFixed(1)}<small>${t('pts')} · +${p.rel.toFixed(1)}%</small></div><div class="pair"><div>${esc(p.A.name)}<b>${f(p.A.total)}</b></div><span class="arrow">→</span><div>${esc(p.B.name)}<b>${f(p.B.total)}</b></div></div><p>${t('safeL')} ${f(p.A.safe)} → ${f(p.B.safe)} · PG ${f(p.A.PG)} → ${f(p.B.PG)}</p></div>`).join('');
169
+ }
170
+ function applyLang(){
171
+ document.documentElement.lang=L==='zh'?'zh-CN':'en';
172
+ document.querySelectorAll('[data-i18n]').forEach(e=>e.textContent=t(e.dataset.i18n));
173
+ document.querySelectorAll('[data-i18n-html]').forEach(e=>e.innerHTML=t(e.dataset.i18nHtml));
174
+ document.querySelectorAll('.lang button').forEach(b=>b.setAttribute('aria-pressed',b.dataset.lang===L));
175
+ $('q').placeholder=t('search');$('q').setAttribute('aria-label',t('search'));
176
+ const fv=$('fam').value||'all';$('fam').innerHTML=`<option value="all">${t('allfam')}</option>`+fams.map(x=>`<option>${esc(x)}</option>`).join('');$('fam').value=fv;
177
+ renderTable();renderScenes();rc();rt();renderProg();
178
  }
179
+ document.querySelectorAll('.lang button').forEach(b=>b.onclick=()=>{L=b.dataset.lang;try{localStorage.setItem('mb-lang',L)}catch(e){}applyLang();});
180
+ $('q').oninput=renderTable;$('fam').onchange=renderTable;$('capSort').onchange=rc;$('typeSort').onchange=rt;
181
+ applyLang();
 
 
 
 
182
  </script></body></html>