mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 16:54:43 +02:00
Serveur : /v1/ask accepte un model optionnel (validé contre STT_ALLOWED_MODELS), nouvel endpoint GET /v1/models (défaut + alias autorisés). Pas de switch global. Client : 'stt --text' (chat texte simple sans micro/HUD), '--model hermes|claude|qwen|opus' (noms courts → alias LiteLLM), commandes /model et /models en mode texte. Le modèle choisi est envoyé au serveur à chaque requête (voix comme texte). Claude-Session: https://claude.ai/code/session_013FmcxGsyXZXogiAHQLjnZT Co-authored-by: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| client | ||
| server | ||
| README.md | ||
STT — Assistant vocal "Jarvis" de Funk
Assistant vocal type Jarvis pour le homelab Funk, en architecture client-serveur :
server/— STT-server : orchestrateur AI dans le cluster k8s. Reçoit les requêtes des clients et route l'inférence vers LiteLLM (Qwen3 / Claude). Mémoire centralisée (futur).client/— commandesttinstallable sur le poste : capture micro, STT (Whisper), TTS (Piper), HUD graphique. Envoie le texte au serveur (URL paramétrable).
📐 Conception complète :
admin/ia/stt.md.
LAN / *.lab.local
┌─ POSTE ──────────┐ ┌─ CLUSTER k8s (ns ai) ──────────────┐
│ client `stt` │ HTTP │ STT-server (Deployment) │
│ • micro + Whisper│ ─────▶ │ POST /v1/ask → LiteLLM │
│ • Piper (TTS) │ ◀───── │ (→ s01 192.168.10.1:4000) │
│ • HUD web │ reply │ Ingress: stt.lab.local │
└───────────────────┘ └──────────────┬──────────────────────┘
▼
LiteLLM :4000 (s01)
→ Qwen3 (g01) / Claude
Client — installation (poste)
pipx install "git+ssh://git@github.com/Alkatrazz24/Funk-lab.git@<branche>#subdirectory=stt/client"
stt --setup # génère ~/.config/stt/stt.toml (dont [server] url)
stt --text # chat texte simple (sans micro ni HUD) — idéal pour tester
stt # voix + HUD ; dis "Ok Hermès …"
stt --model claude # choisir le modèle : hermes (défaut) | claude | qwen | opus
En mode texte : commandes /model <nom>, /models, /quit.
Prérequis voix : micro, Piper + voix dans ~/.local/share/piper/, aplay (alsa-utils).
Serveur — déploiement (cluster)
- Image : poussée sur
ghcr.io/alkatrazz24/funk-stt-serverpar le workflow.github/workflows/build-stt-server.yml(sur push touchantstt/server/). - ArgoCD :
k8s/apps-of-apps/apps/stt.yaml→ déploiek8s/apps/stt/depuismain. Tant que ce n'est pas mergé surmain, le cluster ne le prend pas. - Le serveur joint LiteLLM (s01, hors cluster) en IP directe
192.168.10.1:4000(même pattern qu'open-webui — pas de Service/Endpoints intermédiaire). - Image privée : le Deployment référence un
imagePullSecretghcr-pull. À créer une fois dans le nsai(même pratique queghostfolio-secret, non versionné) :kubectl create secret docker-registry ghcr-pull \ --docker-server=ghcr.io \ --docker-username=Alkatrazz24 \ --docker-password=<PAT_ghcr_read:packages> \ -n ai
Structure
stt/
├── client/ # commande `stt` (pipx) — voix + HUD
│ ├── pyproject.toml
│ ├── config/ # stt.example.toml + thèmes/avatars/voix
│ └── stt/ # cli, config, voice/, api.py (→ serveur), ui/ (HUD), hud/
└── server/ # STT-server (conteneur) — API + orchestration AI
├── pyproject.toml
├── Dockerfile
├── memory/ # mémoire distillée GitHub (futur, server-side)
└── stt_server/ # app.py (FastAPI), brain.py (→ LiteLLM), config.py