aiperf: Weka synth buffer should reset context when truncation deletes emitted segments / aiperf:Weka 合成缓冲区截断删除已发出段时应重置上下文
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start in utils/aiperf/src/aiperf/dataset/loader/weka_synth_buf.py by tracing truncate_synth_buf_at_block() through ConversationReconstructor.advance_turn() and turn_delta(). Add or run unit coverage for zero-LCP and boundary truncation cases, including an un-emitted deletion. Done means previously emitted content triggers a reset with the rebuilt messages, while deletions confined to un-emitted segments remain append-only.
由索引模型根据 Issue 内容生成。
描述
Summary
truncate_synth_buf_at_block() can delete previously emitted Weka synth-buffer segments while returning None, which ConversationReconstructor.turn_delta() interprets as no disturbance. When that happens, the next replay turn may be emitted as an append-only delta with reset_context=False even though the previously sent context was pulled back or fully cleared.
This corrupts Weka trace replay for turns where the hash-id prefix relationship is non-monotonic, especially when the LCP with the previous turn is zero or when truncation lands exactly on a segment boundary and drops later segments.
Affected code
utils/aiperf/src/aiperf/dataset/loader/weka_synth_buf.py
The relevant flow is:
ConversationReconstructor.advance_turn()computeslcp = longest_common_prefix(prev_hash_ids, curr_hash_ids).- It calls
truncate_synth_buf_at_block(..., target_blocks=lcp, ...)and stores the return value in_last_disturbance_at. turn_delta()treats a disturbance as reset-worthy only if_last_disturbance_at is not None and _last_disturbance_at < _emitted_segment_count.- If
_last_disturbance_atisNone,turn_delta()uses the strict append path and returns onlysegments[_emitted_segment_count:]withreset_context=False.
The problem is that truncate_synth_buf_at_block() currently returns None for cases that do delete prior context, for example:
target_blocks <= 0: it clearssegmentsand returnsNone.- Boundary truncation where no surviving segment is modified, but segments after the boundary are deleted.
- Truncation that lands exactly at the start of a segment and deletes that segment and everything after it.
Those are real disturbances if any deleted segment was previously emitted.
Why this is a bug
Weka reconstruction emits per-turn raw_messages as deltas unless reset_context=True. If the synth buffer removes previously emitted content, the downstream session must be reset and sent the full rebuilt context for the current turn.
Returning None from the truncation helper hides that removal. If _emitted_segment_count still points beyond the shortened buffer, the append path can emit an empty delta with reset_context=False. The worker then continues from stale conversation state instead of replaying the current Weka prompt. This silently changes the request stream and can preserve a larger or unrelated prior prompt across a context pull-back.
In cache/prefix-sensitive agentic replay, this is particularly bad because the trace is supposed to reproduce the recorded hash-id structure. A bad non-reset turn changes the actual payload while the trace metadata still reports the intended hash IDs.
Expected behavior
truncate_synth_buf_at_block() should report the earliest deleted or modified segment index whenever truncation removes content that may have already been emitted.
Concretely:
- If
target_blocks <= 0and the buffer was non-empty, clear it and return0. - If a boundary cut deletes segments after the boundary and no in-place strip was already reported, return the first deleted segment index.
- If truncation lands at the start of segment
iand deletes segmentionward, returni. - Continue returning
Noneonly when no surviving or deleted segment represents a disturbance.
Then turn_delta() will take the reset path when deleted content intersects prior emitted content, emit the full rebuilt message list, and set reset_context=True.
Suggested regression coverage
Add unit tests around ConversationReconstructor / truncate_synth_buf_at_block() for:
- A turn with
lcp == 0after at least one prior emitted turn. The nextturn_delta()should returnreset_context=Trueand non-empty rebuilt messages. - Boundary truncation that deletes one or more previously emitted segments without slicing the boundary segment. This should also force
reset_context=True. - Truncation that deletes only segments that have not yet been emitted may remain append-only.
Impact
This affects Weka trace replay correctness. It does not necessarily crash the run; it can silently send the wrong prompt/context for affected turns, which makes latency, token, and prefix-cache measurements untrustworthy for those traces.
中文说明
truncate_synth_buf_at_block() 在删除已发出的 Weka 合成缓冲区段后可能返回 None,导致 turn_delta() 误认为没有发生扰动,从而以仅追加的 delta 模式(reset_context=False)发出下一轮回复,即使先前发出的上下文已被回撤或完全清除。这会破坏 Weka 追踪回放的正确性——在 hash-id 前缀关系非单调的轮次中,下游会话可能基于过期的对话状态继续,静默地改变请求流。修复方案:让截断函数在删除已发出内容时返回最早被删除的段索引,使 turn_delta() 走重置路径并发出完整重建的消息列表。
- 主要语言
- Python
- 星标
- 2k
- 派生
- 354
- 平均合并
- 1 天 22 小时
- 30 天内合并 PR
- 440
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
SemiAnalysisAI/InferenceX 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 68/100
SemiAnalysisAI/InferenceX#2125 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
SemiAnalysisAI/InferenceX#1587 ·
维护者通常 1 天内回复
-
[experimental chore/agentx-v0.2-aiperf-testing branch] agentic build_replay_cmd: missing --tokenizer-trust-remote-code breaks Kimi-K2.5 (and other custom-code tokenizer models) / agentic build_replay_cmd 缺少 --tokenizer-trust-remote-code 导致 Kimi-K2.5 等自定义 tokenizer 模型失败可能重新可做 @sahil-bhatti-ai 于 173 天前认领,目前没有进行中的 PR。 未关闭
难度 1/5 1 小时以内 新手友好度 78/100
SemiAnalysisAI/InferenceX#1369 · 3 条评论 ·
维护者通常 1 天内回复
-
难度 1/5 1-3 小时 新手友好度 76/100
SemiAnalysisAI/InferenceX#1359 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1 小时以内 新手友好度 18/100
SemiAnalysisAI/InferenceX#4655 · 3 条评论 ·
维护者通常 1 天内回复
查看 SemiAnalysisAI/InferenceX 的全部 Issue
相似的 Issue
-
Backend issue lists report in-patch warnings and out-of-patch errors as not publishable可能已有人在做 @RaphaelFakhri 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 75/100
mozilla/code-review#3794 ·
维护者通常 1 天内回复
-
[oblt-aw][autodoc] Update docs that still describe the security registry as empty可能已有人在做 @github-actions 今天认领。 未关闭
难度 1/5 1-3 小时 新手友好度 85/100
维护者通常 1 天内回复
-
[Bug] adb backup script reports "Done" & exits 0 when the backup fails可能已有人在做 @bhattmanthan 今天认领。 未关闭request-issue-assignment
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
agent-ui bug p2
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
correction metadata
难度 1/5 1 小时以内 新手友好度 72/100
acl-org/acl-anthology#10768 · 1 条评论 ·
维护者通常 1 天内回复