mirror of
https://github.com/open-webui/open-webui.git
synced 2026-07-20 15:19:51 -05:00
fix: prevent STT from blocking the uvicorn event loop (#24338)
The transcription endpoint was async but called the synchronous transcribe() function directly, blocking the single-threaded uvicorn event loop for the entire duration of inference. This caused all HTTP and WebSocket connections to stall for every user on the instance during STT processing. - Add asyncio import - Use async UploadFile.read() instead of synchronous file.file.read() - Offload the blocking transcribe() call via asyncio.to_thread() Closes #24169
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import asyncio
|
||||
import hashlib
|
||||
import json
|
||||
import logging
|
||||
@@ -1258,7 +1259,7 @@ async def transcription(
|
||||
id = uuid.uuid4()
|
||||
|
||||
filename = f'{id}.{ext}'
|
||||
contents = file.file.read()
|
||||
contents = await file.read()
|
||||
|
||||
file_dir = os.path.join(CACHE_DIR, 'audio', 'transcriptions')
|
||||
os.makedirs(file_dir, exist_ok=True)
|
||||
@@ -1277,7 +1278,7 @@ async def transcription(
|
||||
if language:
|
||||
metadata = {'language': language}
|
||||
|
||||
result = transcribe(request, file_path, metadata, user)
|
||||
result = await asyncio.to_thread(transcribe, request, file_path, metadata, user)
|
||||
|
||||
return {
|
||||
**result,
|
||||
|
||||
Reference in New Issue
Block a user