
issue: Chat stuck after Filter function blocks request in inlet()
快速结论:当自定义 Filter 函数的 inlet() 方法通过 raise Exception 阻断请求时,虽然错误通知显示正确,但聊天界面会陷入卡死状态,无法发送新消息。优先排查 Filter 函数中是否使用了 raise Exception 来阻断请求,以及 Open WebUI 版本是否为 v0.9.6。
问题场景
用户运行 Open WebUI v0.9.6,安装方式为 Other(非 Docker 标准流程),操作系统为 Ubuntu 22.04。在 Admin Panel → Functions 中添加了一个自定义 Filter 函数,用于限制输入 token 数。当输入的 token 数超过阀值(默认 1000)时,inlet() 方法通过 raise Exception 抛出异常并发送错误通知。随后聊天界面卡住,无法发送新消息,只能通过打开新聊天来恢复。
报错原文
# Filter 函数中阻断请求的关键代码
if tokens > self.valves.token_limit:
await __event_emitter__(
{
"type": "notification",
"data": {
"type": "error",
"content": f"Input exceeds maximum length: {tokens} tokens (limit: {self.valves.token_limit}). Please shorten your input.",
},
}
)
raise Exception(
# 异常内容在 Issue 正文中被截断,未完整显示
)
# 实际出现的错误通知:
# "Input exceeds maximum length: {tokens} tokens (limit: {self.valves.token_limit}). Please shorten your input."
# 通知显示后,聊天界面卡死,无法继续操作。
原因分析
可能原因:当 Filter 函数的 inlet() 方法抛出异常时,Open WebUI 的请求处理流程可能没有正确将聊天状态重置为空闲(idle)状态。错误通知虽然显示成功,但底层的状态机仍停留在“等待响应”或“处理中”状态,导致输入框被锁定,无法发送新消息。这与 Issue #26892 和 #15189 等已知问题症状相似,说明该问题可能是 Open WebUI 在异常处理流程中的一个通用缺陷。
环境排查
- Open WebUI 版本:确认为 v0.9.6(用户报告问题时的版本)
- 操作系统:Ubuntu 22.04
- 安装方式:Other(非标准 Docker 部署)
- Python 依赖:Filter 函数中使用了
tiktoken库,需要确认tiktoken版本兼容性 - 模型配置:自托管模型,通过 OpenAI 兼容端点连接
- 浏览器控制台日志:Issue 中未提供具体日志,但用户已确认包含控制台日志(未在 Issue 正文中贴出)
解决步骤
- 确认问题是否在最新版本中已修复:用户报告时使用的是 v0.9.6,该问题在 Issue 关闭(2026-07-09)时可能已在新版本中修复。建议升级到 Open WebUI 的最新稳定版,检查是否仍存在。
- 可优先尝试:修改 Filter 函数,避免使用
raise Exception:目前 Issue 中没有提供明确解决方案,但根据代码逻辑,可以考虑将raise Exception替换为仅发送错误通知并返回空或阻断的响应,例如:if tokens > self.valves.token_limit: await __event_emitter__( { "type": "notification", "data": { "type": "error", "content": f"Input exceeds maximum length: {tokens} tokens (limit: {self.valves.token_limit}). Please shorten your input.", }, } ) # 代替 raise Exception,返回一个空或阻断的 body return {"error": "Input too long"} # 或根据 API 规范返回适当响应 - 临时恢复方法:如果问题已发生,可以尝试编辑那条触发错误的用户消息,重新发送,或点击错误消息下的“重新生成”(Regenerate)按钮。Issue 正文中提到在卡死后,唯一恢复的方法是打开一个新聊天,但评论中也指出可以尝试编辑消息或重新生成(推测性建议,请以实际测试为准)。
- 检查相关 Issue 的修复状态:参考 Issue #26892(API 错误消息持续存在并阻止后续聊天)和 #15189(前端死锁),检查这些 Issue 中是否提供了补丁或 workaround。
验证方法
修改 Filter 函数或升级 Open WebUI 后,按照复现步骤操作:发送一条超过 token 限制的消息,确认错误通知正常显示,然后尝试发送一条新的符合 token 限制的消息。如果发送框恢复正常、可以正常交互,则问题已解决。反之,如果仍然卡死,需要进一步排查。
参考来源
open-webui/open-webui #26941:Chat stuck after Filter function blocks request in inlet()



