Files
esp32-server/requirements.txt
kunthawat 261b0f3e91 feat: wire Opus decode + VAD turn detection to firmware-compatible reply
Device streams continuous 20ms Opus frames with no turn markers. The loop
now decodes Opus, feeds the VAD, fires one turn on end-of-speech, and
replies with the firmware JSON contract (tts.state / stt.text) + Opus audio.

- app/audio/opus.py: RealOpus/Opus16kEncoder/PassthroughOpus; fix add_dll_directory
  to use absolute paths (WinError 87)
- app/xiaozhi/websocket.py: DeviceLoop.run() = decode -> VAD -> run_turn -> reply
- app/config.py: AudioConfig (opus kind + VAD thresholds)
- config.yaml: audio.opus=real, VAD 5/8/3000 frames
- tests/test_app.py: utterance = loud burst + silence; asserts stt + audio + tts stop
- requirements.txt: opuslib>=3

21/21 tests; live handshake verified via zhi.moreminimore.com on venv python.
2026-10-03 20:35:38 +07:00

17 lines
396 B
Plaintext

# Hermes-Xiaozhi Bridge — runtime dependencies (Phase 1)
# GPU/STT/TTS/opus libraries are NOT listed: backends are lazy-imported and
# enabled only on the voice-server (CON-002).
fastapi>=0.110
uvicorn[standard]>=0.29
pydantic>=2.6
pyyaml>=6.0
httpx>=0.27
websockets>=12
# audio codec (CON-002: lazy-imported; enabled by audio.opus: real)
opuslib>=3
# dev/test
pytest>=8
pytest-asyncio>=0.23