# Voice Streaming — Phase 2 Architecture ## Проблема Поточний pipeline (Phase 1): ``` User stops → STT → [full LLM text] → TTS request → audio plays ↑ Bottleneck: 8–12s ``` TTS запускається лише після **повного** тексту від LLM. Результат: E2E latency = `llm_total + tts_compute` (~10–14s). ## Ціль Phase 2 ``` User stops → STT → [LLM first chunk] → TTS(chunk1) → audio starts ↓ [LLM continues] → TTS(chunk2) → audio continues ``` **E2E TTFA** (time-to-first-audio): ~`llm_first_sentence + tts_compute` = ~3–5s. --- ## Архітектура ### Варіант A (рекомендований): "Sentence chunking" без streaming Не потребує streaming від LLM. Кроки: 1. BFF робить `POST /api/generate` з `stream=true` до Ollama. 2. BFF накопичує токени до першого `[.!?]` або 100 символів. 3. Одразу `POST /voice/tts` для першого речення. 4. Паралельно продовжує читати LLM stream для наступних речень. 5. Браузер отримує перший аудіо chunk → починає відтворення. 6. Наступні chunks додаються через MediaSource API або sequential `