Prhub

#23144 move session to python/sglang/srt/session

原始 PR 作者 hnyls2002 合并时间 2026-04-20 08:34 文件变更 7 提交数 3 评论 1 代码增减 +6 / -6

执行摘要

将 SessionController 和 SessionAwareCache 移至专用 session 包,纯重构无行为变更。

根据 PR body 描述,动机是“将 SessionAwareCache 和 SessionController 从 mem_cache/ 和 managers/ 移出,放入专用的 session/ 包”。这属于代码组织结构优化,旨在将与会话管理紧密相关的组件集中到一个独立的包中,提升模块的内聚性和代码的可维护性。

该 PR 是典型的代码组织结构优化,值得快速浏览以了解模块划分的演进方向,但无需深入分析实现细节。关注点在于:

  1. 设计决策:将分散的会话管理组件集中到独立包,体现了“高内聚”的设计原则。
  2. 重构模式:可作为纯路径迁移的参考案例,展示了如何安全地移动文件并更新所有依赖。
    建议后续开发者在添加新的会话相关功能时,优先考虑放入 session/ 包,以保持架构的一致性。
讨论亮点

本次 PR 的 review 由机器人 gemini-code-assist[bot] 完成,其评论总结道:“此拉取请求通过将 SessionController 和 SessionAwareCache 从 sglang.srt.managers 和 sglang.srt.mem_cache 移至新的专用 sglang.srt.session 包来重构代码库。调度器、管理器和单元测试中的所有相应导入语句均已更新以反映此重组。我没有反馈可提供,因为没有审查评论。”这表明本次变更被认定为纯重构,无功能修改,因此未引发任何技术讨论或争议。

实现拆解

  1. 创建 session 包并移动核心文件:在 python/sglang/srt/ 下新建 session/ 目录,将 managers/session_controller.py 重命名为 session/session_controller.py,将 mem_cache/session_aware_cache.py 重命名为 session/session_aware_cache.py。同时创建 session/__init__.py 文件以定义包结构。
  2. 更新核心调度器的导入路径:修改 python/sglang/srt/managers/scheduler.py,移除对旧路径 sglang.srt.managers.session_controllersglang.srt.mem_cache.session_aware_cache 的导入,改为从新的 sglang.srt.session 包导入 SessionControllerSessionAwareCache
  3. 更新其他依赖模块的导入:同步修改 python/sglang/srt/managers/scheduler_runtime_checker_mixin.pypython/sglang/srt/managers/schedule_batch.py 以及 python/sglang/srt/session/session_controller.py 内部的导入语句,将 SessionAwareCacheSession 的导入路径指向新的 session 包。
  4. 更新测试配套:修改 test/registered/unit/mem_cache/test_streaming_session_unit.py,调整其导入路径以匹配源码的移动,确保测试能正确运行。
文件 模块 状态 重要度
python/sglang/srt/session/session_controller.py 会话管理 renamed 5.3
python/sglang/srt/managers/scheduler.py 调度器 modified 5.68
python/sglang/srt/session/session_aware_cache.py 会话管理 renamed 4.35
python/sglang/srt/managers/scheduler_runtime_checker_mixin.py 调度器 modified 4.7
python/sglang/srt/managers/schedule_batch.py 调度器 modified 4.49
test/registered/unit/mem_cache/test_streaming_session_unit.py 单元测试 modified 3.42

关键符号

SessionController SessionAwareCache SessionReqNode

关键源码片段

python/sglang/srt/session/session_controller.py rename-or-move

会话控制器的核心实现文件,从 managers/ 移动到 session/,是本次重构的主要目标之一。

from __future__ import annotationsimport logging
import time
import uuid
from typing import TYPE_CHECKING, Dict, Optionalfrom sglang.srt.managers.io_struct import (
    CloseSessionReqInput,
    OpenSessionReqInput,
    OpenSessionReqOutput,
    TokenizedGenerateReqInput,
)
from sglang.srt.managers.schedule_batch import FINISH_ABORT, Req
# 关键变更:导入路径从 mem_cache.session_aware_cache 更新为 session.session_aware_cache
from sglang.srt.session.session_aware_cache import SessionAwareCache
from sglang.srt.utils.common import log_info_on_rank0if TYPE_CHECKING:
    from sglang.srt.mem_cache.base_prefix_cache import BasePrefixCachelogger = logging.getLogger(__name__)
​
​
class SessionReqNode:
    """表示会话请求树中的节点,用于管理请求间的父子关系。"""
    def __init__(
        self,
        req: Req,
        parent: Optional["SessionReqNode"] = None,
        children=None,
    ):
        self.req = req # 关联的请求对象
        self.parent = parent # 父节点,用于构建请求依赖树
        if parent is not None:
            parent.children.append(self)
        self.children = [] if not children else children # 子节点列表
python/sglang/srt/managers/scheduler.py dependency-wiring

调度器是系统的核心组件,其导入语句更新反映了会话模块的路径变更,影响面广。

# 省略其他导入 ...
from sglang.srt.managers.scheduler_update_weights_mixin import (
    SchedulerUpdateWeightsMixin,
)
# 关键变更:移除旧导入,添加新导入
# from sglang.srt.managers.session_controller import SessionController # 已删除
# from sglang.srt.mem_cache.session_aware_cache import SessionAwareCache # 已删除
from sglang.srt.managers.utils import GenerationBatchResult, validate_input_length
from sglang.srt.mem_cache.cache_init_params import CacheInitParams
from sglang.srt.mem_cache.common import release_kv_cache
from sglang.srt.mem_cache.radix_cache import RadixCache
from sglang.srt.model_executor.forward_batch_info import ForwardMode, PPProxyTensors
from sglang.srt.model_loader.utils import get_resolved_model_impl
from sglang.srt.multiplex.multiplexing_mixin import SchedulerMultiplexMixin
from sglang.srt.observability.req_time_stats import (
    real_time,
    set_schedule_time_batch,
    set_time_batch,
)
from sglang.srt.observability.scheduler_metrics_mixin import (
    RECORD_STEP_TIME,
    PrefillStats,
    SchedulerMetricsMixin,
)
from sglang.srt.parser.reasoning_parser import ReasoningParser
from sglang.srt.sampling.sampling_batch_info import SamplingBatchInfo
from sglang.srt.server_args import PortArgs, ServerArgs, get_global_server_args
# 新增导入:从新建的 session 包导入会话相关组件
from sglang.srt.session.session_aware_cache import SessionAwareCache
from sglang.srt.session.session_controller import SessionController
from sglang.srt.speculative.spec_info import SpeculativeAlgorithm
# 后续导入保持不变 ...

评论区精华

重构确认与无反馈 other

机器人 reviewer 确认本次 PR 为纯重构,仅移动文件并更新导入,无行为变更,因此未提出任何评论或问题。

结论:变更被接受,无需修改。 · 已解决

风险与影响

技术风险较低,但需注意:

  1. 导入中断风险:虽然所有显式导入已更新,但若存在动态导入、反射或通过字符串拼接的隐式依赖,可能因路径变更而失败。从变更范围看,主要影响的是静态导入,风险可控。
  2. 循环依赖风险:将 SessionController 移出 managers/ 后,需确保 session 包与 managers 等其他模块之间不会因导入关系形成新的循环依赖。当前变更仅调整路径,未新增依赖,风险低。
  3. 测试覆盖风险:单元测试文件已同步更新导入,但若存在集成测试或端到端测试依赖旧路径,可能需额外验证。

影响范围

  1. 对用户:无直接影响,因属于内部代码重构,不改变 API 或运行时行为。
  2. 对系统:无性能或功能影响,但改善了代码组织结构,使与会话相关的逻辑更集中,便于后续维护和扩展。
  3. 对团队:开发者需熟悉新的模块路径,未来在修改会话相关功能时,应到 session/ 目录下查找。这可能会轻微增加新成员的学习成本,但长期看提升了代码清晰度。
导入路径变更 测试配套更新

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论