Prhub

#41088 [Bugfix] Fix broken example opeanai client

原始 PR 作者 Isotr0py 合并时间 2026-04-28 12:43 文件变更 3 提交数 1 评论 4 代码增减 +6 / -9

执行摘要

修复三个 example 脚本因缺失 utils 导入而崩溃

PR body 明确指出 openai_chat_completion_client_for_multimodal.py 等脚本因 ModuleNotFoundError: No module named 'utils' 崩溃,无法使用。作者通过直接运行复现了该问题。

该 PR 是一个简单的示例修复,不值得投入精力精读。不过,开发者可以关注其修复模式:在 example 中避免依赖本地模块,保持自包含性。此外,对于 Gemini 建议的健壮性问题,可以稍后自行添加空列表检查。

讨论亮点

Gemini Code Assist Bot 在三个文件中都提出了相同建议:直接访问 data[0] 在模型列表为空时可能引发 IndexError,建议添加空列表检查并给出更友好的错误信息。作者未在讨论中回复,该建议未被采纳,PR 已合并。

实现拆解

  1. 移除错误的导入语句:在三个文件中删除 from utils import get_first_model 这一行。
  2. 替换模型获取方式:将原来调用 get_first_model(client) 的地方改为 client.models.list().data[0].id,通过 OpenAI API 标准接口获取服务器上部署的第一个模型 ID。
  3. 保持脚本独立性:消除对同目录下 utils.py 的依赖,使示例脚本可在任意位置作为独立入口运行。
文件 模块 状态 重要度
examples/tool_calling/openai_responses_client_with_mcp_tools.py 示例脚本 modified 5.8
examples/tool_calling/openai_responses_client_with_tools.py 示例脚本 modified 5.26
examples/generate/multimodal/openai_chat_completion_client_for_multimodal.py 示例脚本 modified 5.26

关键源码片段

examples/tool_calling/openai_responses_client_with_mcp_tools.py dependency-wiring

修复了 MCP 工具示例中 utils 导入缺失导致的崩溃,移除 import 并替换模型获取方式。

# 变更前:依赖本地 utils 模块
from openai import OpenAI
from utils import get_first_model# 变更后:完全自包含,通过 API 获取模型
def example_no_filter():
    base_url = "http://0.0.0.0:8000/v1"
    client = OpenAI(base_url=base_url, api_key="empty")
    # 直接调用 OpenAI 的模型列表接口,获取第一个可用模型 ID
    model = client.models.list().data[0].id
    # ... 后续逻辑不变

评论区精华

直接访问 data[0] 缺少空列表检查 正确性

Gemini Code Assist Bot 指出直接访问 `data[0]` 在列表为空时会导致 IndexError,建议添加空检查并给出友好的错误提示。

结论:作者未回应,建议未被采纳。当前实现若服务器无模型时仍会 throw IndexError。 · unresolved

风险与影响

低风险。变更仅限于三个示例脚本,不涉及核心库代码。主要风险是:当 vLLM 服务器运行但未加载任何模型时,client.models.list().data[0].id 会抛出 IndexError,而不是像原来可能由 get_first_model 提供更友好的错误提示。但这是示例脚本的边缘场景,影响有限。

影响范围小。仅影响三个 example 脚本,对核心推理、API 服务等无影响。这些脚本开发者/用户可以直接运行,不再需要 utils.py 辅助文件。

缺少健壮性检查

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论