Repository navigation
Releases
v0.2.0 — 模型聚合:累计用量与峰值速度
v0.2.0 — 模型聚合:累计用量与峰值速度
English: adds per-model cumulative output tokens and historical peak tok/s to the HUD; both are host-side in-memory only and reset on restart by design.
新功能
悬浮窗底部新增模型聚合区(最多 3 行):
模型用量(重启清零)
deepseek-v4-pro ↑12.3K ⚡58.2
glm-5.3 ↑4.5K ⚡31.0
↑:该模型自 host 启动以来的累计输出 token 数⚡:该模型在滚动窗口 tps 上的历史峰值(5 秒均值口径)
两列数据均为 host 纯内存,重启自动归零——正好对应你“看模型是不是稳定出字”的需求:如果 ↑ 缓慢爬坡 ⚡ 长期低于预期,说明模型速度本来就不高;如果 ⚡ 突然跳水再恢复,大概率就是重试了一次。
实现细节
Host
- 新增
modelsMap,键为 model name,值为{ provider, outputTokens, peakTps }。 addTokens()在流式估算时按session.model即时归集;模型未知名时暂存untaggedTokens,在assistant/message(或更早的request/header)提供模型名后一次性回填。snapshot()每次计算各会话当前 tps,高于该模型 peak 则更新;驱逐空闲会话前回填 untagged。- 响应新增
models: [...]字段(top 8,按 outputTokens 降序)。 request/header事件处理:config.model存在时提前锁定模型名,缩小首轮流式期间的 untagged 窗口。
Client
- 渲染
stats.models:最多 3 行,每行模型名 ↑累计 ⚡峰值,模型名过长自动 ellipsis。 - 新增 CSS:
.th-models(顶部分隔线)、.th-mrow、.th-mtok、.th-mtps。 - i18n:中文
模型用量(重启清零)/ 英文Model usage (resets on restart)。
测试
- Host test(A/B/C/D 四通道):
- A 旧宿主 chunk 通道 → glm-5.3 outputTokens=300 ✅
- B 帧通道 + request/header 提前锁定 → deepseek-v4-pro outputTokens=160 peakTps>0 ✅
- C 防双计护栏 ✅
- D 无 request/header 的 untagged 回填 → mimo-v2.5-pro outputTokens=90 ✅
- 聚合表排序(300 > 160 > 90)✅
- Client smoke:
↑⚡图标、th-models类名、第二模型行存在 ✅- 其余既有场景全绿 ✅
升级
dsh plugin --profile web add dsh-token-hud # 已装用户重跑即升级重启 dsh web 生效。
v0.1.1 — 修复 0.1.5-rc.2+ 宿主上实时速度恒为 0
v0.1.1 — 修复 0.1.5-rc.2+ 宿主上实时速度恒为 0
English: fixes live tok/s stuck at 0 on DSH hosts >= 0.1.5-rc.2 (session format v2). The plugin now consumes the new
agent/assistant-streamframe channel, keeps theassistant/chunkfallback for older hosts, and guards against double counting.
问题现象
宿主从 0.1.2-rc.x 升级到 0.1.5-rc.2(会话日志 format v2)后:
- 悬浮窗实时 tok/s 恒为 0
- 累计 token 仍缓慢增长(来自
assistant/message的事后 usage 校正)
根因
v2 把流式输出拆成了两条通道:
| 0.1.2-rc.x | 0.1.5-rc.2+(format v2) | |
|---|---|---|
| 实时逐 delta | session/event 的 assistant/chunk |
独立 agent/assistant-stream 帧通道(每 chunk 广播,含子代理) |
| 落账 | 逐 chunk 进 session log | 尝试结束才落一个完整 assistant/attempt |
0.1.0 只监听 session 事件 → 在新宿主上收不到任何实时 delta。
修复
- 新增
agent/assistant-stream帧监听(与官方dsh-api-session-controller相同的订阅方式,{ global: true }),逐 chunk 估算进滚动窗口 - 保留
assistant/chunk回退通道,0.1.2-rc.x 老宿主照常工作 - 双通道互斥护栏:见过帧后自动忽略旧通道的 chunk,杜绝双计数
- attempt
start帧重置估算基线(同 turn/step 的重试视为全新尝试)
兼容性
- 0.1.5-rc.2+ / format v2 ✅(帧通道)
- 0.1.2-rc.x ✅(回退通道)
- 配置项、API 路径、悬浮窗 UI 无任何变化,直接换包即可
测试
test.mjs 新增三通道覆盖(旧通道 / 帧通道 / 防双计护栏),全绿;客户端 jsdom 冒烟测试无回归。
升级
dsh plugin --profile web add dsh-token-hud重启 dsh web 生效;npm 源同步后即为 0.1.1(latest)。
v0.1.0 — 首发
v0.1.0 — 首发
DSH Web 全局实时 Token HUD 的第一个公开发布。
- 可拖拽、可折叠悬浮窗(
shell.overlay),显示整个 DSH 所有会话的实时输出速度(tok/s)、累计输出与运行状态 - 逐 delta 字符估算(中文 ≈ 1 tok/字,英文 ≈ 4 字符/tok),provider 上报 usage 后自动校正为精确值
- 状态点:🟢 出字中(脉动)· 🟡 等模型 · 🟠 重试等待 · 🔵 工具调用 · ⚪ 空闲
- host 纯内存、只读 API
/token-hud/v1/stats:零持久化、不写会话日志、对模型零影响 - 含 host 逻辑测试(估算/校正/状态机/HTTP)与客户端 jsdom 冒烟测试(渲染/折叠/持久化/离线降级)
安装
dsh plugin --profile web add dsh-token-hud