[PR #22107] [MERGED] perf: async DB calls, skip intermediate status writes, elif chain in event emitter #65346

Closed
opened 2026-05-06 11:08:00 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/open-webui/open-webui/pull/22107
Author: @Classic298
Created: 3/1/2026
Status: Merged
Merged: 3/1/2026
Merged by: @tjbck

Base: devHead: perf/async-event-emitter-db


📝 Commits (1)

  • f52480f perf: async DB calls, skip intermediate status writes, elif chain in event emitter

📊 Changes

1 file changed (+37 additions, -21 deletions)

View changed files

📝 backend/open_webui/socket/main.py (+37 -21)

📄 Description

Three improvements to the socket event emitter hot path (when realtime chat save is enabled):

  1. Wrap all synchronous Chats.* DB calls in asyncio.to_thread() to avoid blocking the event loop during streaming. With N concurrent users, sync DB calls serialize all writes and block socket event delivery.

  2. Only persist final (done=True) status events to DB. Intermediate statuses (tool calling progress, web search progress, etc.) are ephemeral UI-only data already delivered via socket — writing every one to DB is unnecessary I/O.

  3. Convert if/if/if chain to if/elif since event types are mutually exclusive, avoiding unnecessary string comparisons after a match.

Contributor License Agreement

By submitting this pull request, I confirm that I have read and fully agree to the Contributor License Agreement (CLA), and I am providing my contributions under its terms.

Note

Deleting the CLA section will lead to immediate closure of your PR and it will not be merged in.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/open-webui/open-webui/pull/22107 **Author:** [@Classic298](https://github.com/Classic298) **Created:** 3/1/2026 **Status:** ✅ Merged **Merged:** 3/1/2026 **Merged by:** [@tjbck](https://github.com/tjbck) **Base:** `dev` ← **Head:** `perf/async-event-emitter-db` --- ### 📝 Commits (1) - [`f52480f`](https://github.com/open-webui/open-webui/commit/f52480f7a569affa2f1ff48316df4cdfd5edd6ca) perf: async DB calls, skip intermediate status writes, elif chain in event emitter ### 📊 Changes **1 file changed** (+37 additions, -21 deletions) <details> <summary>View changed files</summary> 📝 `backend/open_webui/socket/main.py` (+37 -21) </details> ### 📄 Description Three improvements to the socket event emitter hot path (when realtime chat save is enabled): 1. Wrap all synchronous Chats.* DB calls in asyncio.to_thread() to avoid blocking the event loop during streaming. With N concurrent users, sync DB calls serialize all writes and block socket event delivery. 2. Only persist final (done=True) status events to DB. Intermediate statuses (tool calling progress, web search progress, etc.) are ephemeral UI-only data already delivered via socket — writing every one to DB is unnecessary I/O. 3. Convert if/if/if chain to if/elif since event types are mutually exclusive, avoiding unnecessary string comparisons after a match. ### Contributor License Agreement <!-- 🚨 DO NOT DELETE THE TEXT BELOW 🚨 Keep the "Contributor License Agreement" confirmation text intact. Deleting it will trigger the CLA-Bot to INVALIDATE your PR. --> By submitting this pull request, I confirm that I have read and fully agree to the [Contributor License Agreement (CLA)](https://github.com/open-webui/open-webui/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT), and I am providing my contributions under its terms. > [!NOTE] > Deleting the CLA section will lead to immediate closure of your PR and it will not be merged in. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-05-06 11:08:00 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#65346