Commit graph

19743 commits

Author SHA1 Message Date
Classic298
b7d1de05ab
perf: changing permissions on a large group is slow (#32883)
When a group change affects its members (new permissions, parent group or default models, or deleting the group), the server makes every member's browser reconnect so it picks up the new permissions without a page reload. To find each member's connections it read through the whole list of connected users again for every single member, so saving a 2,000-member group with 3,000 people online spent almost 9 seconds on this with Redis as the websocket manager, and about 1 second without. It now finds all members' connections in one pass.

Changing one permission on a 2,000-member group, time the save spends making members reconnect:

| Online users | Redis, before | Redis, after | No Redis, before | No Redis, after |
| --- | --- | --- | --- | --- |
| 1,000 | 2.8 s | 0.15 s | 0.09 s | <0.01 s |
| 3,000 | 8.7 s | 0.28 s | 1.2 s | <0.01 s |
2026-10-22 07:08:30 +09:00
Classic298
8fa77c8282
fix: PowerPoint preview centres titles the file aligns left (#32876)
In the PowerPoint preview, a title or subtitle that the file sets to left alignment was drawn centred, the same as one with no alignment at all. Decks made by python-pptx and most deck generators set the alignment on every paragraph, so their left-aligned title slides all came out centred. The preview now keeps a title the file aligns left on the left, and only centres titles and subtitles that leave the alignment open.

Fixes #32873
2026-10-22 07:01:10 +09:00
Timothy Jaeryang Baek
095cca5fca refac 2026-10-22 06:56:43 +09:00
G30
f2baa486bc
fix(a11y): the model picker outlines the row that Enter will pick while you use the arrow keys (#32875) 2026-10-22 06:55:22 +09:00
Timothy Jaeryang Baek
35b51e09ea refac 2026-10-22 06:35:41 +09:00
Classic298
75358502c9
refac: direct tool server connection check auth handling (#32862)
The connection check in the direct tool server form now picks the credential to send the same way saved direct connections do.
2026-10-22 06:23:23 +09:00
G30
53356e84c6
fix(a11y): toast text in the light theme meets the 4.5:1 contrast minimum (#32871) 2026-10-22 06:20:49 +09:00
Classic298
61653e9697
chore: bump DOMPurify to 3.4.17 (#32863)
The web UI still shipped version 3.4.11 of DOMPurify, the library that strips unsafe HTML before content is shown, six releases behind DOMPurify's own latest. This moves it to 3.4.17, and new installs now require at least that version.

Co-authored-by: wesyoung2022 <115102004+wesyoung2022@users.noreply.github.com>
2026-10-22 06:12:24 +09:00
Classic298
cb7d7e851d
fix: model import silently skips a model whose ID is already taken (#32866)
Importing a model JSON on the Workspace Models page as a regular user skipped any model whose ID already belonged to another user's model they cannot edit, or to a model from one of the instance's connections such as OpenAI or Ollama. There was no message, so the model just never showed up. The import now stops at that model with the error "Uh-oh! This model id is already registered. Please choose another model id string."; the models before it in the file are imported and the ones after it are not. Admins, and users who can edit the existing model, are unaffected and still overwrite it.
2026-10-22 06:12:10 +09:00
G30
e745465758
fix(a11y): Escape in the model picker's More menu or filter list closes only that list (#32868) 2026-10-22 06:11:36 +09:00
Classic298
d1e31cbb81
refactor: remove unused development route (#32869)
Removes a leftover development-only route that nothing in the app calls.
2026-10-22 06:11:00 +09:00
Classic298
a915df8ce1
chore: Python 3.12 and Debian 13 base image (#32861)
The Docker image now runs Python 3.12 on Debian 13 (trixie) instead of Python 3.11 on Debian 12, and the pip install docs recommend 3.12. Image size stays about the same: the slim image is 1 MB smaller and the standard image is about 50 MB larger, mostly from the newer ffmpeg and pandoc that Debian 13 ships. Admins should know that custom functions, tools and anything installed with pip inside the container now run on Python 3.12, so a package that only has builds for 3.11 needs a newer version. Installing with pip still works on both Python 3.11 and 3.12.
2026-10-22 04:51:57 +09:00
Classic298
db5b874944
feat: let everyone who can use a model pick its model controls (#32860)
Picking a model control option, such as a Thinking level, needed both the Allow Chat Controls and Allow Chat Params permissions, so admins had to hand out the Advanced Parameters panel just to let people pick a preset. Model control picks now work for anyone with access to the model and are saved per model to their account. Allow Chat Controls still hides the Chat Controls panel and Allow Chat Params still hides the Advanced Parameters panel, in the chat and in personal Settings. Parameters a person saves to their account are no longer filtered by these two permissions, since any chat message could already set any parameter without them.

Fixes #32626
2026-10-22 04:44:53 +09:00
G30
dc45e3960d
fix(a11y): screen readers hear how long ago each sidebar chat was updated (#32851) 2026-10-22 04:37:59 +09:00
G30
2a6e3c0197
fix(a11y): the info button under a reply is named and reads its usage details (#32855) 2026-10-22 04:36:51 +09:00
Classic298
3e0564d11a
fix: MinerU local mode fails every document on a 4.x server that requires an API key (#32838)
A self-hosted MinerU 4.x server started with an API key rejected every document with a 401, even with the key filled in under Documents settings, because local mode never sent it. The key is now sent with the document requests to a 4.x server whenever one is set. Servers without a key are unaffected.

Fixes #32836
2026-10-22 02:26:37 +09:00
Classic298
6367a3cc40
fix: OAuth connections send no token when the user calls the API (#32826)
A model connection with its auth type set to OAuth only forwarded the user's sign-in token for requests coming from the browser. The same user calling the API with their bearer token or an API key sent nothing upstream, so an SSO-protected model server rejected every API call and its models could not be listed or used. These connections now fall back to the user's latest sign-in session the same way tool servers already do.

Fixes #32820
2026-10-22 02:13:50 +09:00
Classic298
4ed1af6879
fix: first message sent right after the page loads loses its reply (#32829)
Sending the first message while a freshly loaded page was still setting up the new chat wiped that message from the screen once the setup finished. The reply then stayed empty with the Stop button on, or the page fell back to an empty new chat while the finished chat only showed up in the sidebar. The setup now leaves the chat alone when a message was sent in the meantime.

Fixes #32819
2026-10-22 02:13:32 +09:00
Classic298
ffcb24824f
fix: Calendar page opens empty with an error when Calendar is turned off (#32837)
With Calendar switched off by an admin, or the calendar permission taken away, the sidebar entry was hidden but opening /calendar directly from a bookmark or the address bar still showed an empty month grid with a "401 Unauthorized" error. The page now sends these users to the home page, the same as Notes and Automations do.

Fixes #32834
2026-10-22 02:13:22 +09:00
G30
70cceb51b0
fix(a11y): the model logos on a new chat are named, and hidden when there's only one model (#32849) 2026-10-22 02:13:09 +09:00
Classic298
1a49220797
fix: Fork chat in a temporary chat fails with an error (#32839)
A temporary chat offered Fork chat under every reply and Fork in the / menu, but a temporary chat is never stored, so there was nothing to copy and every attempt ended in "We could not find what you're looking for :/". Both are now left out of temporary chats, the same way rating already is, and typing /fork there answers with "No chat to fork". Saved chats fork as before.

Fixes #32833
2026-10-22 02:12:55 +09:00
Classic298
cc6de63bc8
fix: Web Search settings do not save while web search is off (#32840)
With web search off, clicking Save on the Web Search settings page jumped to an empty search engine field and saved nothing. That happened with no engine picked, which is how a fresh install starts, and also when an engine picked earlier was missing its own details, such as the SearXNG query URL. Admins could not change the Web Loader settings, which apply whenever a user attaches a web page, without filling in a search engine first. The engine and its details are now only required while web search is turned on.

Fixes #32831
2026-10-22 01:51:44 +09:00
Classic298
ce7f87a750
fix: users can still edit their own messages with Allow Chat Edit off (#32841)
With Allow Chat Edit switched off, users lost the Edit button on replies but kept it on their own messages, and both Save and Send still worked there. The Edit button on a user's own messages now follows the same permission, as it already did in chats shared with replies allowed. Admins keep it as before.

Fixes #32832
2026-10-22 01:51:07 +09:00
Timothy Jaeryang Baek
ca8f451cca chore: i18n 2026-10-21 16:44:03 +09:00
Classic298
21f770fb73
fix: OAuth 2.1 (Static) MCP connections send no client secret to servers like X Ads (#32818)
With OAuth 2.1 (Static), when the authorization server did not accept the client secret as a form field, Open WebUI used whichever auth method the server's metadata listed first. X Ads lists "none" (public client, no secret) first, so the token exchange went out without the configured client secret and X rejected it with "Missing valid authorization header". When the server supports HTTP Basic auth, the secret is now sent that way, no matter which method it lists first.

Fixes #32813
2026-10-21 16:38:34 +09:00
Classic298
7909f2bb99
fix: Shift delete in Manage Files asks for confirmation (#32817)
Holding Shift while deleting a file in Manage Files used to delete it at once, but since the redesign every delete asks "Delete 1 file?" first. Shift+click or Shift+Enter on a file's Delete option now deletes it straight away again, and the option turns red while Shift is held, as before. Delete without Shift still asks.

Fixes #32814
2026-10-21 16:38:26 +09:00
Classic298
c503f21470
fix: Manage Files count shows all files while searching (#32816)
The number next to the Files title in Manage Files stayed at the account's total while a search narrowed the list. While searching it now shows how many files are listed for the search, as before the redesign, and the total comes back once the search is cleared.

Fixes #32815
2026-10-21 16:38:15 +09:00
Timothy Jaeryang Baek
3539ad6321 refac 2026-10-21 16:35:31 +09:00
Timothy Jaeryang Baek
dc2ac86060 refac 2026-10-21 16:01:14 +09:00
Timothy Jaeryang Baek
06c17834ee refac 2026-10-21 15:57:39 +09:00
Timothy Jaeryang Baek
a26dda3eaf chore: format 2026-10-21 15:09:54 +09:00
Timothy Jaeryang Baek
7de90426a0 chore: i18n 2026-10-21 15:09:16 +09:00
Timothy Jaeryang Baek
a8c4fa9fe2 refac 2026-10-21 15:09:00 +09:00
Timothy Jaeryang Baek
d1705c1078 refac 2026-10-21 15:04:00 +09:00
G30
dd845c276c
fix(a11y): branding images get alt text that names the instance or marks them as decorative (#32810) 2026-10-21 15:03:51 +09:00
Timothy Jaeryang Baek
517cfa4233 refac 2026-10-21 15:01:28 +09:00
G30
495198508d
fix(a11y): the chat input is announced as a text field by screen readers (#32808) 2026-10-21 14:59:20 +09:00
Timothy Jaeryang Baek
f5e8f84e69 refac
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 / 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/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 / merge (map[name:main suffix:]) (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: 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 free_disk:true name:cuda suffix:-cuda]) (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_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 / 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: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 / merge (map[name:ollama suffix:-ollama]) (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
Create and publish Docker images with specific build args / copy-to-dockerhub (-slim, slim) (push) Blocked by required conditions
Frontend Build / Format & Build (push) Waiting to run
Frontend Build / Unit Tests (push) Waiting to run
2026-10-21 12:58:04 +09:00
Timothy Jaeryang Baek
acc231774d refac 2026-10-21 12:53:00 +09:00
Timothy Jaeryang Baek
93779e2451 refac 2026-10-21 12:41:25 +09:00
Classic298
9b4955c29b
fix: background sub-agent report shows as a raw message after reloading the chat (#32804)
After reloading a chat while a background sub-agent was still working, its report came in as a plain user bubble with the whole raw report text instead of the "Background sub-agent finished" row, until the next reload. When the report arrives the page reloads the chat and receives the new turn live at the same moment, and the live copy, which lacks the message details, replaced the complete one from the server. The live copy is now laid over the server copy, so live changes still win and the report keeps what marks it as a sub-agent report.

Fixes #32801
2026-10-21 12:39:20 +09:00
Timothy Jaeryang Baek
1b987c9a10 refac 2026-10-21 12:39:11 +09:00
Timothy Jaeryang Baek
fa50081e67 refac 2026-10-21 12:35:07 +09:00
Timothy Jaeryang Baek
fefa31fae2 refac 2026-10-21 12:32:07 +09:00
Timothy Jaeryang Baek
a5f9ec38a5 refac 2026-10-21 12:29:44 +09:00
Timothy Jaeryang Baek
0628670f56 refac 2026-10-21 12:28:32 +09:00
Timothy Jaeryang Baek
a76c02e58e refac 2026-10-21 12:27:06 +09:00
Timothy Jaeryang Baek
fbeee59e99 refac 2026-10-21 11:47:14 +09:00
Timothy Jaeryang Baek
b6b0fff5d6 refac 2026-10-21 11:45:33 +09:00
Timothy Jaeryang Baek
c7cac65f45 refac 2026-10-21 11:41:29 +09:00