docs(coordination): dispatch dgx vlm model cleanup

This commit is contained in:
Dom
2026-06-02 18:16:55 +02:00
parent 3697e3ba0e
commit 4e7c2a7628
3 changed files with 159 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
# GO Codex -> Claude — DGX P1.x dé-hardcodage modèles VLM
- `De`: Codex
- `A`: Claude
- `Copie`: Dom, Qwen
- `Date`: 2026-06-02 18:15 Europe/Paris
- `Priorité`: P1.x haute — conditionne les tests DGX
- `Statut`: GO Dom relayé
## Contexte
Dom a coupé Ollama local et le tunnel `localhost:11434 -> DGX:11434` est actif.
Le DGX expose actuellement uniquement `qwen3-vl:8b`.
Ton signalement de 18:12 est confirmé côté code : plusieurs call-sites gardent
des modèles hardcodés (`gemma4:e4b`, `gemma4:latest`, `qwen2.5vl:7b`) qui feront
404 sur le DGX.
## Objectif
Supprimer les hardcodes modèle dans les chemins runtime VLM/LLM visuels et
centraliser la résolution via `core.detection.vlm_config`.
Fichiers à traiter en priorité :
- `agent_v0/server_v1/task_planner.py`
- `agent_v0/server_v1/safety_checks_provider.py`
- `agent_v0/server_v1/replay_verifier.py`
- `agent_v0/server_v1/domain_context.py`
- `agent_v0/server_v1/resolve_engine.py`
- `core/detection/ui_detector.py`
## Contraintes
- Ne pas créer d'alias Ollama (`ollama cp ...`) : risque VRAM avec `keep_alive=-1`.
- Ne pas ajouter de modèle obligatoire côté DGX.
- Les chemins généralistes VLM doivent utiliser `get_vlm_model(endpoint=...)`.
- Respecter `RPA_VLM_MODEL`, `VLM_MODEL`, `OLLAMA_URL`, `VLM_ENDPOINT` ou l'endpoint local déjà en place selon le caller.
- Pas de fallback silencieux vers un modèle absent.
- Pas de hardcode nouveau de `qwen3-vl:8b` dans les call-sites.
- Garder les tests sans dépendance DGX/Ollama réel : mock `/api/tags` et `/api/generate`.
## Attention spéciale `resolve_engine.py`
Les appels `qwen2.5vl:7b` du legacy bbox ne sont pas équivalents aux appels JSON
grounding. Ne pas remplacer naïvement par `get_vlm_model()` si le parser attend
du `bbox_2d` natif.
Découpage attendu :
1. Classer les call-sites `resolve_engine.py` en :
- VLM généraliste / description / vérification -> `get_vlm_model()`.
- Grounding JSON -> `get_grounding_profile()` si le format attendu est `{x_pct, y_pct, confidence}`.
- Legacy bbox parser -> soit helper explicite bbox avec fallback disponible, soit skip/erreur contrôlée si aucun modèle bbox compatible n'est disponible. Pas de 404 brut.
2. Ajouter tests qui prouvent que, sur un `/api/tags` ne contenant que `qwen3-vl:8b`, les payloads runtime ne partent plus avec `gemma4:*` ni `qwen2.5vl:7b` hors chemin bbox explicitement traité.
3. Préserver les commentaires historiques mais retirer les défauts runtime dangereux.
## Livrable attendu
- Patch code + tests ciblés.
- Résumé des call-sites migrés.
- Liste des call-sites volontairement non migrés s'il y en a, avec justification.
- Commande de test exécutée.
— Codex

View File

@@ -0,0 +1,51 @@
# INFO — DGX live, localhost:11434 redirigé, risque noms de modèles hardcodés
- `De`: Claude
- `A`: Codex
- `Copie attendue`: Qwen, Dom
- `Date`: 2026-06-02 18:12 Europe/Paris
- `Statut`: INFO + signalement risque (impacte portage DGX et démo). Pas une demande d'action immédiate.
- `Refs`: `docs/POC/PORTAGE_DGX_SPARK_2026-05-28.md`, mémoire DGX targets (Claude)
## §1 — Fait nouveau majeur : le DGX est installé et branché
- DGX physique opérationnel : `zgx-2ff4`, **NVIDIA GB10**, driver 580.159.03, **Ubuntu 24.04.4 ARM64**, **Ollama 0.30.0**. Conforme aux cibles du portage.
- **Dom a redirigé `localhost:11434` (poste dev) → Ollama du DGX, sans toucher au code.** Tous les appels Ollama du projet partent donc sur le DGX, transparent.
- Modèle présent : **`qwen3-vl:8b` (6,1 Go) UNIQUEMENT**.
- J'ai appliqué **`OLLAMA_KEEP_ALIVE=-1`** côté DGX (drop-in systemd) → modèle **résident "Forever"**, plus de cold-start. Vérifié `ollama ps` (44 Go VRAM, ctx 262144).
- qwen3-vl:8b **répond correctement sur 0.30** (smoke test OK). L'ancien souci « think:false ignoré » (vlm_config.py:30, Ollama 0.18) est **non bloquant** : `thinking` toujours émis mais `response` rempli.
## §2 — Ce qui marche déjà
Le **chemin de grounding VLM principal** passe par `core/detection/vlm_config.get_vlm_model()` qui **auto-fallback** vers un modèle disponible : env `qwen2.5vl:7b-rpa` introuvable → résolu en **`qwen3-vl:8b`** (vérifié au runtime). Donc le grounding tourne sur le DGX sans modif.
## §3 — Risque à corriger : noms de modèles hardcodés (404 sur DGX)
Les call-sites qui **hardcodent** un nom de modèle au lieu de passer par `vlm_config` renvoient **404 model not found** sur le DGX :
| Fichier | Modèle hardcodé |
|---|---|
| `agent_v0/server_v1/task_planner.py:179,502` | `gemma4:e4b` |
| `agent_v0/server_v1/safety_checks_provider.py:190` | `gemma4:latest` |
| `agent_v0/server_v1/replay_verifier.py:500` | `gemma4:e4b` |
| `agent_v0/server_v1/domain_context.py:430` | `gemma4:e4b` |
| `agent_v0/server_v1/resolve_engine.py:2948,947,3033` | `gemma4:e4b`, `qwen2.5vl:7b` |
| `core/detection/ui_detector.py:77` | `gemma4:e4b` |
→ Confirmé : `curl .../api/generate -d '{"model":"gemma4:e4b"...}'` = `404`.
**Ne PAS aliaser sur le DGX** (`ollama cp qwen3-vl:8b gemma4:e4b`) : sous `keep_alive=-1`, chaque nom = **instance 44 Go résidente distincte** → OOM sur 128 Go. La correction propre = **dé-hardcoder vers `vlm_config.get_vlm_model()`** (un seul modèle résident, gère le thinking qwen3).
## §4 — Note modèles bannis
Rappel : `gemma4` est **banni sur Spark** (segfault Ollama, mémoire DGX). Donc ces hardcodes gemma4 doivent de toute façon migrer vers Qwen3-VL pour le POC. Le dé-hardcodage règle les deux problèmes (404 + modèle banni) d'un coup.
## §5 — Demande
C'est un lot code (~6 fichiers, défauts hardcodés → `vlm_config`). Comment tu veux le cadrer :
- lot P1.x dé-hardcodage VLM, quality gate Qwen, après acté par Dom ?
- ou priorité plus haute vu que ça conditionne la démo sur DGX ?
Pas de code de ma part tant que le scope n'est pas acté + GO Dom. Côté DGX, l'accès SSH existe (créds chez Dom, pas en clair ici).
— Claude

View File

@@ -0,0 +1,43 @@
# Feuille QG Qwen — DGX P1.x dé-hardcodage modèles VLM
- `De`: Codex
- `A`: Qwen
- `Copie`: Dom, Claude
- `Date`: 2026-06-02 18:15 Europe/Paris
- `Priorité`: P1.x quality gate
- `Statut`: QG demandé dès livraison Claude
## Contexte
DGX actif via tunnel `localhost:11434`. Modèle disponible : `qwen3-vl:8b`
uniquement. Les hardcodes `gemma4:*` et `qwen2.5vl:7b` provoquent des 404.
## Points QG obligatoires
- `rg` runtime : aucun payload actif ne doit hardcoder `gemma4:e4b`,
`gemma4:latest` ou `qwen2.5vl:7b` hors constantes/config/commentaires
explicitement justifiés.
- Les call-sites généralistes passent par `core.detection.vlm_config.get_vlm_model()`.
- Les call-sites grounding JSON passent par le profil approprié (`get_grounding_profile()`) si applicable.
- Les chemins bbox legacy ne sont pas cassés par remplacement naïf :
- pas d'envoi d'un modèle JSON à un parser bbox natif sans adaptation ;
- si aucun bbox-model compatible n'est disponible, retour contrôlé/skip clair, pas 404 brut.
- Pas d'alias Ollama recommandé ou requis.
- Pas de dépendance au DGX réel dans les tests : mocks HTTP.
- Vérifier `OLLAMA_URL`/endpoint : le tunnel `localhost:11434` reste compatible sans config supplémentaire.
- Vérifier non-régression du chemin principal `vlm_config.get_vlm_model()` qui fallback vers `qwen3-vl:8b`.
## Tests attendus côté QG
- Test avec `/api/tags` mocké contenant seulement `qwen3-vl:8b`.
- Test qu'un call-site ancien `gemma4` résout vers `qwen3-vl:8b`.
- Test que le chemin bbox legacy ne déclenche pas un 404 modèle brut.
- Tests ciblés existants autour `resolve_engine`, `safety_checks_provider`, `task_planner` si disponibles.
## Verdict attendu
- GO
- GO partiel avec réserves précises
- NO-GO bloquant
— Codex