fix: avoid blocking audio writes

TTS responses were written synchronously from the async presentation pipeline, blocking concurrent requests. Offload byte writes to a worker thread and add a regression test that keeps the event loop responsive.
This commit is contained in:
Sanjay Santhanam 2026-07-18 17:46:31 -07:00
parent 32bb099025
commit 5cc05d90f0
3 changed files with 38 additions and 2 deletions

View file

@ -0,0 +1,29 @@
import asyncio
import threading
import pytest
from app.utils.file_io import write_bytes
pytestmark = pytest.mark.unit
@pytest.mark.asyncio
async def test_write_bytes_does_not_block_event_loop(monkeypatch, tmp_path):
write_started = threading.Event()
release_write = threading.Event()
def blocking_write(_path, _content):
write_started.set()
release_write.wait(timeout=1)
return 5
monkeypatch.setattr("pathlib.Path.write_bytes", blocking_write)
task = asyncio.create_task(write_bytes(str(tmp_path / "audio.mp3"), b"audio"))
while not write_started.is_set():
await asyncio.sleep(0)
assert not task.done()
release_write.set()
await task