bug: upstream model listing fields leak into the model object, faking preset and misrouting Edit

该报错发生在外部预设模型(preset: true、connection_type: external)被误当作 Workspace Model 处理时。点击编辑按钮会跳转到 /workspace/models/edit 并请求 /api/v1/models/model,最终返回 404,界面显示误

快速结论:该报错发生在外部预设模型(preset: true、connection_type: external)被误当作 Workspace Model 处理时。点击编辑按钮会跳转到 /workspace/models/edit 并请求 /api/v1/models/model,最终返回 404,界面显示误导性的权限错误。优先排查模型是否被错误地打上 preset 标记,并更新到修复版本。

适用环境:Open WebUI(Docker 安装,main 分支构建 d3e8bf3405e848cfba377814d0aa7ba7290e414d);Ubuntu 24.04 操作系统。Issue 中未提及 Python、CUDA、显卡版本,无证据不补写。

最快修复方案:暂无确认的一步修复方案。该问题需更新到包含修复(对合并时剥离 Open WebUI 自有字段的改动)的版本。上游已提交 PR #29693 与 #29694,可等待合入 dev/main 分支后升级。

注意事项:社区提出的临时方案(在 Models.svelte 中屏蔽外部预设模型的编辑入口/按钮)只治标不治本,且需手动改动源码;根本原因是模型对象中混入了 preset、connection_type、upstream_id 等上游字段,应优先通过版本升级解决。同时,`/api/v1/models/model` 接口对不存在的模型返回 404 也属预期行为,但不应将外部模型路由到该接口。

问题场景

用户在 Open WebUI 的 Docker 版本(main 分支)中配置了外部模型(例如 qwen3.7-plus,connection_type 为 external),该模型通过 /api/v1/models 正常返回并可在聊天中使用。但管理员在 Settings → Models 页面点击该模型右侧的 Edit 按钮时,页面被路由到 /workspace/models/edit?id=qwen3.7-plus,随后该页面请求 /api/v1/models/model?id=qwen3.7-plus 返回 404,界面显示”You do not have permission to edit this model”的误导性错误。

报错原文

GET /api/v1/models/model?id=qwen3.7-plus

{"detail":"We could not find what you're looking for :/"}
You do not have permission to edit this model

原因分析

可能原因:模型列表接口(/api/v1/models)返回的外部模型对象中混入了 Open WebUI 内部的 preset、connection_type、upstream_id 等字段(即上游模型列表字段泄漏到模型对象中)。前端 openModelHandlersrc/lib/components/admin/Settings/Models.svelte 中只要判断 isPresetModel 为真,就统一将所有 model 路由到 /workspace/models/edit,而编辑页会查询 /api/v1/models/model
对于外部预设模型(preset: true, connection_type: “external”),其后端并没有对应的 Workspace Model 数据行,因此该接口返回 404,前端误报为“无权限编辑”。这是一个“外部模型被误当作工作区模型进行编辑/查询”的代码路径缺陷,而非权限配置问题。

环境排查

  • Open WebUI 安装方式:Docker,确认版本为 main 分支(build d3e8bf3405e848cfba377814d0aa7ba7290e414d)或更早。若已使用 dev 分支,需同步上游最新代码。
  • 操作系统:Ubuntu 24.04(Issue 已确认)。
  • 涉及的外部模型字段:preset、connection_type(external)、upstream_id,检查 /api/v1/models 返回的 JSON 中是否包含这些不应出现在模型对象中的字段。
  • 浏览器开发者工具:观察点击编辑按钮后的跳转 URL 及 GET /api/v1/models/model 的响应状态码。
  • 确认该模型在 Workspace Models 中不存在同名数据行(这是问题出现的前提之一)。

解决步骤

  1. 优先升级到修复版本:上游维护者已指出根因——模型合并时未剥离 Open WebUI 自有字段,已在 PR #29693 / #29694 中提出修复(尤其是合并时剥离 OWUI-owned keys 的方案)。请更新 Open WebUI 到包含上述修复的版本(结合 Issue 关闭日期和 PR 合入状态确认)。
  2. 临时规避(仅限 dev 分支,需手动改动源码):若暂时无法升级,可优先尝试在 src/lib/components/admin/Settings/Models.svelte 中,将 openModelHandlerisPresetModel 的判断增加一个条件:当 preset === true && connection_type === 'external' 时,不跳转到 /workspace/models/edit,而是弹出 toast 提示或隐藏编辑按钮。此改动仅为绕过界面入口,未解决字段泄漏的根因。
  3. 核实模型字段:检查 /api/v1/models 返回 JSON 中是否包含 preset、connection_type、upstream_id 等字段;若不需要可考虑在外部模型配置流程中核查字段来源。
  4. 避免误操作:在修复前,管理员不要通过 Settings → Models 点击这类外部预设模型的 Edit 按钮,以免产生误导性的权限错误。

验证方法

升级到修复版本或应用临时补丁后,重新打开 Settings → Models,找到该外部预设模型并点击 Edit。若问题已解决,界面不会再跳转到 /workspace/models/edit?id=...,或者对应的外部模型编辑入口会跳转到合适的外部模型配置界面;同时 GET /api/v1/models/model 对这类模型不应再返回 404。开发者可检查浏览器 Network 面板确认请求未被发送,或返回正常的外部模型配置数据。

参考来源

open-webui/open-webui #29629

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22487

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注