From 92a346575badc2a36910db85e01ce54bac6ce35f Mon Sep 17 00:00:00 2001 From: silentoplayz Date: Sun, 7 Jun 2026 21:22:59 -0400 Subject: [PATCH] perf(retrieval): make URL fetch and file hash non-blocking with asyncio.to_thread - Wrap get_content_from_url() in asyncio.to_thread() inside get_sources_from_items() to prevent sync requests.get() from blocking the event loop when users attach URL sources to chat messages. The same function was already properly wrapped at retrieval.py:1839. - Wrap hashlib.sha256(contents).hexdigest() in asyncio.to_thread() inside upload_file_handler() to prevent CPU-bound hashing from blocking the event loop during file uploads (44ms/100MB, scales linearly with file size). --- backend/open_webui/routers/files.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/routers/files.py b/backend/open_webui/routers/files.py index cf3be4a08a..d9bff0b9e0 100644 --- a/backend/open_webui/routers/files.py +++ b/backend/open_webui/routers/files.py @@ -317,7 +317,9 @@ async def upload_file_handler( # SHA-256 of raw uploaded bytes for incremental sync diffing. # If the client pre-computed and sent file_hash, use that. - file_hash = file_metadata.get('file_hash') or hashlib.sha256(contents).hexdigest() + file_hash = file_metadata.get('file_hash') or await asyncio.to_thread( + lambda: hashlib.sha256(contents).hexdigest() + ) file_item = await Files.insert_new_file( user.id,