Prhub

#28095 [Fix] Unquote ResponseTool annotation breaking lint on all PRs

原始 PR 作者 Kangyan-Zhou 合并时间 2026-06-13 06:20 文件变更 1 提交数 1 评论 1 代码增减 +1 / -1

执行摘要

修复被引号包裹的 ResponseTool 注解破坏所有 PR 的 lint

PR #25881 引入了带引号的返回注解 -> "ResponseTool",ruff 自动修正确认规则(UP037)会在 pre-commit 中修改该行,导致 lint job 报错 "files were modified by this hook",从而阻塞所有 PR 的 CI 流程(首先在 #28089 上观察到)。

立即合并,无需深度审查。这是一个标准的 lint 修复,简单且必要。

讨论亮点

该 PR 无 review 评论,仅作者提及修复原因和立即效果。讨论主要来自 PR body,说明了 #25881 引入的问题,以及本 PR 的一行修复方案。

实现拆解

  1. 定位文件:python/sglang/srt/entrypoints/openai/protocol.pyResponseTool 类的 validate_function_tool 方法。
  2. 修改内容:将返回注解中的引号移除,由 "ResponseTool" 改为 ResponseTool
  3. 验证:改动后 pre-commit run 通过,不再触发 UP037 自动修复。
  4. 无其他文件或测试配套变更。
文件 模块 状态 重要度
python/sglang/srt/entrypoints/openai/protocol.py 协议层 modified 5.12

关键符号

validate_function_tool

关键源码片段

python/sglang/srt/entrypoints/openai/protocol.py core-logic

唯一修改的文件;将 validate_function_tool 方法的返回注解从带引号的 "ResponseTool" 改为不带引号的 ResponseTool,消除了 ruff 自动修复的触发点。

# file: python/sglang/srt/entrypoints/openai/protocol.pyclass ResponseTool(BaseModel):
    type: RESPONSE_TOOL_TYPES = Field(description="Type of tool to enable")
    name: Optional[str] = None
    description: Optional[str] = None
    parameters: Optional[Dict[str, Any]] = None
    strict: bool = False
    tools: Optional[List[Dict[str, Any]]] = None
​
    @model_validator(mode="after")
    def validate_function_tool(self) -> ResponseTool: # 原为 -> "ResponseTool",引号触发 ruff 自动修复
        if self.type == "function" and not self.name:
            raise ValueError("Function tools must include a name.")
        return self

评论区精华

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

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

风险与影响

风险极低。仅修改一行返回注解的写法,不改变任何运行时行为(Python 中带引号和不带引号的注解在运行时等价)。回归风险几乎为零。

影响范围:所有使用 main 分支的开发者及其 PR 的 CI 流程。修复后 lint job 恢复正常,不再因该文件变更而失败。对用户无直接影响,仅改善开发体验。

关联 Issue

#28089 [CI] Reclaim leaked /dev/shm segments on server startup

完整报告

参与讨论