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:
Classic298 2026-05-08 19:05:28 +02:00 • committed by GitHub
parent 1c1c8b18e5
commit 7e275c1daa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

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