DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

xymy666 /

xymy666/dsh-cache-probe

Verified

DSH channel test page: prompt-cache hit rate, streaming speed, and a pelican SVG test.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@b41caf15

dsh-cache-probe

在 DSH Web GUI 里打开一个独立的 渠道测试 页面,测试任意已配置渠道的提示词缓存命中率、响应速度,并用「鹈鹕测试」检验模型能否画出可用的 SVG。

页面通过插件自己的 Host HTTP 接口运行测试,结果直接画在页面里;不注册 slash 命令,不往对话写命令卡片,也不会产生模型可见的消息。

入口

两个入口打开同一个页面:

  • 输入框下方统计徽标行末尾的 「渠道测试」 按钮;
  • 侧边栏的 渠道测试 页面图标(像技能中心/插件页一样常驻)。

页面替换中栏会话;点 「返回会话」 回到原会话。切换页面再回来,最近一次结果仍在。

页面

渠道测试
测试任意已配置渠道的提示词缓存命中率与响应速度

供应商 [ a6中转 ▾ ]   模型 [ deepseek-v4.1-flash-1017 ▾ ]   [返回会话]

[全部运行] [测缓存] [测速] [鹈鹕测试]   就绪

高级设置 ▸
  载荷字符数  缓存复测次数  缓存等待秒数
  目标输出 tokens  测速轮数  轮间隔秒数
  鹈鹕输出 tokens  单次超时秒数

┌ 缓存命中率 ──────────────────────────────────────────────────────┐
│ 复测命中 99.4%                                                    │
│ 缓存生效(最近 99.4%,最好 99.4%)                                │
│ 轮次 prompt 未缓存 缓存读 …                                        │
│ 平均(复测 N 轮)                                                  │
│ 真实流量(不含本次测试)                                           │
│ 文本报告 ▸                                                        │
└──────────────────────────────────────────────────────────────────┘
┌ 响应速度 ──────────────────────────────────────────────────────┐
│ TTFT 402ms · 85.3 tok/s                                        │
│ 首 token 402ms,生成 85.3 tok/s                                 │
│ 轮次 输出 tok TTFT tok/s 总耗时                                 │
│ 平均                                                            │
│ 文本报告 ▸                                                      │
└──────────────────────────────────────────────────────────────────┘
  • 测缓存:一次预热 + N 次复测,读取真实 usage 计算命中率。
  • 测速:N 轮短提示词,测 TTFT、输出 tok/s、总耗时。
  • 鹈鹕测试:一轮请求让模型画“骑自行车的鹈鹕”SVG,页面提取并渲染预览,同时记录 TTFT、tok/s、总耗时和 SVG 字符数;不判断画得像不像。
  • 全部运行:缓存 → 测速 → 鹈鹕,逐项更新卡片;一项失败不会跳过另一项。
  • 先选供应商,再选该供应商的模型;每个供应商会记住上次选的模型,切回来时自动恢复。
  • 没有可用模型的供应商仍会显示,标注「无可用模型」;选中后模型下拉为空、运行按钮禁用。
  • 运行中按钮与两个下拉全部禁用,状态显示「缓存测试中… / 测速中…」。
  • 测试过程中,结果区显示全宽进度面板:当前阶段、已用时间、预热/复测步骤条、等待倒计时、逐轮实时指标,以及「停止测试」按钮。
  • 正常完成后进度面板收起,显示结果卡片;取消后保留已完成轮次的进度面板,标记「测试已停止」,不生成不完整的结果卡。
  • 结果卡片包含逐轮表格、结论和可复制的文本报告;缓存卡还会显示来源会话的真实流量对照。
  • 缓存表和测速表最后一行是平均:token/耗时取算术平均;缓存命中率按「总缓存读 ÷ 总 prompt」加权,且只统计复测轮、不含预热。失败轮不参与平均。
  • 三张结果卡(缓存、测速、鹈鹕)纵向排列,每张独占一整行;窄屏同样是一列。
  • 鹈鹕预览按宽度自适应并完整显示,预览框内没有滚动条;图片较高时由页面整体滚动。
  • 每张结果卡标题下显示「上次检测 HH:mm:ss · 渠道 / 模型」;结果来自旧渠道时再追加「来自 渠道 / 模型」。
  • 只保留全局最近一次缓存、测速和鹈鹕结果:刷新页面或重启 DSH 后仍会恢复;再测其中一项只更新该项。

页面内的供应商/模型选择只影响本页测试,不会切换当前会话的聊天模型。

测试口径

缓存

载荷为固定模板 + 随机 nonce 的长前缀(默认 12,000 字符),每轮内容完全相同:

  1. 预热一次;
  2. 等待 wait 秒;
  3. 复测 rounds 次。

命中率采用与 DSH 内置统计一致的口径:

cacheReadTokens ÷ (未缓存输入 + cacheReadTokens + cacheWriteTokens)

报告里的「真实流量」只汇总打开页面时所在会话已结算的 assistant/message,按 provider 分组,不包含本次测试。

测速

每轮短提示词带唯一 nonce,避免命中提示词缓存把 TTFT 测低。

  • TTFT:开始流式请求到第一个 token 分片(文本、推理或工具调用参数)。
  • 输出速度:usage.outputTokens ÷ (finish 时间 − 首 token 时间)。
  • 总耗时:开始流式请求到 finish。
  • 推理模型会自动选最低思考等级;若模型把 token 都花在推理上、没有可见文本,表格会标注「无可见文本」。
  • 多轮时给出中位数与范围;只有 1 轮时不写「中位」。

默认参数

项目 参数 默认 范围
缓存 载荷字符数 12,000 2,000–200,000
缓存 复测次数 2 ≥1(无上限)
缓存 等待秒数 10 0–120
缓存 单次超时 120s 10–300
测速 目标输出 tokens 256 32–2,048
测速 轮数 3 ≥1(无上限)
测速 轮间隔 1s 0–30
测速 单次超时 120s 10–300
鹈鹕 输出 tokens 2,048 256–4,096
鹈鹕 单次超时 120s 10–300

参数在页面「高级设置」里改,写入 localStorage,下次打开继续使用。缓存复测次数和测速轮数不设上限;轮次越多,耗时和费用越高,每轮都是真实请求。

成本

  • 三个测试都会发送真实计费请求。
  • 默认缓存:3 次请求(预热 + 2 次复测),每次约 3,000 prompt token + 32 output token。
  • 默认测速:3 轮 × 256 output token,prompt 约 30 token/轮。
  • 默认鹈鹕:1 轮,最多 2,048 output token,prompt 约 50 token。
  • 页面不会读取或打印 API Key;凭据由 DSH 的 provider 配置提供。
  • 同一时间只允许一个测试;第二个请求返回 409「已有渠道测试正在进行」。

Host 接口

页面使用两条同源 HTTP 路由,不经过命令系统:

GET  api/dsh-cache-probe/models?sessionId=...
POST api/dsh-cache-probe/run

models 返回 active providers、各自模型和默认路由;run 接收:

{
  "kind": "cache",
  "provider": "a6",
  "model": "deepseek-v4.1-flash-1017",
  "sessionId": "可选",
  "cache": { "size": 12000, "rounds": 2, "wait": 10, "timeout": 120 },
  "speed": { "tokens": 256, "rounds": 3, "gap": 1, "timeout": 120 },
  "pelican": { "tokens": 2048, "timeout": 120 }
}

kind 支持 cache、speed、pelican;鹈鹕返回 pelican.attempt、text、svg、svgSource、svgLength、report、summary。

返回结构化 attempts、summary、report;缓存还带 sessionChannels。单次只接受 cache、speed 或 pelican,「全部运行」由页面顺序发三次请求。

请求头带 x-dsh-cache-probe-stream: 1 时,run 改为返回 application/x-ndjson 流,逐行推送:

start → attempt-start → attempt → wait → wait-done → done
  • attempt 每完成一轮就到达,页面实时填表;
  • wait 用于缓存等待/测速间隔倒计时;
  • done 携带与普通 JSON 响应相同的最终结果;
  • 旧 Host 忽略该头并返回 JSON,新客户端会自动回退,只是没有逐轮实时过程。

安全围栏

  • 只允许 loopback socket + loopback Host,拒绝 cf-connecting-ip / x-forwarded-for 代理跳;
  • 拒绝 sec-fetch-site: cross-site,Origin 必须与 Host 同源;
  • 有 remoteWebUiPairing 时,已配对设备 cookie 作为第二条放行路径;
  • POST 额外要求 x-dsh-cache-probe: 1 请求头;
  • 请求体上限 64 KiB;失败统一返回 { ok:false, error:{ code, message } }。

安装

需要带 Web GUI 的 DSH profile(web 或 desktop);CLI/headless profile 不显示页面。

从 npm 安装(推荐)

dsh plugin --profile web add dsh-cache-probe

desktop profile 把 web 换成 desktop。npm 包是预构建版本,安装时不需要 allowBuilds 授权。

从 GitHub 安装

npm 不可用时,也可以直接指向仓库:

dsh plugin --profile web add https://github.com/xymy666/dsh-cache-probe

安装后重启 DSH 一次,让 Host 路由加载;之后刷新页面即可。

本地开发时用 link: 指向 checkout:

dsh plugin --profile web add "link:/absolute/path/to/dsh-cache-probe"

然后确认:

  1. 输入框下方只有一个「渠道测试」按钮;
  2. 侧边栏出现「渠道测试」图标;
  3. 点击任一入口打开页面,供应商下拉能列出已启用渠道,模型下拉只显示所选供应商的模型。

开发

git clone https://github.com/xymy666/dsh-cache-probe.git
cd dsh-cache-probe
node scripts/build.mjs     # 生成 lib/client.js(内联 options/stats/client)
node --test                # 98 个单测
node scripts/verify.mjs    # 包结构 + bundle + profile 安装状态

目录:

lib/index.js          Host 路由入口
lib/client.js         构建产物(不要手改)
src/http.mjs          loopback/配对围栏、JSON body、响应
src/routes.mjs        models / run 两条 Host 路由
src/options.mjs       默认值、范围、参数校验
src/probe.mjs         缓存探测执行、摘要、报告
src/speed.mjs         测速执行、摘要、报告
src/pelican.mjs       鹈鹕 SVG 提示词、提取/清理、摘要、报告
src/payload.mjs       缓存探测长前缀
src/stats.mjs         usage/计时汇总与格式化(Host 与页面共用)
src/errors.mjs        失败码文案
src/client.mjs        controller、页面、侧边栏图标与输入框按钮
scripts/              构建与校验
test/                 单测

已知限制

  • 页面只在有 webServer 与 Web GUI 的 profile 加载;CLI/headless 不显示页面。
  • 实时逐轮进度与「停止测试」需要新版 Host;旧 Host 会自动回退到一次性 JSON 结果,停止只释放本页等待,Host 请求可能继续到超时。升级后必须重启 DSH 才能启用流式进度。
  • 结果保存在 localStorage:只保留全局最近一次缓存、测速和鹈鹕结果,刷新页面或重启 DSH 后恢复;切换供应商/模型或修改参数不会清空当前显示。
  • 鹈鹕 SVG 只做提取和基础清理(去脚本、事件属性、外链、foreignObject);清理后仍不安全的 SVG 不渲染,只显示原始文本。
  • 鹈鹕测试不判断画得像不像,也不重试;模型不返回 SVG 时卡片显示「无 SVG」并保留原始回复。
  • 供应商下拉只列当前 active 的 provider;未启用或缺凭据的渠道不会显示。没有模型的供应商会标注「无可用模型」。
  • 测试页面内的供应商/模型选择不改变聊天模型;需要切换聊天模型请回会话操作。
  • 测速只测流式 token 时间,不测网络 ping/首字节;长上下文 prefill 由缓存测试的长前缀覆盖。
  • 渠道不返回 usage 时,TTFT/总耗时仍可显示,但 tok/s 与命中率无法计算。
  • 缓存测试默认等待 10 秒,实际耗时可能超过半分钟;这是为了给上游缓存生效留时间。

License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit b41caf15679b

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout