执行摘要
- 一句话:移除 Harmony 模型 stop_token_ids 覆盖逻辑
- 推荐动作:值得合入。这是一个高质量的死代码清理 PR,设计上依赖上游模型配置而非运行时注入。建议相关团队关注 Responses API 中
ignore_eos=True 的行为变化,并在必要时更新文档或用户指南。
功能与动机
关联 Issue #22519 中 GPT-OSS 20B 模型出现 token 解析错误,根因是模型特殊 token(如 <|return|>、<|call|>)未被正确识别。该问题已在模型侧的 generation_config.json 中修复,因此 PR 作者认为不再需要 OpenAI 层的额外逻辑,需清理遗留的临时修复代码。
实现拆解
- 删除
get_stop_tokens_for_assistant_actions 函数(vllm/entrypoints/openai/parser/harmony_utils.py):该函数从 Harmony 编码器获取 stop token 列表,已无调用者,整体移除。
- 从 Chat Completions serving 移除注入逻辑(
vllm/entrypoints/openai/chat_completion/serving.py):移除 import 语句及 OpenAIServingChat.__init__ 中根据 use_harmony 标志将 stop_token_ids 写入 default_sampling_params 的代码块。
- 从 Responses API serving 移除注入逻辑(
vllm/entrypoints/openai/responses/serving.py):同样移除 import 语句及 OpenAIServingResponses.__init__ 中对应的注入代码。
- 从 Responses API 协议层移除读取逻辑(
vllm/entrypoints/openai/responses/protocol.py):在 ResponsesRequest.to_sampling_params 方法中删除从 default_sampling_params 读取 stop_token_ids 并传递给 SamplingParams.from_optional 的代码。
关键文件:
vllm/entrypoints/openai/parser/harmony_utils.py(模块 Harmony 工具;类别 source;类型 core-logic;符号 get_stop_tokens_for_assistant_actions): 删除了 get_stop_tokens_for_assistant_actions 函数,这是该功能的核心入口,被其他文件引用。
vllm/entrypoints/openai/chat_completion/serving.py(模块 Chat 服务;类别 source;类型 core-logic): 移除了 Chat Completions 端口中 Harmony 模型的 stop_token_ids 注入逻辑及相关 import,是主要行为变化点之一。
vllm/entrypoints/openai/responses/serving.py(模块 Responses 服务;类别 source;类型 core-logic): 移除了 Responses API 端口中 Harmony 模型的 stop_token_ids 注入逻辑及相关 import,是另一个主要行为变化点。
vllm/entrypoints/openai/responses/protocol.py(模块 Responses 协议;类别 source;类型 core-logic): 在 to_sampling_params 方法中移除了从 default_sampling_params 读取 stop_token_ids 的逻辑,确保协议层不再依赖该字段。
关键符号:get_stop_tokens_for_assistant_actions
关键源码片段
vllm/entrypoints/openai/parser/harmony_utils.py
删除了 get_stop_tokens_for_assistant_actions 函数,这是该功能的核心入口,被其他文件引用。
# 删除前(base):
# def get_stop_tokens_for_assistant_actions() -> list[int]:
# return get_encoding().stop_tokens_for_assistant_actions()
#
# 删除后(head): 函数完全移除,该功能由模型自身的
# generation_config.json 中的 stop_token_ids 配置覆盖
# 不再需要手动从 Harmony 编码器读取。
def get_streamable_parser_for_assistant() -> StreamableParser:
return StreamableParser(get_encoding(), role=Role.ASSISTANT)
评论区精华
无实质讨论,仅 reviewer sfeng33 表达感谢。
风险与影响
关联脉络
- PR #22519 [Bug]: [gpt oss 20b] [tool_call] Unexpected token 12606 while expecting start token 200006: 本 PR 清理了此 Issue 的临时修复代码,该 Issue 已由上游模型更新解决。
参与讨论