mirror of
https://github.com/open-webui/open-webui.git
synced 2026-09-16 23:43:03 +00:00
fix: prevent STT from blocking the uvicorn event loop
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:
parent
4e2240aada
commit
eec14f1c00
1 changed files with 3 additions and 2 deletions
|
|
@ -1,3 +1,4 @@
|
|||
import asyncio
|
||||
import hashlib
|
||||
import json
|
||||
import logging
|
||||
|
|
@ -1247,7 +1248,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)
|
||||
|
|
@ -1266,7 +1267,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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue