Files

92 lines
2.8 KiB
Markdown

# 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.