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:
DrMelone 2026-05-03 20:08:19 +02:00
parent 4e2240aada
commit eec14f1c00

View file

@ -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,