Commit graph

7389 commits

Author SHA1 Message Date
Timothy Jaeryang Baek
e9635596dd refac 2026-10-12 23:22:18 +04:00
Timothy Jaeryang Baek
4ab60527e7 refac 2026-10-12 22:14:04 +04:00
Timothy Jaeryang Baek
e9ac958f36 refac 2026-10-12 19:18:08 +04:00
Timothy Jaeryang Baek
2d47128242 refac 2026-10-12 19:11:22 +04:00
Timothy Jaeryang Baek
6229405b4d refac 2026-10-12 19:08:40 +04:00
Timothy Jaeryang Baek
1aa6ba58ba refac 2026-10-12 18:53:20 +04:00
Classic298
c89336da5f
fix: daily, weekly and monthly automations can run twice or skip their first run (#32264)
Automations scheduled with the Daily, Weekly or Monthly picker ran a few seconds after the chosen time, taking the seconds from whenever the previous run was handled. Now and then that left the next run due again within the same minute, and the automation ran twice. Users whose timezone is behind the server's could also have their first run moved to the next day. These schedules now run at the exact minute chosen, in the user's own timezone.

Fixes #32263
2026-10-12 18:51:03 +04:00
Timothy Jaeryang Baek
6f92cd78ee refac 2026-10-12 18:37:30 +04:00
Timothy Jaeryang Baek
2ba35625b3 refac 2026-10-12 18:23:50 +04:00
Timothy Jaeryang Baek
774007d728 refac 2026-10-12 18:11:33 +04:00
Timothy Jaeryang Baek
b4bb9e7aca refac 2026-10-12 17:57:02 +04:00
Timothy Jaeryang Baek
c7802555b6 refac 2026-10-12 17:47:00 +04:00
Timothy Jaeryang Baek
04bccecb8e refac 2026-10-12 17:29:04 +04:00
Classic298
1369027db6
fix: external knowledge citation links lead to a not found error (#32233)
Clicking the title of a citation from an external knowledge base (Qdrant, Milvus, pgvector), or its Content link, opened a link to a file inside Open WebUI that does not exist, so the browser showed a not found error. These results are no longer treated as uploaded files, so when the citation's source is a web address both links open that page, and otherwise the title is plain text. This works whether or not the model uses native tool calling.

Fixes https://github.com/open-webui/open-webui/issues/32231
2026-10-12 11:57:07 +04:00
Classic298
5ad9af57d1
fix: cannot connect through Redis Sentinels that require a password (#32241)
When the Redis Sentinels are protected with a password, every Redis operation failed with "No master found", because the password in REDIS_URL was used for the Redis server itself but never for the Sentinels. The Sentinels now get the same credentials, both for REDIS_URL and for WEBSOCKET_REDIS_URL. Sentinels without a password keep working, and Sentinel credentials set by hand in WEBSOCKET_REDIS_OPTIONS still take precedence.

Fixes #32240
2026-10-12 11:42:26 +04:00
Classic298
0309c9ad13
fix: Redis Sentinel fails when the master name has capital letters (#32234)
Some checks are pending
Python CI / Ruff Format (3.11) (push) Waiting to run
Python CI / Ruff Format (3.12) (push) Waiting to run
Create and publish Docker images with specific build args / copy-to-dockerhub (-slim, slim) (push) Blocked by required conditions
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args:USE_OLLAMA=true free_disk:false name:ollama suffix:-ollama]) (push) Waiting to run
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args:USE_SLIM=true free_disk:false name:slim suffix:-slim]) (push) Waiting to run
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args: free_disk:false name:main suffix:]) (push) Waiting to run
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args:USE_CUDA=true USE_CUDA_VER=cu126 free_disk:true name:cuda126 suffix:-cuda126]) (push) Waiting to run
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args:USE_CUDA=true free_disk:true name:cuda suffix:-cuda]) (push) Waiting to run
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args:USE_OLLAMA=true free_disk:false name:ollama suffix:-ollama]) (push) Waiting to run
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args:USE_SLIM=true free_disk:false name:slim suffix:-slim]) (push) Waiting to run
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args: free_disk:false name:main suffix:]) (push) Waiting to run
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args:USE_CUDA=true USE_CUDA_VER=cu126 free_disk:true name:cuda126 suffix:-cuda126]) (push) Waiting to run
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args:USE_CUDA=true free_disk:true name:cuda suffix:-cuda]) (push) Waiting to run
Create and publish Docker images with specific build args / merge (map[name:cuda suffix:-cuda]) (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge (map[name:cuda126 suffix:-cuda126]) (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge (map[name:main suffix:]) (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge (map[name:ollama suffix:-ollama]) (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge (map[name:slim suffix:-slim]) (push) Blocked by required conditions
Create and publish Docker images with specific build args / notify-helm-charts (push) Blocked by required conditions
Create and publish Docker images with specific build args / copy-to-dockerhub (, main) (push) Blocked by required conditions
Create and publish Docker images with specific build args / copy-to-dockerhub (-cuda, cuda) (push) Blocked by required conditions
Create and publish Docker images with specific build args / copy-to-dockerhub (-cuda126, cuda126) (push) Blocked by required conditions
Create and publish Docker images with specific build args / copy-to-dockerhub (-ollama, ollama) (push) Blocked by required conditions
Frontend Build / Unit Tests (push) Waiting to run
Frontend Build / Format & Build (push) Waiting to run
With Redis Sentinel, Open WebUI lowercased the master name given as the host part of REDIS_URL, so a master named myMaster was looked up as mymaster and every Redis call failed with "No master found". The OT-Container-Kit redis-operator for Kubernetes names its master myMaster by default, so its users hit this out of the box. The master name is now used exactly as written in REDIS_URL, so it has to match the case configured in Sentinel.

Fixes #31918
2026-10-11 22:17:41 +04:00
Classic298
ee1d9255fc
fix: MCP server connection failures are not logged at the default log level (#32229)
When an MCP tool server fails to connect during a chat, the chat shows "Failed to connect to MCP server" but the reason was only logged at debug level, so it never appeared in the logs of a default install. The failure is now logged as an error with the full cause, such as a refused connection or a 401 from the server. The message in the chat is unchanged.

Fixes #32213
2026-10-11 21:06:11 +04:00
Timothy Jaeryang Baek
78613d86f7 refac 2026-10-11 15:55:57 +04:00
Classic298
67ff390c1c
fix: OAuth token forwarding and provider sign-out break after a browser restart (#32209)
After an OAuth sign-in, the cookies tying the browser to the user's OAuth session were dropped when the browser closed, while the login itself stayed valid for the full JWT lifetime. After a restart the user was still signed in, but model connections and terminal servers using system OAuth got no token, and signing out no longer ended the session at the identity provider. These cookies now last as long as the login again, with and without MFA, as they did in 0.11.
2026-10-10 15:56:43 -05:00
Timothy Jaeryang Baek
9b130cdeab refac 2026-10-11 00:55:58 +04:00
Timothy Jaeryang Baek
cca24f4e17 refac 2026-10-10 23:56:20 +04:00
Timothy Jaeryang Baek
c7b5edc726 refac 2026-10-10 23:50:29 +04:00
Timothy Jaeryang Baek
6affee4fce refac 2026-10-10 23:38:22 +04:00
Timothy Jaeryang Baek
fea827bc2e chore: format 2026-10-10 23:18:09 +04:00
Timothy Jaeryang Baek
e1bbc859f1 refac
Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
2026-10-10 23:15:08 +04:00
Timothy Jaeryang Baek
67cfa917c1 refac 2026-10-10 23:02:39 +04:00
Timothy Jaeryang Baek
088830cf82 feat: Dynamic Tool Loading / Lazy Loading
Co-Authored-By: Taylor Wilsdon <6508528+taylorwilsdon@users.noreply.github.com>
2026-10-10 22:43:52 +04:00
Timothy Jaeryang Baek
93723bd315 refac 2026-10-10 22:39:57 +04:00
Timothy Jaeryang Baek
88ff2c65cf refac
Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
2026-10-10 22:19:50 +04:00
Timothy Jaeryang Baek
7cd0785033 refac 2026-10-10 22:07:19 +04:00
Timothy Jaeryang Baek
8594b2f421 refac 2026-10-10 22:05:25 +04:00
Timothy Jaeryang Baek
1469f73b31 refac 2026-10-10 21:47:06 +04:00
Classic298
2526c8e603
fix: Docling citations show the wrong page number when a PDF has blank pages (#32203)
With the Docling engine, a blank page in a PDF threw off the page number of everything after it, so citations showed the wrong page and opened the file at the wrong place. Page numbers now come from the page Docling reports for each piece of text. Files that were already uploaded keep their old page numbers until they are reindexed or uploaded again.

Fixes #32201
2026-10-10 21:39:46 +04:00
Timothy Jaeryang Baek
fde0a85369 refac 2026-10-10 21:38:50 +04:00
Timothy Jaeryang Baek
9202c7f100 refac 2026-10-10 21:29:13 +04:00
Timothy Jaeryang Baek
ed6f69002d refac 2026-10-10 21:18:53 +04:00
Classic298
c94ac152ea
fix: browser gets stuck in a reload loop after a server upgrade (#31631)
After a server upgrade, browsers could keep reusing their cached copy of the old app page for days, since it was sent with no caching instructions. That old page points at files the new version no longer has, so the app reloads into the same cached page and loops until a hard refresh. The app page now tells the browser to check for a newer version on every visit, which is a tiny request when nothing changed. Other files are cached as before, and an admin-set CACHE_CONTROL still takes precedence.

Fixes #31630
2026-10-10 12:15:39 -05:00
Timothy Jaeryang Baek
82f142d376 refac 2026-10-10 21:11:33 +04:00
Timothy Jaeryang Baek
3e0e760ce3 refac 2026-10-10 21:11:20 +04:00
Classic298
f56db69130
refac: bound collaborative document buffers (#31603)
Collaborative document buffers now keep a size budget per document and a limit on open documents per connection, only store well-formed updates and are keyed by the document id unchanged.
2026-10-10 20:56:24 +04:00
G30
94e9c7fef9
fix: show a knowledge file's current name in citations after it is renamed (#31860) 2026-10-10 20:44:43 +04:00
Timothy Jaeryang Baek
0c3f74c9c1 refac 2026-10-10 20:41:13 +04:00
G30
78550396da
fix: keep a tag's name when the last chat using it is archived (#32200) 2026-10-10 20:30:15 +04:00
Timothy Jaeryang Baek
d04f78b3bf refac 2026-10-10 20:29:50 +04:00
Classic298
0a50954090
fix: Chat failed notifications are not sent when the provider returns an error status (#32198)
Notification targets subscribed to Chat failed stayed silent when the provider answered a chat with an error status, such as a 500, or could not be reached at all. Those failures show up as an error in the chat, but only a few uncommon failures were announced to the targets. Now these failures notify Chat failed targets too, with the error text and a link to the chat.

Fixes #32003
2026-10-10 20:16:10 +04:00
Classic298
aaea99005d
fix: messages to a model fail after the admin removes a model control the user had set (#32197)
When an admin removed a model control (such as Thinking) after a user had chosen one of its options in the chat input, every message that user sent to that model failed with "the selected option is no longer available" and never reached the model. The control is gone from the chat input, so the user had no way to undo the choice. A choice for a control that no longer exists is now ignored and the message goes through. When only one option of a control is removed, the error stays, because the control is still in the chat input and the user can pick another option there.

Fixes #31996
2026-10-10 20:11:47 +04:00
G30
170ec28a1a
fix: name the secret key when stored MFA secrets cannot be decrypted at startup (#32189) 2026-10-10 20:10:39 +04:00
Classic298
9b3d599c75
fix: user can no longer chat after losing access to model controls they had used (#32194)
A user who had picked an option in a model control (the per-model selector in the chat input, for example High on a Thinking control) could not chat any more once the admin switched off Allow Chat Controls or Allow Chat Params for them. Every message failed with "You cannot change model parameters.", and the user could not clear the saved selection because the selector is hidden for them. When either permission is off, the saved selection is now skipped when sending, so messages go through with the model's default options, and it applies again if the permission comes back.

Fixes #31995
2026-10-10 20:09:31 +04:00
Timothy Jaeryang Baek
ab15284a47 refac 2026-10-10 20:09:04 +04:00
Classic298
641c82df19
fix: automations, timers and sub-agents fail with "Message already exists" (#32177)
Automation runs, timers and sub-agents stopped getting a reply after the shared chats rework: the chat shows an empty answer and the run fails with `409 Message already exists or has an invalid ID.` Each of them creates the empty answer before asking the model, and the backend began refusing to fill an answer that is already in the chat; the server-side API flow in the docs and API calls without a user message broke the same way. Such an empty answer is now filled in again when it belongs to the same user and answers the same message, and API calls without a user message work as before, saving the reply on its own as the docs describe. A firing timer or sub-agent also no longer cancels the chat's other timers that are set to stop when the user writes next. Answers that are already finished, or that belong to another user in a shared chat, are still refused.

Fixes #32066
2026-10-10 20:02:54 +04:00