From 29f530cb458286c51e6e7be2eba3a57c5f6c40d7 Mon Sep 17 00:00:00 2001 From: alkatrazz Date: Sun, 21 Jun 2026 04:08:36 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20journal=202026-06-21=20+=20=C3=A9tat=20?= =?UTF-8?q?STT=20(portail,=20contextes,=20intents,=20actions=20Hermes)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - progress/2026-06-21.md : récap complet de la journée (portail + santé live, contextes visualiseur + presets live, intents vocaux, jeton Ghostfolio unifié, actions via Hermes, ASR Parakeet) + l'incident de merge des PR empilées et sa leçon. - PROGRESS.md : ligne du jour. - CLAUDE.md : « État actuel » daté 2026-06-21, ligne STT enrichie. Co-Authored-By: Claude Opus 4.8 --- CLAUDE.md | 4 +- PROGRESS.md | 1 + progress/2026-06-21.md | 101 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 progress/2026-06-21.md diff --git a/CLAUDE.md b/CLAUDE.md index a86b73f..b707b83 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co **Funk** — homelab IA composé d'un cluster Kubernetes (Talos) pour les services applicatifs, d'un hôte d'inférence LLM dédié (gpu-01 / llama-server ROCm), et d'un agent autonome (Hermes Agent) sur storage-01. Stack IaC complète : Ansible + talhelper + ArgoCD. -**État actuel (2026-06-18)** : +**État actuel (2026-06-21)** : - ✅ Hermes Agent opérationnel — multi-profils (funk-ai/system/monitor/brain) - ✅ Qdrant réparé (2026-06-17) — fin du crash-loop (segment `funk-docs` corrompu, voir `admin/incidents.md`). ⚠️ La collection RAG `funk-docs` a été supprimée lors de la réparation → **re-`rag-ingest` requis** pour réactiver `rag-query` - ✅ Monitoring complet — Prometheus + Grafana + AlertManager → webhook Hermes + n8n @@ -17,7 +17,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co - ✅ postfix_relay — SMTP sortant via Gmail SMTP + App Password (aliyesilkaya93@gmail.com) - ✅ Open WebUI opérationnel — `openwebui.lab.local`, namespace `ai`, backend LiteLLM - ✅ n8n opérationnel — `n8n.lab.local`, namespace `ai`, 3 workflows actifs (alertes, rapport horaire, Hermes Doc Worker) -- ✅ STT (assistant vocal « Jarvis ») — STT-server in-cluster (`stt.lab.local`, namespace `ai`) + client `stt` (pipx) : HUD avancé (design Claude Design), auto-start systemd `--user`, app de bureau (`stt --install-desktop`, fenêtre type Discord) + auto-update (`stt --update`) ; mémoire long-terme Qdrant `stt-memory` validée 2026-06-17 (voir `admin/ia/stt.md`) +- ✅ STT (assistant vocal « Jarvis ») — STT-server in-cluster (`stt.lab.local`, namespace `ai`) + client `stt` (pipx) : HUD avancé (design Claude Design), auto-start systemd `--user`, app de bureau + auto-update ; mémoire long-terme Qdrant `stt-memory`. **Nouveau (2026-06-21)** : **portail de services** dans le HUD (tuiles + pages détail + santé live Prometheus/Alertmanager), **contextes** présélectionnables (funk/ghostfolio/grafana/alerting/cluster) avec **données live injectées** + **visualiseur** (« voir ce qu'on envoie à Asa »), **intents vocaux** (« ouvre X », « état du cluster », « combien sur mon ghostfolio »), ASR enfichable **Parakeet (onnx)**, et **actions via Hermes** (contexte « agent » → `hermes-exec` → `hermes -z --yolo`, opt-in + confirmation + jeton). Voir `admin/ia/stt.md` et `progress/2026-06-21.md` - ✅ Ghostfolio opérationnel — `ghostfolio.lab.local`, namespace `ai`, suivi de portefeuille (PostgreSQL s01 + Redis in-cluster) - ✅ hermes-auto-improve — analyse quotidienne de `admin/` par Hermes à 22h (n8n → trigger :9095), PR sur `hermes/daily-work` - ⏳ WOL compute nodes non configuré (BIOS) — allumage manuel requis diff --git a/PROGRESS.md b/PROGRESS.md index c9f4a82..1207510 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -11,3 +11,4 @@ | [2026-05-14](progress/2026-05-14.md) | Monitoring complet + fix webhook AlertManager→Hermes (BrokenPipeError). RAG opérationnel : Qdrant 284 chunks, rag-ingest/rag-query, skill funk-ai. Souls révisés (4 profils). Docs : alertmanager-webhook, rag, hermes-souls | | [2026-05-29](progress/2026-05-29.md) | Migration `/srv/data` RAID5 dégradé → NVMe (sdb ATA errors). Tous les services sur NVMe, bind-mount `/home/data` | | [2026-06-18](progress/2026-06-18.md) | STT : HUD avancé (design Claude Design, #17), auto-start systemd, app de bureau (`.desktop` + mode fenêtre), auto-update (`stt --update`), compat AlmaLinux/Debian. Passe de cohérence doc (#15, #16) | +| [2026-06-21](progress/2026-06-21.md) | STT : portail de services + santé live (#34-36), contextes (visualiseur + presets live, #38/#39), intents vocaux (#40), jeton Ghostfolio unifié (#41), **actions via Hermes** (`hermes -z --yolo`, rôle hermes_exec + contexte agent, #42/#43), ASR Parakeet activé | diff --git a/progress/2026-06-21.md b/progress/2026-06-21.md new file mode 100644 index 0000000..5fb4d4a --- /dev/null +++ b/progress/2026-06-21.md @@ -0,0 +1,101 @@ +# 2026-06-21 — STT : portail de services, contextes (visualiseur + presets live), intents vocaux & actions via Hermes + +## Résumé + +Très grosse itération sur **STT** (client + serveur). Le client gagne un **portail de services** +(tuiles + pages détail avec santé live), un **sélecteur de contexte** et un **visualiseur** ; le +serveur gagne des **contextes présélectionnables** qui injectent des **données live** (Ghostfolio, +Prometheus, Alertmanager) et renvoient le contexte assemblé. Côté voix, des **intentions locales** +(« ouvre X », « état du cluster », « combien sur mon ghostfolio »). Enfin, **Asa peut agir** sur le +homelab via le **vrai agent Hermes** (`hermes -z --yolo`), derrière confirmation + jeton. + +Bascule aussi : **ASR Parakeet (onnx)** activé sur le poste, **jeton Ghostfolio unifié** (source +client unique, appel côté serveur). + +--- + +## Portail de services dans le HUD (#34, #35, #36) + +- **#34** — registre config-driven (`stt/portal/registry.py`, `[[services]]`) → panneau « Services » + (tuiles cliquables) + ouverture dans le navigateur normal. Ajouter un service = quelques lignes. +- **#35** — contrôles du service dans le HUD (Redémarrer / Mettre à jour / Arrêter) + commandes + `stt --start` / `--restart`. Process détaché : systemd possède le job, le restart va à son terme. +- **#36** — **pages détail** par service (description, **santé live**, composants, alertes, bouton + Ouvrir) + pastilles live + badge d'alertes. Santé = `health.py` (StatusPoller) : probe HTTP + + **Prometheus** `up{}`/kube-state-metrics + **Alertmanager** (hors Watchdog), parallélisé. + +--- + +## Contextes d'Asa — visualiseur + presets live (#38 serveur, #39 client) + +Asa n'est plus bloqué sur le seul contexte « doc grounding-strict » (d'où les « la doc ne le précise +pas » incompris). **5 contextes** : `funk` (RAG doc), `ghostfolio`, `grafana`, `alerting`, `cluster` — +chacun change le system prompt **et injecte les données live** du domaine (`contexts.py` + `sources.py`). + +- `/v1/ask` accepte `context` et renvoie le **contexte assemblé** → **visualiseur** du HUD (« voir + exactement ce qu'on envoie à Asa » : consigne + données live + RAG + mémoire). +- Client : **sélecteur** (Réglages) + **drawer visualiseur** (icône ▤) + affichage de la version. + +--- + +## Intentions vocales locales (#40, lecture seule) + +Reconnues avant le LLM (`portal/intents.py`, interceptées dans `engine._respond`) : +« ouvre <service> » (ouvre la page), « état du cluster/services » (résumé santé parlé), +« combien sur mon ghostfolio » (API Ghostfolio). Court-circuitent le LLM (mode « portail »). + +> ⚠️ Incident de merge : #37 (intents) avait été mergé dans sa **branche de base** (PR empilée, +> branche supprimée) → jamais propagé à `main`. Idem l'affichage de version. **Récupérés** (#40) en +> fusionnant `engine._respond` (intent_router + context_provider). Leçon : merger les PR empilées +> dans l'ordre base→sommet, ou rebaser sur `main` avant merge. + +--- + +## Jeton Ghostfolio unifié (#41) + +Avant : jeton en double (config client pour l'intent + secret k8s pour le contexte). Désormais +**une source unique** — la config client — **transmise au serveur**, qui fait tous les appels +Ghostfolio (`/v1/portfolio` + `secrets` dans `/v1/ask`). `portal/ghostfolio.py` (client) supprimé. + +--- + +## Actions cluster via Hermes (#42, activé #43) + +**L'autre moitié de la vision : Asa peut AGIR.** Découverte clé : **Hermes n'a pas d'API HTTP** +(appli TUI ; le « gateway :8080 » de la doc n'écoute pas) — mais un **mode one-shot** `hermes -z +"" --yolo` (profil défaut, tous outils). + +- **storage-01** — rôle Ansible `hermes_exec` : service HTTP `:9096` (en user `hermes`) qui lance + `hermes -z --yolo` derrière un **jeton Bearer** (`vault_hermes_exec_token`), avec timeout + audit + (`/var/log/hermes-exec.log`). **Déployé et vérifié** (actif, 401 sans jeton). +- **STT-server** — contexte **« agent »** (court-circuite le LLM) : **handshake de confirmation + 2 temps** par session (« tu veux que… ? » → « confirme »/« annule ») → appelle hermes-exec. + **Opt-in** (`STT_ACTIONS_ENABLED`, défaut false) ; le contexte n'apparaît que si activé + jeton. +- **Sécurité** : désactivé par défaut, jeton obligatoire, `--yolo` seulement jeton+confirmation en + main (la confirmation protège des erreurs de transcription), audit. **Client : aucun changement**. +- Secret k8s `stt-server-secrets/hermes-exec-token` créé. **#43** bascule le flag → après merge, + le contexte 🤖 Agent est opérationnel. + +--- + +## ASR Parakeet activé (poste) + +Bascule du client sur `asr_engine = "onnx"` (NVIDIA Parakeet `nemo-parakeet-tdt-0.6b-v3`, CPU) : +~11× temps réel (0,31 s pour 3,6 s), « Hermès » bien transcrit. Whisper conservé en repli. + +--- + +## Versions + +- Client `stt` : `0.7.0 → 0.13.0` (portail, contrôles, santé, contextes, intents, version, unification). +- STT-server : `0.3.1 → 0.6.0` (grounding strict, contextes + sources live, /v1/portfolio, contexte agent). + +--- + +## Prochaines étapes + +- **Merger #43** → activer les actions ; faire le 1er test vocal avec confirmation (HUD → 🤖 Agent). +- Optionnel : ajouter le jeton Ghostfolio en config client si l'intent « combien » est souhaité hors contexte. +- Streaming ASR (transcription partielle live dans le HUD). +- Corriger le wake word (« Asa » vs « Hermès ») si désiré. +- Nettoyer les branches locales `claude/stt-*` devenues inutiles.