bug: custom Filter inlet() is called but outlet() is not called after GitHub update in install

用户通过 Pinokio 安装 Open WebUI(Git Clone 方式),在从 GitHub 更新代码后,对自定义 Filter 进行测试:在管理员面板 → 函数中创建了一个极简的“Outlet Probe”检测 Filter,启用了该 Filter 并附加到模型上。在常规聊天 UI 中发送

bug: custom Filter inlet() is called but outlet() is not called after GitHub update in install

bug: custom Filter inlet() is called but outlet() is not called after GitHub update in install

快速结论:该问题发生在通过 GitHub 源码更新 Open WebUI 后,用户自定义 Filter 的 outlet() 方法在常规聊天 UI 流程中不再被调用,但 inlet() 正常执行。优先排查来源更新是否完整,以及确认自定义 Filter 中 inlet()outlet() 是否都声明为 async 函数(从 0.9.0 版本开始两者都必须为异步)。

问题场景

用户通过 Pinokio 安装 Open WebUI(Git Clone 方式),在从 GitHub 更新代码后,对自定义 Filter 进行测试:在管理员面板 → 函数中创建了一个极简的“Outlet Probe”检测 Filter,启用了该 Filter 并附加到模型上。在常规聊天 UI 中发送消息后,观察到 inlet() 执行,但 outlet() 从未被调用。

值得注意的是,同一实例中另一个名为 auto_memory 的现存 Filter 的 outlet() 仍正常工作;另外,在 Docker 部署的 Open WebUI v0.9.6 版本中,该自定义 Filter 表现正常。

报错原文

Observed logs:
[Outlet Probe] inlet called

[Outlet Probe] outlet called  (this line NEVER appears)

For another filter "AI Transparency Marker":
[AI Transparency Marker v1.0.1] inlet appelé ; body_keys=['stream', 'model', 'messages', 'features', 'metadata', 'num_ctx']; messages=2; choices=None
(no outlet log ever appears either)

原因分析

可能原因:

  • 从 GitHub 源码更新时,outlet_filter_handler 的相关代码可能未正确覆盖或存在回归缺陷,导致在特定流(非直接 API 调用的常规聊天 UI 流)中 outlet() 未被触发。
  • Issue 作者提供的测试代码中 outlet() 声明为 asyncinlet() 为同步函数,但从 Open WebUI 0.9.0 起两者都必须为异步。虽然 Issue 作者声称观察到了该行为,但开发者 无法复现该问题——使用完全相同的“Outlet Probe”测试代码在开发版本中 outlet() 正常工作。
  • 可能与 Pinokio 安装方式的更新过程不完整有关(与 Docker 安装表现不同)。

环境排查

  • Open WebUI 版本:v0.9.6
  • Ollama 版本:v0.30.7
  • 操作系统:Linux Mint 21.3
  • 浏览器:Firefox 152.0.1
  • 安装方式:Git Clone(通过 Pinokio)
  • 确认 两个 Filter 方法是否都声明为 async def(inlet 和 outlet 都需要)
  • 确认是否使用了最新的 Open WebUI 版本
  • 检查是否通过直接 API 端点(如 /api/chat/completions)调用 —— 该情况下 outlet() 可能按设计不触发

解决步骤

  1. 可优先尝试:确保自定义 Filter 中 inlet()outlet() 都声明为 async def(而非 def),因为从 Open WebUI v0.9.0 开始两者都必须为异步。
  2. 检查 Open WebUI 安装是否为最新版本(Issue 作者已在使用最新版)。
  3. 如果通过 Pinokio/Git Clone 更新,尝试完全删除安装目录并重新克隆代码,然后重新安装依赖,确保更新完整覆盖。
  4. 创建一个极简测试 Filter(例如仅打印日志的 outlet()),以排除业务逻辑干扰。
  5. 尝试切换到 Docker 方式部署同一版本,测试自定义 Filter 的 outlet() 是否正常工作——这有助于区分是源码更新问题还是安装方式差异。
  6. 检查浏览器控制台和后端容器日志中是否有其他错误或异常信息。

验证方法

在服务器/后端日志中搜索自定义 Filter 打印的 outlet() 日志(如 [Outlet Probe] outlet called)。如果该日志出现在每次聊天响应完成后,则问题已解决。如果仍只有 inlet() 日志,outlet() 不出现,请确认 Filter 方法签名是否一致且异步,并检查 Open WebUI 源码更新是否完整。

参考来源

open-webui/open-webui #26244

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 10219

发表回复

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