Prhub

#21756 [diffusion] fix: wire --prompt-path into _resolve_prompts

原始 PR 作者 mickqian 合并时间 2026-04-01 16:47 文件变更 3 提交数 6 评论 4 代码增减 +111 / -4

执行摘要

修复 diffusion 生成器中 --prompt-path 参数未消费的 bug,确保优先从 SamplingParams 读取提示文件。

PR body中明确指出:'--prompt-path (SamplingParams CLI arg) was parsed but never consumed by the runtime. Only --prompt-file-path (ServerArgs) was checked in _resolve_prompts()',即--prompt-path参数在CLI中被解析但未被实际消费,仅--prompt-file-path有效,因此需要修复以支持SamplingParams中的prompt_path参数。

该PR值得精读,特别是_resolve_prompts方法中的优先级处理和错误逻辑设计,可作为参数解析和文件读取的范例。建议关注generate方法中sampling_params_kwargs的null安全处理,以及测试用例的完整性。

讨论亮点

review中gemini-code-assist[bot]提出了两个关键点:1. generate方法中sampling_params_kwargs可能为None,直接调用.get()会引发AttributeError,建议初始化为空字典以确保健壮性。2. help text更改不当,从'one per line'改为'the prompt'不准确,因为实现仍支持多行提示,建议改回原版。这两个建议在提交历史中被采纳(如提交'Apply suggestion from @gemini-code-assist[bot]'),解决了潜在问题和文档准确性。

实现拆解

  1. 修改diffusion_generator.py的generate方法:将prompt_path参数从sampling_params_kwargs传递给_resolve_prompts。2. 更新_resolve_prompts方法:新增prompt_path参数,并在路径解析时优先使用prompt_path,若为None则回退到server_args.prompt_file_path,并添加文件存在性检查和错误处理。3. 新增单元测试文件test_resolve_prompts.py,覆盖内联提示、prompt_path、server_args.prompt_file_path及错误场景。4. 在run_suite.py中集成新测试到测试套件。
文件 模块 状态 重要度
python/sglang/multimodal_gen/runtime/entrypoints/diffusion_generator.py diffusion_generator modified 5.0
python/sglang/multimodal_gen/test/unit/test_resolve_prompts.py test added 4.0
python/sglang/multimodal_gen/test/run_suite.py test modified 3.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

generate _resolve_prompts

评论区精华

sampling_params_kwargs 的 null 安全性 正确性

gemini-code-assist[bot] 指出 generate 方法中 sampling_params_kwargs 参数可能为 None,直接调用 .get() 会引发 AttributeError,建议初始化为空字典以确保健壮性。

结论:建议被采纳,在代码中初始化 sampling_params_kwargs 为字典,避免了潜在崩溃。 · 已解决

help text 的准确性 documentation

gemini-code-assist[bot] 指出 help text 从 'one per line' 改为 'the prompt' 不准确,因为实现仍支持多行提示,与 --prompt-file-path 的文档不一致。

结论:建议改回原版,被采纳,确保了文档与实现一致。 · 已解决

风险与影响

技术风险包括:1. sampling_params_kwargs为None时可能引发AttributeError,但通过review建议已修复。2. prompt_path优先级引入可能影响向后兼容性,但测试表明--prompt-file-path仍正常工作,且单元测试覆盖了此场景。3. 文件路径处理中,若路径不存在会引发FileNotFoundError,已通过错误处理缓解。整体风险较低,因变更范围小且测试覆盖充分。

影响范围限于diffusion生成器的提示解析逻辑:用户现在可以通过--prompt-path正确指定提示文件,优先级高于--prompt-file-path,提高了参数使用的灵活性。对系统其他部分无影响,是局部修复,不影响核心扩散模型或服务器运行。测试添加提升了代码可靠性,为未来类似参数处理提供范例。

潜在 null 引用风险 向后兼容性

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本次PR修复了diffusion生成器中--prompt-path参数被解析但从未消费的bug,通过将prompt_pathsampling_params_kwargs传递到_resolve_prompts方法并设置优先级,确保用户能正确使用该参数指定提示文件。影响范围小,风险低,测试覆盖充分,是重要的功能修复。

功能与动机

问题背景:在sglang的diffusion生成器中,SamplingParams的CLI参数--prompt-path被解析但从未在运行时使用,导致用户无法通过此参数指定提示文件。仅--prompt-file-path(ServerArgs)在_resolve_prompts()中被检查,造成功能缺失。

解决目标:修复此bug,使prompt_path参数正确消费,优先级高于server_args.prompt_file_path,并保持向后兼容性。PR body中明确指出:"--prompt-path (SamplingParams CLI arg) was parsed but never consumed by the runtime"。

实现拆解

  1. 核心代码修改diffusion_generator.py中的generate方法新增prompt_path参数传递:

    prompts = self._resolve_prompts(
        sampling_params_kwargs.get("prompt"),
        sampling_params_kwargs.get("prompt_path"),
    )
    

    同时修复null安全问题,初始化sampling_params_kwargs为空字典。

  2. _resolve_prompts方法更新:新增prompt_path参数,优先级逻辑为path = prompt_path or self.server_args.prompt_file_path,并添加文件检查和错误处理:

    • 文件不存在时抛出FileNotFoundError
    • 从文件读取多行提示(一行一个)。
  3. 测试增强:新增test_resolve_prompts.py单元测试,覆盖场景包括:

    • 内联提示(字符串、列表)。
    • prompt_path单行和多行文件。
    • prompt_path优先于server_args.prompt_file_path
    • 错误案例(文件缺失、空文件)。
      run_suite.py中集成测试到测试套件。

评论区精华

review讨论中,gemini-code-assist[bot]提出了两个关键改进:

"The generate method signature explicitly allows sampling_params_kwargs to be None, but the implementation immediately calls .get() on it, which will raise an AttributeError. Initializing it to an empty dictionary at the start of the method ensures robustness."

"The help text was changed to singular ('the prompt'), but the implementation in _resolve_prompts still supports multiple prompts (one per line)... The original help text was more accurate."

这些建议在提交中被采纳,避免了潜在崩溃并确保了文档准确性。

风险与影响

  • 技术风险
    • sampling_params_kwargs为None的风险已通过初始化修复。
    • 优先级引入可能影响旧版用户,但测试验证了--prompt-file-path仍正常工作,兼容性良好。
    • 文件路径处理中的错误已通过异常处理覆盖。
  • 影响范围:仅限diffusion生成器的提示解析逻辑,用户现在能灵活使用--prompt-path参数。对系统性能、安全无影响,局部修复提升了功能完整性。

关联脉络

与历史PR的关联显示diffusion模块的持续演进:

  • PR #21763(CI改善)与本PR都聚焦diffusion测试,强调了CI稳定性和测试覆盖的重要性。
  • PR #20379(添加日志前缀排除)展示了diffusion服务器参数的扩展,本PR则修复了参数消费的bug,共同体现了参数处理功能的完善。
    这些PR表明团队在强化diffusion模块的可靠性和用户体验,本次修复是这一趋势的具体体现。

参与讨论