Prhub

#36679 [Bugfix] stream failure when model name not in audio endpoints

vllm-project/vllm · 作者 ekagra-ranjan · 合并时间 2026-04-13 22:20

分析状态 已生成
文件变更 1提交数 5 · 评论 0
代码增减 +3 / -0
frontend bugfix v1

执行摘要

修复音频转录 / 翻译端点流式推理时缺失模型名称导致的验证错误。

PR body中描述:当使用音频转录/翻译端点进行流式推理时,如果请求中未提供模型名称,会返回Pydantic验证错误("Input should be a valid string"),导致流式推理失败。而其他端点在这种情况下可以正常工作。

该PR变更简单直接,值得快速浏览以了解前端验证的修复模式。关注点:如何为缺失参数设置默认值以保持API一致性。

讨论亮点

review中只有gemini-code-assist[bot]提供了具体评论,指出该PR修复了流式端点因缺失模型名称而失败的问题,实现简单直接且正确解决了问题。DarkLight1337和NickLucche仅批准,无具体讨论。

实现拆解

vllm/entrypoints/openai/speech_to_text/speech_to_text.py 文件的 _create_speech_to_text 函数中,添加了3行代码:在错误检查之后,如果 request.modelNone,则将其设置为 self.models.model_name()。这确保了模型名称不为空,从而通过后续的Pydantic验证。

文件 模块 状态 重要度
vllm/entrypoints/openai/speech_to_text/speech_to_text.py frontend modified 5.0

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

关键符号

_create_speech_to_text

评论区精华

修复流式端点模型名称验证 正确性

gemini-code-assist[bot] 指出该 PR 修复了流式端点因缺失模型名称而失败的问题,实现简单直接。

结论:变更被接受并合并。 · 已解决

风险与影响

风险较低:1. 变更仅涉及前端验证逻辑,不触及核心推理路径。2. 添加的默认值来自 self.models.model_name(),需确保该属性在上下文中有效且返回合适的模型名称。3. 无测试变更,但原问题已在PR描述中通过curl命令验证修复。

影响范围有限:1. 用户:修复了音频转录/翻译流式推理的可用性问题,提升用户体验。2. 系统:仅影响前端请求处理,对性能、安全性无显著影响。3. 团队:代码变更极小,易于维护。

前端验证逻辑变更

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

修复了音频转录和翻译端点在流式推理时,因请求未提供模型名称而导致的Pydantic验证错误(400 BadRequest)。通过为缺失的模型名称设置默认值(self.models.model_name()),使该端点行为与其他API端点保持一致,确保流式推理正常工作。

功能与动机

问题背景:在使用 /v1/audio/transcriptions/v1/audio/translations 端点进行流式推理(stream=true)时,如果请求中未包含 model 参数,会返回Pydantic验证错误:

{"error": {"message": "1 validation error for TranscriptionStreamResponse\nmodel\n Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]", ...}}

而其他端点(如聊天完成)在类似情况下可以正常工作。PR body中提供了完整的curl命令示例,展示了修复前后的对比。

实现拆解

仅修改了一个文件:vllm/entrypoints/openai/speech_to_text/speech_to_text.py

_create_speech_to_text 函数中,添加了3行代码:

if not request.model:
    request.model = self.models.model_name()

位置在错误检查之后、引擎状态检查之前。这确保了当 request.modelNone 时,使用 self.models.model_name() 提供的默认模型名称,从而通过后续的Pydantic验证。

评论区精华

review讨论较少,主要来自gemini-code-assist[bot]的自动评论:

"This pull request addresses a bug in the speech-to-text streaming endpoint where requests without a model name would fail. The change introduces logic to assign a default model name if one is not provided, aligning the endpoint's behavior with other parts of the API. The implementation is straightforward and correctly resolves the issue."

其他reviewer(DarkLight1337和NickLucche)仅批准,无额外评论。

风险与影响

技术风险

  • 低风险:变更仅涉及前端请求验证逻辑,不触及核心推理路径。
  • 依赖 self.models.model_name() 返回有效的模型名称,需确保该属性在上下文中已正确初始化。
  • 无测试文件变更,但PR描述中已通过curl命令验证修复。

影响范围

  • 用户:修复了音频流式推理的可用性问题,提升用户体验。
  • 系统:仅影响前端API端点,对性能、安全性无显著影响。
  • 团队:代码变更极小,易于理解和维护。

关联脉络

与近期历史PR的关联:

  • PR #37727:修复Responses API中参数泄漏问题,同属frontend模块的bugfix。
  • PR #38827:为rerank请求添加新参数,同属frontend模块的API增强。

这表明团队持续在完善前端API的健壮性和功能一致性。本PR是这一趋势的一部分,确保音频端点与其他端点行为对齐。

参与讨论