Funk-lab/stt/README.md
ALI YESILKAYA 47936b0088
fix(stt): joindre LiteLLM en IP directe (192.168.10.1:4000) (#6)
L'indirection litellm-ext (Service sans sélecteur + Endpoints manuel) ne routait pas
('All connection attempts failed'). open-webui joint LiteLLM en IP directe — on copie
ce pattern éprouvé et on supprime litellm-external.yaml.


Claude-Session: https://claude.ai/code/session_013FmcxGsyXZXogiAHQLjnZT

Co-authored-by: Claude <noreply@anthropic.com>
2026-06-17 13:19:51 +02:00

3.3 KiB

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/ — commande stt installable 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                    # lance la voix + ouvre le HUD ; dis "Ok Hermès …"

Prérequis poste : micro, Piper + voix dans ~/.local/share/piper/, aplay (alsa-utils).

Serveur — déploiement (cluster)

  1. Image : poussée sur ghcr.io/alkatrazz24/funk-stt-server par le workflow .github/workflows/build-stt-server.yml (sur push touchant stt/server/).
  2. ArgoCD : k8s/apps-of-apps/apps/stt.yaml → déploie k8s/apps/stt/ depuis main. Tant que ce n'est pas mergé sur main, le cluster ne le prend pas.
  3. 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).
  4. Image privée : le Deployment référence un imagePullSecret ghcr-pull. À créer une fois dans le ns ai (même pratique que ghostfolio-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