798 Commits
Author SHA1 Message Date
Timothy Jaeryang Baek d5cd7f4907 refac 2026-10-21 09:26:26 +09:00
Timothy Jaeryang Baek 079fb19e75 refac 2026-10-16 18:58:58 +04:00
Timothy Jaeryang Baek 5cf7c03332 refac 2026-10-16 14:35:09 +04:00
Timothy Jaeryang Baek 92e64c1d59 refac 2026-10-16 14:31:39 +04:00
Classic298 3ccea416b4 fix: built-in tools disappear when a model has a custom tools parameter (#32530)
Adding a custom parameter named tools to a model, for example to turn on a provider's native web search, made Open WebUI drop all of its own tools for that model: notes, knowledge, tasks and any tools attached to the model stopped working, and attached files lost their context. Those tools now stay, and the model's custom tools are sent alongside them. API calls that pass their own tools, or an empty list to turn tools off, behave as before.

Fixes #32528
2026-10-16 14:09:32 +04:00
Timothy Jaeryang BaekandClassic298 f5a26f53a0 refac
Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
2026-10-16 04:20:53 +04:00
Timothy Jaeryang Baek 597b00a547 refac 2026-10-16 03:17:14 +04:00
Classic298 5fde0485a5 fix: an approved knowledge or file tool loses its sources (#32439)
With tool approval set to ask, a knowledge or file tool the user approved ran and answered, but no sources were saved on the reply or shown below it. The same call without approval listed them as usual. The sources of an approved call are now saved and shown the same way.

Fixes #32436
2026-10-15 00:28:23 +04:00
Timothy Jaeryang Baek 7b47c3b22c refac 2026-10-14 23:21:22 +04:00
Timothy Jaeryang Baek bcf540a989 refac 2026-10-14 18:35:56 +04:00
Timothy Jaeryang Baek 97a66ef73e refac 2026-10-14 17:58:03 +04:00
Classic298 29719c8bfb fix: pipes and tools get None instead of a file list when nothing is attached (#32380)
Pipes and tools received None instead of a list of files on messages without attachments, which does not match the docs and breaks plugins that loop over the files. Pipes and tools now get an empty list in that case.

Fixes #32379
2026-10-14 12:18:55 +04:00
Timothy Jaeryang Baek 7840194631 refac 2026-10-13 19:51:58 +04:00
Timothy Jaeryang Baek 2e8839a5dd refac 2026-10-13 19:40:48 +04:00
Timothy Jaeryang Baek d34f73066d refac 2026-10-13 19:10:21 +04:00
Timothy Jaeryang Baek 200b951491 refac 2026-10-13 18:31:54 +04:00
Timothy Jaeryang Baek fc1005f09b refac 2026-10-13 18:16:01 +04:00
Timothy Jaeryang Baek 53a8f131f3 refac 2026-10-13 00:42:34 +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 c7b5edc726 refac 2026-10-10 23:50:29 +04:00
Timothy Jaeryang Baek fea827bc2e chore: format 2026-10-10 23:18:09 +04:00
Timothy Jaeryang Baek 67cfa917c1 refac 2026-10-10 23:02:39 +04:00
Timothy Jaeryang BaekandTaylor Wilsdon 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 fde0a85369 refac 2026-10-10 21:38:50 +04:00
Timothy Jaeryang Baek ed6f69002d refac 2026-10-10 21:18:53 +04:00
Timothy Jaeryang Baek 82f142d376 refac 2026-10-10 21:11:33 +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 cdd96e5b57 fix: chat title shows raw skill syntax when it is named after the first message (#32176)
When a chat is named after its first message (title generation off, or the automatic title is blank), a message that starts with a skill picked by typing $ in the message box gave the chat a title like `<$tides-1234|Tides> when is high tide`. The title now shows each picked skill by its name, so the sidebar reads "Tides when is high tide".

Fixes #32019
2026-10-10 19:47:46 +04:00
Timothy Jaeryang Baek d3acc2706d refac 2026-10-10 01:28:36 +04:00
Timothy Jaeryang Baek 9bbb95048b refac 2026-10-09 15:07:43 +04:00
Timothy Jaeryang Baek ecbbff8afb refac 2026-10-09 10:22:37 +04:00
Timothy Jaeryang Baek a20b622ba8 refac 2026-10-09 00:43:01 +04:00
Timothy Jaeryang Baek 236965c7e9 refac 2026-10-08 21:55:05 +04:00
Classic298 b687225123 fix: reply never finishes when streaming is off and the model calls a tool (#32083)
With Stream Chat Response turned off, a reply where the model called a tool was never saved or marked as finished, so the chat kept showing it as still generating until the page was reloaded. The reply is now saved and finished like any other non-streamed reply. Tools themselves still only run with streaming on, as the docs describe.
2026-10-08 21:00:49 +04:00
Timothy Jaeryang Baek 93fc3fcb72 refac 2026-10-08 20:33:47 +04:00
Classic298 039867feba feat: pass the provider's finish reason to outlet filters (#32079)
Outlet filters see the finished reply with its content and token usage, but had no way to tell whether the model ended on its own, ran into the token limit or stopped to call a tool, short of reading every chunk in a stream filter. For OpenAI-compatible and Ollama models, the assistant message handed to outlet now carries finish_reason with the value the provider reported on the last model call of the turn, for streaming and non-streaming replies. Ollama replies cut off by the token limit now report length as well, where they always said stop before.
2026-10-08 19:36:47 +04:00
Classic298 6e2ef55e52 fix: images streamed by the model are saved several times (#32054)
When a model streams its images in separate chunks, each new chunk saved all earlier images again, so the copies doubled with every image: four images were stored as fifteen and the chat showed duplicates. New replies now keep each image once. Chats that already hold duplicates stay as they are.

Fixes #32053
2026-10-08 16:54:32 +04:00
Timothy Jaeryang Baek f55e09e50d refac 2026-10-08 14:36:48 +04:00
Timothy Jaeryang Baek de73bb830a refac 2026-10-08 14:30:07 +04:00
Timothy Jaeryang Baek 639139aa7a refac 2026-10-08 02:11:42 +04:00
Timothy Jaeryang Baek 55e1c44c94 refac 2026-10-07 17:18:05 +04:00
Timothy Jaeryang Baek 6defd4a947 refac 2026-10-07 16:17:22 +04:00
Classic298 bcf99374f7 fix: JPEG and WebP images from a model are stored inside the chat instead of as files (#31975)
When a model returned an image, only PNG was saved as a file. JPEG and WebP images stayed as raw base64 data inside the chat in the database, so a 1.5 MB JPEG made the stored chat 1.5 MB larger. These images are now saved as files and the chat keeps only a link to them, the same way PNG already worked.

Fixes #31916
2026-10-07 15:47:01 +04:00
Classic298 728f397ff4 fix: earlier tool calls are sent twice after answering the model's question or pressing Continue (#32029)
When a reply was paused and then picked up again, either by answering a question from the built-in Ask User tool or by pressing Continue, every tool round from the second one on sent everything from before the pause to the model twice. Providers that reject repeated tool calls, like DeepSeek, then fail with "Duplicate 'call_id'" and the chat stops, while others quietly see the earlier tool calls and text twice. Everything from before the pause is now sent exactly once. Tested against a mock provider that records every request: three tool rounds after an answered question and after Continue send everything once, and replies that were never paused send exactly what they sent before.

Fixes #31991
2026-10-07 15:04:52 +04:00
Timothy Jaeryang Baek 7c9d73b605 refac 2026-10-07 12:37:50 +04:00
Classic298 88720c6928 fix: tool calls get mixed up between rounds when the model reuses tool call ids (#31887)
Some providers, like Kimi K3 on OpenRouter, number their tool calls from zero again each time the model calls tools within the same reply. A later batch of calls then overwrote the earlier calls with the same id, so the saved chat showed the earlier calls with the later arguments, and the model was sent its earlier results next to the wrong arguments. A new tool call whose id is already used in the same reply now gets a fresh id, so every call keeps its own arguments and result, and providers that send unique ids are untouched. Tested before and after against a mock provider that reuses ids on every round.

Fixes #28305
2026-10-05 11:19:45 +04:00
Timothy Jaeryang Baek fb741ebcd2 refac 2026-10-05 10:56:06 +04:00
Classic298 743a46bdcd fix: chat stays broken after a reply is stopped or fails before any text (#31892)
When a reply was stopped or failed before the model sent any text, the chat kept an empty reply, and every later message in that chat sent it back to the model as part of the conversation. Providers that reject empty assistant messages then refused every new request, so the chat stayed unusable unless the empty reply was deleted from the database by hand. Empty replies are now skipped when the conversation is sent to the model, as replies that ended in an error already were. Chats already stuck like this work again on their next message, since nothing stored has to change.

Fixes #25083
2026-10-03 17:06:03 +04:00
Classic298 e1248e5cfd fix: chat fails when an MCP server ID plus tool name is longer than 64 characters (#31822)
Open WebUI puts the MCP server ID in front of every MCP tool name it offers to the model. When the two together are longer than 64 characters, providers that cap tool names at 64 (the OpenAI API, AWS Bedrock) reject the whole chat request, even if the model never picks that tool. Names over the limit are now cut to 64 characters ending in a short hash, so the same tool always gets the same name and the MCP server is still called with the original tool name. Names that already fit are unchanged.

Fixes #31821
2026-10-01 20:27:58 +04:00