Prhub

#29549 Replace hasattr with isinstance in SHM feature helpers

原始 PR 作者 merrymercy 合并时间 2026-06-29 12:31 文件变更 1 提交数 1 评论 1 代码增减 +22 / -17

执行摘要

用 isinstance 替换 hasattr 检查 SHM 特征辅助函数

清除 hasattrgetattr 的动态属性检查,改用 isinstance 直接判断已知类型(BaseBatchReqTokenizedGenerateReqInputTokenizedEmbeddingReqInput),利用类型信息使代码意图更清晰、更安全。

建议合入。此 PR 是有意义的代码清理,提升了类型安全和可维护性,适合作为代码可读性改进的示例。

讨论亮点

无实质性 review 讨论,作者自身评论 "approved, ready for merge"。

实现拆解

  1. 新增导入:在 mm_utils.py 中导入 BaseBatchReqTokenizedGenerateReqInputTokenizedEmbeddingReqInput(来自 sglang.srt.managers.io_struct)。
  2. wrap_shm_features:将 hasattr(obj, "mm_inputs") and obj.mm_inputs 替换为 if obj.mm_inputs:;将 getattr(item, "hash", None) 替换为 item.hash;将两个 hasattr(item, ...) 条件替换为直接字段访问 item.feature is not Noneitem.precomputed_embeddings is not None
  3. has_shm_features:将 hasattr(req, "batch") 替换为 isinstance(req, BaseBatchReq);将 hasattr(req, "mm_inputs") 替换为 isinstance(req, (TokenizedGenerateReqInput, TokenizedEmbeddingReqInput));将 getattr(item, "precomputed_embeddings", None) 替换为直接访问 item.precomputed_embeddings
  4. unwrap_shm_features:同样使用 isinstance 检查类型,并直接访问 mm_inputsfeatureprecomputed_embeddings 字段。
文件 模块 状态 重要度
python/sglang/srt/managers/mm_utils.py 多模态工具 modified 6.07

关键符号

wrap_shm_features unwrap_shm_features has_shm_features

关键源码片段

python/sglang/srt/managers/mm_utils.py dependency-wiring

唯一修改的文件,重构了三个核心函数,替换 hasattr/isinstance 以及直接字段访问。

def has_shm_features(recv_reqs):
    """Return True if any request in the list contains ShmPointerMMData."""
    for req in recv_reqs:
        # 替换 hasattr(req, "batch") 为 isinstance(req, BaseBatchReq)
        if isinstance(req, BaseBatchReq):
            if has_shm_features(req.batch):
                return True
        # 替换 hasattr(req, "mm_inputs") 为 isinstance 检查具体类型
        elif (
            isinstance(req, (TokenizedGenerateReqInput, TokenizedEmbeddingReqInput))
            and req.mm_inputs
        ):
            for item in req.mm_inputs.mm_items:
                if _feature_has_shm(item.feature):
                    return True
                # 直接访问 item.precomputed_embeddings,无需 getattr 回退
                if _feature_has_shm(item.precomputed_embeddings):
                    return True
    return False

评论区精华

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

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

风险与影响

风险极低。变更仅为类型检查替换和直接字段访问,不涉及逻辑语义变化。但若未来新增请求类型未包含在 isinstance 检查中,可能导致遗漏;不过由于目前所有合法请求类型都已覆盖,实际风险可忽略。

影响范围限于 python/sglang/srt/managers/mm_utils.py 一个文件。对用户无感知;对开发者而言,代码更易读、更类型安全。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论