Refresh actual terminal progress and distinguish generation completion
Browse files- README.md +3 -0
- data/egorender-progress.json +1 -1
- deployment_manifest.json +20 -13
- index.html +1 -1
- src/app.js +1 -1
- src/page.html +1 -1
- src/synthetic.js +21 -17
README.md
CHANGED
|
@@ -74,5 +74,8 @@ python3 -m http.server 8767 --bind 127.0.0.1
|
|
| 74 |
页面保留最近一次成功快照,不把网络失败当成进度归零。执行修订不等于数据发布版本。
|
| 75 |
|
| 76 |
状态发布器保留在内部工作区,复用原有SSH master;HF凭据不进入浏览器或PRO。
|
|
|
|
|
|
|
|
|
|
| 77 |
公开Space仅包含静态页面、脱敏摘要、样例与读取器,没有生产控制API。
|
| 78 |
维护者本机睡眠或发布器结束会导致公开进度过期,不代表远端生产已经停止。
|
|
|
|
| 74 |
页面保留最近一次成功快照,不把网络失败当成进度归零。执行修订不等于数据发布版本。
|
| 75 |
|
| 76 |
状态发布器保留在内部工作区,复用原有SSH master;HF凭据不进入浏览器或PRO。
|
| 77 |
+
连接丢失后,发布器在本机互斥锁下重建同一个配置的master;存在匹配的活进程或
|
| 78 |
+
残留socket时不另开连接、不删除socket。发布器保持原有限截止时间,可用`--until`
|
| 79 |
+
指定恢复时不得延长的截止时间;不建立cron或新的聊天定时任务。
|
| 80 |
公开Space仅包含静态页面、脱敏摘要、样例与读取器,没有生产控制API。
|
| 81 |
维护者本机睡眠或发布器结束会导致公开进度过期,不代表远端生产已经停止。
|
data/egorender-progress.json
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"schema": "egorenderer.public_progress.v1", "collected_at":
|
|
|
|
| 1 |
+
{"schema": "egorenderer.public_progress.v1", "collected_at": 1793603390.1547627, "refresh_seconds": 60, "dataset_release": "V006", "execution_revision": "353", "queue_alive": false, "admission_held": false, "counts": {"complete": 301, "running": 0, "ready": 0, "failed": 0, "total": 301}, "scope": {"sources": 301, "source_frames": 218273, "variants": 1, "expected_variant_frames": 218273, "historical_extra_complete": 2, "cancelled_extra": 600}, "coverage": {"completed_variant_frames": 218273, "sources_with_any_variant": 301, "sources_with_all_variants": 301}, "throughput": {"packages_last_hour": 1, "queued_eta_hours": null}, "training_ready": null, "known_gt_missing": [{"source": "arctic_s01_capsulemachine_grab_01", "variant": 1}, {"source": "arctic_s09_laptop_use_03", "variant": 1}], "auxiliary_fits": "PENDING_UPSTREAM_HANDOFF", "jobs": [], "recent": [{"at": 1793599829.9072523, "source": "arctic_s10_laptop_use_02", "variant": 1}, {"at": 1793599581.3385708, "source": "arctic_s10_notebook_use_02", "variant": 1}, {"at": 1793599567.6335635, "source": "arctic_s10_waffleiron_use_02", "variant": 1}, {"at": 1793599500.593456, "source": "arctic_s10_waffleiron_grab_01", "variant": 1}, {"at": 1793599276.667639, "source": "arctic_s10_phone_grab_01", "variant": 1}, {"at": 1793599134.962276, "source": "arctic_s10_phone_use_02", "variant": 1}, {"at": 1793598927.6839998, "source": "arctic_s10_waffleiron_use_01", "variant": 1}, {"at": 1793598411.1581776, "source": "arctic_s10_phone_use_01_retake", "variant": 1}], "hardware": {"gpus": [{"index": 0, "utilization": 0, "used_mib": 423, "total_mib": 97887}, {"index": 1, "utilization": 0, "used_mib": 2, "total_mib": 97887}, {"index": 2, "utilization": 0, "used_mib": 3, "total_mib": 97887}, {"index": 3, "utilization": 0, "used_mib": 3, "total_mib": 97887}], "cpu_percent": 4.5, "cpu_logical": 72}, "storage": {"ssd_available_gib": 1256.6, "nas_available_gib": 2762.9, "ssd_budget_gib": 896.0, "ssd_reserved_gib": 3.5, "nas_active": 0, "nas_limit": 4}, "hardcases": {"complete": 15, "expected": 15, "frames": 10838, "training_ready": false}, "oakink_assets": {"counts": {"COMPLETE": 571, "FAILED": 13, "READY": 38}, "total": 622, "final_render_count": null}, "history": [{"at": 1793585572.6428823, "complete": 238}, {"at": 1793585632.6541576, "complete": 238}, {"at": 1793585692.64007, "complete": 238}, {"at": 1793585752.6562395, "complete": 238}, {"at": 1793585812.6489515, "complete": 238}, {"at": 1793585872.6555843, "complete": 238}, {"at": 1793585932.6725898, "complete": 238}, {"at": 1793585992.67241, "complete": 238}, {"at": 1793586052.6740882, "complete": 240}, {"at": 1793586112.6896026, "complete": 240}, {"at": 1793586172.6817977, "complete": 240}, {"at": 1793586232.6999586, "complete": 240}, {"at": 1793586292.6935673, "complete": 240}, {"at": 1793586352.7005577, "complete": 241}, {"at": 1793586412.698628, "complete": 241}, {"at": 1793586472.7076387, "complete": 241}, {"at": 1793586532.7080545, "complete": 242}, {"at": 1793586592.7165608, "complete": 242}, {"at": 1793586652.7186508, "complete": 242}, {"at": 1793586712.7307124, "complete": 244}, {"at": 1793586772.7324688, "complete": 244}, {"at": 1793586832.732423, "complete": 244}, {"at": 1793586892.7384965, "complete": 244}, {"at": 1793586952.73996, "complete": 244}, {"at": 1793587012.7585795, "complete": 246}, {"at": 1793587072.7481163, "complete": 246}, {"at": 1793587132.7537265, "complete": 246}, {"at": 1793587192.766892, "complete": 246}, {"at": 1793587252.7595913, "complete": 246}, {"at": 1793587312.76958, "complete": 246}, {"at": 1793587372.768897, "complete": 247}, {"at": 1793587432.7750099, "complete": 247}, {"at": 1793587492.7745407, "complete": 247}, {"at": 1793587552.7930424, "complete": 247}, {"at": 1793587612.8053164, "complete": 247}, {"at": 1793587672.7856402, "complete": 247}, {"at": 1793587732.7871742, "complete": 247}, {"at": 1793587792.8020053, "complete": 247}, {"at": 1793587852.7928832, "complete": 247}, {"at": 1793587912.796153, "complete": 247}, {"at": 1793587972.8033156, "complete": 248}, {"at": 1793588032.8107262, "complete": 248}, {"at": 1793588092.804908, "complete": 248}, {"at": 1793588152.8170915, "complete": 249}, {"at": 1793588212.8319278, "complete": 249}, {"at": 1793588272.8149095, "complete": 249}, {"at": 1793588332.8232622, "complete": 250}, {"at": 1793588392.8363435, "complete": 250}, {"at": 1793588452.826002, "complete": 250}, {"at": 1793588512.8354306, "complete": 250}, {"at": 1793588572.8402731, "complete": 250}, {"at": 1793588632.8354247, "complete": 250}, {"at": 1793588692.8391652, "complete": 250}, {"at": 1793588752.84502, "complete": 250}, {"at": 1793588812.846456, "complete": 250}, {"at": 1793588872.853451, "complete": 250}, {"at": 1793588932.857277, "complete": 251}, {"at": 1793588992.8619945, "complete": 252}, {"at": 1793589052.8602152, "complete": 252}, {"at": 1793589112.8695726, "complete": 253}, {"at": 1793589172.8678432, "complete": 253}, {"at": 1793589232.8858323, "complete": 253}, {"at": 1793589292.878223, "complete": 253}, {"at": 1793589352.87894, "complete": 253}, {"at": 1793589412.8853755, "complete": 254}, {"at": 1793589472.8892503, "complete": 255}, {"at": 1793589532.8936496, "complete": 255}, {"at": 1793589592.9017978, "complete": 255}, {"at": 1793589652.9032779, "complete": 255}, {"at": 1793589712.9053748, "complete": 256}, {"at": 1793589772.911792, "complete": 256}, {"at": 1793589832.9077463, "complete": 256}, {"at": 1793589892.9143932, "complete": 256}, {"at": 1793589952.9186475, "complete": 256}, {"at": 1793590012.9178839, "complete": 256}, {"at": 1793590072.917188, "complete": 258}, {"at": 1793590132.920904, "complete": 258}, {"at": 1793590192.9273474, "complete": 258}, {"at": 1793590252.925796, "complete": 258}, {"at": 1793590312.9291472, "complete": 258}, {"at": 1793590372.9324937, "complete": 259}, {"at": 1793590432.9325993, "complete": 259}, {"at": 1793590492.9385545, "complete": 259}, {"at": 1793590552.9388545, "complete": 259}, {"at": 1793590612.949204, "complete": 259}, {"at": 1793590672.948536, "complete": 259}, {"at": 1793590732.946759, "complete": 259}, {"at": 1793590792.9570494, "complete": 260}, {"at": 1793590852.9840841, "complete": 260}, {"at": 1793590912.9737308, "complete": 260}, {"at": 1793590972.9717226, "complete": 260}, {"at": 1793591032.988772, "complete": 260}, {"at": 1793591092.9769633, "complete": 260}, {"at": 1793591152.9761393, "complete": 260}, {"at": 1793591212.9866748, "complete": 260}, {"at": 1793591272.9835074, "complete": 260}, {"at": 1793591332.9883168, "complete": 260}, {"at": 1793591392.992159, "complete": 261}, {"at": 1793591452.9865608, "complete": 261}, {"at": 1793591512.994905, "complete": 261}, {"at": 1793591572.9926765, "complete": 261}, {"at": 1793591633.0139134, "complete": 262}, {"at": 1793591693.0181448, "complete": 262}, {"at": 1793591753.01163, "complete": 262}, {"at": 1793591813.0136478, "complete": 262}, {"at": 1793591873.0142226, "complete": 263}, {"at": 1793591933.0351496, "complete": 263}, {"at": 1793591993.0256884, "complete": 263}, {"at": 1793592053.0333943, "complete": 263}, {"at": 1793592113.0402043, "complete": 263}, {"at": 1793592173.044423, "complete": 264}, {"at": 1793602949.75292, "complete": 301}, {"at": 1793603009.8428822, "complete": 301}, {"at": 1793603069.835964, "complete": 301}, {"at": 1793603129.775828, "complete": 301}, {"at": 1793603189.767979, "complete": 301}, {"at": 1793603249.8072236, "complete": 301}, {"at": 1793603270.3492634, "complete": 301}, {"at": 1793603330.1520753, "complete": 301}, {"at": 1793603390.1547627, "complete": 301}]}
|
deployment_manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
{
|
| 2 |
"repo_id": "DarthSoluke/EgoNetDatasetResearch",
|
| 3 |
"repo_type": "space",
|
| 4 |
-
"base_revision": "
|
| 5 |
"sdk": "static",
|
| 6 |
"app_file": "index.html",
|
| 7 |
"original_archive_sha256": "9d437cf8f781dd25354e3de6bdccf4a3e63c5eeb01efab5943ecfee709769160",
|
|
@@ -22,8 +22,8 @@
|
|
| 22 |
},
|
| 23 |
{
|
| 24 |
"path": "README.md",
|
| 25 |
-
"bytes":
|
| 26 |
-
"sha256": "
|
| 27 |
},
|
| 28 |
{
|
| 29 |
"path": "data/datasets.json",
|
|
@@ -32,8 +32,8 @@
|
|
| 32 |
},
|
| 33 |
{
|
| 34 |
"path": "data/egorender-progress.json",
|
| 35 |
-
"bytes":
|
| 36 |
-
"sha256": "
|
| 37 |
},
|
| 38 |
{
|
| 39 |
"path": "data/egorender-registry.json",
|
|
@@ -87,8 +87,8 @@
|
|
| 87 |
},
|
| 88 |
{
|
| 89 |
"path": "index.html",
|
| 90 |
-
"bytes":
|
| 91 |
-
"sha256": "
|
| 92 |
},
|
| 93 |
{
|
| 94 |
"path": "media/.gitkeep",
|
|
@@ -1442,8 +1442,8 @@
|
|
| 1442 |
},
|
| 1443 |
{
|
| 1444 |
"path": "src/app.js",
|
| 1445 |
-
"bytes":
|
| 1446 |
-
"sha256": "
|
| 1447 |
},
|
| 1448 |
{
|
| 1449 |
"path": "src/catalog.js",
|
|
@@ -1452,8 +1452,8 @@
|
|
| 1452 |
},
|
| 1453 |
{
|
| 1454 |
"path": "src/page.html",
|
| 1455 |
-
"bytes":
|
| 1456 |
-
"sha256": "
|
| 1457 |
},
|
| 1458 |
{
|
| 1459 |
"path": "src/preview.js",
|
|
@@ -1477,8 +1477,8 @@
|
|
| 1477 |
},
|
| 1478 |
{
|
| 1479 |
"path": "src/synthetic.js",
|
| 1480 |
-
"bytes":
|
| 1481 |
-
"sha256": "
|
| 1482 |
},
|
| 1483 |
{
|
| 1484 |
"path": "src/ui.js",
|
|
@@ -1556,5 +1556,12 @@
|
|
| 1556 |
},
|
| 1557 |
"dataset_content_changed": false,
|
| 1558 |
"production_changes": false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1559 |
}
|
| 1560 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"repo_id": "DarthSoluke/EgoNetDatasetResearch",
|
| 3 |
"repo_type": "space",
|
| 4 |
+
"base_revision": "831819ed416a0fade2cb3295a0035719b9c897bf",
|
| 5 |
"sdk": "static",
|
| 6 |
"app_file": "index.html",
|
| 7 |
"original_archive_sha256": "9d437cf8f781dd25354e3de6bdccf4a3e63c5eeb01efab5943ecfee709769160",
|
|
|
|
| 22 |
},
|
| 23 |
{
|
| 24 |
"path": "README.md",
|
| 25 |
+
"bytes": 3598,
|
| 26 |
+
"sha256": "1d289040ec8c0c72a8976104f859a76f8d26dabf8af2d456a30c4278f293f918"
|
| 27 |
},
|
| 28 |
{
|
| 29 |
"path": "data/datasets.json",
|
|
|
|
| 32 |
},
|
| 33 |
{
|
| 34 |
"path": "data/egorender-progress.json",
|
| 35 |
+
"bytes": 7585,
|
| 36 |
+
"sha256": "2eb9a5a7c3382f0476e737a0f70699059679215e228a0a56bf341e2ccf8a42e4"
|
| 37 |
},
|
| 38 |
{
|
| 39 |
"path": "data/egorender-registry.json",
|
|
|
|
| 87 |
},
|
| 88 |
{
|
| 89 |
"path": "index.html",
|
| 90 |
+
"bytes": 3182,
|
| 91 |
+
"sha256": "626d0f1927867c59aab0fdbc78e4eab47f4b9d7b81d39bcd90beb4df77630ba2"
|
| 92 |
},
|
| 93 |
{
|
| 94 |
"path": "media/.gitkeep",
|
|
|
|
| 1442 |
},
|
| 1443 |
{
|
| 1444 |
"path": "src/app.js",
|
| 1445 |
+
"bytes": 6510,
|
| 1446 |
+
"sha256": "33caa2d1f44b946ce4c65afc8d5ecc7e74511ee8c8aeed1ba153440b9181154a"
|
| 1447 |
},
|
| 1448 |
{
|
| 1449 |
"path": "src/catalog.js",
|
|
|
|
| 1452 |
},
|
| 1453 |
{
|
| 1454 |
"path": "src/page.html",
|
| 1455 |
+
"bytes": 3182,
|
| 1456 |
+
"sha256": "626d0f1927867c59aab0fdbc78e4eab47f4b9d7b81d39bcd90beb4df77630ba2"
|
| 1457 |
},
|
| 1458 |
{
|
| 1459 |
"path": "src/preview.js",
|
|
|
|
| 1477 |
},
|
| 1478 |
{
|
| 1479 |
"path": "src/synthetic.js",
|
| 1480 |
+
"bytes": 22043,
|
| 1481 |
+
"sha256": "a0f5a76e4d30aebb785765eaceb72406c0108f903ece0fb1fa3aad07ad58cb38"
|
| 1482 |
},
|
| 1483 |
{
|
| 1484 |
"path": "src/ui.js",
|
|
|
|
| 1556 |
},
|
| 1557 |
"dataset_content_changed": false,
|
| 1558 |
"production_changes": false
|
| 1559 |
+
},
|
| 1560 |
+
"progress_recovery": {
|
| 1561 |
+
"updated": "2026-11-02",
|
| 1562 |
+
"snapshot_collected_at": 1793603390.1547627,
|
| 1563 |
+
"natural_generation_completion_label": true,
|
| 1564 |
+
"training_complete": false,
|
| 1565 |
+
"production_changes": false
|
| 1566 |
}
|
| 1567 |
}
|
index.html
CHANGED
|
@@ -16,7 +16,7 @@
|
|
| 16 |
<link rel="stylesheet" href="src/styles.css" />
|
| 17 |
<link rel="stylesheet" href="src/synthetic.css?v=dataset-first-20261102" />
|
| 18 |
<script src="src/vendor/lucide.min.js" defer></script>
|
| 19 |
-
<script type="module" src="src/app.js?v=
|
| 20 |
</head>
|
| 21 |
<body>
|
| 22 |
<a class="skip-link" href="#app">跳到内容</a>
|
|
|
|
| 16 |
<link rel="stylesheet" href="src/styles.css" />
|
| 17 |
<link rel="stylesheet" href="src/synthetic.css?v=dataset-first-20261102" />
|
| 18 |
<script src="src/vendor/lucide.min.js" defer></script>
|
| 19 |
+
<script type="module" src="src/app.js?v=progress-recovery-20261102"></script>
|
| 20 |
</head>
|
| 21 |
<body>
|
| 22 |
<a class="skip-link" href="#app">跳到内容</a>
|
src/app.js
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
| 8 |
bindDetail,
|
| 9 |
} from "./catalog.js";
|
| 10 |
import { methodsView, somaView, samplesView } from "./reference.js";
|
| 11 |
-
import synthetic from "./synthetic.js?v=
|
| 12 |
|
| 13 |
const app = document.getElementById("app");
|
| 14 |
let context;
|
|
|
|
| 8 |
bindDetail,
|
| 9 |
} from "./catalog.js";
|
| 10 |
import { methodsView, somaView, samplesView } from "./reference.js";
|
| 11 |
+
import synthetic from "./synthetic.js?v=progress-recovery-20261102";
|
| 12 |
|
| 13 |
const app = document.getElementById("app");
|
| 14 |
let context;
|
src/page.html
CHANGED
|
@@ -16,7 +16,7 @@
|
|
| 16 |
<link rel="stylesheet" href="src/styles.css" />
|
| 17 |
<link rel="stylesheet" href="src/synthetic.css?v=dataset-first-20261102" />
|
| 18 |
<script src="src/vendor/lucide.min.js" defer></script>
|
| 19 |
-
<script type="module" src="src/app.js?v=
|
| 20 |
</head>
|
| 21 |
<body>
|
| 22 |
<a class="skip-link" href="#app">跳到内容</a>
|
|
|
|
| 16 |
<link rel="stylesheet" href="src/styles.css" />
|
| 17 |
<link rel="stylesheet" href="src/synthetic.css?v=dataset-first-20261102" />
|
| 18 |
<script src="src/vendor/lucide.min.js" defer></script>
|
| 19 |
+
<script type="module" src="src/app.js?v=progress-recovery-20261102"></script>
|
| 20 |
</head>
|
| 21 |
<body>
|
| 22 |
<a class="skip-link" href="#app">跳到内容</a>
|
src/synthetic.js
CHANGED
|
@@ -76,6 +76,24 @@ function progressView() {
|
|
| 76 |
<details class="reference-details"><summary>主机与存储</summary><div id="synth-resources" class="synth-resource"></div><div id="synth-storage" class="synth-facts"></div></details>
|
| 77 |
${section("最近归档", '<div id="synth-recent"></div>')}`;
|
| 78 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
function updateFreshness(error) {
|
| 80 |
if (!root) return;
|
| 81 |
const status = root.querySelector("#synth-status"),
|
|
@@ -85,23 +103,9 @@ function updateFreshness(error) {
|
|
| 85 |
label.textContent = error ? "状态暂不可用" : "读取快照";
|
| 86 |
return;
|
| 87 |
}
|
| 88 |
-
const
|
| 89 |
-
status.dataset.state =
|
| 90 |
-
|
| 91 |
-
? "stale"
|
| 92 |
-
: snapshot.queue_alive && !snapshot.admission_held
|
| 93 |
-
? "live"
|
| 94 |
-
: "stopped";
|
| 95 |
-
label.textContent =
|
| 96 |
-
(error
|
| 97 |
-
? "连接中断 · "
|
| 98 |
-
: stale
|
| 99 |
-
? "更新已过期 · "
|
| 100 |
-
: !snapshot.queue_alive
|
| 101 |
-
? "队列已停 · "
|
| 102 |
-
: snapshot.admission_held
|
| 103 |
-
? "暂停新增 · "
|
| 104 |
-
: "") + clock(snapshot.collected_at);
|
| 105 |
root.querySelector("#synth-execution").textContent =
|
| 106 |
"执行 " + snapshot.execution_revision;
|
| 107 |
}
|
|
|
|
| 76 |
<details class="reference-details"><summary>主机与存储</summary><div id="synth-resources" class="synth-resource"></div><div id="synth-storage" class="synth-facts"></div></details>
|
| 77 |
${section("最近归档", '<div id="synth-recent"></div>')}`;
|
| 78 |
}
|
| 79 |
+
export function progressState(value, error = false, now = Date.now() / 1000) {
|
| 80 |
+
if (!value)
|
| 81 |
+
return { state: "error", prefix: error ? "状态暂不可用" : "读取快照" };
|
| 82 |
+
if (error) return { state: "stale", prefix: "连接中断 · " };
|
| 83 |
+
if (now - value.collected_at > 180)
|
| 84 |
+
return { state: "stale", prefix: "更新已过期 · " };
|
| 85 |
+
const c = value.counts;
|
| 86 |
+
if (
|
| 87 |
+
c.complete === c.total &&
|
| 88 |
+
c.running === 0 &&
|
| 89 |
+
c.ready === 0 &&
|
| 90 |
+
c.failed === 0
|
| 91 |
+
)
|
| 92 |
+
return { state: "complete", prefix: "生成队列结束 · " };
|
| 93 |
+
if (!value.queue_alive) return { state: "stopped", prefix: "队列已停 · " };
|
| 94 |
+
if (value.admission_held) return { state: "stopped", prefix: "暂停新增 · " };
|
| 95 |
+
return { state: "live", prefix: "" };
|
| 96 |
+
}
|
| 97 |
function updateFreshness(error) {
|
| 98 |
if (!root) return;
|
| 99 |
const status = root.querySelector("#synth-status"),
|
|
|
|
| 103 |
label.textContent = error ? "状态暂不可用" : "读取快照";
|
| 104 |
return;
|
| 105 |
}
|
| 106 |
+
const display = progressState(snapshot, error);
|
| 107 |
+
status.dataset.state = display.state;
|
| 108 |
+
label.textContent = display.prefix + clock(snapshot.collected_at);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
root.querySelector("#synth-execution").textContent =
|
| 110 |
"执行 " + snapshot.execution_revision;
|
| 111 |
}
|