执行摘要
- 一句话:修复被引号包裹的 ResponseTool 注解破坏所有 PR 的 lint
- 推荐动作:立即合并,无需深度审查。这是一个标准的 lint 修复,简单且必要。
功能与动机
PR #25881 引入了带引号的返回注解 -> "ResponseTool",ruff 自动修正确认规则(UP037)会在 pre-commit 中修改该行,导致 lint job 报错 "files were modified by this hook",从而阻塞所有 PR 的 CI 流程(首先在 #28089 上观察到)。
实现拆解
- 定位文件:
python/sglang/srt/entrypoints/openai/protocol.py 中 ResponseTool 类的 validate_function_tool 方法。
- 修改内容:将返回注解中的引号移除,由
"ResponseTool" 改为 ResponseTool。
- 验证:改动后
pre-commit run 通过,不再触发 UP037 自动修复。
- 无其他文件或测试配套变更。
关键文件:
python/sglang/srt/entrypoints/openai/protocol.py(模块 协议层;类别 source;类型 core-logic;符号 validate_function_tool): 唯一修改的文件;将 validate_function_tool 方法的返回注解从带引号的 "ResponseTool" 改为不带引号的 ResponseTool,消除了 ruff 自动修复的触发点。
关键符号:validate_function_tool
关键源码片段
python/sglang/srt/entrypoints/openai/protocol.py
唯一修改的文件;将 validate_function_tool 方法的返回注解从带引号的 "ResponseTool" 改为不带引号的 ResponseTool,消除了 ruff 自动修复的触发点。
# file: python/sglang/srt/entrypoints/openai/protocol.py
class 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
评论区精华
该 PR 无 review 评论,仅作者提及修复原因和立即效果。讨论主要来自 PR body,说明了 #25881 引入的问题,以及本 PR 的一行修复方案。
风险与影响
- 风险:风险极低。仅修改一行返回注解的写法,不改变任何运行时行为(Python 中带引号和不带引号的注解在运行时等价)。回归风险几乎为零。
- 影响:影响范围:所有使用
main 分支的开发者及其 PR 的 CI 流程。修复后 lint job 恢复正常,不再因该文件变更而失败。对用户无直接影响,仅改善开发体验。
- 风险标记:无
关联脉络
- PR #25881 Fix Responses API request handling: 本 PR 修复的问题由 PR #25881 引入,该 PR 添加了带引号的
validate_function_tool 注解。
参与讨论