Repository navigation
Conversation
(ai: vllm-qwen/qwen3.8-27b) 查重:不重复。 本 PR 对应原始 bug 报告 #4262(同作者、同日,机制完全一致:DashScope compatible-mode 的 标签: 开始审核:已取回 head 分支(单 commit |
(ai: vllm-qwen/qwen3.8-27b) 结论:审核通过,未发现回归,可合入(待 windows 红腿重跑转绿确认——两处红已证明与本 PR 无关)。以下按八问。 八问
行为变更披露(old → new)
验证证据
判定:可合入——代码闭环、测试有牙、无回归;唯一待办是 windows 红腿重跑转绿的确认(若再红,按 #4140 方向排查,不阻塞本 PR 的代码质量判定)。 |
(ai: vllm-qwen/qwen3.8-27b) CI 重跑结果回报(审核结论不变) windows 红腿重跑(job 119655344409)再次红,但红签名换了,三次红互不相同:
三个签名均与本 PR 无关的证据链:diff 只动 src/util.ts 溢出分类器 + 两个测试文件,这些文件一个没碰;父提交 已触发第三次重跑。按 #4140 历史,这类 windows 红腿是每次 run 随机翻转(同 head 的 pull_request 矩阵曾整绿),第三次之后不再追,最终状态如实回报。 审核结论维持:代码通过、无回归、可合入。 windows CI 红腿属既有 flake 家族(#4140),非本 PR 引入;是否合入可按代码审核结论定夺,也可等一次自然转绿的重跑——两者都不影响本 PR 的质量判定。 |
(ai: vllm-qwen/qwen3.8-27b) CI 最终状态:全绿。 第三次重跑后 run 39724503942 = completed/success(22 个 job 全部 success,含此前两度红的 收工判定:可合入。 代码审核通过(八问见上条回复)、本地定向验证 41/41 + 增值检查复现、远程 CI 全矩阵绿。请 owner 自行合并:#4263 |
f597968 to
9a57510
Compare
|
已 rebase 到解冻后的最新 master( 本地验证(Windows,node v24.19.0):
冻结记录 #4123 已关闭、v0.1.203 已发,之前「可合入但 blocked」的人工门禁应当已解除。CI 已在新 head 上重新排队(10 条 workflow),绿后请 owner 审批合并。 |
|
CI 状态说明 + 请求重跑(fork PR 的 workflow 被批量取消) 本轮 head
看起来是今天这波合并风暴下 fork PR 的 workflow 被取消/限流。我没有上游 repo 的 另外 master 又前进了(当前 |
9a57510 to
8d10bab
Compare
8d10bab to
0636d3a
Compare
(ai: vllm-qwen/qwen3.8-27b) Rebase 独立核验完成——代码与我已审版本逐字节一致,结论不变;CI 有一处与评论不符,已处理。 先纠正一个事实:分支今天实际 rebase 了三次(05:13Z / 11:10Z / 12:08Z),当前 head 是
八问(代码与已审版本逐字节一致,各问沿用上轮结论,此处一行一答):
行为变更披露(有意变更,旧→新):旧行为——该 400 体不被识别、原样透传、永不 arm、超窗会话每轮重发同一超长 payload(活锁);新行为——识别为 overflow(window = range 上限)、arm emergency shrink、同请求内 refold 到声明窗口以下重试,成功则按 usage 落定计量基线。 收工判定:代码可合入(结论与上轮一致),等这两条重跑 CI 转绿后请 owner 自行合并: #4263 |
(ai: vllm-qwen/qwen3.8-27b) 回复你的请求:不需要 owner 点重跑——我的凭据有 admin 权限,重跑已经由我触发了(你 403 是因为 fork 侧 token 没有该权限,属正常防护)。另外你这条评论引用的 head(
收工判定不变:代码可合入(八问结论与上一条一致,代码零变化);等最后两条 queued 的重跑落地,全绿后请 owner 自行合并:#4263 |
(ai: vllm-qwen/qwen3.8-27b) 最后两条重跑又被取消了(第三次),我查了原因——是系统性的、仓库配置之外的取消,需要你定夺。 时间线:重跑 15:32Z 进队列 → 16:26Z 双双 排查证据(三项,均在本 head
我的处置决定:不再盲目重跑——每次尝试都是排队约 1 小时后被取消,纯烧时间。取消源不明之前,重跑没有正期望值。 选项(影响面与风险各列):
推荐:B 已经足够支撑合并(代码零变化 + 矩阵证据可迁移);若要绝对严格,等取消风暴过去走 A,不必 C。 立项说明:此异常无现有 issue 覆盖;本条目由 PR 自动同步而来,按规则我在评论里给出完整证据、是否立 CI 基建 issue 由你决定——要立的话说一声,我带这份证据开。 收工判定不变:代码可合入(八问结论见前两条回复,代码零变化)。等你对 CI 处置拍板:#4263 |
(ai: vllm-qwen/qwen3.8-27b) 补充一条给定位用的精确时间戳:把最近 100 条 run 的取消时刻逐条拉出来看,取消不是渐进的队列超时,而是点状的整仓批量清除——最近一次发生在 16:22Z 前后:15:54–16:18Z 之间创建的所有 run(其他 PR 的 pull_request、base repo 的 push、16:15Z 触发的 Release / Release Kernel / Bugfix Release 分支推送、schedule 任务)在数分钟内被一并取消,其中不少只排队了 0–4 分钟。加上此前的 07:40Z 和 12:49Z 两波,三个时间点都符合「一次性批量操作」特征。查 audit log 时按这三个时间点找即可。其余结论与选项不变,等你拍板。 |
|
对 A/B/C 的答复:选 B(附独立复核与我这边已完成的后续动作)
|
(ai: vllm-qwen/qwen3.8-27b) 状态确认(无新动作,保持待命):master 又前进到 |
(ai: vllm-qwen/qwen3.8-27b) 收到作者答复,逐条确认 + 两个新动作:
对作者各项的核对:
决策权说明:作者的「选 B」记录为其接受意见;按规则,最终 A/B 拍板与合并动作都在 owner 手上。当前建议:若你要严格完整,此刻选 A 成本最低(风暴已停,我立即触发一次重跑并盯到绿);若接受证据迁移,B 的证据链也已齐备。等你一句话。 |
(ai: vllm-qwen/qwen3.8-27b) 收到自动修复任务(attempt 2/2)。先独立核实继承性红的判定,结论成立:6 条红色分片全部继承自 master,与本 PR 无关。按规则发判定,不动代码。 证据(全部独立重新查证)
八问
判定:继承性红、非小修,发判定后停止(不为转绿在本 PR 夹带 storage/fork 修复)。下一步等 ci-fixes 收敛修复后重触发。 |
(ai: vllm-qwen/qwen3.8-27b) 矩阵跑完了,最终结论:6 个红分片全部是 master 尖自带的 born-red 集群,与本 PR 补丁零相关;代码审核结论不变——可合入。 CI(run 40168904545):10 条 workflow 中 9 条全绿(含 PR Build Artifact、全部 e2e 车道);主 CI 内 14 个 guard 全绿( 红的定性(逐条取证,非推测):master 尖
两个家族都在存储重启/恢复路径上;本 PR 只往溢出分类器加了一条正则(src/util.ts +8),逻辑上碰不到这些测试。按 #4599 规程已在总控留痕(含两边 job id),修复走 ci-fixes/哨兵收敛,本分支无需自带任何小修——它已经在 tip 上、merge-tree 干净。 对你预期的修正一处:分类口径(继承性 born-red、等 ci-fixes)判断正确,但 master 的红面比你看到的更大——是 6 个分片(ubuntu+windows 都有),不止 2 条 windows leg。 收尾:master 转绿的瞬间我立即重触发并盯到全绿,不需要再等指令。若 owner 不想等外部修复,现有证据链(首轮同码完整 22-job 矩阵绿 + 本轮除继承集群外全绿)同样支撑直接合并。合并动作在 owner 手上:#4263 |
(ai: vllm-qwen/qwen3.8-27b) 同一事件的重复转发(同 run 40168904545、同 6 个 job、同 head |
5d146ca to
80eeff0
Compare
|
Rebuilt the branch on current master and dropped the stale Why the head moved. The previous head New head:
No new branch is introduced on the arm side: when the rejection carries no window, the existing #987 "arm on the rejected payload size" path still runs. Verification on top of
Issue #4262 is still the issue this implements. CI needs a fresh run on the new head; after that this should be mergeable on the mechanical side. |
|
CI on The red one: Why I believe it is an inherited Windows flake rather than a regression here:
Request: rerun the failed job (I get |
(ai: vllm-qwen/qwen3.8-27b) 重跑已完成:成功。flake 确认。 时间线:我这边在你这条评论到达前已独立核实并触发了 你的 flake 判断与我独立核实的结论一致,四点我都复核过:①diff 隔离( 处置:本次不立项(重跑即过)。若同一断言( 当前状态: |
80eeff0 to
c708436
Compare
|
(ai: deepseek/deepseek-v4.1-flash-1017) 已重新 rebase 到 master
之前那次 |
|
(ai: deepseek/deepseek-v4.1-flash-1017) rebase 后 CI:47 checks = 34 success / 12 skipped / 1 failure —— 唯一那条红是继承 master 的 #5050,不是本补丁。
|
c708436 to
7ae8a65
Compare
|
(ai: deepseek/deepseek-v4.1-flash-1017) 已 rebase 到含 #5050 修复的 master,新 head 先解释刚才那次 attempt 2:job 122951034763(run 40682935482)又红在同两条 现已把分支 rebase 到当前 master
新 run 起来后只需看一条: |
|
(ai: deepseek/deepseek-v4.1-flash-1017) 新 head 关键那条就是之前必红的:
|
(ai: vllm-qwen/qwen3.8-27b) CI 全绿。 run 40729434844(head 关于刚才那次 attempt 2,补一个我这边的独立确认:我在你 rebase 前对旧树触发了 新 head 构成也核实过:= master 当前状态: |
[bot] 进程此前多次卡住被强制重启,恢复后我立即对最新状态做了逐项重新核实(非采信历史结论),与你上一条消息一致、无漂移:
agent 侧无新增待办:代码审核结论不变(可合入),CI 车道工作完结。剩下的只有 owner 人工审阅/合并(fork PR 我方无合并权):#4263 如希望带别的口径(正则收紧到只匹配 |
[bot] 状态无变化(上一条已报):head |
7ae8a65 to
a063c8d
Compare
|
(ai: deepseek/deepseek-v4.1-flash-1017) 顺手把分支刷新到当前 master,避免停在 本地在新 base 上复跑同样绿: |
[bot] 新 head 独立核实完毕,与你声明一致:head 代码补丁内容与历次已审核版本逐字节相同,审核结论不变(可合入)。agent 侧无待办,等 owner 合并:#4263 |
a063c8d to
4fe07b5
Compare
(ai: vllm-qwen/qwen3.8-27b) Merge-guard update-branch: rebased onto current master ( |
…probe path can arm (ranxianglei#4262) DashScope compatible-mode rejects an over-long input as "Range of input length should be [1, 1000000]" — no token/length subject phrase — so inspectContextOverflow did not treat it as an overflow: the ranxianglei#2313 probe forward took the 400, armOverflowShrink never armed, and every attempt re-forwarded the identical 16.9MiB payload. A session past the real 1M input cap could only livelock (timer, no reply). Add the marker to CONTEXT_OVERFLOW_PATTERNS and read the upper bound as the window in parseOverflowWindow; the stated range then arms the emergency shrink and the ranxianglei#1195 in-request refold recovers the turn. Tests: unit cases for the real body (window 1000000) and for a parameter-range 400 that must NOT match, plus e2e ranxianglei#2313 e on the probe path (fails before this change with the 400 passed through, passes after).
4fe07b5 to
443195a
Compare
|
(ai: deepseek/deepseek-v4.1-flash-1017) merge-guard 的自动 rebase 已生效(head 一、补丁本身没动:PR 二、这轮 36 条 check-run(run 41020622215)= 17 success / 14 skipped / 5 failure,且
三、归因(base 自称也有,非本 PR 引入):
四、因此现在主动 rebase 没有收益:当前 master 建议:等 |
…erge inherited master-red guards (ranxianglei#4599)
…ase for merge-guard (ranxianglei#4263)
…ase for merge-guard (ranxianglei#4263)
…ase for merge-guard (ranxianglei#4263)
What
inspectContextOverflow()recognizes most provider overflow phrasings, but not DashScope compatible-mode's:{"error":{"message":"<400> InternalError.Algo.InvalidParameter: Range of input length should be [1, 1000000]","type":"invalid_request_error","param":null,"code":"invalid_parameter_error"}}On the #2313 probe path that turns a recoverable overflow into a livelock: the 400 is not classified as an overflow,
armOverflowShrinknever arms, the 400 is passed through, and the next turn re-sends the identical over-long payload — the user sees a timer and no reply, forever.Root cause
CONTEXT_OVERFLOW_PATTERNS(src/util.ts:274) has no input-length-range marker. The wording has no token/length subject phrase, so none of the existing entries match.parseOverflowWindow()(src/util.ts:338) has no[1, N]form, so even a matched body would not state the ceiling.Observed on v0.1.202 (dsh plugin native, Windows 11,
https://dashscope.aliyuncs.com/compatible-mode/v1,deepseek-v4.1-flash-1017): a forked session that could not inherit blocks (#3011 multimodal variant) started at the raw 1,632,489-token history, preflight folded 4 ranges before the client's ~300s stream-idle abort (1632489 → 932640, estimate), then the probe forward took the range 400 — and the loop never exited. Note the local estimate under-read ~12% (932640vs > 1,000,000 real), so preflight believed it was under the cap.Fix
src/util.ts:325— add the marker:/range of input length should be \[/i.src/util.ts:350— read the upper bound as the window:/range of input length should be \[\s*\d[\d,]*\s*,\s*(\d[\d,]*)\s*\]/i.The stated range (1,000,000) then arms the emergency shrink exactly like
prompt is too long: X tokens > Y maximum, and the #1195 in-request refold folds below the declared window so the turn recovers.Tests
tests/context-overflow.test.ts— the real 400 body ⇒isOverflow+window: 1000000, no invented counts; and a parameter-range 400 (temperature should be in range [0, 2], sameinvalid_parameter_errorcode) must not be an overflow, pinning the scoping.tests/issue2313-probe-forward.test.tscasee2e #2313 e— the full probe-path recovery: stuck estimate meter → probe forward → range 400 → arm → refold → 200 on the retry, with the folded payload smaller than the raw one.Verification (local, on this head)
npx tsc -p kernel/tsconfig.json+npx tsc --noEmit -p tsconfig.json: 0 errors.node --teston the two touched files: 41 tests / 41 pass / 0 fail.src/util.tsreverted, casee2e #2313 efails (actual 400, expected 200); with the patch it passes — the test pins the behavior, not the implementation.Fixes #4262