Commit Graph
18626 Commits
Author SHA1 Message Date
andreadegiovineandandreadegiovine e9017c7da4 i18n: update and improve it-IT (#30297)
* i18n: update and improve it-IT

* i18n: update and improve it-IT

---------

Co-authored-by: andreadegiovine <andreadegiovine@gmail.com>
2026-09-21 08:04:08 -04:00
G30 702da1e471 fix: stop injecting memories and memory tools when memory is switched off (#30228) 2026-09-21 01:00:08 -04:00
Timothy Jaeryang Baek 85146206f6 refac 2026-09-21 00:59:46 -04:00
G30 14be67348a fix: open the new group dialog empty after a group is created (#30280) 2026-09-21 00:56:53 -04:00
Timothy Jaeryang Baek 97e013a661 refac 2026-09-21 00:51:28 -04:00
G30 394fcc7e24 fix: keep an unsaved code block edit visible after it is collapsed (#30284) 2026-09-20 23:44:16 -05:00
G30 9758f33b6c fix: save a model whose description is switched from default back to custom (#30249) 2026-09-20 23:42:44 -05:00
G30 669d37bea1 fix: stop offering reactions on a channel the viewer may only read (#30241) 2026-09-20 23:42:32 -05:00
G30 b256115fa2 fix: save the context compaction threshold from general settings (#30270) 2026-09-20 23:42:22 -05:00
G30 402a187e82 fix: return no chats when a folder search term matches no folder (#30273) 2026-09-20 23:39:54 -05:00
G30 f2220d2e40 fix: keep citation chips inside bold, italic and linked text (#30278) 2026-09-21 00:33:47 -04:00
G30 4c00e08aa1 fix: keep a message's attachments when its edit is cancelled (#30281) 2026-09-21 00:31:26 -04:00
Classic298 8e4cc946ce fix: emit the resolved file path in terminal file events (#30282)
When a model calls display_file, write_file or replace_file_content with a relative path, Open Terminal resolves it against the session working directory and returns the absolute path, but the event sent to the browser carried the raw argument instead. The file panel matches that string against the file browser root, a relative path never matches, so the preview never opens, the panel jumps to the root and the session working directory is rewritten to the root. With the root turned off (OPEN_TERMINAL_FILE_BROWSER_ROOT=filesystem) there is nothing to clamp to and the relative string is sent to the terminal as the new working directory, moving it silently. The tool call itself succeeds either way, so the failure only shows up as a panel that will not open the file the model just wrote.

Both events now carry the path from the tool result and fall back to the argument when the result cannot be read, which is what build_terminal_file_tool_result already does for the chat file attachment. The same one-line rule is applied to the direct tool server path in the frontend, where the browser runs the tool itself and the write_file branch beside it was already correct.

Checked against a live Open Terminal: relative arguments now emit the absolute path, absolute ones are unchanged, non-existent files and inline displays still emit nothing, unreadable or error results still fall back to the argument, and run_command is untouched.

Related to #30051
2026-09-21 00:31:14 -04:00
G30 17e7e8f5e9 fix: show a code run's error output alongside what it printed (#30286) 2026-09-21 00:30:55 -04:00
G30 f847c6a588 fix: apply the new text to speech engine's default voice and model when the engine changes (#30289) 2026-09-21 00:30:26 -04:00
Classic298 043784c2d0 fix: route external webhook avatar URLs through the profile image endpoint (#29892)
The channel webhooks modal rendered a webhook's stored profile_image_url straight into an img tag, so opening it sent every viewer's browser to whatever external host that URL named, leaking client IP, User-Agent and Referer no matter how the server was configured.

External URLs now render through the same webhook profile image endpoint the message list already uses, leaving it to the server to decide whether the browser is sent to that host. Locally picked images and the paths Open WebUI assigns itself still render inline, so previewing an upload before saving is unchanged, and the value written back on save is untouched.

This only takes effect together with the companion backend change that gates the endpoint on ENABLE_PROFILE_IMAGE_URL_FORWARDING. Until that lands the endpoint still redirects and the browser still reaches the external host. Also worth knowing: the endpoint matches the scheme case-sensitively, so a URL stored as HTTPS:// falls back to the default image here, which is already what the message list shows for it.

Verified in a browser against a local origin standing in for the external host: with forwarding on the avatar still renders through the endpoint in both places it appears, with forwarding off the browser makes no request to that origin, and picking a new file still previews immediately before saving.
2026-09-19 17:03:15 -05:00
Classic298 7fa705f3b8 feat: let operators expose chosen file metadata to the model in retrieved sources (#29696)
Custom metadata attached to a file upload now reaches the vector DB, but the model still never sees it. Both prompt-assembly paths build their output from a fixed field set: the classic RAG <source> tag carries only id, name and resource type, and the retrieval tools return only content, source and file id per chunk. A scraper that records where each document came from therefore cannot get that origin in front of the model, so answers cannot state it.

RAG_SOURCE_METADATA_KEYS names the chunk metadata keys allowed through to the model. Configured keys are emitted as extra attributes on the <source> tag and as extra fields on tool result chunks, covering both retrieval paths. It is empty by default, so nothing changes for existing deployments.

An allowlist instead of passing everything through, because chunk metadata also carries file hashes, collection names, embedding config and relevance scores, which would then be added to every retrieved chunk of every request. Values are attacker-controllable through an uploaded file, so they are escaped before they go into the tag, and a configured key can never displace a field the tag or the chunk already defines.

Reported in open-webui/open-webui#29486.
2026-09-19 17:02:59 -05:00
Timothy Jaeryang BaekandClassic298 3a6d0fd203 refac
Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
2026-09-19 17:54:09 -04:00
Timothy Jaeryang Baek 8b3ee28272 refac 2026-09-19 17:45:05 -04:00
G30 65a3a115eb fix: keep the speech-to-text extension allowlist when the Audio settings are saved (#30208) 2026-09-19 17:36:38 -04:00
G30 881f7c9400 fix: save only the changed key when pinning, reordering or picking a default outside the Settings modal (#30183) 2026-09-19 17:34:02 -04:00
Timothy Jaeryang Baek f6922a4c42 refac 2026-09-19 17:33:41 -04:00
Timothy Jaeryang BaekandG30 67adde3193 refac
Co-Authored-By: G30 <50341825+silentoplayz@users.noreply.github.com>
2026-09-19 17:26:40 -04:00
Timothy Jaeryang Baek 10d1cfe637 refac 2026-09-19 17:26:18 -04:00
G30 c1a35b4691 fix: sort the feedback history by user when the User column is clicked (#30191) 2026-09-19 17:21:51 -04:00
G30 76bd90c832 fix: discard unsaved edits when the admin Edit User dialog is closed (#30193) 2026-09-19 17:21:44 -04:00
G30 4922b91c07 fix: stop the Model Defaults save from reverting the selected, pinned and ordered models (#30206) 2026-09-19 17:17:57 -04:00
G30 27dd191332 fix: let a calendar event's repeat, description and location be cleared again (#30204) 2026-09-19 17:17:43 -04:00
G30 757ee8132e fix: stop collapsing the task list from sending the message being typed (#30202) 2026-09-19 17:17:30 -04:00
G30 5e1f995f01 fix: show a custom gender back in the account form instead of an empty dropdown (#30215) 2026-09-19 17:16:56 -04:00
G30 b64cb06043 fix: let a user without the chat delete permission delete a folder while keeping its chats (#30163) 2026-09-19 16:07:34 -05:00
Timothy Jaeryang Baek 946be43237 refac 2026-09-19 17:05:57 -04:00
G30 25948ea213 fix: block saving a prompt's input form when a required dropdown has no option chosen (#30078) 2026-09-19 15:42:39 -05:00
G30 3fbc39a9dc fix: save a new feedback entry when rating a reply whose entry was deleted (#30077) 2026-09-19 15:42:25 -05:00
G30 a63ddb36d2 fix: clear a reply's score and reason when its rating switches thumbs (#30075) 2026-09-19 15:42:15 -05:00
G30 57063aaad8 fix: dropping a folder onto the folder it is already in no longer fails with Folder already exists (#30169) 2026-09-19 15:41:10 -05:00
G30 2690d04cac fix: clean up orphan tags for the chat's owner, not the admin, when an admin deletes another user's chat (#30171) 2026-09-19 15:40:58 -05:00
G30 af9ef1dcbc fix: hide the group picker from users who may not share with groups (#30189) 2026-09-19 15:34:33 -05:00
G30 621ed6de7f fix: export every prompt and model from the workspace, not only the page on screen (#30187) 2026-09-19 10:03:17 -05:00
G30 9e293a58ea fix: label the search modal's archive action Unarchive for archived chats and report what happened (#30177) 2026-09-19 10:02:11 -05:00
G30 dbe538c033 fix: keep a note's sharing when a collaborator saves it (#30175) 2026-09-19 10:00:39 -05:00
G30 d16fad585d fix: keep a shortcut recording from firing the action already bound to the chord (#30160) 2026-09-19 10:00:18 -05:00
G30 2af297bfcd fix: keep the pinned flag when importing a chat export (#30151) 2026-09-19 09:59:55 -05:00
G30 36276c9ead fix: keep a skill's translations and disabled state when saving it from the editor (#30185) 2026-09-19 09:59:36 -05:00
Classic298 1f8f1f61bb fix: tell ask_user models that the first option is shown as Recommended (#30196)
The ask_user card badges the first option of every question as "Recommended", but nothing ever told the model that. The model picks whatever order it likes, so the badge really means "listed first" and users act on a recommendation the model never made.

The ask_user tool description now states that the first option is labelled Recommended and that the model should list the option it recommends first, so the badge reflects an actual choice.

Kept the badge and instructed the model instead of adding a per-option "recommended" flag: the flag would need a schema change, validation in the request normalizer and a frontend change, for the same result in the common case. Dropping the badge was the other option, but it removes a useful affordance rather than fixing it.

Verified that the added line reaches the model by running the docstring through the tool-spec builder and checking the generated OpenAI function schema.

Fixes #30195
2026-09-19 09:59:18 -05:00
G30 5d7c17f41a fix: stop the Generate Message Pair shortcut from also submitting the message input form (#30167) 2026-09-18 23:54:10 -04:00
Classic298 3d29548716 fix: pgvector reads leak their connection and lose most of their neighbours (#30142)
Two defects on the pgvector read path. A search, query or get that finds nothing returns before the rollback that ends its read-only transaction, so the session keeps the connection it checked out; retrieval fans out over worker threads and the session is thread-local, so every thread that runs an empty read holds a connection for the lifetime of that thread. Users see vector search die after a while with "QueuePool limit of size 5 overflow 10 reached" and no way back other than a restart. Rolling back before the three early returns puts the connection back: measured on PostgreSQL 16, twelve empty reads on a default-shaped pool left all 12 connections checked out before and 0 after.

All collections also share one table under one vector index, and the WHERE collection_name filter is applied after the index walk, so a knowledge base holding a small share of the rows keeps only a small share of its neighbours, silently. pgvector 0.8 added iterative scans for this: the scan keeps going until enough rows pass the filter. This sets it per search so it cannot leak into other sessions, and only when the installed extension supports it, since setting it on pgvector 0.7 would make every search raise. PGVECTOR_ITERATIVE_SCAN turns it off or picks strict_order; it defaults to relaxed_order because the shipped behaviour is silently wrong results, and the cost is about a millisecond per search.

Measured through PgvectorClient.search on PostgreSQL 17 and pgvector 0.8, 101500 rows of 384 dimensions with the knowledge base at 1.5% of the table, hnsw m=16, recall@10 against an exact scan over 40 queries: 0.070 at 4.9 ms before, 0.970 at 7.2 ms after.

Fixes #30133
Fixes #30135
2026-09-18 19:31:49 -04:00
Classic298 52cd298411 fix: allow forking a chat that holds a stale unfinished message (#30131)
Forking returned 409 "Wait for the current response to finish before forking." forever once any assistant message anywhere in the chat was left at done = false, with nothing generating and even when that message sat on a branch that was not being forked. Interrupted turns leave the flag behind and nothing clears it, so an affected chat could never be forked again.

The endpoint now refuses only while a task is actually running, which is the check /compact has always relied on by itself. A message still unfinished on the forked branch is marked done in the copy so the fork does not open showing a spinner, while a turn paused waiting on tool approval keeps its unfinished state and its pending call so the fork still shows the prompt. The source chat is left untouched either way.

The client-side check had the same shape of bug: it read history.currentId instead of the message actually being forked, so a paused last turn also blocked forking earlier, finished messages. It now reads the message it is about to fork.

Fixes #30128
2026-09-18 19:31:20 -04:00
Classic298 fffcb727d2 fix: release the openGauss connection when a read returns no rows (#30144)
An openGauss query or get that finds nothing returns before the rollback that ends its read-only transaction, so the session keeps the connection it checked out of the pool. Retrieval fans out over worker threads and the session is thread-local, so every thread that runs an empty read holds a connection for the lifetime of that thread, and vector search eventually fails with a pool checkout timeout that a restart is the only way out of. Empty reads are routine: an empty knowledge base, a file whose chunks were deleted, or a metadata filter that matches nothing all produce one.

Rolling back before the two early returns puts the connection back. Measured by driving OpenGaussClient itself with a pool of 5: three empty query reads left 3 connections checked out and 0 free before the change, and 0 checked out with 3 free after, same for get. search is already correct, it has no early return.

The pgvector client had the same defect, fixed separately in #30142.
2026-09-18 19:31:01 -04:00
Classic298 6d73780fd1 fix: bundle seaborn and give black its dependencies in the Pyodide lock (#30148)
seaborn was listed among the Pyodide distribution packages, but it is not part of that distribution, so the build wrote no wheel for it. Since seaborn is on the code interpreter's package list, it was quietly downloaded from pypi.org in the user's browser instead, which is what bundling the wheels is meant to avoid. It now takes the PyPI wheel path, like openpyxl.

The code editor's Format button was broken for non-admin users, with or without internet, because black's bundled lock entry declared no dependencies and the hand-written list next to the caller was missing packaging. black's dependencies are now declared in the lock, so that list goes back to black alone and every future caller gets them too.

Both of these shipped unnoticed because nothing checked that a listed package produced a wheel. The build now fails when one did not, naming it.

Verified offline with the network cut at undici's dispatcher: seaborn, black, the Excel roundtrip and the other listed packages all install from the bundled wheels, and a deleted wheel, a missing lock entry or a non-canonical key each fail the build.

Fixes #30145
2026-09-18 19:30:54 -04:00