Prhub

#48252 [Fix] Align OpenAI vllm_xargs value types across request schemas

原始 PR 作者 sagearc 合并时间 2026-07-16 01:48 文件变更 2 提交数 11 评论 3 代码增减 +4 / -4

执行摘要

统一 vllm_xargs 类型支持列表值

部分 OpenAI 请求 schema(如 chat completions)已允许 vllm_xargs 字段传入列表值,但 completion 和 transcription 请求只接受标量值,造成 API 行为不一致。PR #48252 将此类型对齐,以支持自定义扩展需要传递多个值的情况。

变更简单清晰,但为保持 API 一致性值得合并。建议在合并后关注是否有用户反馈列表值处理异常。

讨论亮点

Review 中,维护者 DarkLight1337 发现 speech_to_text 协议中也存在相同的 vllm_xargs 字段,建议一并更新。提交者 sagearc 立即响应并完成同步修改,该线程已解决。

实现拆解

  1. 修改 vllm/entrypoints/openai/completion/protocol.pyCompletionRequest 类的 vllm_xargs 字段类型注解,从 dict[str, str | int | float] 扩展为 dict[str, str | int | float | list[str | int | float]],并更新字段描述,添加 "(list of)" 提示。
  2. 同步修改 vllm/entrypoints/speech_to_text/transcription/protocol.pyTranscriptionRequest 类的相同字段,保持一致。
  3. 仅涉及类型注解和文档字符串的调整,无运行时代码逻辑变更。
文件 模块 状态 重要度
vllm/entrypoints/openai/completion/protocol.py 入口层 modified 4.67
vllm/entrypoints/speech_to_text/transcription/protocol.py 入口层 modified 4.67

关键源码片段

vllm/entrypoints/openai/completion/protocol.py data-contract

核心变更文件,修改 CompletionRequest 中 vllm_xargs 字段的类型,允许标量或列表值。

# vllm/entrypoints/openai/completion/protocol.py
# CompletionRequest 类的 vllm_xargs 字段定义vllm_xargs: dict[str, str | int | float | list[str | int | float]] | None = Field(
    default=None,
    description=(
        "Additional request parameters with (list of) string or "
        "numeric values, used by custom extensions."
    ),
)

评论区精华

遗漏 speech_to_text 中的同类字段 question

DarkLight1337 在 review 中指出 completion 协议修改后,speech_to_text 中也有相同的 vllm_xargs 字段,应一并更新。

结论:sagearc 回复 'done' 并提交了同步修改,该问题已解决。 · 已解决

风险与影响

风险极低。变更仅修改了 Pydantic 模型字段的类型注解和描述,不涉及运行时逻辑。由于 Python 动态类型特性,这类注解不会影响现有请求的处理。但需注意,若下游代码依赖 vllm_xargs 值类型判断(例如仅处理标量),传入列表值可能引发未预期行为。不过该改动为向后兼容(原标量仍可用),且列表值已在其他 schema 中支持,整体风险可控。

影响范围限定在通过 completion 和 transcription API 端点传入 vllm_xargs 参数的用户。现在这些端点也支持传入列表值,与 chat 和 response 端点行为一致。对系统性能、安全无影响,无需配置或部署变更。

低风险 类型注解变更 向后兼容

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论