657 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
Timothy Jaeryang Baek 3539ad6321 refac 2026-10-21 16:35:31 +09:00
Timothy Jaeryang Baek 131ddc32ec refac 2026-10-21 11:07:10 +09:00
Timothy Jaeryang Baek b4a58be193 refac 2026-10-21 09:15:15 +09:00
G30 97f5c4e973 fix: Archive All Chats takes chats out of their folders, so deleting a folder no longer deletes them (#32647) 2026-10-21 03:18:03 +09:00
Classic298 93ba628f3a fix: generated images never show up after the user answers the model's question or approves a tool (#32680)
When the model asked the user a question, or a tool call was approved or rejected, the reply was saved in a way that broke adding anything to it later in the same turn. If the model then generated an image, the image was created but never shown, the tool returned "unsupported operand type(s) for +: 'NoneType' and 'list'" and the model kept retrying, generating more hidden images. Progress status updates for that reply were also silently dropped. Both now work after a question or tool approval.

Fixes #32678
2026-10-21 02:39:39 +09:00
G30 312d113fd0 Merge pull request #32709 from silentoplayz/fix/prompt-save-unchanged-no-version
fix: saving a prompt without changes adds no version to its history
2026-10-21 01:06:59 +09:00
Timothy Jaeryang Baek 4b81b12ed4 chore: format 2026-10-16 15:20:15 +04:00
Timothy Jaeryang Baek 788a61180b refac 2026-10-16 04:20:14 +04:00
Timothy Jaeryang Baek b4db56ae96 refac 2026-10-16 02:46:20 +04:00
Timothy Jaeryang Baek 00f12c0e47 refac 2026-10-14 18:49:51 +04:00
G30 29289f5ba6 fix: deleting a message in the middle of a chat keeps the earlier messages in the model's context (#32332) 2026-10-14 18:30:31 +04:00
Timothy Jaeryang Baek 323139cdf5 refac 2026-10-14 18:11:14 +04:00
Timothy Jaeryang Baek 35c927ba99 refac 2026-10-14 14:59:41 +04:00
Timothy Jaeryang Baek e5c80682b9 refac 2026-10-14 14:41:26 +04:00
Timothy Jaeryang Baek ed8c744e77 refac 2026-10-14 00:19:15 +04:00
Timothy Jaeryang Baek 3f6c3e31a0 refac 2026-10-13 22:04:15 +04:00
Timothy Jaeryang Baek be6f0a6656 refac 2026-10-13 17:22:11 +04:00
G30 99a9f60b9f fix: a model added before Regenerate stays side by side after reload (#32326) 2026-10-13 16:46:01 +04:00
Timothy Jaeryang Baek 4ca8fdc3fd refac 2026-10-13 01:55:12 +04:00
Timothy Jaeryang Baek 03f5191aca refac 2026-10-13 01:49:55 +04:00
Timothy Jaeryang Baek 1786d6cdb0 refac 2026-10-13 00:43:00 +04:00
Timothy Jaeryang Baek d823ebd96d refac 2026-10-12 23:59:19 +04:00
Classic298 113a64ad1a perf: speed up one-word chat search (#32268)
Chat search checks the whole query and each word in it separately. With a single word those are the same check, so every chat got searched twice. It is now searched once, with the same results. On PostgreSQL with 2164 chats (533 MB of chat data) a one-word search is about 40% faster:

| search | before | after |
|---|---|---|
| proxy | 6.0 s | 3.6 s |
| opnsense | 6.1 s | 3.8 s |
| no match | 5.4 s | 3.0 s |

Refs #32266
2026-10-12 23:32:52 +04:00
Timothy Jaeryang Baek 4ab60527e7 refac 2026-10-12 22:14:04 +04:00
Timothy Jaeryang Baek 6229405b4d refac 2026-10-12 19:08:40 +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
Timothy Jaeryang Baek fea827bc2e chore: format 2026-10-10 23:18:09 +04:00
Timothy Jaeryang Baek 93723bd315 refac 2026-10-10 22:39:57 +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 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
Classic298 7f3749ed6b fix: user created in the same second as the first admin takes over its protection (#32157)
Account creation times are stored in whole seconds. On Postgres, a user created in the same second as the first admin, which is normal when a script sets up an instance, could be picked as the primary admin. Other admins could then demote or delete the real first admin, nobody could edit, lock or delete that user, and pending users were shown that user as the admin contact. An admin account now wins a same-second tie against a regular one.
2026-10-10 20:01:41 +04:00
Classic298 2dff26b1b9 fix: skill versions saved within the same second are listed in random order (#32167)
When a skill was saved several times within one second, its version history in the skill editor listed those versions in a shuffled order. This happens when a model edits a skill several times in one reply, or when an import replaces a skill right after it was created. Each new version now gets a save time at least one second later than the one before it, so the history keeps the order the versions were saved in. During such a burst, the shown save time runs ahead by about one second per extra save.

Fixes #32134
2026-10-10 19:49:21 +04:00
Classic298 1579af28a0 fix: skill search does not find a skill by its translated name (#32174)
Searching Workspace > Skills only matched a skill's original name, description and id, so typing the German name given to a skill in its editor found nothing, even with the interface in German. The search now also matches the names and descriptions translated in the skill editor, in any language, so both the translated and the original name find the skill, as the Translations page in the docs says.

Fixes #32018
2026-10-10 19:48:08 +04:00
Timothy Jaeryang Baek e6476928ee refac 2026-10-09 18:37:55 +04:00
Timothy Jaeryang Baek 27b48b70df refac 2026-10-09 17:05:53 +04:00
Timothy Jaeryang Baek 16849284ff refac 2026-10-09 17:01:47 +04:00
Timothy Jaeryang Baek 24ee1cb168 refac 2026-10-09 16:31:34 +04:00
Timothy Jaeryang Baek 33dd7dd224 refac 2026-10-09 16:17:11 +04:00
Timothy Jaeryang Baek 9bbb95048b refac 2026-10-09 15:07:43 +04:00
Timothy Jaeryang Baek 538f9c9090 refac 2026-10-09 12:07:57 +04:00
Timothy Jaeryang Baek ce18eca340 refac 2026-10-08 19:36:27 +04:00
Timothy Jaeryang Baek 6cfd6987e5 refac 2026-10-08 14:58:06 +04:00
Timothy Jaeryang Baek de73bb830a refac 2026-10-08 14:30:07 +04:00