issue: banner containing throws “Token with underline type was not found” in 0.11.1

该报错出现在 Open WebUI v0.11.1 的 Banner 渲染环节,当横幅内容包含 ` ... `(下划线标记)时,marked 解析器抛出 "Token with underline type was not found" 异常。问题根源是 `underlineExtension()`

快速结论:该报错出现在 Open WebUI v0.11.1 的 Banner 渲染环节,当横幅内容包含 ``(下划线标记)时,marked 解析器抛出 “Token with underline type was not found” 异常。问题根源是 `underlineExtension()` 注册了 tokenizer 但缺少对应的 renderer,优先排查 marked 扩展的注册与渲染配置。

适用环境:Open WebUI v0.11.1(Docker 部署),服务端 Ubuntu 24.04.4 LTS (aarch64, NVIDIA GH200),客户端 macOS 27.0 + Chrome 浏览器,marked 版本 9.1.0(package.json 中锁定)。此问题与 Ollama 无关,纯客户端渲染缺陷。

最快修复方案:暂无确认的一步修复方案。Issue 中提到的修复方案(#29118)已在 dev 分支验证,但未确认是否已合并到正式发布版本。可优先尝试升级到包含修复的 dev 分支版本,或等待包含修复的下一个正式版本。

注意事项:该问题在 v0.11.0 及更早版本中不存在,属于 v0.11.1 的回归缺陷。修复方案在 dev 分支已验证,但尚未确认正式发布时间线。临时规避方案可考虑避免在横幅内容中使用 `` 标签,改用其他视觉标识。

问题场景

用户在 Open WebUI v0.11.1(Docker 部署)中通过 Admin Panel → Settings → Interface → Banners 创建包含 `` 标签的横幅内容(例如 `More info on model choice check out the [FAQ](https://example.com/faq.html)`)。当用户打开聊天页面时,`Markdown.svelte` 模块顶层调用 `marked.use(markedExtension(options))` 注册了 underline tokenizer,随后横幅渲染调用 `marked.parse()` 时抛出异常,导致横幅无法显示。

报错原文

Uncaught Error: Token with "underline" type was not found.
Please report this to https://github.com/markedjs/marked.
    at Ee.parseInline (marked.esm.js:2015:31)
    at Ee.parse (marked.esm.js:1915:57)
    at parse (marked.esm.js:1801:23)
    at si.parse (marked.esm.js:2297:28)
    at Y [as parse] (marked.esm.js:2330:27)
    at Banner.svelte:103:39

原因分析

可能原因:Open WebUI 的 `underlineExtension()` 在 marked 扩展中注册了 `underline` tokenizer,但没有注册对应的 renderer。marked 在解析阶段成功匹配到 `` 标签并生成 underline 类型的 token,但在渲染阶段找不到对应的 renderer 函数,因此抛出 “Token with underline type was not found” 异常。这是一个典型的”注册不完整”缺陷,与 #9276(inlineKatex token)和 #26904(下划线格式被静默丢弃)属于同一类问题。

该问题在 v0.11.0 及更早版本中不存在,说明 v0.11.1 中的某个改动破坏了 underline 扩展的完整性。Issue 作者确认在 `dev` 和 `main` 分支上,`underlineExtension()` 仍然没有 renderer,因此该问题在最新源码中依然存在(截至提交时)。

环境排查

  • 确认 Open WebUI 版本是否为 v0.11.1(当前最新发布版)
  • 确认 marked 版本是否为 9.1.0(package.json 中锁定的版本)
  • 确认部署方式是否为 Docker,容器日志中应无相关错误(GET/POST /api/v1/configs/banners 均返回 200)
  • 确认浏览器是否为 Chrome(其他浏览器可能也有相同问题,但未在 Issue 中验证)
  • 检查服务端系统为 Ubuntu 24.04.4 LTS(aarch64 架构,NVIDIA GH200)

解决步骤

  1. 临时规避:编辑横幅内容,移除 `` 标签,改用其他格式(如 ``、``)或纯文本。这是已验证可用的临时方案。
  2. 确认问题是否为回归:检查 v0.11.0 中相同横幅内容是否正常渲染,以确认此问题是否为 v0.11.1 引入。
  3. 查看 Issue #29118 中提出的修复方案,该方案已在 dev 分支验证有效。
  4. 如果必须使用 `` 标签,可优先尝试升级到 dev 分支版本,或等待包含修复的下一个正式版本发布。
  5. 如自行编译,可检查 `underlineExtension()` 的源码实现,确认 tokenizer 与 renderer 的注册是否完整,参考 #29118 的修复方式补齐 renderer。

验证方法

在修复后,重新创建一个包含 `[FAQ](https://example.com/faq.html)` 的横幅,然后打开聊天页面。如果横幅正常渲染且 “FAQ” 文字显示为下划线链接样式,且浏览器控制台无 “Token with underline type was not found” 错误,则说明问题已解决。同时可检查 Docker 容器日志,确认无新的异常抛出。

参考来源

open-webui/open-webui #29115

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21234

发表回复

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