Document Speaches speech layer, on-device processing limits, latency constraints
- STT/TTS move to a shared Speaches container (OpenAI-format, GPU, port 8601 proposed); gateway becomes a thin orchestrator with pluggable speech backends (speaches default, embedded fallback) - Record the on-device ceiling: WakeNet wake word, VAD, ES7210 AEC, optional MultiNet fixed commands; open-vocabulary STT permanently out - Record the real latency bottleneck (Tatlock ~2 min full local flow): gateway must stream chat tokens and synthesize sentence-by-sentence - Plan reply_delta + barge-in protocol additions Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,28 +25,28 @@ happens on this server.
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────┐ WebSocket (PCM audio + JSON events)
|
||||
│ DeskLock device │◄──────────────────────────────────────────┐
|
||||
│ (ESP32-P4) │ │
|
||||
│ │ ┌──────────────────────────────────┴──┐
|
||||
│ • LVGL face │ │ DeskLock Gateway (container) │
|
||||
│ • Touch input │ │ on tower-of-joy │
|
||||
│ • Mic capture+AEC │ │ │
|
||||
│ • TTS playback │ │ • STT: faster-whisper (GPU) │
|
||||
└─────────────────────┘ │ • TTS: Piper │
|
||||
│ • Chat: Tatlock /v1/chat/completions│
|
||||
└──────────────────┬───────────────────┘
|
||||
│ HTTP (LAN, :8000)
|
||||
┌──────────┴──────────┐
|
||||
│ Tatlock (butler) │
|
||||
│ tatlock.schweitz. │
|
||||
│ internal │
|
||||
└─────────────────────┘
|
||||
┌──────────────────────┐ WebSocket: PCM audio + JSON events
|
||||
│ DeskLock device │◄───────────────────────────────────┐
|
||||
│ (ESP32-P4) │ │
|
||||
│ • LVGL face │ ┌──────────────────────────────┴───────────┐
|
||||
│ • touch / wake word │ │ DeskLock Gateway (container, :8600) │
|
||||
│ • mic capture + AEC │ │ thin orchestrator — no ML dependencies │
|
||||
│ • TTS playback │ └───────┬──────────────────┬───────────────┘
|
||||
└──────────────────────┘ │ │ OpenAI-format HTTP
|
||||
│ ▼
|
||||
HTTP (LAN) │ ┌─────────────────────────────┐
|
||||
▼ │ Speaches (container, GPU) │
|
||||
┌────────────────────┐ │ • STT: faster-whisper │
|
||||
│ Tatlock (butler) │ │ • TTS: Kokoro / Piper │
|
||||
│ tatlock.schweitz. │ │ also usable by Open WebUI, │
|
||||
│ internal :8000 │ │ Home Assistant, … │
|
||||
└────────────────────┘ └─────────────────────────────┘
|
||||
```
|
||||
|
||||
Tatlock stays a text-only brain. The **gateway** is Tatlock's ears and mouth: it converts
|
||||
speech to text on the way in and text to speech on the way out, keeping the device firmware
|
||||
thin (audio transport + face rendering only).
|
||||
Tatlock stays a text-only brain. The **gateway** orchestrates speech-to-text, chat, and
|
||||
text-to-speech; the **Speaches** container owns the actual STT/TTS models on the GPU,
|
||||
shared homelab-wide. The device firmware stays thin: audio transport, wake word, and
|
||||
face rendering only. Everything runs on the LAN — no cloud in the voice path.
|
||||
|
||||
See [docs/architecture.md](docs/architecture.md) for the full design.
|
||||
|
||||
@@ -69,4 +69,5 @@ See [docs/architecture.md](docs/architecture.md) for the full design.
|
||||
- [Waveshare wiki: ESP32-P4-WIFI6-Touch-LCD-3.4C](https://www.waveshare.com/wiki/ESP32-P4-WIFI6-Touch-LCD-3.4C)
|
||||
- [Official examples repo (waveshareteam/ESP32-P4-WIFI6-Touch-LCD-XC)](https://github.com/waveshareteam/ESP32-P4-WIFI6-Touch-LCD-XC)
|
||||
- [BSP component: waveshare/esp32_p4_wifi6_touch_lcd_xc](https://components.espressif.com/components/waveshare/esp32_p4_wifi6_touch_lcd_xc)
|
||||
- [Speaches — self-hosted OpenAI-compatible speech server](https://github.com/speaches-ai/speaches)
|
||||
- Tatlock backend: `/mnt/media/Projects/tatlock` — https://tatlock.schweitz.net
|
||||
|
||||
Reference in New Issue
Block a user