Prhub

#22471 [Spec][Ngram] Return token counts in list_external_corpora API

原始 PR 作者 kpham-sgl 合并时间 2026-04-11 12:50 文件变更 12 提交数 3 评论 11 代码增减 +49 / -34

执行摘要

将 list_external_corpora API 返回值扩展为包含语料库 token 计数的字典。

根据PR body,动机是'Admin will manage the external corpora themselves, we need to give them more insights into their corpora (token counts of each corpus)'。关联Issue #21052 '[Roadmap] Further Ngram Speculative Decoding Support',该PR是系列工作项的一部分。

建议关注此PR的设计决策,如使用制表符分隔符避免corpus ID中的逗号问题,以及从C++到HTTP的全栈一致性更新。对于从事Ngram模块或API开发的工程师值得精读,以理解外部语料库管理的演进方向。

讨论亮点

Review评论列表为空,未提供具体讨论内容,因此无法提取讨论要点。

实现拆解

实现拆解为以下层次:

  1. C++层:在SuffixAutomaton类中新增tokenCount()方法返回pos_计数器;修改Ngram::listExternalCorpora()返回std::pair向量。
  2. FFI层:ngram_corpus_ffi.cpp中更新字符串编码,使用制表符分隔corpus ID和token计数。
  3. Python层:从jit_kernel/ngram_corpus.py到srt/speculative/的多个文件,将返回值从列表改为字典。
  4. HTTP层:http_server.py中响应字段从corpus_ids重命名为corpus_token_counts。
  5. 测试层:更新单元测试以验证字典返回和计数正确性。
文件 模块 状态 重要度
python/sglang/jit_kernel/csrc/ngram_corpus/ngram.cpp ngram_corpus modified 7.0
python/sglang/jit_kernel/csrc/ngram_corpus/suffix_automaton.h ngram_corpus modified 6.0
python/sglang/jit_kernel/csrc/ngram_corpus/ngram_corpus_ffi.cpp ngram_corpus modified 5.0
python/sglang/jit_kernel/ngram_corpus.py ngram_corpus modified 5.0
python/sglang/srt/entrypoints/http_server.py http_server modified 5.0

关键符号

Ngram::listExternalCorpora() SuffixAutomaton::tokenCount() NgramCorpusFFI.list_corpora() list_external_corpora()

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

无 review 讨论 other

未提供 review 评论,因此没有具体讨论内容。

结论:无 · 已解决

风险与影响

技术风险包括:

  • API breaking change:响应结构从列表改为字典,可能影响现有客户端代码,但PR更新了所有相关层,降低了风险。
  • 分隔符解析:FFI层使用制表符分隔,但若corpus ID包含制表符可能导致解析错误,提交历史显示从逗号改为制表符以规避此问题。
  • 测试覆盖:修改了测试文件,确保基本功能,但需确认所有边缘案例(如corpus ID包含特殊字符)已覆盖。

影响分析:

  • 用户:管理员现在可以获取每个外部语料库的token计数,便于资源管理和监控。
  • 系统:API响应格式变更,可能需更新客户端代码;对内部模块无性能或安全显著影响。
  • 团队:工程师需要了解新的API结构,并可能更新依赖此API的代码,但变更范围有限且已同步全栈。
API breaking change 分隔符解析风险 测试覆盖需验证

关联 Issue

#21052 [Roadmap] Further Ngram Speculative Decoding Support

完整报告

参与讨论