mirror of
https://github.com/open-webui/open-webui.git
synced 2026-07-16 23:21:44 -05:00
[PR #23705] [MERGED] fix(retrieval): offload Loader.load to a worker thread so file uploads stop blocking the event loop #130990
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/open-webui/open-webui/pull/23705
Author: @Classic298
Created: 4/14/2026
Status: ✅ Merged
Merged: 4/14/2026
Merged by: @tjbck
Base:
dev← Head:claude/fix/loader-aload-async📝 Commits (1)
62523fefix(retrieval): offload Loader.load to a worker thread so file uploads stop blocking the event loop📊 Changes
2 files changed (+14 additions, -1 deletions)
View changed files
📝
backend/open_webui/retrieval/loaders/main.py(+13 -0)📝
backend/open_webui/routers/retrieval.py(+1 -1)📄 Description
Loader.load() dispatches to the underlying langchain document loaders (PyMuPDF, Unstructured, python-docx, Tika, …) which are all synchronous and CPU/IO-bound. process_file() awaited it directly on the event loop, so parsing a non-trivial PDF/DOCX would freeze the entire FastAPI app for the duration of the parse — which is what users experience as "the server hangs whenever I upload a file."
Add an
aload()async wrapper on Loader that runs the sync load on a worker thread via asyncio.to_thread, and update process_file() to await it. The sync API is preserved so existing callers that already run inside run_in_threadpool (e.g. save_docs_to_vector_db) are unaffected.Contributor License Agreement
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.