dsh-livebench-panel 0.2.13 → 0.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -48,7 +48,7 @@ cd livebench
48
48
  - 强度编码进 display-name(如 `code-gpt__gpt-5.6-sol@high`),**不同强度在成绩表中是独立条目**,可直接对比。
49
49
  - **参数下拉框**:题集 release(LiveBench 全部 releases)、分类(coding/math/reasoning/language/data_analysis/instruction_following)、任务(随分类联动)、题目序号范围、max-tokens。
50
50
  - **运行控制**:开始 / 停止 / 刷新;最多 9 个模型并发评测(每个模型同时只跑 1 次);实时滚动日志(每 2.5s 轮询);「刷新」会清掉已结束的运行日志。
51
- - **成绩表**:直接读取 `data/live_bench/**/model_judgment/ground_truth_judgment.jsonl` 计算 模型 × 任务 平均分(分数 = 正确率 ×100,附已判/总题数),无需等 LiveBench 自己出榜。支持按模型名/时间排序、拖 ⠿ 自定义行序、勾选或单行按钮删除成绩(删除会同时清掉该模型的答案与判分行;只有空壳文件的“幽灵行”不会再被扫描出来,删除结果稳定持久)。
51
+ - **成绩表**:直接读取 `data/live_bench/**/model_judgment/ground_truth_judgment.jsonl` 计算 模型 × 任务 平均分(分数 = 正确率 ×100,单元格下方括号标注「本次没做或没做完的题数 / 本次设定的题数」),无需等 LiveBench 自己出榜。支持按模型名/时间排序、拖 ⠿ 自定义行序、勾选或单行按钮删除成绩(删除会同时清掉该模型的答案与判分行;只有空壳文件的“幽灵行”不会再被扫描出来,删除结果稳定持久)。
52
52
 
53
53
  ## 依赖
54
54
 
package/lib/client.js CHANGED
@@ -601,7 +601,7 @@ window.__ModuleLoader__.load({
601
601
  h("div", { className: c("row") },
602
602
  h("div", { className: c("cardHead") },
603
603
  h("span", { className: c("label") }, `评测成绩(行 = 模型,列 = 任务)· ${sortedModels.length} 个模型 × ${matrix.tasks.length} 个任务`),
604
- h("span", { className: c("hint") }, "分数 = 该任务平均分 ×100;括号 (-没做或没做完/本次设定/该任务总题数);× = 未执行该任务;— = 无有效判分(如全部访问失败,不计入正确率);颜色 ≥75 绿 / 40–75 橙 / <40 红;拖 ⠿ 换行序(存在本机),点表头按模型名或时间排序。"),
604
+ h("span", { className: c("hint") }, "分数 = 该任务平均分 ×100;括号 (-没做或没做完的题数/用户选择的题数,即题目序号范围的题数);× = 未执行该任务;— = 无有效判分(如全部访问失败,不计入正确率);颜色 ≥75 绿 / 40–75 橙 / <40 红;拖 ⠿ 换行序(存在本机),点表头按模型名或时间排序。"),
605
605
  ),
606
606
  h("button", {
607
607
  className: c("btn") + " " + c("btnDanger"),
@@ -683,20 +683,19 @@ window.__ModuleLoader__.load({
683
683
  h("div", { className: c("cellSub") }, fmtTimeShort(startTime))),
684
684
  matrix.tasks.map((taskKeyCol) => {
685
685
  const row = matrix.cells.get(`${model}__@__${taskKeyCol}`);
686
- // 单元格:上方正确率,下方 (-没做/设定/总)。
687
- // 没做/没做完(访问失败、网络中断)不计入正确率分母。
688
- const totalCol = row ? row.total : (matrix.taskTotals[taskKeyCol] ?? 0);
689
- const sub = `(-${row ? (row.notDone ?? 0) : totalCol}/${row ? (row.configured ?? 0) : totalCol}/${totalCol})`;
686
+ // 单元格:上方正确率,下方 (-没做或没做完的题数/用户选择的题数)。
687
+ // 「用户选择的题数」= 题目序号范围选定的题数(end 含端点)。
688
+ // 该任务总题数不参与正确率计算,故不展示。
690
689
  const cls = c("cellScore") + (matrix.groupStart.has(taskKeyCol) ? " " + c("grpStart") : "");
691
690
  if (!row) {
692
- return h("td", { key: taskKeyCol, className: cls, title: `未执行该任务:${sub}` },
693
- h("div", { className: c("dim") }, "×"),
694
- h("div", { className: c("cellSub") }, sub));
691
+ return h("td", { key: taskKeyCol, className: cls, title: "未执行该任务" },
692
+ h("div", { className: c("dim") }, "×"));
695
693
  }
694
+ const sub = `(-${row.notDone ?? 0}/${row.configured ?? 0})`;
696
695
  const allFailed = row.answered > 0 && row.errors >= row.answered;
697
696
  const title = allFailed
698
- ? `该任务 ${row.errors} 题全部访问失败(未做完),不计入正确率 ${sub}`
699
- : `做完 ${row.done ?? 0} 题,没做/失败 ${row.notDone ?? 0} 题 ${sub}` +
697
+ ? `本次选择 ${row.configured ?? 0} 题,其中 ${row.errors} 题全部访问失败(未做完),不计入正确率 ${sub}`
698
+ : `本次选择 ${row.configured ?? 0} 题,做完 ${row.done ?? 0} 题,没做或没做完 ${row.notDone ?? 0} 题 ${sub}` +
700
699
  (row.errors > 0 ? `(其中 ${row.errors} 题 API 失败)` : "");
701
700
  if (allFailed || row.judged === 0) {
702
701
  return h("td", { key: taskKeyCol, className: cls, title },
package/lib/index.js CHANGED
@@ -593,8 +593,12 @@ async function computeResults(dataDir) {
593
593
  const judgedCount = entry?.n ?? 0;
594
594
  // 做完的题 = 实际产出的有效答案(尝试数 - 访问失败数)
595
595
  const done = Math.max(0, stat.answered - stat.errors);
596
- // 设定题数 = 本次评测设定的范围(end 含端点);没有元数据(历史数据)时用该任务的题目总数兜底
597
- let configured = total;
596
+ // 选择题数 = 用户在「题目序号范围」里选择的题数(end 含端点)。
597
+ // 有元数据就直接用范围大小;没有元数据(历史数据)时用本次实际写入的答案行数兜底:
598
+ // LiveBench 会为范围内每一题写一行(访问失败也写 $ERROR$),所以跑完后
599
+ // answered 就等于本次选择的题数。绝不能用该任务总题数兜底 —— 用户只选了几题时
600
+ // 显示总题数毫无意义。
601
+ let configured = stat.answered;
598
602
  const meta = runMeta.get(model);
599
603
  if (meta !== undefined) {
600
604
  const inScope = (meta.benchNames || []).some((bn) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-livebench-panel",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "description": "DSH web plugin: a LiveBench tab in the Trajectory view (right of 对话/轨迹). Run LiveBench evaluations against every model configured in the DeepSeek Harness — pick provider/model, category, task, release and question range from dropdowns, watch progress, and read scores in place.",
5
5
  "license": "MIT",
6
6
  "type": "module",