feat(llama_server): heartbeat embed — garde chaud le slot nomic :1238 (#28)

Le grounding RAG du STT ratait par intermittence (docs=0 → réponses génériques)
parce que l'instance d'embedding :1238 partait à froid après une pause : la 1ʳᵉ
requête mettait 5-8 s et dépassait le timeout 4 s du STT-server (recall + RAG doc).

llama-embed-heartbeat : service systemd local sur gpu-01 qui envoie un petit embed
à :1238 toutes les 20 s → le slot reste résident/chaud → la 1ʳᵉ vraie requête est
rapide → docs>0 fiable. Pendant du llm-heartbeat (slot chat :1234), pour le slot embed.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ALI YESILKAYA 2026-06-19 22:17:23 +02:00 committed by GitHub
parent 11693e2abf
commit 1b85d4ee65
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 140 additions and 0 deletions

View file

@ -168,3 +168,42 @@ vrac, et sonde au plus près du serveur figé.
1. `llm-heartbeat` (storage-01, rôle `litellm`) — garde la connexion chaude (anti-péremption).
2. `request_timeout: 20` + `num_retries: 2` (LiteLLM) + retry STT-server — bornent le blip.
3. `llama-watchdog` (gpu-01, rôle `llama_server`) — répare le wedge ROCm à la source.
---
## 2026-06-19 (suite) — slot d'embedding `:1238` froid → RAG du STT raté (`docs=0`)
### Symptôme
Après déploiement du grounding RAG du STT-server (le cerveau interroge `funk-docs`), les
réponses sur le homelab étaient **intermittentes** : parfois ancrées dans la doc, parfois
génériques (« serveur XMPP », « worker nodes »…). Log du pod `stt-server` :
```
ask … recall=5471ms … docs=6 ← embed OK → 6 extraits doc injectés → réponse ancrée
ask … recall=8330ms … docs=0 ← embed à 8 s → timeout → 0 extrait → réponse générique
```
### Cause
L'instance d'embedding dédiée (`nomic-embed-text`, gpu-01 `:1238`) part **à froid** après une
pause : le slot GPU devient inactif, la 1ʳᵉ requête met 5-8 s (réchauffe + VRAM). Or le
STT-server borne le recall mémoire **et** la recherche doc à `4 s` (chemin de réponse). Au-delà :
`recall` renvoie `([], None)``knowledge.search` ré-embed (2ᵉ timeout) → `docs=0` → le cerveau
répond sans contexte. Même famille que le wedge chat, sur l'**autre slot** GPU — mais ici pas de
freeze, juste une latence à froid. Le slot chat `:1234` est gardé chaud par `llm-heartbeat`,
l'embed `:1238` ne l'était **pas**.
### Correctif — heartbeat embed (rôle `llama_server`)
`llama-embed-heartbeat` : service systemd local sur gpu-01 qui envoie un petit embed à `:1238`
toutes les `llama_embed_heartbeat_interval` s (défaut 20). Le slot reste **résident/chaud** → la
1ʳᵉ vraie requête est rapide → recall + RAG doc tiennent dans les 4 s → `docs>0` fiable.
```bash
ansible-playbook -i inventory.yml playbooks/gpu-01.yml --tags llama_server # déploie le heartbeat embed
systemctl status llama-embed-heartbeat ; journalctl -u llama-embed-heartbeat -f
```
> Variante moins bonne envisagée : remonter `STT_DOCS_TIMEOUT`/`recall` à ~8 s → couvre le froid
> mais **ajoute** la latence à chaque requête froide. Le warming l'**élimine** à la source.