Prhub

#44425 [CI/Build] Fix LoRA testing

原始 PR 作者 jeejeelee 合并时间 2026-06-03 23:58 文件变更 1 提交数 2 评论 0 代码增减 +10 / -4

执行摘要

修复 LoRA 加载异常处理路径

修复 CI 构建失败(https://buildkite.com/vllm/ci/builds/69686#019e8c27-d9d9-417b-9ab4-c98c5d850905),使 LoRA 加载异常能够被正确序列化为响应,避免内部错误传播到前端。

建议合入,该 PR 修复了 LoRA 加载失败时的异常处理路径,避免内部错误暴露。虽无测试配套,但逻辑简单且改动量小,风险可控。未来可考虑补充测试用例覆盖异常路径。

讨论亮点

该 PR 无 review 评论,由 DarkLight1337 直接批准合并。

实现拆解

  1. 定位异常处理代码:在 vllm/entrypoints/openai/models/serving.pyload_lora_adapter 方法中,原先在捕获到 LoRAAdapterNotFoundError 和其他异常时直接 raise,导致异常未被转换为 HTTP 错误响应。
  2. 替换异常抛出为返回 ErrorResponse:对 LoRAAdapterNotFoundError 使用 create_error_response 构造错误响应并返回,对其他异常同样构造带有 InternalServerError 类型的错误响应,包含具体的错误消息和 HTTP 状态码。
  3. 保持原有控制流:无其他逻辑变更,确保正常路径和 unlock 操作不受影响。
文件 模块 状态 重要度
vllm/entrypoints/openai/models/serving.py 前端服务 modified 6.4

关键源码片段

vllm/entrypoints/openai/models/serving.py data-contract

这是该 PR 中唯一修改的文件,修正了 load_lora_adapter 方法中异常处理逻辑,将直接抛异常改为返回 ErrorResponse 对象。

# vllm/entrypoints/openai/models/serving.py
# 修改前 ( 异常直接抛出,未被转换为 HTTP 响应 )
async def load_lora_adapter(self, request) -> ErrorResponse | str:
    # ...
    try:
        await self.engine_client.add_lora(lora_request)
    except Exception as e:
        # 旧逻辑:直接 raise,导致异常向上传播,无法序列化为统一错误响应
        if str(LoRAAdapterNotFoundError(...)) in str(e):
            raise LoRAAdapterNotFoundError(...) from e
        raise# 修改后 ( 异常被转换为 ErrorResponse 返回,确保前端收到规范错误结构 )
async def load_lora_adapter(self, request) -> ErrorResponse | str:
    # ...
    try:
        await self.engine_client.add_lora(lora_request)
    except Exception as e:
        # 新逻辑:返回 create_error_response,构造统一错误响应
        if str(LoRAAdapterNotFoundError(...)) in str(e):
            return create_error_response(
                LoRAAdapterNotFoundError(
                    lora_request.lora_name, lora_request.lora_path
                )
            )
        # 其他异常一律转为 InternalServerError
        return create_error_response(
            message=str(e),
            err_type="InternalServerError",
            status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
        )

评论区精华

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

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

风险与影响

低风险。变更范围小且集中,仅修改异常处理路径,正常逻辑不变。但缺失针对新错误响应格式的测试用例,可能遗漏对响应字段(如 err_type、status_code)的验证。

影响范围仅限于 LoRA 加载失败的场景。原先异常会导致 HTTP 500 或无法正确序列化的响应,现在返回统一的 ErrorResponse,改善错误反馈的可靠性和前端兼容性。

缺少测试覆盖

关联 Issue

#19 Use FP32 for log probabilities

完整报告

参与讨论