With Redis enabled, each chat request and each title or tag generation looks up which pipeline filters apply, and every lookup parsed the full model list stored in Redis from scratch. Each worker now keeps the parsed list and parses it again only when the model list changes. The lookup returns the same filters as before, at the cost of about 3 MB of memory per worker for 1000 models.
Measured per lookup against a local Redis; the larger list size in each pair comes from models with profile images:
| Models | Model list size | Before | After |
| --- | --- | --- | --- |
| 200 | 0.17 MB | 0.42 ms | 0.05 ms |
| 200 | 2.2 MB | 1.16 ms | 0.05 ms |
| 1000 | 0.83 MB | 2.43 ms | 0.06 ms |
| 1000 | 11 MB | 6.21 ms | 0.10 ms |
Every time a user loaded Open WebUI, each OAuth MCP server they had not connected yet wrote a warning to the logs ("No OAuth session found for user ..., client_id mcp:<server id>"), so instances with a few such servers filled their logs with it. Not having connected a server yet is a normal state, so the message now logs at debug level and only shows up when debug logging is on. Using an MCP server without connecting it still fails with "Auth required" as before.
When a streamed reply from a Responses API connection stopped early, for example at the token limit or through a content filter, its token counts were lost. The chat showed no usage for that reply and the admin analytics recorded zero tokens for it. Such replies now keep the usage the provider reported, the same as replies that finished normally.
Fixes#33615
A note over 2 MB, which one pasted screenshot can reach because images are embedded in the note, opened as an empty page and discarded what you typed. Live editing of notes had its own 2 MB limit, smaller than what the server accepts in one transfer, so it refused to load such notes. That limit now matches the server's 16 MB transfer limit, so any note the server can receive opens and saves again.
Fixes#33606
Opening an orchestrator terminal connection in Admin Settings > Integrations and clicking Save overwrote its policy in Terminals with only the fields the dialog shows (image, CPU, memory, storage, idle timeout and environment variables). Everything else set in Terminals, like restricted mode or the pod and container security settings, was lost, so new terminals started without it. Saving now keeps the policy settings the dialog does not show and only updates the ones it shows.
Fixes#33580
With OpenTelemetry metrics on, a request for a URL the server has no API endpoint for was counted under its full address, so every distinct URL became a metric series of its own and the series count kept growing. When the web interface is not served (API-only setups) this happens for any unknown URL, such as bots probing for missing paths. With Starlette 1.3.1, the version pinned for source installs, it also happens for every page load, static file and websocket request, because that version tells the server nothing about which part of the app answered them. These requests are now counted without a URL label, while API requests keep theirs. Admins need to do nothing, as the old series stop growing and age out.
Fixes#33576
Saving the Sub-agents admin tab could turn sub-agents off and clear their system prompt when one of the limits was still 0. Older releases accepted 0 there, also from the SUBAGENTS_MAX_* environment variables, but the tab now fails to load such a value and shows everything blank and switched off, so saving writes that blank state back. A limit of 0 now shows as empty, meaning no limit, which matches what sub-agents already do with a 0 while they run.
Fixes#33609
New **pt-BR** translations for items introduced in the latest releases, plus a consistency/quality pass across existing strings (grammar, tone, capitalization, pluralization). Placeholders and hotkeys preserved. No logic changes.
Opening or reloading the new chat page or a folder's page showed "Select a model" in place of the default model, ignored URL parameters such as models=, model= and q= (which fills in the message), and a message sent from there got no reply. Now the default model or the one from the URL is selected and the URL parameters apply, whether you open the page directly or come from another chat. Opening the Inbox and coming back still keeps the typed message and the chosen model.
Fixes#33457
Nested Markdown is rendered by MarkdownTokens calling itself, and those
calls passed `preview` but not `onPreview`, so a code block inside a list
item, a quote or a details block showed a Preview button that called the
empty default. Pass `onPreview` down like `preview`.