Prhub

#25161 [Refactor] Remove dead key_convert_fn / convert_to_bigram_key

原始 PR 作者 alphabetc1 合并时间 2026-05-14 04:54 文件变更 3 提交数 1 评论 0 代码增减 +1 / -21

执行摘要

移除死代码 convert_to_bigram_key

PR #23106 ("Make EAGLE bigram key an O(1) view on RadixKey") 已将 EAGLE 的 bigram key 转换逻辑迁移到 RadixKey.maybe_to_bigram_view 和构造参数 is_bigram,但旧的 self.key_convert_fn 赋值和 convert_to_bigram_key 函数未被移除,成为死代码。清理它们以消除代码膨胀和潜在混淆。

可直接合并。该 PR 是常规清理,但值得留意的是此类删除最好附带 grep 验证结果(已包含)。可作为代码整洁的范例。

讨论亮点

无实质性讨论。gemini-code-assist 机器人仅给出形式化评论,无反馈意见。

实现拆解

  1. 删除辅助函数:在 python/sglang/srt/mem_cache/utils.py 中删除 convert_to_bigram_key 函数(10 行)及其 docstring。该函数将 token id 列表转换为二元组列表,已不再使用。
  2. 清理 SWARadixCache:在 python/sglang/srt/mem_cache/swa_radix_cache.py 中:
    • 移除 from sglang.srt.mem_cache.utils import convert_to_bigram_key 导入(改为只导入 split_node_hash_value)。
    • __init__ 中删除根据 self.is_eagle 设置 self.key_convert_fn 的条件分支(6 行)。
  3. 清理 UnifiedRadixCache:在 python/sglang/srt/mem_cache/unified_radix_cache.py 中:
    • 移除相同的导入。
    • __init__ 中删除相同的条件分支(5 行)。
  4. 验证:提交者通过全局 grep 确认 convert_to_bigram_keykey_convert_fn 无任何引用。
文件 模块 状态 重要度
python/sglang/srt/mem_cache/utils.py 缓存活 modified 6.14
python/sglang/srt/mem_cache/swa_radix_cache.py 缓存活 modified 5.57
python/sglang/srt/mem_cache/unified_radix_cache.py 缓存活 modified 5.47

关键符号

convert_to_bigram_key

关键源码片段

python/sglang/srt/mem_cache/utils.py core-logic

删除核心辅助函数 convert_to_bigram_key,10 行删除,影响最大。

# python/sglang/srt/mem_cache/utils.py
# 已删除的函数:
# def convert_to_bigram_key(tokens: List[int]) -> List[Tuple[int, int]]:
# """
# 将 token id 列表转换为二元组列表,用于 EAGLE 的 bigram key。
# 例如 [1,2,3,4] -> [(1,2), (2,3), (3,4)]
# 现在已通过 RadixKey 的 O(1) view 实现,此函数不再需要。
# """
# if len(tokens) and isinstance(tokens[0], tuple):
# return tokens
# if len(tokens) < 2:
# return []
# return [(tokens[i], tokens[i + 1]) for i in range(len(tokens) - 1)]
python/sglang/srt/mem_cache/swa_radix_cache.py dependency-wiring

移除 import 和 dead key_convert_fn 赋值,+1/-6。

# python/sglang/srt/mem_cache/swa_radix_cache.py (head)
# 第 47 行:导入只保留 split_node_hash_value
from sglang.srt.mem_cache.utils import split_node_hash_value# __init__ 方法中删除了以下代码块(第 356-359 行 base):
# if self.is_eagle:
# self.key_convert_fn = convert_to_bigram_key
# else:
# self.key_convert_fn = lambda key: key
python/sglang/srt/mem_cache/unified_radix_cache.py dependency-wiring

移除 import 和 dead key_convert_fn 赋值,+0/-5。

# python/sglang/srt/mem_cache/unified_radix_cache.py (head)
# 第 37 行:import 已删除
# from sglang.srt.mem_cache.utils import convert_to_bigram_key ( 已移除 )# __init__ 方法中删除了以下代码块(第 228-231 行 base):
# if self.is_eagle:
# self.key_convert_fn = convert_to_bigram_key
# else:
# self.key_convert_fn = lambda key: key

评论区精华

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

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

风险与影响

风险极低。变更仅删除死代码:

  1. 全局 grep 确认无任何调用点。
  2. 删除的函数和属性在功能上已被 RadixKey 的 O(1) view 替代。
  3. 删减行数少(21 行),影响范围局限在三个文件内的导入和赋值。
  4. 无测试配套变更,因为被删代码已无可达路径。

对用户无影响;对系统无运行时影响;对团队降低了维护负担,清理了遗留代码。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论