open-webui v0.8.11 版本更新介绍
发布日期: 2026-03-25
版本号: v0.8.11
Open WebUI 最近发布了一次重大更新,包含大量新增功能、修复和改动。新增功能主要集中在增强 Responses API 的流式处理和会话状态管理、支持文件查看与知识库搜索的分页功能、优化工具调用和认证授权机制(如支持静态 OAuth 凭据、Google OAuth 刷新令牌)、提升界面性能与渲染流畅度(如聊天渲染节流、动画优化)、以及完善终端连接、文件导航和模型管理等操作。修复部分解决了多项安全漏洞(如模型访问控制绕过、终端代理路径过滤)、提升了系统稳定性(如工具服务器连接持久化、数据库迁移可靠性),并修正了众多界面和交互问题。改动方面,默认禁用了用户 Webhook 通知。整体更新显著提升了平台的功能性、安全性和用户体验。
更新内容 (中文)
新增
- 🔀 Responses API 流式处理改进。 OpenAI 代理现在可以正确处理 Responses API 中的工具调用流式处理和重新调用,防止重复工具调用并在模型重新调用时保留输出。提交,提交,提交,提交
- 🔀 Responses API 有状态会话。 管理员现在可以通过
ENABLE_RESPONSES_API_STATEFUL环境变量启用实验性有状态会话支持,允许兼容的后端在服务器端存储响应,使用previous_response_id进行锚定,以改进多轮对话。提交 - 📄 文件查看分页。
view_file和view_knowledge_file工具现在支持分页,包含offset和max_chars参数,允许模型分块读取大文件。提交 - 🗺️ 知识库搜索范围。
search_knowledge_files工具现在尊重模型附加的知识,在有可用知识库和文件的情况下,仅在附加的知识库和文件中搜索。提交 - 🛠️ 工具 HTML 嵌入上下文。 工具现在可以通过使用元组格式在 HTML 嵌入旁边返回自定义上下文,为 LLM 提供可操作的信息,而不是通用消息。#22691
- 🔒 可信角色头配置。 管理员现在可以配置
WEBUI_AUTH_TRUSTED_ROLE_HEADER环境变量,通过来自其身份提供商或反向代理的可信头设置用户角色(admin、user 或 pending)。#22523 - 🔑 OIDC 授权参数注入。 管理员现在可以通过
OAUTH_AUTHORIZE_PARAMS环境变量向 OIDC 授权重定向 URL 注入额外参数,为 CILogon 和 Keycloak 等代理启用 IdP 预选择。#22863,提交 - 🔑 Google OAuth 会话持久性。 管理员现在可以通过
GOOGLE_OAUTH_AUTHORIZE_PARAMS环境变量配置 Google OAuth 颁发刷新令牌,防止 OAuth 会话在一小时后过期,并确保依赖 OAuth 令牌的工具和集成保持功能。#22652 - 🔌 嵌入提示确认。 交互式工具嵌入现在可以向聊天提交提示,无需同源访问,显示确认对话框以处理跨源请求,防止滥用。#22908
- 🏮 工具二进制响应处理。 工具服务器现在可以返回二进制数据(如图像),这些数据将被正确处理和显示在聊天中,适用于多模态和非多模态模型。提交,提交
- ⚡ Svelte 升级性能。 页面和 Markdown 渲染速度整体提升约 25%,内存使用量显著减少,UI 交互更流畅。#22611
- 🧩 模型和过滤器查找优化。 由于在模型列表加载期间优化了数据结构操作,模型和过滤器成员查找现在更快。提交
- 💨 聊天渲染节流。 聊天消息渲染现在使用
requestAnimationFrame批处理,以在快速模型响应期间保持流畅,防止当快速模型每秒发送多个事件时出现掉帧。#22947 - 🚀 函数列表 API 优化。 函数列表 API 现在仅返回基本元数据,不包含函数源代码,将有效载荷大小减少 99% 以上,使函数管理页面加载显著更快。#22788
- ✨ 更流畅的加载动画。 加载微光动画现在看起来更流畅自然,高光颜色更柔和。#22516
- 🧪 终端连接验证。 用户现在可以在保存配置前验证其终端服务器连接是否正常工作,使设置更可靠。#22567
- 📁 聊天文件夹表情符号重置。 用户现在可以使用表情符号选择器中的 “重置为默认” 按钮将聊天文件夹表情符号重置为默认图标,更轻松地恢复自定义图标。#22554
- 📊 指标导出间隔配置。 管理员现在可以通过
OTEL_METRICS_EXPORT_INTERVAL_MILLIS环境变量控制 OpenTelemetry 指标导出频率,为 Grafana Cloud 等指标服务启用成本优化。#22529 - 🏥 就绪探针端点。 新的
/ready端点现在可用于 Kubernetes 部署,仅在启动完成且数据库/Redis 可达后返回 200,实现更可靠的容器编排。#22507 - 🔩 工具服务器超时配置。 管理员现在可以通过
AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER环境变量为工具服务器请求配置单独的 HTTP 超时,实现对工具调用允许时长的精细控制。提交 - 📌 知识库文件预览。 知识库文件现在可以直接从文件列表中在新标签页中打开,更轻松地查看内容而无需下载。#22629
- 🎯 知识库工具混合搜索支持。 内置的
query_knowledge_files工具现在尊重混合搜索和重排序设置,与中间件 RAG 管道的行为一致。提交 - 🗣️ 临时聊天文件夹支持。 临时聊天现在可以使用文件夹级别的系统提示和知识库文件,使其在快速探索中更强大。提交
- 📡 终端端口预览。 文件导航器中检测到的端口现在可以以内联方式预览,提供浏览器式视图、导航控件和地址栏,而不是仅在新标签页中打开。提交,提交
- ✏️ 文件重命名。 文件导航器中的文件和文件夹现在可以通过双击或使用上下文菜单重命名,按 Enter 确认,按 Escape 取消。提交
- 🧭 文件导航器导航历史。 文件导航器工具栏现在包含 “后退” 和 “前进” 按钮,用于浏览文件夹和文件历史记录,类似于 Web 浏览器。提交
- 🗑️ 删除连接确认。 用户现在在删除连接之前会收到确认对话框,防止意外删除。提交
- 📦 文档加载器回退。 即使未安装
unstructured包,Excel 和 PowerPoint 文件现在也可以使用 pandas 和 python-pptx 作为回退加载器进行处理。提交 - 🧠 内存管理搜索和排序。 用户现在可以在内存管理模态框中搜索和排序其个人记忆,更轻松地找到特定记忆。提交
- 📦 SBOM 生成脚本。 用于生成 CycloneDX 软件物料清单的新脚本现在可在 scripts 目录中使用。提交
- ⚙️ Ruff 代码检查和格式化。 添加了 Ruff 作为 Python 代码检查和格式化工具,取代了基于 black 的工作流程,以实现更好的代码质量且执行近乎即时。#22576,#22462
- 🖥️ 离线代码格式化支持。 用于 Python 代码编辑的 black 格式化器现在打包在 Docker 镜像中,使代码格式化可以在客户端浏览器无法访问 PyPI 的气隙部署中工作。格式化失败不再阻止保存,允许在离线时保留代码。#22509,提交
- ✏️ Markdown 文件编辑。 用户现在可以在文件导航器中直接编辑和保存 Markdown 文件,空文件会自动切换到编辑器模式以便立即编辑。提交
- 🍔 模型批量操作菜单。 用户现在可以使用工作区模型页面筛选栏上的新汉堡菜单快速启用、禁用、显示或隐藏多个模型,操作会尊重当前搜索和筛选设置。#22484
- 📂 文件列表分页。 文件列表 API 现在支持分页,返回分页结果和总数,便于浏览大型文件集合。提交
- 🖇 Web 获取内容长度配置。 管理员现在可以通过
WEB_FETCH_MAX_CONTENT_LENGTH环境变量或管理员设置页面配置从获取的 URL 返回的最大字符数,而不是之前硬编码的 50K 限制。提交,#22774 - 🤖 Ollama Anthropic 端点支持。 Ollama 代理现在支持兼容 Anthropic 的
/v1/messages端点,允许使用 Anthropic API 格式的客户端通过 Open WebUI 进行适当的身份验证和模型访问控制。提交,#22861 - 📝 书写块渲染。 来自 OpenAI 模型的包含
:::writing块的响应现在渲染为格式化内容,放在带样式的容器中并带有复制按钮,而不是显示原始标记文本。#22672,提交 - 💡 内存删除确认。 用户现在在删除单个内存条目之前会被要求确认,并显示内存内容以供审查。#22888
- 📓 多构件 HTML 渲染。 具有多个 HTML 部分的代码块现在作为单独的构件渲染,而不是合并为一个,允许模型显示不同的交互式组件。提交
- 🚩 拖拽聊天作为引用。 用户现在可以从侧边栏拖拽聊天并将其放入消息输入框,以将其添加为参考聊天。提交
- ⌨️ 终端系统提示。 终端服务器现在可以提供自定义系统提示,当使用其工具时会自动包含这些提示。提交
- 💾 终端状态持久性。 选定的终端服务器及其启用状态现在跨页面加载持久化,使终端使用更无缝。提交
- 💾 终端文件夹下载。 用户现在可以直接从文件导航器工具栏将文件夹下载为 ZIP 归档文件,并将多个选定文件批量下载为单个 ZIP,使文件导出更快更方便。提交,提交
- 🔐 MCP OAuth 2.1 静态凭据。 需要静态
client_id和client_secret的 MCP 服务器现在可以使用新的 OAuth 2.1 Static 身份验证类型连接,支持不支持动态客户端注册的 MCP 服务器集成。#22266,提交 - 🎪 可折叠工具和思考组。 连续的工具调用和推理块现在分组为单个可折叠摘要(例如 “探索了 tool1, tool2”),保持聊天响应干净易读,同时展开时保留完整详细信息。#21604,提交
- 🔄 常规改进。 在应用程序中实施了各种改进以增强性能、稳定性和安全性。
- 🌐 芬兰语、葡萄牙语(葡萄牙)、加泰罗尼亚语、土耳其语、日语、简体中文、繁体中文、爱沙尼亚语、西班牙语、阿塞拜疆语和德语的翻译得到增强和扩展。
修复
- 🔒 模型访问控制绕过。 修复了一个安全漏洞,外部客户端可以通过设置 URL 参数绕过模型访问控制,防止对受限模型的未授权访问。提交
- 🛡️ 终端代理路径清理。 终端服务器代理现在可以正确清理路径,防止目录遍历和 SSRF 攻击,保护安全漏洞。提交
- 🛡️ 工具配置访问控制。 工具配置端点现在可以正确验证用户权限,防止对工具设置的未授权访问。提交
- 🗝️ 工具阀门访问控制。 工具用户阀门端点现在在返回或更新配置之前可以正确验证所有权和访问权限,对缺失工具返回适当的 404 响应,对未授权访问返回 401。提交
- 🔐 协作文档授权。 修复了协作文档中的一个安全漏洞,授权可以使用替代文档 ID 格式绕过,防止对笔记的未授权访问。提交
- 🔏 OAuth 会话持久性。 通过 OAuth 或 OIDC 提供程序登录的用户现在会保持登录状态,持续时间为配置的 JWT 有效期,而不是在关闭浏览器时登出。#22809
- 🚪 OAuth sub 声明配置崩溃。 使用
OAUTH_SUB_CLAIM环境变量不再导致令牌交换请求期间崩溃,修复了缺失的配置注册。#22865 - 🔍 OAuth 发现头解析。 OAuth 受保护资源发现现在可以正确处理
WWW-Authenticate头中的带引号和不带引号的值,修复了与返回不带引号元数据的 MCP 服务器的兼容性问题。#22646,提交 - 👤 管理员 OAuth 组同步。 来自 OAuth 和 LDAP 提供程序的管理员用户组成员资格现在可以正确同步到 Open WebUI,修复了管理员角色排除用户组更新的限制。#22537,提交
- 🎫 密码更改复杂性验证。 用户更改密码时现在会正确强制执行密码复杂性规则,堵住了新密码可能绕过配置复杂性要求的安全缺口。提交
- 🔏 OAuth 角色强制。 当用户的角色不匹配任何配置的
OAUTH_ALLOWED_ROLES或OAUTH_ADMIN_ROLES时,OAuth 角色管理现在会正确拒绝访问,而不是静默绕过限制。#13676,#15551,提交 - 🔑 Microsoft Entra ID 角色声明保留。 来自 Microsoft Entra ID 令牌的角色声明现在在 OAuth 登录期间被保留,修复了 Microsoft OAuth 的
ENABLE_OAUTH_ROLE_MANAGEMENT,之前因 userinfo 端点剥离角色声明而被忽略。#20518,提交 - 🔍 SCIM 组筛选。 SCIM 端点现在在从 Microsoft Entra ID 等身份提供商配置组时可以正确处理
displayName和externalId筛选器,防止返回所有组而不是筛选的子集。#21543 - 🔐 转发允许 IP 配置。
FORWARDED_ALLOW_IPS环境变量现在被启动脚本正确尊重,而不是硬编码为'\\*',允许管理员限制哪些代理被信任用于请求转发。#22539,提交 - 🍪 模型列表认证 Cookie 转发。 对需要基于 Cookie 认证的后端的模型列表请求现在可以正确转发认证头和 Cookie,防止加载模型时出现 “Unauthorized” 错误。提交
- 🔱 模型查找竞争条件。 修复了 Redis 模型存储中的竞争条件,该条件在高负载下多副本部署中导致间歇性 “model not found” 错误,通过消除哈希删除和更新之间的时间窗口。提交
- 🎚️ 批量模型操作可靠性。 管理员模型设置中的批量启用、禁用、显示和隐藏操作现在完成后会正确刷新模型列表,确保更改立即反映并显示正确的通知。#22962,提交,提交
- 🔄 分页列表重复项。 修复了在聊天、知识库、笔记和搜索中加载更多项目时分页列表中出现重复项的问题。提交
- 🧽 重复聊天列表刷新。 发送消息不再触发重复的侧边栏聊天列表刷新,消除了不必要的数据库查询,该查询已由保存和完成处理程序处理。#22982
- 🧹 聊天历史保存优化。 聊天历史记录保存、分支导航或编辑时不再刷新聊天列表 — 仅在新聊天创建、标题生成和响应完成等有意义的状态更改时刷新。#22983
- 💬 消息队列响应性。 消息队列不再等待后台任务(如标题生成和后续建议)完成,允许用户在响应完成后立即发送新消息而无需不必要的延迟。提交,#22565
- 🗄️ 迁移可靠性。 当聊天数据具有意外格式时,数据库迁移不再失败,使升级更可靠。#22588,#22568
- 🫧 内存模态事件冒泡。 修复了在内存管理模态框中单击 “删除” 按钮也会由于事件冒泡打开 “编辑内存” 模态框的问题。#22783
- 🧩 内存工具注册。 具有
capabilities.memory: true的模型现在正确拥有可用于执行的内存工具,修复了add_memory出现在工具模式中但未在后端执行中注册的重试循环。#22666,#22675,提交 - 📝 输入变量模态框崩溃。 修复了选择带有提示变量的自定义提示时发生的崩溃,该崩溃导致输入变量模态框显示无限加载微光而不是变量输入字段。#22748,提交
- 🪛 函数列表 API 崩溃修复。 修复了最近优化引入的函数列表 API 端点上的 500 错误,为 SQLAlchemy ORM 对象添加了正确的模型配置。#22924
- 🗂️ 侧边栏聊天菜单关闭。 侧边栏聊天下拉菜单现在在单击 “克隆”、“共享”、“下载”、“重命名”、“固定”、“移动”、“归档” 或 “删除” 后正确关闭,而不是保持可见。#22884,#22784
- 🧭 聊天删除和归档重定向。 用户现在在删除或归档当前活动的聊天时会被重定向到聊天列表,而不是停留在过期的聊天页面上。#22755
- 🚩 用户菜单导航修复。 从用户菜单单击 Playground 或管理员面板现在使用客户端路由,而不是导致完整页面重新加载,恢复平滑的 SPA 导航。提交
- 🔧 工具服务器连接持久性。 修复了工具服务器连接更新未保存到持久存储的错误,确保 OAuth 客户端信息现在被正确保留。提交
- 🔩 工具服务器索引边界检查。 具有无效索引的工具服务器在升级后不再导致应用程序出现 IndexError 崩溃,防止工具服务器配置丢失。#22490,提交
- 🔌 工具服务器前端超时。 对外部工具服务器的获取请求现在在 10 秒后超时,防止当配置的工具服务器不可达时 UI 无限期挂起。#22543,提交
- 🔌 MCP OAuth 工具自动选择。 需要 OAuth 认证的 MCP 工具现在在完成身份验证流程后会自动重新选择,而不是让用户在返回聊天后手动重新启用工具。#22994,#22995,提交
- 🏷️ 频道 @提及。 直接连接模型不再出现在频道 @提及建议中,防止混淆,因为它们在频道中不工作。#22553,提交
- 📎 频道消息附件。 用户现在可以在频道、直接消息和线程中仅使用文件或图像附件按 Enter 发送消息,与发送按钮的行为一致。#22752
- 🗣️ 仅图像消息处理。 当收到仅包含文件或图像附件而没有文本的消息时,Gemini 和 Claude 等模型不再失败,通过在发送到 API 之前剥离空文本内容块。提交,#22880
- 🧹 频道线程侧边栏清理。 频道和直接消息中的线程侧边栏现在在父消息被删除时自动关闭,防止出现孤立的线程。#22890
- 💡 聊天输入建议模态框。 标签、提及和命令的建议模态框现在在退回到触发字符后可以正确重新出现,即使之前已被关闭。#22899
- ⏱️ 聊天操作按钮时机。 助手消息下的操作按钮不再在切换聊天时过早出现,即使响应仍在流式传输。提交,#22891
- 💬 技能和模型提及持久性。 在聊天输入中通过
$选择的技能和通过@选择的模型现在可以在页面刷新后正确恢复,而不是恢复为纯文本同时丢失其交互状态。#22913,提交 - 🧹 Webhook 配置文件图像错误。 修复了在滚动通过由 webhook 发送的频道消息时浏览器控制台中出现的 404 错误,通过跳过 webhook 发送者的用户配置文件预览。#22893
- 🧮 日志偏差参数处理。 当输入已经是字典格式时,使用
logit_bias参数不再导致错误。#22597,提交 - 🪛 临时聊天工具调用。 临时聊天现在可以正确保留工具调用信息,修复了之前损坏的具有 JSON 模式的本机工具调用。#22475,提交
- 🔗 多系统消息合并。 具有严格聊天模板(如 Qwen)的模型在多个管道阶段注入单独的系统消息时不再失败,因为所有系统消息现在都在开头合并为一个。#22505,提交
- 📜 公共笔记访问。 通过直接共享链接打开公共笔记不再返回 500 错误,该错误由缺失的函数导入引起。#22680,提交
- 👤 终端访问用户可见性。 终端连接访问对话框现在在搜索要授予访问权限的用户时显示当前登录的用户,修复了显示名称相同的用户被错误筛选的问题。#22491,提交
- 👥 用户组显示。 管理员面板配置文件预览中的用户组现在可以正确换行,而不是水平溢出,列表较长时显示滚动条。#22547
- 🔧 模型列表拖放。 修复了管理员设置中模型的拖放重新排序,防止 UI 故障和状态同步问题。提交
- 🖼️ 模型配置文件图像回退。 模型配置文件图像在加载失败时现在显示回退图标,模型图标不再在管理员和工作区设置的分页模型页面上消失。#22485
- 🖼️ 配置文件图像回退。 在聊天界面中为模型和用户配置文件图像添加了回退处理程序,防止头像加载失败时出现损坏的图像图标。#22486
- 🧲 RAG 思考模型支持。 知识库查询现在可以正确解析来自 GLM-5 和 DeepSeek-R1 等思考模型的 JSON 响应,通过在 JSON 提取之前剥离其推理块。#22400
- 🔍 RAG 查询生成健壮性。 RAG 查询生成、网络搜索和图像生成处理程序现在可以正确地从包含思考标签的模型响应中提取 JSON,通过查找最后一个 JSON 块而不是第一个,防止思考模型出现 “No sources found” 错误。#21888,提交
- 🔍 Ollama 嵌入健壮性。 Ollama 嵌入请求现在包含
truncate参数以处理超过上下文窗口的输入,防止处理长文档时出现 500 错误。来自失败嵌入请求的错误消息现在也被正确显示,而不是被静默忽略。#22671,提交 - 🔄 Ollama 嵌入重试逻辑。 对 Ollama 的嵌入请求现在在遇到 503 错误(例如模型在处理过程中重新加载)时会使用指数退避进行重试,防止文件从知识库中被静默丢弃。#22571,提交
- 🗄️ Oracle 23AI 混合搜索。 修复了在使用 Oracle 23AI 作为向量存储进行混合搜索时发生的
UnboundLocalError,防止知识库查询失败。提交,#22616 - 🧩 MCP 集成可见性。 MCP(可流式 HTTP)集成现在对用户级设置隐藏,符合仅管理员可以通过管理员面板配置 MCP 连接的预期行为。用户级连接现在显示连接类型为只读。#22615,提交
- 🌐 动态 HTML 语言属性。 当用户更改其界面语言时,HTML
lang属性现在会动态更新,防止浏览器触发不需要的翻译弹出窗口。提交 - 📐 文件上传去重。 附加已在聊天中的文件不再触发重复上传。提交
- 🕵️ Serper.dev 搜索结果。 修复了使用 Serper.dev 提供程序时网络搜索结果显示不正确的问题,通过使用正确的 API 响应字段。#22869
- 🔲 Markdown 任务列表复选框样式。 修复了 Markdown 渲染中的任务列表复选框,使其在窄布局中一致显示而不缩小。#22886
- 🎨 构件侧边栏标签背景修复。 切换回后台浏览器标签页时,构件侧边栏现在可以正确更新和显示,确保构件可见而无需手动刷新。#22889
- 🔃 聊天输入 URL 索引修复。 修复了在使用多个触发器后退格并重新输入 URL 时 URL 可能被索引两次的问题。#22749
- 🔎 搜索模态聊天预览头像。 修复了搜索模态的聊天预览窗格中未显示助手配置文件图像的问题。#22782
- 📋 提示搜索分页修复。 修复了一个错误,从分页页面搜索提示会错误地使用当前页码,即使存在匹配结果也导致 “No prompts found”。#22912
- 🗂️ 推理块复制清理。 复制的聊天响应不再包含推理块内容或多余空格,确保仅捕获预期的消息文本。#22786,提交
- 🔤 用于文本规范化的表情符号移除。 修复了搜索和标题生成中使用的表情符号移除函数,以正确处理所有类型的表情符号,包括带有变体选择器(❤️、☀️、✅)、按键帽序列(1️⃣)和 ZWJ 家庭序列(👨👩👧👦)的表情符号。#22915
- ⏹️ 任务取消状态跟踪。 取消的任务现在正确地仅将受影响的消息标记为完成,而不是清除聊天的所有任务状态,确保在多个消息有挂起任务时正确跟踪状态。#22743
- 🎨 筛选器图标显示修复。 修复了在聊天输入下方移除多个活动筛选器之一后筛选器图标显示错误图标的问题。#22862
- 📊 频道消息数据加载。 修复了渲染频道消息时发生的冗余 404 API 调用,防止不必要的请求和控制台错误。#22894
- 👻 响应消息骨架显示。 修复了骨架加载器根据复杂状态历史条件错误显示或隐藏的问题,通过将可见性逻辑提取到更清晰的响应式变量中。提交
- 🐛 共享聊天查看崩溃。 共享聊天现在可以由未认证用户查看而不会崩溃,对缺失的用户配置文件信息有适当的回退处理。#22751,#22742
- 🛠️ 插件 ID 清理。 创建在名称中包含表情符号或特殊字符的函数或工具现在会生成通过后端验证的有效 ID,而不是因错误而失败。#22695
- 📋 聊天标题保留。 当禁用自动命名时,重新生成响应或使用分支不再覆盖用户指定的聊天标题,通过检查完整的聊天消息计数而不是仅当前分支。#22754
- 🎧 聊天预览中的朗读。 搜索聊天模态预览中的朗读按钮不再导致崩溃,TTS 功能现在在只读聊天上下文中被正确隐藏。提交
- 📡 心跳事件循环阻塞。 WebSocket 心跳处理程序在更新用户活动时不再阻塞事件循环,提高在许多并发连接高负载下的响应性。#22980
- 🗝️ 消息 upsert API 可靠性。 消息 upsert API 端点在调用时不再崩溃,修复了错误地将数据库会话传递给不接受它的函数的错误。#22959,提交
- 🔓 转发认证代理兼容性。 修复了使用认证反向代理时可能出现的错误页面,通过正确处理后台 API 请求的 401 响应,允许浏览器使用身份提供商重新进行身份验证。#22942
- 🔃 工具调用流式显示。 顺序工具调用现在在流式传输期间被正确累积,修复了已完成的工具调用在下一个工具调用完成流式传输之前可能从显示中消失的问题。提交
- 🧠 推理微光内容保留。 在工具执行后响应时,之前的助手内容和工具调用块不再在推理微光中消失。#23001
- 🖥️ Pyodide 文件列表刷新。 在手动代码执行期间创建或修改的文件现在会立即出现在 pyodide 文件列表中,无需刷新浏览器标签页。提交
- 🖱️ 下拉子菜单悬停稳定性。 次要悬停菜单(如 “下载” 和 “移动”)现在在导航进入时保持打开状态,修复了触发器和子菜单之间 8px 间隙导致菜单在可以选择之前消失的问题。#22744,提交
- 📊 模型标签规范化。 来自后端以字符串数组返回的模型标签现在被正确规范化为对象格式,防止在管理员和工作区模型页面中按标签筛选模型时崩溃。#20819,提交
- 🎯 竞技场模型子模型设置。 竞技场模型现在正确使用所选子模型的设置 — 包括 RAG 知识库、Web 访问、代码解释器和工具功能 — 而不是竞技场包装器的空默认值。#16950,提交
- 🧩 模型编辑器默认元数据。 模型编辑器现在加载管理员配置的默认模型元数据,而不是硬编码值,防止管理员默认值在用户保存模型时未意识到他们覆盖系统范围设置而被静默覆盖。#22996,提交
- ✏️ 富文本粘贴清理。 复制和粘贴包含 HTML 字符(如
<或>)的文本不再损坏编辑器内容,因为粘贴处理程序现在在处理提及和特殊语法之前正确转义 HTML 实体。提交
变更
- 🪝 用户 webhook 默认禁用。 用户 webhook 通知现在默认禁用,并由
ENABLE_USER_WEBHOOKS配置正确控制,确保 webhook 仅在明确启用时触发。提交 - 🧲 网络搜索结果限制。 配置的网络搜索结果数量现在作为最大限制,防止模型请求超过管理员允许的结果数。#22577
更新内容 (原始)
Added
- 🔀 Responses API streaming improvements. The OpenAI proxy now properly handles tool call streaming and re-invocations in the Responses API, preventing duplicate tool calls and preserving output during model re-invocations. Commit, Commit, Commit, Commit
- 🔀 Responses API stateful sessions. Administrators can now enable experimental stateful session support via the ENABLE_RESPONSES_API_STATEFUL environment variable, allowing compatible backends to store responses server-side with previous_response_id anchoring for improved multi-turn conversations. Commit
- 📄 File viewing pagination. The view_file and view_knowledge_file tools now support pagination with offset and max_chars parameters, allowing models to read large files in chunks. Commit
- 🗺️ Knowledge search scoping. The search_knowledge_files tool now respects model-attached knowledge, searching only within attached knowledge bases and files when available. Commit
- 🛠️ Tool HTML embed context. Tools can now return custom context alongside HTML embeds by using a tuple format, providing the LLM with actionable information instead of a generic message. #22691
- 🔒 Trusted role header configuration. Administrators can now configure the WEBUI_AUTH_TRUSTED_ROLE_HEADER environment variable to set user roles (admin, user, or pending) via a trusted header from their identity provider or reverse proxy. #22523
- 🔑 OIDC authorization parameter injection. Administrators can now inject extra parameters into the OIDC authorization redirect URL via the OAUTH_AUTHORIZE_PARAMS environment variable, enabling IdP pre-selection for brokers like CILogon and Keycloak. #22863, Commit
- 🔑 Google OAuth session persistence. Administrators can now configure Google OAuth to issue refresh tokens via the GOOGLE_OAUTH_AUTHORIZE_PARAMS environment variable, preventing OAuth sessions from expiring after one hour and ensuring tools and integrations that rely on OAuth tokens remain functional. #22652
- 🔌 Embed prompt confirmation. Interactive tool embeds can now submit prompts to the chat without requiring same-origin access, showing a confirmation dialog for cross-origin requests to prevent abuse. #22908
- 🏮 Tool binary response handling. Tool servers can now return binary data such as images, which are properly processed and displayed in chat for both multimodal and non-multimodal models. Commit, Commit
- ⚡ Svelte upgrade performance. Page and markdown rendering are now approximately 25% faster across the board, with significantly less memory usage for smoother UI interactions. #22611
- 🧩 Model and filter lookup optimization. Model and filter membership lookups are now faster thanks to optimized data structure operations during model list loading. Commit
- 💨 Chat render throttling. Chat message rendering now uses requestAnimationFrame batching to stay smooth during rapid model responses, preventing dropped frames when fast models send many events per second. #22947
- 🚀 Function list API optimization. The functions list API now returns only essential metadata without function source code, reducing payload sizes by over 99% and making the Functions admin page load significantly faster. #22788
- ✨ Smoother loading animation. The loading shimmer animation now looks smoother and more natural, with softer highlight colors. #22516
- 🧪 Terminal connection verification. Users can now verify their terminal server connection is working before saving the configuration, making setup more reliable. #22567
- 📁 Chat folder emoji reset. Users can now reset chat folder emojis back to the default icon using a “Reset to Default” button in the emoji picker, making it easier to revert custom icons. #22554
- 📊 Metrics export interval configuration. Administrators can now control OpenTelemetry metrics export frequency via the OTEL_METRICS_EXPORT_INTERVAL_MILLIS environment variable, enabling cost optimization for metrics services like Grafana Cloud. #22529
- 🏥 Readiness probe endpoint. A new /ready endpoint is now available for Kubernetes deployments, returning 200 only after startup completes and database/Redis are reachable, enabling more reliable container orchestration. #22507
- 🔩 Tool server timeout configuration. Administrators can now configure a separate HTTP timeout for tool server requests via the AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER environment variable, enabling fine-tuned control over how long tool calls are allowed to take. Commit
- 📌 Knowledge file previews. Knowledge base files can now be opened in a new tab directly from the file list, making it easier to view content without downloading. #22629
- 🎯 Knowledge tool hybrid search support. The built-in query_knowledge_files tool now respects hybrid search and reranking settings, matching the behavior of the middleware RAG pipeline. Commit
- 🗣️ Temporary chat folder support. Temporary chats can now use folder-level system prompts and knowledge files, making them more powerful for quick explorations. Commit
- 📡 Terminal port previews. Detected ports in the File Navigator can now be previewed inline with a browser-style view, navigation controls, and an address bar, instead of only opening in a new tab. Commit, Commit
- ✏️ File renaming. Files and folders in the File Navigator can now be renamed by double-clicking or using the context menu, with Enter to confirm and Escape to cancel. Commit
- 🧭 File Navigator navigation history. The File Navigator toolbar now includes Back and Forward buttons for navigating through folder and file history, similar to a web browser. Commit
- 🗑️ Delete connection confirmations. Users are now prompted with a confirmation dialog before deleting connections, preventing accidental deletions. Commit
- 📦 Document loader fallbacks. Excel and PowerPoint files can now be processed even when the unstructured package is not installed, using pandas and python-pptx as fallback loaders. Commit
- 🧠 Memory management search and sort. Users can now search and sort their personal memories in the Memory management modal, making it easier to find specific memories. Commit
- 📦 SBOM generation script. A new script for generating CycloneDX Software Bill of Materials is now available in the scripts directory. Commit
- ⚙️ Ruff linter and formatter. Added Ruff as the Python linter and formatter, replacing the black-based workflow for better code quality with near-instant execution. #22576, #22462
- 🖥️ Offline code formatting support. The black formatter for Python code editing is now bundled locally in the Docker image, enabling code formatting to work in air-gapped deployments where client browsers cannot reach PyPI. Formatting failures no longer block saves, allowing code to be preserved even when offline. #22509, Commit
- ✏️ Markdown file editing. Users can now edit and save Markdown files directly in the file navigator, with empty files automatically switching to editor mode for immediate editing. Commit
- 🍔 Model bulk actions menu. Users can now quickly enable, disable, show, or hide multiple models at once using a new hamburger menu on the workspace Models page filter bar, with actions respecting the current search and filter settings. #22484
- 📂 Files list pagination. The files list API now supports pagination, returning paginated results with a total count for easier navigation through large file collections. Commit
- 🖇 Web fetch content length config. Administrators can now configure the maximum characters to return from fetched URLs via WEB_FETCH_MAX_CONTENT_LENGTH environment variable or the admin settings page, instead of the previous hardcoded 50K limit. Commit, #22774
- 🤖 Ollama Anthropic endpoint support. The Ollama proxy now supports the Anthropic-compatible /v1/messages endpoint, allowing clients using the Anthropic API format to work through Open WebUI with proper authentication and model access controls. Commit, #22861
- 📝 Writing block rendering. Responses from OpenAI models that include :::writing blocks are now rendered as formatted content in a styled container with a copy button, instead of displaying raw marker text. #22672, Commit
- 💡 Memory deletion confirmation. Users are now asked to confirm before deleting individual memory entries, with the memory content displayed for review. #22888
- 📓 Multi-artifact HTML rendering. Code blocks with multiple HTML sections now render as separate artifacts instead of merging into one, allowing models to display distinct interactive components. Commit
- 🚩 Drag chats as references. Users can now drag chats from the sidebar and drop them into the message input to add them as Reference Chats. Commit
- ⌨️ Terminal system prompts. Terminal servers can now provide custom system prompts that are automatically included when their tools are used. Commit
- 💾 Terminal state persistence. The selected terminal server and its enabled state now persist across page loads, making terminal usage more seamless. Commit
- 💾 Terminal folder downloads. Users can now download folders as ZIP archives and bulk-download multiple selected files as a single ZIP directly from the File Navigator toolbar, making file exports faster and more convenient. Commit, Commit
- 🔐 MCP OAuth 2.1 static credentials. MCP servers that require static client_id and client_secret can now be connected using a new OAuth 2.1 Static auth type, enabling integration with MCP servers that don’t support dynamic client registration. #22266, Commit
- 🎪 Collapsible tool and thinking groups. Consecutive tool calls and reasoning blocks are now grouped into a single collapsible summary (e.g., “Explored tool1, tool2”), keeping chat responses clean and readable while preserving full detail on expand. #21604, Commit
- 🔄 General improvements. Various improvements were implemented across the application to enhance performance, stability, and security.
- 🌐 Translations for Finnish, Portuguese (Portugal), Catalan, Turkish, Japanese, Simplified Chinese, Traditional Chinese, Estonian, Spanish, Azerbaijani, and German were enhanced and expanded.
Fixed
- 🔒 Model access control bypass. Fixed a security vulnerability where external clients could bypass model access controls by setting a URL parameter, preventing unauthorized access to restricted models. Commit
- 🛡️ Terminal proxy path sanitization. The terminal server proxy now properly sanitizes paths to prevent directory traversal and SSRF attacks, protecting against security vulnerabilities. Commit
- 🛡️ Tool configuration access control. Tool configuration endpoints now properly verify user permissions, preventing unauthorized access to tool settings. Commit
- 🗝️ Tool valves access control. The tool user valves endpoints now properly verify ownership and access grants before returning or updating configuration, with appropriate 404 responses for missing tools and 401 for unauthorized access. Commit
- 🔐 Collaborative document authorization. Fixed a security vulnerability in collaborative documents where authorization could be bypassed using alternative document ID formats, preventing unauthorized access to notes. Commit
- 🔏 OAuth session persistence. Users logging in via OAuth or OIDC providers now stay logged in for the configured JWT expiry duration instead of being logged out when closing the browser. #22809
- 🚪 OAuth sub claim configuration crash. Using the OAUTH_SUB_CLAIM environment variable no longer causes crashes during token exchange requests, fixing a missing configuration registration. #22865
- 🔍 OAuth discovery header parsing. The OAuth protected resource discovery now correctly handles both quoted and unquoted values in the WWW-Authenticate header, fixing compatibility with MCP servers that return unquoted metadata. #22646, Commit
- 👤 Admin OAuth group sync. Admin user group memberships from OAuth and LDAP providers are now properly synced to Open WebUI, fixing a limitation where admin role excluded users from group updates. #22537, Commit
- 🎫 Password change complexity validation. Password complexity rules are now properly enforced when users change their password, closing a security gap where new passwords could bypass configured complexity requirements. Commit
- 🔏 OAuth role enforcement. OAuth role management now properly denies access when a user’s roles don’t match any configured OAUTH_ALLOWED_ROLES or OAUTH_ADMIN_ROLES, instead of silently bypassing the restriction. #13676, #15551, Commit
- 🔑 Microsoft Entra ID role claim preservation. Role claims from Microsoft Entra ID tokens are now preserved during OAuth login, fixing ENABLE_OAUTH_ROLE_MANAGEMENT for Microsoft OAuth which was previously ignored because the userinfo endpoint stripped the roles claim. #20518, Commit
- 🔍 SCIM group filtering. The SCIM endpoint now properly handles displayName and externalId filters when provisioning groups from identity providers like Microsoft Entra ID, preventing all groups from being returned instead of the filtered subset. #21543
- 🔐 Forwarded allow IPs configuration. The FORWARDED_ALLOW_IPS environment variable is now properly respected by the startup scripts instead of being hardcoded to ‘*’, allowing administrators to restrict which proxies are trusted for request forwarding. #22539, Commit
- 🍪 Model list auth cookie forwarding. Model list requests to backends that require cookie-based authentication now properly forward auth headers and cookies, preventing “Unauthorized” errors when loading models. Commit
- 🔱 Model lookup race condition. Fixed a race condition in Redis model storage that caused intermittent “model not found” errors in multi-replica deployments under heavy load, by eliminating the window between hash deletion and updates. Commit
- 🎚️ Bulk model action reliability. Bulk enable, disable, show, and hide operations in the admin Models settings now properly refresh the model list after completion, ensuring changes are reflected immediately and correct toast notifications are shown. #22962, Commit, Commit
- 🔄 Paginated list duplicates. Fixed duplicate items appearing in paginated lists when loading more items in chats, knowledge, notes, and search across the UI. Commit
- 🧽 Duplicate chat list refresh. Sending messages no longer triggers duplicate sidebar chat list refreshes, eliminating an unnecessary database query that was already handled by the save and completion handlers. #22982
- 🧹 Chat history save optimization. The chat list is no longer refreshed on every chat history save, branch navigation, or edit — only on meaningful state changes like new chat creation, title generation, and response completion. #22983
- 💬 Message queue responsiveness. The message queue no longer waits for background tasks like title generation and follow-up suggestions to complete, allowing users to send new messages immediately after a response finishes without unnecessary delays. Commit, #22565
- 🗄️ Migration reliability. Database migrations no longer fail when chat data has unexpected format, making upgrades more reliable. #22588, #22568
- 🫧 Memory modal event bubbling. Fixed an issue where clicking the Delete button in the Memory management modal would also open the Edit Memory modal due to event bubbling. #22783
- 🧩 Memory tool registration. Models with capabilities.memory: true now correctly have memory tools available for execution, fixing a retry loop where add_memory appeared in the tool schema but was not registered for backend execution. #22666, #22675, Commit
- 📝 Input variables modal crash. Fixed a crash that occurred when selecting custom prompts with prompt variables, causing the Input Variables modal to display an infinite loading spinner instead of the variable input fields. #22748, Commit
- 🪛 Function list API crash fix. Fixed a 500 error on the functions list API endpoint that was introduced by the recent optimization, by adding proper model configuration for SQLAlchemy ORM objects. #22924
- 🗂️ Sidebar chat menu closure. Sidebar chat dropdown menus now close properly after clicking “Clone”, “Share”, “Download”, “Rename”, “Pin”, “Move”, “Archive”, or “Delete”, instead of remaining visible. #22884, #22784
- 🧭 Chat deletion and archive redirection. Users are now redirected to the chat list when deleting or archiving the currently active chat, instead of being left on a stale chat page. #22755
- 🚩 User menu navigation fix. Clicking Playground or Admin Panel from the user menu now uses client-side routing instead of causing full page reloads, restoring smooth SPA navigation. Commit
- 🔧 Tool server connection persistence. Fixed a bug where tool server connection updates were not being saved to persistent storage, ensuring OAuth client information is now properly preserved. Commit
- 🔩 Tool server index bounds checking. Tool servers with invalid indices no longer crash the application with IndexError after upgrades, preventing tool server configuration loss. #22490, Commit
- 🔌 Tool server frontend timeout. Fetch requests to external tool servers now time out after 10 seconds, preventing the UI from hanging indefinitely when a configured tool server is unreachable. #22543, Commit
- 🔌 MCP OAuth tool auto-selection. MCP tools requiring OAuth authentication are now automatically re-selected after completing the auth flow, instead of leaving users to manually re-enable the tool on return to the chat. #22994, #22995, Commit
- 🏷️ Channel @mentions. Direct connection models no longer appear in channel @mention suggestions, preventing confusion since they don’t work in channels. #22553, Commit
- 📎 Channel message attachments. Users can now press Enter to send messages with only file or image attachments in channels, direct messages, and threads, aligning with the behavior of the Send button. #22752
- 🗣️ Image-only message handling. Models like Gemini and Claude no longer fail when receiving messages with only file or image attachments and no text, by stripping empty text content blocks before sending to the API. Commit, #22880
- 🧹 Channel thread sidebar cleanup. The thread sidebar in channels and direct messages now automatically closes when the parent message is deleted, preventing orphaned threads. #22890
- 💡 Chat input suggestion modal. The suggestion modal for tags, mentions, and commands now correctly reappears when backspacing into a trigger character after it was dismissed. #22899
- ⏱️ Chat action button timing. Action buttons under assistant messages no longer appear prematurely when switching chats while a response is still streaming. Commit, #22891
- 💬 Skill and model mention persistence. Skills selected via $ and models selected via @ in the chat input are now properly restored after a page refresh, instead of reverting to plain text while losing their interactive state. #22913, Commit
- 🧹 Webhook profile image errors. Fixed 404 errors appearing in the browser console when scrolling through channel messages sent by webhooks, by skipping the user profile preview for webhook senders. #22893
- 🧮 Logit bias parameter handling. Using logit_bias parameters no longer causes errors when the input is already in dictionary format. #22597, Commit
- 🪛 Temp chat tool calling. Temporary chats now properly preserve tool call information, fixing native tool calling with JSON schema that was previously broken. #22475, Commit
- 🔗 Multi-system message merging. Models with strict chat templates like Qwen no longer fail when multiple pipeline stages inject separate system messages, as all system messages are now merged into one at the start. #22505, Commit
- 📜 Public note access. Opening public notes via direct share link no longer returns a 500 error caused by a missing function import. #22680, Commit
- 👤 Terminal access user visibility. The terminal connection access dialog now shows the currently logged-in user when searching for users to grant access, fixing an issue where users with identical display names were filtered incorrectly. #22491, Commit
- 👥 User groups display. User groups in the admin panel profile preview now wrap properly instead of overflowing horizontally, with a scrollbar when the list is long. #22547
- 🔧 Model list drag-and-drop. Fixed drag-and-drop reordering of models in admin settings, preventing UI glitches and state synchronization issues. Commit
- 🖼️ Model profile image fallbacks. Model profile images now display a fallback icon when they fail to load, and model icons no longer disappear on paginated Models pages in admin and workspace settings. #22485
- 🖼️ Profile image fallbacks. Added fallback handlers for model and user profile images throughout the chat interface, preventing broken image icons when avatars fail to load. #22486
- 🧲 RAG thinking model support. Knowledge base queries now correctly parse JSON responses from thinking models like GLM-5 and DeepSeek-R1 by stripping their reasoning blocks before JSON extraction. #22400
- 🔍 RAG query generation robustness. The RAG query generation, web search, and image generation handlers now correctly extract JSON from model responses containing thinking tags by finding the last JSON block instead of the first, preventing “No sources found” errors with thinking models. #21888, Commit
- 🔍 Ollama embedding robustness. Ollama embedding requests now include the truncate parameter to handle inputs exceeding the context window, preventing 500 errors when processing long documents. Error messages from failed embedding requests are also now properly surfaced instead of being silently swallowed. #22671, Commit
- 🔄 Ollama embedding retry logic. Embedding requests to Ollama now retry with exponential backoff when encountering 503 errors (such as when the model reloads mid-processing), preventing files from being silently dropped from knowledge bases. #22571, Commit
- 🗄️ Oracle 23AI hybrid search. Fixed an UnboundLocalError that occurred when using hybrid search with Oracle 23AI as the vector store, preventing knowledge base queries from failing. Commit, #22616
- 🧩 MCP integration visibility. MCP (Streamable HTTP) integrations are now hidden from user-level settings, matching the intended behavior where only administrators can configure MCP connections through the admin panel. User-level connections now show the connection type as read-only. #22615, Commit
- 🌐 Dynamic HTML language attribute. The HTML lang attribute now dynamically updates when users change their interface language, preventing browsers from triggering unwanted translation popups. Commit
- 📐 File upload deduplication. Attaching files that are already in the chat no longer triggers duplicate uploads. Commit
- 🕵️ Serper.dev search results. Fixed web search results not displaying properly when using the Serper.dev provider by using the correct API response field. #22869
- 🔲 Markdown task list checkbox styling. Fixed task list checkboxes in markdown rendering to display consistently without shrinking in narrow layouts. #22886
- 🎨 Artifacts sidebar tab background fix. The Artifacts sidebar now correctly updates and displays when switching back to a browser tab that was in the background, ensuring artifacts are visible without requiring a manual refresh. #22889
- 🔃 Chat input URL indexing fix. Fixed an issue where URLs could be indexed twice when using multiple triggers followed by backspace and re-entering a URL. #22749
- 🔎 Search modal chat preview avatars. Fixed assistant profile images not displaying in the chat preview pane of the Search Modal. #22782
- 📋 Prompts search pagination fix. Fixed a bug where searching prompts from a paginated page would incorrectly use the current page number, resulting in “No prompts found” even when matching results existed. #22912
- 🗂️ Reasoning block copy cleanup. Copied chat responses no longer include reasoning block content or excess whitespace, ensuring only the intended message text is captured. #22786, Commit
- 🔤 Emoji removal for text normalization. Fixed the emoji removal function used in search and title generation to correctly handle all emoji types, including those with variation selectors (❤️, ☀️, ✅), keycap sequences (1️⃣), and ZWJ family sequences (👨👩👧👦). #22915
- ⏹️ Task cancellation status tracking. Cancelled tasks now correctly mark only the affected messages as done instead of clearing all task statuses for the chat, ensuring proper status tracking when multiple messages have pending tasks. #22743
- 🎨 Filter icon display fix. Fixed filter icons showing the wrong icon after removing one of multiple active filters below the chat input. #22862
- 📊 Channel message data loading. Fixed redundant 404 API calls that occurred when rendering channel messages, preventing unnecessary requests and console errors. #22894
- 👻 Response message skeleton display. Fixed an issue where the skeleton loader would incorrectly show or hide based on complex status history conditions, by extracting the visibility logic into a cleaner reactive variable. Commit
- 🐛 Shared chat viewing crash. Shared chats can now be viewed by unauthenticated users without crashing, with proper fallback handling for missing user profile information. #22751, #22742
- 🛠️ Plugin ID sanitization. Creating Functions or Tools with emojis or special characters in their names now generates valid IDs that pass backend validation, instead of failing with an error. #22695
- 📋 Chat title preservation. Regenerating responses or using branches no longer overwrites user-specified chat titles when auto-naming is disabled, by checking the full chat message count instead of just the current branch. #22754
- 🎧 Read Aloud in chat preview. The Read Aloud button in the Search Chats modal preview no longer causes crashes, and TTS functionality is now properly hidden in read-only chat contexts. Commit
- 📡 Heartbeat event loop blocking. The WebSocket heartbeat handler no longer blocks the event loop when updating user activity, improving responsiveness under heavy load with many concurrent connections. #22980
- 🗝️ Message upsert API reliability. The message upsert API endpoint no longer crashes when called, fixing an error where a database session was incorrectly passed to a function that doesn’t accept it. #22959, Commit
- 🔓 Forward auth proxy compatibility. Fixed error pages that could appear when using authenticating reverse-proxies by properly handling 401 responses from background API requests, allowing the browser to re-authenticate with the identity provider. #22942
- 🔃 Tool call streaming display. Sequential tool calls are now properly accumulated during streaming, fixing an issue where completed tool calls could disappear from the display before the next tool call finished streaming. Commit
- 🧠 Reasoning spinner content preservation. Prior assistant content and tool call blocks no longer disappear during the reasoning spinner when responding after tool execution. #23001
- 🖥️ Pyodide file list refresh. Files created or modified during manual code execution now appear immediately in the pyodide files list without requiring a browser tab refresh. Commit
- 🖱️ Dropdown submenu hover stability. Secondary hover menus like Download and Move now remain open while navigating into them, fixing an issue where an 8px gap between the trigger and submenu would cause the menu to disappear before a selection could be made. #22744, Commit
- 📊 Model tag normalization. Model tags from backends that return them as string arrays are now properly normalized to object format, preventing crashes when filtering models by tag in the admin and workspace models pages. #20819, Commit
- 🎯 Arena model sub-model settings. Arena models now properly use the selected sub-model’s settings — including RAG knowledge bases, web access, code interpreter, and tool capabilities — instead of the arena wrapper’s empty defaults. #16950, Commit
- 🧩 Model editor default metadata. The Model Editor now loads admin-configured default model metadata instead of hardcoded values, preventing admin defaults from being silently overwritten when users save models without realizing they were overriding system-wide settings. #22996, Commit
- ✏️ Rich text paste sanitization. Copying and pasting text with HTML characters (like
<or>) no longer corrupts the editor content, as the paste handler now properly escapes HTML entities before processing mentions and special syntax. Commit
Changed
- 🪝 User webhooks disabled by default. User webhook notifications are now disabled by default and properly gated by the ENABLE_USER_WEBHOOKS configuration, ensuring webhooks only fire when explicitly enabled. Commit
- 🧲 Web search result limit. The configured web search result count now acts as a maximum limit, preventing models from requesting more results than administrators allow. #22577