Initial FRIDAY Voice Console scaffold
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user