mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 06:24:42 +02:00
docs: mise à jour documentation — NVMe, Qwen3, gaps IaC
- CLAUDE.md : /srv/data NVMe (plus RAID5), structure k8s/ expliquée, namespace ai ajouté, Hermes data code/données séparés - README.md : roadmap complète (n8n/Open WebUI/monitoring opérationnels), Talos v1.13, vault vars complètes, rôles Ansible manquants, RAID5→NVMe - admin/ia/rag.md : 284→339 chunks, RAID5→NVMe - admin/ia/hermes.md : RAID5→NVMe (incidents 2026-05-13 et 2026-05-29) - admin/ia/litellm.md : qwen2.5→qwen3-8b, gap IaC CPU models documenté - admin/ia/llama_server.md : gap IaC instances CPU documenté - admin/index_knowledge.py : 5 chunks RAG mis à jour (Qwen2.5→Qwen3, RAID5→NVMe, vault vars + rôles complets) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
7f6fee94c2
commit
529bb66ebd
7 changed files with 101 additions and 33 deletions
|
|
@ -5,7 +5,7 @@ Hermes Agent tourne en deux services systemd sur **storage-01** :
|
|||
- `hermes-dashboard` — interface web (port 9119)
|
||||
|
||||
Il passe par **LiteLLM** (`:4000`) pour toute inférence — Qwen local ou Claude API.
|
||||
Les données persistantes sont sur le RAID5 : `/srv/data/hermes`.
|
||||
Les données persistantes sont dans `/srv/data/hermes` (NVMe bind-mount depuis 2026-05-29, plus RAID5).
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -330,7 +330,7 @@ ansible-playbook -i inventory.yml playbooks/storage-01.yml --tags litellm
|
|||
|
||||
## Arborescence
|
||||
|
||||
Depuis l'incident 2026-05-13, le code est sur le SSD OS et les données sur le RAID5.
|
||||
Depuis l'incident 2026-05-13, le code est sur le SSD OS. Depuis l'incident 2026-05-29, les données sont sur NVMe (`/home/data` bind-monté sur `/srv/data`), plus sur le RAID5.
|
||||
|
||||
```
|
||||
/opt/hermes/ → home utilisateur hermes (SSD OS)
|
||||
|
|
@ -340,7 +340,7 @@ Depuis l'incident 2026-05-13, le code est sur le SSD OS et les données sur le R
|
|||
├── hermes_cli/ → source CLI
|
||||
└── web/ → source frontend dashboard
|
||||
|
||||
/srv/data/hermes/ → HERMES_HOME (RAID5) — données persistantes
|
||||
/srv/data/hermes/ → HERMES_HOME (NVMe bind-mount) — données persistantes
|
||||
├── config.yaml → configuration profil par défaut (géré Ansible)
|
||||
├── .env → LM_BASE_URL, LM_API_KEY (géré Ansible)
|
||||
├── memories/ → mémoire persistante profil par défaut
|
||||
|
|
@ -413,7 +413,7 @@ Fermer le TUI et en ouvrir un nouveau après chaque modification.
|
|||
|
||||
| Sujet | Détail |
|
||||
|---|---|
|
||||
| Code vs données | Code + venv : `/opt/hermes/.hermes/hermes-agent/` (SSD OS) — Profils/données : `/srv/data/hermes/` (RAID5) |
|
||||
| Code vs données | Code + venv : `/opt/hermes/.hermes/hermes-agent/` (SSD OS) — Profils/données : `/srv/data/hermes/` (NVMe) |
|
||||
| `HERMES_HOME` | Toujours préfixer les commandes hermes avec `HERMES_HOME=/srv/data/hermes` |
|
||||
| `LM_API_KEY` | Doit valoir `lm-studio` exactement |
|
||||
| `context_length` | Hermes exige 64k minimum — override via `model.context_length: 65536` dans config.yaml |
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ Script déployé sur storage-01 :
|
|||
|
||||
```bash
|
||||
sudo hermes-switch status # voir le modèle actuel de hermes-default
|
||||
sudo hermes-switch qwen # Qwen2.5-14B local (gratuit, ~35 tok/s)
|
||||
sudo hermes-switch qwen # Qwen3-8B local GPU (gratuit, ~60 tok/s)
|
||||
sudo hermes-switch claude # Claude Sonnet 4.6 (payant, ~1-2$ par session debug)
|
||||
```
|
||||
|
||||
|
|
@ -84,7 +84,7 @@ curl http://127.0.0.1:4000/v1/models \
|
|||
curl http://127.0.0.1:4000/v1/chat/completions \
|
||||
-H "Authorization: Bearer lm-studio" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model": "qwen2.5-14b-instruct", "messages": [{"role": "user", "content": "Dis bonjour"}], "max_tokens": 30}'
|
||||
-d '{"model": "qwen3-8b", "messages": [{"role": "user", "content": "Dis bonjour"}], "max_tokens": 30}'
|
||||
|
||||
# Test inférence Claude
|
||||
curl http://127.0.0.1:4000/v1/chat/completions \
|
||||
|
|
@ -106,6 +106,22 @@ elle vient du vault Ansible (`vault_anthropic_api_key`). Jamais en clair dans co
|
|||
|
||||
---
|
||||
|
||||
## ⚠️ Gap IaC — modèles CPU absents du template Ansible
|
||||
|
||||
`ansible/roles/litellm/templates/config.yaml.j2` n'inclut que 4 modèles :
|
||||
`hermes-default`, `qwen3-8b`, `claude-sonnet-4-6`, `claude-opus-4-7`.
|
||||
|
||||
Les entrées `qwen3-1.7b-system` (:1236) et `qwen3-1.7b-monitor` (:1237) ont été ajoutées
|
||||
**manuellement** dans `/etc/litellm/config.yaml` sur storage-01.
|
||||
|
||||
Un `make apply-storage` sur un hôte vierge ne déploierait PAS les routes CPU nécessaires
|
||||
à `ask-agent system` et `ask-agent monitor`.
|
||||
|
||||
**Axe d'amélioration** : ajouter les 2 entrées CPU dans `config.yaml.j2` avec des variables
|
||||
dans `defaults/main.yml` (`litellm_cpu_system_url`, `litellm_cpu_monitor_url`).
|
||||
|
||||
---
|
||||
|
||||
## Ajouter un modèle
|
||||
|
||||
1. Modifier `roles/litellm/templates/config.yaml.j2` :
|
||||
|
|
|
|||
|
|
@ -177,6 +177,17 @@ sudo systemctl restart llama-server
|
|||
|
||||
---
|
||||
|
||||
## ⚠️ Gap IaC — instances CPU non couvertes par Ansible
|
||||
|
||||
Le rôle `ansible/roles/llama_server/` ne déploie que l'instance **GPU** (`llama-server.service` sur :1234).
|
||||
Les instances CPU (`llama-server-system` :1236 et `llama-server-monitor` :1237) ont été créées **manuellement** et ne sont pas encore dans le code Ansible.
|
||||
|
||||
Conséquence : un `make apply-gpu` complet sur un hôte vierge ne déploierait PAS les instances CPU.
|
||||
|
||||
**Axe d'amélioration** : étendre le rôle `llama_server` pour déployer les 3 instances via une boucle (`with_items` ou `loop` Ansible), avec des variables dédiées dans `host_vars/gpu-01/vars.yml`.
|
||||
|
||||
---
|
||||
|
||||
## Points d'attention
|
||||
|
||||
| Sujet | Détail |
|
||||
|
|
@ -189,3 +200,4 @@ sudo systemctl restart llama-server
|
|||
| Gemma 4 interdit | Crash ROCm sur prompts >800 tokens |
|
||||
| Modèles sur NFS | `/mnt/models` monté depuis storage-01 (NFS) — si NFS down, les 3 services échouent au démarrage |
|
||||
| 3 services indépendants | Chaque instance a son propre service systemd — redémarrer l'un n'affecte pas les autres |
|
||||
| Instances CPU hors Ansible | llama-server-system et llama-server-monitor créés manuellement — voir section Gap IaC ci-dessus |
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@ Hermes formule sa réponse en citant les sources
|
|||
| `rag-ingest` | `/usr/local/bin/rag-ingest` | Indexe les docs dans Qdrant |
|
||||
| `rag-query` | `/usr/local/bin/rag-query` | Interroge Qdrant depuis la ligne de commande |
|
||||
| Skill `rag-docs` | Profil `funk-ai` Hermes | Enseigne à Hermes comment utiliser `rag-query` |
|
||||
| Docs indexées | `/srv/data/rag/docs/` (RAID5) | Copie locale du dossier `admin/` |
|
||||
| Collection Qdrant | `funk-docs` | 284 chunks — dimension 4096 (Cosine) |
|
||||
| Docs indexées | `/srv/data/rag/docs/` (NVMe) | Copie locale du dossier `admin/` |
|
||||
| Collection Qdrant | `funk-docs` | 339 chunks — dimension 4096 (Cosine) |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ rsync -av --delete admin/ storage-01:/srv/data/rag/docs/
|
|||
ssh storage-01 "rag-ingest /srv/data/rag/docs/"
|
||||
```
|
||||
|
||||
L'ingestion prend ~5-10 minutes pour 284 chunks (embeddings via GPU).
|
||||
L'ingestion prend ~5-10 minutes pour 339 chunks (embeddings via GPU).
|
||||
Elle est idempotente — re-lancer ne crée pas de doublons (IDs stables basés sur MD5 du fichier+section).
|
||||
|
||||
---
|
||||
|
|
@ -175,7 +175,7 @@ ansible/roles/rag/
|
|||
hermes-skills/funk/rag-docs/
|
||||
└── SKILL.md # Source versionnée du skill (copié dans files/)
|
||||
|
||||
/srv/data/rag/ (RAID5 storage-01)
|
||||
/srv/data/rag/ (NVMe storage-01 — bind-mount /home/data)
|
||||
├── docs/ # Copie de admin/ — source des chunks
|
||||
└── (Qdrant stocke dans /srv/data/qdrant/)
|
||||
```
|
||||
|
|
@ -190,5 +190,5 @@ hermes-skills/funk/rag-docs/
|
|||
| Modèle dédié | `nomic-embed-text` ou `bge-m3` diviseraient les faux positifs par ~3 |
|
||||
| Contention GPU | `rag-ingest` sollicite le GPU (port 1234) pendant ~5-10 min — éviter pendant une session d'inférence active |
|
||||
| Re-indexation | Obligatoire après modification de `admin/` — pas de sync automatique |
|
||||
| Qdrant persistance | Données dans `/srv/data/qdrant/` sur RAID5 — survivent aux redémarrages |
|
||||
| Qdrant persistance | Données dans `/srv/data/qdrant/` sur NVMe — survivent aux redémarrages |
|
||||
| Score minimum | `MIN_SCORE = 0.60` dans `rag-query` — tous les résultats sont au-dessus avec ce modèle |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue