# FRIDAY Voice Console Push-to-talk MVP for talking to FRIDAY from a browser/phone, with a speaker-identification foundation for Jeremy's voice. ## Status MVP scaffold complete: - Browser UI records audio and sends it to the backend. - Backend transcribes through Speaches on the GPU machine. - Backend routes text into Hermes via `hermes chat -q`. - Backend speaks FRIDAY's response through Speaches/Kokoro. - JSON-backed speaker profile store supports voice embeddings and confidence thresholds. - Unknown speakers are treated as read-only. ## Runtime defaults - Speaches: `http://192.168.86.150:8000` - Hermes source: `friday-voice` - Confirmed speaker threshold: `0.85` - Probable speaker threshold: `0.70` - Data directory in container: `/data` ## Local verification ```bash cd /mnt/c/Users/Jeremy/projects/friday-voice python3 -m unittest discover -s tests -v python3 -m compileall friday_voice node --check web/app.js ``` ## Deployment layout Source project: ```text /mnt/c/Users/Jeremy/projects/friday-voice/ ``` Compose definition: ```text /mnt/c/Users/Jeremy/projects/docker/compose/hf-pdocker-01/friday-voice/docker-compose.yml ``` Traefik dynamic config draft: ```text /mnt/c/Users/Jeremy/projects/docker/stacks/traefik/dynamic/friday-voice.yml ``` Target host layout: ```text /opt/friday-voice/ # application source/build context /mnt/docker-data/compose/hf-pdocker-01/friday-voice/ /mnt/docker-data/configs/friday-voice/ # speaker profiles + generated TTS cache /mnt/docker-data/traefik/dynamic/friday-voice.yml ``` Deploy protocol, after review: ```bash # From workstation rsync -av --delete /mnt/c/Users/Jeremy/projects/friday-voice/ glyptic@192.168.86.192:/opt/friday-voice/ rsync -av /mnt/c/Users/Jeremy/projects/docker/compose/hf-pdocker-01/friday-voice/ glyptic@192.168.86.192:/mnt/docker-data/compose/hf-pdocker-01/friday-voice/ rsync -av /mnt/c/Users/Jeremy/projects/docker/stacks/traefik/dynamic/friday-voice.yml glyptic@192.168.86.192:/mnt/docker-data/traefik/dynamic/friday-voice.yml # On hf-pdocker-01 cd /mnt/docker-data/compose/hf-pdocker-01/friday-voice docker compose up -d --build curl -fsS http://127.0.0.1:8320/health ``` ## Speaker enrollment MVP The current MVP exposes `/api/enroll` and `/api/identify` for embedding vectors. The next build slice should add actual audio-to-embedding extraction using SpeechBrain ECAPA or resemblyzer, then wire that into the browser enrollment flow. Recommended thresholds: - `>= 0.85`: confirmed Jeremy - `0.70-0.84`: probable Jeremy, confirmation required for sensitive actions - `< 0.70`: unknown speaker, read-only ## Security notes - Voice identity is advisory, not a sole authorization factor. - Unknown speakers are read-only. - Environment writes still require explicit authorization and wiki documentation. - Secrets are never returned by voice.