dsh-livebench-panel 0.2.8 → 0.2.10
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/lib/client.js +44 -5
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -107,6 +107,8 @@ window.__ModuleLoader__.load({
|
|
|
107
107
|
const [homeBusy, setHomeBusy] = useState(false);
|
|
108
108
|
const [results, setResults] = useState(null);
|
|
109
109
|
const [pickedModels, setPickedModels] = useState(() => new Set());
|
|
110
|
+
const [sortBy, setSortBy] = useState(null);
|
|
111
|
+
const [sortDir, setSortDir] = useState("asc");
|
|
110
112
|
const [modelOrder, setModelOrder] = useState(() => {
|
|
111
113
|
try { return JSON.parse(localStorage.getItem("dlb_model_order_v1")) ?? []; } catch { return []; }
|
|
112
114
|
});
|
|
@@ -197,7 +199,14 @@ window.__ModuleLoader__.load({
|
|
|
197
199
|
const toggleList = (key, value) => setSel((prev) => {
|
|
198
200
|
const list = prev[key];
|
|
199
201
|
const next = list.includes(value) ? list.filter((v) => v !== value) : [...list, value];
|
|
200
|
-
|
|
202
|
+
const out = { ...prev, [key]: next };
|
|
203
|
+
if (key === "cats") {
|
|
204
|
+
// 取消分类时同步清除该分类下已选的任务:否则这些任务标签
|
|
205
|
+
// 会从界面消失(分类不再选中)却仍在提交列表里 —— 用户只选了
|
|
206
|
+
// coding_completion 却连带跑了 cta 就是这个原因。
|
|
207
|
+
out.tasks = prev.tasks.filter((t) => next.includes(t.split("/")[0]));
|
|
208
|
+
}
|
|
209
|
+
return out;
|
|
201
210
|
});
|
|
202
211
|
|
|
203
212
|
// 已选模型解析(provider::model)
|
|
@@ -316,16 +325,37 @@ window.__ModuleLoader__.load({
|
|
|
316
325
|
return { models, tasks, cells, startTimes };
|
|
317
326
|
}, [results]);
|
|
318
327
|
const cellOf = (model, key) => matrix.cells.get(`${model}__@__${key}`);
|
|
328
|
+
// 排序:sortBy=null 时用拖拽自定义顺序;点击表头在 正序/倒序 间切换
|
|
319
329
|
const sortedModels = useMemo(() => {
|
|
320
330
|
if (!matrix) return [];
|
|
331
|
+
const base = [...matrix.models];
|
|
332
|
+
if (sortBy === "model") {
|
|
333
|
+
base.sort((a, b) => (sortDir === "asc" ? a.localeCompare(b) : b.localeCompare(a)));
|
|
334
|
+
return base;
|
|
335
|
+
}
|
|
336
|
+
if (sortBy === "time") {
|
|
337
|
+
base.sort((a, b) => {
|
|
338
|
+
const ta = matrix.startTimes.get(a) ?? 0;
|
|
339
|
+
const tb = matrix.startTimes.get(b) ?? 0;
|
|
340
|
+
return sortDir === "asc" ? ta - tb : tb - ta;
|
|
341
|
+
});
|
|
342
|
+
return base;
|
|
343
|
+
}
|
|
321
344
|
const indexOf = new Map(modelOrder.map((key, index) => [key, index]));
|
|
322
|
-
return
|
|
345
|
+
return base.sort((a, b) => {
|
|
323
346
|
const ia = indexOf.has(a) ? indexOf.get(a) : Number.MAX_SAFE_INTEGER;
|
|
324
347
|
const ib = indexOf.has(b) ? indexOf.get(b) : Number.MAX_SAFE_INTEGER;
|
|
325
348
|
if (ia !== ib) return ia - ib;
|
|
326
349
|
return a.localeCompare(b);
|
|
327
350
|
});
|
|
328
|
-
}, [matrix, modelOrder]);
|
|
351
|
+
}, [matrix, modelOrder, sortBy, sortDir]);
|
|
352
|
+
|
|
353
|
+
// 点击表头:切换排序字段(再次点击同一列则反转方向)
|
|
354
|
+
const toggleSort = (field) => {
|
|
355
|
+
if (sortBy === field) setSortDir((d) => (d === "asc" ? "desc" : "asc"));
|
|
356
|
+
else { setSortBy(field); setSortDir("asc"); }
|
|
357
|
+
};
|
|
358
|
+
const sortMark = (field) => (sortBy === field ? (sortDir === "asc" ? " ↑" : " ↓") : "");
|
|
329
359
|
|
|
330
360
|
const persistModelOrder = (keys) => {
|
|
331
361
|
setModelOrder(keys);
|
|
@@ -336,6 +366,7 @@ window.__ModuleLoader__.load({
|
|
|
336
366
|
const sourceModel = dragKey.current;
|
|
337
367
|
dragKey.current = null;
|
|
338
368
|
if (!sourceModel || sourceModel === targetModel) return;
|
|
369
|
+
setSortBy(null); // 拖拽即回到自定义顺序
|
|
339
370
|
const keys = sortedModels.slice();
|
|
340
371
|
const from = keys.indexOf(sourceModel);
|
|
341
372
|
const to = keys.indexOf(targetModel);
|
|
@@ -524,13 +555,21 @@ window.__ModuleLoader__.load({
|
|
|
524
555
|
h("th", { style: { width: "30px" } },
|
|
525
556
|
h("input", { type: "checkbox", checked: pickedModels.size > 0 && pickedModels.size === sortedModels.length,
|
|
526
557
|
onChange: (event) => setPickedModels(event.target.checked ? new Set(sortedModels) : new Set()) })),
|
|
527
|
-
h("th",
|
|
558
|
+
h("th", {
|
|
559
|
+
style: { cursor: "pointer", userSelect: "none" },
|
|
560
|
+
title: "点击按模型名排序(再次点击切换正序/倒序)",
|
|
561
|
+
onClick: () => toggleSort("model"),
|
|
562
|
+
}, "model" + sortMark("model")),
|
|
528
563
|
matrix.tasks.map((taskKeyCol) => {
|
|
529
564
|
const [cat, task] = taskKeyCol.split("/");
|
|
530
565
|
return h("th", { key: taskKeyCol, title: `${cat} / ${task}` }, task);
|
|
531
566
|
}),
|
|
532
567
|
h("th", null, "删除"),
|
|
533
|
-
h("th",
|
|
568
|
+
h("th", {
|
|
569
|
+
style: { cursor: "pointer", userSelect: "none" },
|
|
570
|
+
title: "点击按时间排序(再次点击切换正序/倒序)",
|
|
571
|
+
onClick: () => toggleSort("time"),
|
|
572
|
+
}, "time" + sortMark("time")),
|
|
534
573
|
)),
|
|
535
574
|
h("tbody", null,
|
|
536
575
|
sortedModels.map((model) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-livebench-panel",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.10",
|
|
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",
|