Prhub

#35753 [docs] Tell Qwen3.8-27B DFLASH2 users to build from main

原始 PR 作者 Jiminator 合并时间 2026-08-21 07:34 文件变更 6 提交数 1 评论 1 代码增减 +122 / -25

执行摘要

DFLASH2 文档补 main 构建要求,验证徽章支持按选项状态

PR body 明确这是对 #35663 的 follow-up:页面固定的 lmsysorg/sglang:qwen38-27b tag 早于 DFlash2 选择器支持(#35371)和 NVFP4 量化 lm_head 修复(#35496),读者照文档操作会在 NVFP4 cell 上遭遇启动失败 requires a dense FP16/BF16/FP32 target lm_head 且找不到原因;同时原 PR 把提示写成命令内的 # DFLASH2 on this platform: final verification in progress 注释行,既难看又易被忽略,而面板本就有 in-progress 徽章机制,应当用徽章表达。

值得快速精读。核心看点是“文档要求跟随命令复制”与“验证状态函数化 + CI 探针封闭缺口”的组合:cellVerifyStatus(c, sel) 的回退链、check_cookbook_configs.mjs 对函数型字段在完整选择空间上的 probe,都是 docs 基础设施工程化的好范例;对维护 cookbook 或类似配置驱动文档的工程师有参考价值。

讨论亮点

该 PR 的 review 没有留下评论线程,唯一的 issue 评论来自 mintlify[bot] 的预览部署通知,reviewer zijiexia 直接批准(APPROVED)。设计权衡集中体现在 PR body:作者论证了函数型 verificationStatus 的必要性——cellVerifyStatus 原本只读静态字段,无法表达同一 cell 在不同选项下验证状态不同,静态 in-progress 会把其他平台的其他选项误标为未验证;并给出影响面分析:verificationStatus 只有 cellVerifyStatus 一个读取点,_playground.jsxcheck_cookbook_configs.mjs 均不读取,kimi-k3.jsx 的 49 处静态字符串走未变路径,布尔 / 字符串 / undefined 行为与旧版一致,未知字符串仍回退 unverified,因此拼写错误不可能误显为绿色 Verified。

实现拆解

变更入口是 Qwen3.8-27B cookbook 的文档与配置,核心是把“DFLASH2 需要 main 构建”的要求带到读者复制命令旁,并让验证徽章能按选择项动态显示。实现分五步:

  1. 文档层警告(docs/cookbook/autoregressive/Qwen/Qwen3.8-27B.mdx:在 Install 手风琴和 Deploy 命令面板后各加一个 <Warning>,说明 DFLASH2 落地于 #35371、DFLASH2 + NVFP4 的量化 lm_head 路径需要 #35496,缺少后者时 NVFP4 cell 会在启动时失败并报 requires a dense FP16/BF16/FP32 target lm_head;同时在 pip install sglangdocker pull lmsysorg/sglang:qwen38-27b 两个命令旁追加注释,提示 DFLASH2 cells 应改从源码构建或拉取 nightly 镜像。两个 <Warning> 都点明 None / EAGLE / DSPARK 仍可在固定 tag 上按原样运行,避免整页被读成一次版本升级。

  2. 配置层徽章化(docs/src/snippets/configs/Qwen/qwen3.8-27b.jsx:删除 dflash 选项上的 hints 函数(它会把“验证中”注释渲染进复制命令),改为在 H200(FP8 / BF16)、DGX Spark 等多个 cell 上添加函数型 verificationStatus: (sel) => sel.spec === "dflash" ? "in-progress" : "verified",使徽章只对 DFLASH2 选择降级为 in-progress,其余选择保持 Verified。

  3. 渲染引擎函数化(docs/src/snippets/_deployment.jsxcellVerifyStatus 签名从 (c) 扩展为 (c, sel),当 c.verificationStatus 是函数时用当前选择求值,否则沿用静态字段;回退链保持 v ?? c.verified,未知字符串继续回退 unverified。唯一调用点 const verifyStatus = cellVerifyStatus(cell, sel) 同步传入 selkimi-k3.jsx 里的 49 处静态字符串走未变路径,布尔 / 字符串 / undefined 行为与旧版一致。

  4. 校验与作者配套docs/scripts/check_cookbook_configs.mjs 在配置遍历中新增对函数型 cells[].verificationStatus 的探针,在完整选择空间上要求返回值属于 verified / in-progress / unverified 或 undefined,拼写错误或抛异常都会让检查失败;.claude/skills/cookbook-add-model/references/authoring-reference.mdtemplates/config.jsx.tmpl 同步记录该字段的三态、函数语义与回退规则。

  5. 测试配套:本 PR 无自动化测试(docs only),但作者用变异方法验证了检查器——把 "in-progres" 拼错或让谓词抛异常都会触发检查失败,真实配置通过。改动前检查器只 probe 函数型 dim / option 字段,cells 字段不在覆盖范围内,本次一并闭合该缺口。

文件 模块 状态 重要度
docs/src/snippets/_deployment.jsx 渲染引擎 modified 6.31
docs/src/snippets/configs/Qwen/qwen3.8-27b.jsx 模型配置 modified 5.82
docs/cookbook/autoregressive/Qwen/Qwen3.8-27B.mdx 部署文档 modified 3.98
docs/scripts/check_cookbook_configs.mjs 检查脚本 modified 3.84
.claude/skills/cookbook-add-model/references/authoring-reference.md 作者指南 modified 2.87
.claude/skills/cookbook-add-model/templates/config.jsx.tmpl 配置模板 modified 2.45

关键符号

cellVerifyStatus

关键源码片段

docs/src/snippets/_deployment.jsx core-logic

cookbook 渲染引擎的核心改动:`cellVerifyStatus` 从静态字段读取扩展为支持按 selection 求值的函数型 verificationStatus,是所有 cell 徽章渲染的公共路径。

// `cellVerifyStatus` 是 cookbook 渲染引擎中读取验证徽章的唯一入口。
// 旧实现只读静态字段;新实现允许 `verificationStatus` 是 selection 的函数,
// 这样同一个 cell 可以按当前选项显示不同状态(例如只有 DFLASH2 尚在验证)。
const cellVerifyStatus = (c, sel) => {
  if (!c) return "unverified"; // 没有匹配 cell 时保持“未验证”
  const v =
    typeof c.verificationStatus === "function"
      ? c.verificationStatus(sel) // 函数形式:按当前选择求值
      : c.verificationStatus; // 静态形式:字符串或布尔值
  return verifyStatusOf(v ?? c.verified);
};// 唯一调用点:`sel` 是当前完整选择(hw × 各维度选项),与 `findCell`
// 的查找维度一致,保证按选项展示 in-progress 徽章。
// `verifyStatusOf` 负责三态归一:白名单字符串原样返回,未知字符串
// 回退 `unverified`,布尔值维持 verified 基线语义。
const verifyStatus = cellVerifyStatus(cell, sel);
docs/src/snippets/configs/Qwen/qwen3.8-27b.jsx core-logic

配置主体改动:移除命令内 hints 提示行,改为在 H200、DGX Spark 等 cell 上按 `sel.spec === "dflash"` 返回 in-progress,驱动本 PR 的徽章语义。

// DFLASH2 选项删除了原来的 `hints`(它把“验证中”注释渲染进复制命令),
// 验证状态改由 cell 级徽章表达。下面以 H200 / FP8 cell 为例:该 cell
// 整体已验证(verified: true),但 DFLASH2 尚未在此平台端到端跑过,
// 所以 `verificationStatus` 写成 selection 的函数,只在选到 dflash 时
// 把徽章降为 in-progress,其余 Speculative Decoding 选项保持 Verified。
{
  match: { hw: "h200", variant: "default", quant: "fp8", nodes: "single" },
  verified: true,
  verificationStatus: (sel) =>
    sel.spec === "dflash" ? "in-progress" : "verified",
  env: [],
  flags: [
    "--trust-remote-code",
    // ... 其余启动参数由部署命令生成器按选择展开
  ],
}
docs/scripts/check_cookbook_configs.mjs test-coverage

CI 校验配套:新增对函数型 `cells[].verificationStatus` 的探针,防止拼写错误或抛异常的谓词流入渲染页面。

// 函数型 verificationStatus 会随选择渲染,因此必须像其他函数型字段一样
// 在完整选择空间上探测:返回值必须是三态白名单之一或 undefined,
// 否则打字错误会静默回退 "unverified",直到浏览器渲染才暴露。
const VERIFY_STATES = ["verified", "in-progress", "unverified"];
for (const [i, cell] of (config.cells || []).entries()) {
  if (typeof cell.verificationStatus !== "function") continue;
  probe(
    (sel) => {
      const out = cell.verificationStatus(sel);
      if (out !== undefined && !VERIFY_STATES.includes(out)) {
        throw new Error(
          `returned ${JSON.stringify(out)}, expected one of [${VERIFY_STATES}]`,
        );
      }
    },
    `cells[${i}].verificationStatus`, // probe 的 label,失败时定位到具体 cell
  );
}

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

  1. 渲染引擎回归面:cellVerifyStatus 签名变化影响所有 cookbook 页面渲染。当前调用点只有一处且已同步传入 sel,但后续若新增调用点忘记传 sel,函数型 verificationStatus 会在 sel.spec 处抛 TypeError,导致页面渲染崩溃;CI 探针覆盖所有选择空间,能兜住配置侧错误,却兜不住渲染侧调用遗漏。
  2. 拼写与回退语义:verifyStatusOf 对未知字符串回退 unverified,保证不会误显绿色徽章,但也会让 "in-progres" 这类拼写错误静默降级为“未验证”;好在新增探针会在 CI 阶段拦截。
  3. 文档时效性:两个 <Warning> 引用了具体 PR 号(#35371、#35496)和具体失败信息,若 DFlash2 / NVFP4 要求被回滚或合入 release,页面需同步更新;docker 注释示例 dev-nightly-0820 会过期,后续 #35767 即把该注释指回滚动 dev tag。
  4. 兼容性:kimi-k3.jsx 的 49 处静态字符串不改动,行为不变;布尔 verified 与字符串 verificationStatus 并存的回退链保持旧语义。

对用户:Qwen3.8-27B cookbook 读者能提前获知 DFLASH2 需要 main 构建,避免按固定 tag 操作时启动失败并困惑;徽章按选项展示使验证状态更准确。对系统:只影响 docs 渲染引擎与 CI 检查脚本,不影响 SGLang 运行时。对团队:docs 配置契约新增一个可函数化的字段,作者参考与模板同步更新,降低后续 cookbook 作者踩坑概率;检查器覆盖范围扩大,防止新引擎能力无校验上线。

渲染引擎公共路径变更 无自动化测试(docs only) 函数型字段依赖 CI 探针 文档时效性(PR 号与 nightly 示例)

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论