快速结论:在 Open WebUI 中把 Open Terminal 提供的编码代理模型(Cursor、Pi 等)保留在侧边栏后,点击置顶项会打开新对话却停在 “Select a model”,这是客户端 URL 构造问题——侧边栏置顶链接写入 /?model=<id> 时没有做 URL 编码,模型 ID 中带 [ ] = , / 等字符时无法再匹配到任何模型。优先排查置顶模型 ID 是否包含需要百分号编码的字符。
适用环境:Open WebUI v0.13.3(b0e6098),dev 分支 782f4b7 受影响代码一致;安装方式 Pip Install;macOS(Apple Silicon);桌面 Chromium 内核浏览器(非版本相关);需有管理员 Open Terminal 连接(Open Terminal v0.17.7)且本机安装并登录了 Cursor CLI(agent);Ollama 版本 N/A。
最快修复方案:暂无确认的一步修复方案(Issue 关闭时未给出已验证的修复步骤)。可优先尝试更换浏览器或清除缓存等客户端侧操作,但根据 Issue 的根因分析,这类操作无法解决 URL 编码导致的 ID 不匹配。
注意事项:该问题完全发生在客户端,服务端不记录任何错误;“Select a model” 只是模型无法解析后的正常回退表现,并非模型丢失或终端断连。置顶记录本身是正确的,问题只出在侧边栏 href="/?model={model?.id}" 缺少 encodeURIComponent(UI 中其他模型链接已经这样处理)。
问题场景
在 Open WebUI 中通过管理员 Open Terminal 连接使用编码代理模型时:在新对话中选择终端,让 Cursor、Pi 等编码代理模型出现在模型选择器里,然后在某个 Cursor 模型(例如 cursor/composer-2.5[fast=true])的菜单中点击 Keep in Sidebar,再点击侧边栏中的置顶项。预期打开已选中该模型的新对话,实际却停留在一个显示 “Select a model” 的模型选择器上,搜索框还预填了解码后的模型 ID。对比之下,置顶 Codex 模型(如 codex/gpt-6.1-sol)可以正常打开。
报错原文
issue: pinned sidebar models open "Select a model" when the model ID contains encoded characters (Cursor, Pi agent models)
agent:<terminal-id>:cursor:composer-2.5%5Bfast%3Dtrue%5D is read back as …:cursor:composer-2.5[fast=true]. There is no exact match, so the model selector opens with the ID pre-filled as search text and "Select a model" is shown.
agent:<terminal-id>:pi:openai%2Fgpt-5.5 is read back as …:pi:openai/gpt-5.5. No match.
原因分析
侧边栏置顶组件 src/lib/components/layout/Sidebar/PinnedModelItem.svelte 第 36 行直接生成 href="/?model={model?.id}",没有对模型 ID 做 URL 编码。Open Terminal 的编码代理模型 ID 在创建时是百分号编码的(Cursor 的 ID 总含方括号,Pi 的 ID 含 /,会被写成 %2F)。新对话用 URLSearchParams.get() 读回参数时会自动解码,于是得到与任何已注册模型都不匹配的字符串。此外,如果解码后的 ID 中含有逗号(如 claude-opus-5-5[context=300k,effort=medium,fast=false]),该值还会按 , 再拆成多个无效模型 ID。Codex 模型之所以正常,只是因为它的 ID 不含需要编码的字符。Issue 中已用 Node.js 的 WHATWG URL / URLSearchParams 按 Chat.svelte 的同样步骤复现:codex 返回 1 项且完全相等,cursor 返回 1 项但不相等,含逗号的 cursor 返回 3 项,pi 返回 1 项但不相等。
环境排查
- 确认 Open WebUI 版本为 v0.13.3(
b0e6098)或dev(782f4b7);这是唯一与受影响代码关联的版本证据,其他版本是否受影响未经验证。 - 确认安装方式是否为 Pip Install。
- 确认是否通过管理员配置了 Open Terminal 连接,且版本为 Open Terminal v0.17.7。
- 确认运行 Open Terminal 的机器上已安装并登录 Cursor CLI(
agent),以及是否使用 Pi 等模型 ID 含/的代理。 - 确认终端仍然在线、对应模型在选择器中仍可列出(用于排除 #33842 描述的终端离线场景)。
- 操作系统为 macOS(Apple Silicon)、浏览器为桌面 Chromium 内核的相关信息仅作对照,该问题与浏览器版本无关。
解决步骤
- 先做隔离验证:置顶一个 Codex 模型(如
codex/gpt-6.1-sol)并点击;若能正常打开,而 Cursor、Pi 置顶项失败,则符合本 Issue 描述的编码问题特征。 - 检查失败置顶项的模型 ID 是否包含
[、]、=、,、/等字符(在存库的 ID 中表现为%5B、%5D、%3D、%2C、%2F)。 - 如以源码方式部署,可在
src/lib/components/layout/Sidebar/PinnedModelItem.svelte的链接构造处对模型 ID 使用encodeURIComponent(与 UI 中其他模型链接的做法一致),然后重新构建并验证;此为可优先尝试的修复方向,Issue 未给出已验证代码。 - 若无法修改源码,暂时避免在侧边栏置顶依赖 Cursor、Pi 等含特殊字符 ID 的模型,改用模型选择器在新对话中选模型,并等待上游修复。
- 复制置顶链接时不要手工改动
?model=后的内容,手工解码或截断会让匹配彻底失败。
验证方法
重新置顶 Cursor 的 cursor/composer-2.5[fast=true](及含逗号的 claude-opus-5-5[context=300k,effort=medium,fast=false])和 Pi 的 openai/gpt-5.5 系列模型,点击侧边栏置顶项:新对话应直接打开且模型已选中对应模型,不再出现 “Select a model”,搜索框也不会被预填成解码后的 ID。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


