chore(dgx): snapshot consolidation WIP pour transfert poc DGX
Regroupe le WIP non committé requis pour le clone/runtime DGX (Option A) : - api_stream.py : préflight replay + smoke santé modèles + handler 403 WP-B - de-hardcode VLM : vlm_config, gpu/*, vram_orchestrator, ollama_manager - stream_processor, semantic_matcher, agent_chat (app/planner/intent) - workflows.db (acquis ; le transfert artifacts le mettra à jour + rewrite chemins) - docs : plans DGX, benchmarks VLM/grounders, recherche SOTA, coordination 8 juin Snapshot destiné à la branche poc-dgx poussée sur Gitea pour cloner le DGX. Scan anti-secret : clean. graphify (repo embarqué) exclu. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,306 @@
|
||||
# Handoff Codex - fin de session 2026-06-02 - reprise 2026-06-03
|
||||
|
||||
- `Auteur`: Codex
|
||||
- `Date`: 2026-06-02 soir, Europe/Paris
|
||||
- `Branche`: `backup/post-demo-2026-05-19`
|
||||
- `HEAD`: `4e7c2a762 docs(coordination): dispatch dgx vlm model cleanup`
|
||||
- `Statut`: handoff de cloture. Fichier cree, pas de commit effectue dans cette action.
|
||||
|
||||
## Message court pour la prochaine session
|
||||
|
||||
Dom cloture la journee proprement. Reprise demain matin sur une session fraiche.
|
||||
|
||||
Priorite : ne pas repartir dans tous les sens. La base technique a progresse, le DGX est maintenant disponible, et les prochains travaux doivent rester orientes POC/MVP professionnel.
|
||||
|
||||
Ordre recommande demain :
|
||||
|
||||
1. Lire ce handoff, puis les messages arrives apres 2026-06-02 soir dans `docs/coordination/inbox_codex`.
|
||||
2. Statuer sur le lot Claude `P1.x de-hardcodage VLM` : GO confirme si pas encore parti, ou review/Qwen QG si livraison recue.
|
||||
3. Synchroniser les messages/handoffs non commites.
|
||||
4. Lancer le cadrage court `P1.y DGX inference bake-off` : Ollama vs vLLM vs SGLang, sans brancher Lea en prod.
|
||||
5. Revenir au test Lea humain E2E apres stabilisation VLM/DGX.
|
||||
|
||||
## Decisions Dom a ne pas perdre
|
||||
|
||||
1. Sante = premiere verticale metier, pas enfermement produit.
|
||||
- Prochaines verticales prevues : aeronautique, administration, mairie, conseil regional, etc.
|
||||
- Les artefacts doivent rester multi-verticaux.
|
||||
2. On rentre dans le vrai monde : niveau pro, worktree propre, pas de bricolage non trace.
|
||||
3. DGX disponible : il doit servir aux tests VLM/LLM lourds au lieu de consommer le GPU/VRAM serveur quand c'est pertinent.
|
||||
4. Ollama reste pratique, mais ne doit pas devenir une dependance unique non challengee.
|
||||
- Dom a explicitement demande de tester une autre inference pour grounding et LLM.
|
||||
- Objectif : verifier vitesse, compatibilite modeles, precision grounding.
|
||||
5. Ne pas toucher sans ordre explicite :
|
||||
- `docs/POC/PREREQUIS_DSI_DGX_SPARK_2026-06-01.docx`
|
||||
- `visual_workflow_builder/backend/instance/workflows.db`
|
||||
|
||||
## Bilan technique de la journee
|
||||
|
||||
### R6 ScreenAnalyzer worker
|
||||
|
||||
Statut : resolu cote Qwen.
|
||||
|
||||
- Cause racine : worker fige en RAM depuis le 1er juin avec `enable_vlm=False`.
|
||||
- Sessions retraitées :
|
||||
- session 1 : 7/7
|
||||
- session 2 : 88/89
|
||||
- Artefacts produits : workflows JSON, embeddings FAISS, edges enrichis.
|
||||
- Qwen : `GO resolue`.
|
||||
|
||||
### N1/N2/N3 anti-blocage worker
|
||||
|
||||
Statut : GO Qwen.
|
||||
|
||||
- N1 : `_ensure_initialized` ne pose plus `_initialized=True` si ScreenAnalyzer KO.
|
||||
- N2 : health file `data/training/_worker_health.json`, ecriture atomique, zero donnee patient.
|
||||
- N3 : watchdog systemd avec `sd_notify`, `WatchdogSec=120`, auto-restart.
|
||||
- Verification runtime annoncee : 13 minutes sans restart, `status: healthy`, 52 tests.
|
||||
|
||||
Point de vigilance : cold-start VLM proche de la marge watchdog au premier cycle post-restart. A surveiller.
|
||||
|
||||
### P1.1 Option A matching cross-session
|
||||
|
||||
Statut : implemente et commite.
|
||||
|
||||
Commit : `5289f3de4 feat(p11): learn from offline cross-session matches`
|
||||
|
||||
Decision :
|
||||
|
||||
- Le hook initial "20 LOC" etait un no-op semantique : EMA prototype -> prototype.
|
||||
- Option A retenue : avant de builder un nouveau workflow, matcher l'etat observe contre les nodes/prototypes de workflows existants.
|
||||
|
||||
Comportement livre :
|
||||
|
||||
- update `ContinuousLearner` uniquement avec embedding observe si match fort ;
|
||||
- drift seulement si confiance faible ;
|
||||
- no-op sain sans workflow, sans match ou sans embedding ;
|
||||
- pas de fuite patient/metier dans les chemins learner.
|
||||
|
||||
Tests executes :
|
||||
|
||||
```bash
|
||||
RPA_AUTH_DISABLED=true .venv/bin/python -m pytest \
|
||||
tests/unit/test_stream_processor_cross_session_learning.py \
|
||||
tests/unit/test_workflow_pipeline_match_from_state.py \
|
||||
tests/integration/test_stream_processor.py \
|
||||
tests/unit/test_competence_persist.py \
|
||||
tests/unit/test_phase25_semantic.py \
|
||||
tests/integration/test_phase25_semantic_integration.py -q
|
||||
```
|
||||
|
||||
Resultat : passe.
|
||||
|
||||
### DGX / Ollama
|
||||
|
||||
Statut : DGX operationnel.
|
||||
|
||||
- DGX : `zgx-2ff4`, NVIDIA GB10, Ubuntu 24.04 ARM64, Ollama 0.30.0.
|
||||
- Dom a coupe l'Ollama local : `systemctl stop ollama`.
|
||||
- Tunnel actif : `localhost:11434` cote dev redirige vers Ollama DGX.
|
||||
- `qwen2.5vl:7b-rpa` transfere sur DGX par Claude.
|
||||
- Grounding valide :
|
||||
- `bbox_2d` natif attendu par le parseur ;
|
||||
- environ 2 s a chaud selon Claude ;
|
||||
- resident `Forever` via `keep_alive=-1`.
|
||||
- `.env.local` aligne :
|
||||
- `RPA_VLM_MODEL=qwen2.5vl:7b-rpa`
|
||||
- `VLM_MODEL=qwen2.5vl:7b-rpa`
|
||||
- `RPA_GROUNDING_MODEL=qwen2.5vl:7b-rpa`
|
||||
|
||||
Point critique : ne pas aliaser des modeles Ollama sur le DGX. Sous `keep_alive=-1`, chaque nom peut provoquer une instance residente separee et consommer trop de VRAM.
|
||||
|
||||
## Messages importants deja lus
|
||||
|
||||
### Claude
|
||||
|
||||
1. `docs/coordination/inbox_codex/2026-06-02_1919_claude-to-codex_INFO-qwen25vl-rpa-transfere-DGX-grounding-OK.md`
|
||||
- `qwen2.5vl:7b-rpa` transfere sur DGX.
|
||||
- Grounding `bbox_2d` OK.
|
||||
- Le blocage 404 grounding est reduit, mais le de-hardcodage reste necessaire pour portabilite.
|
||||
- Le vrai risque reste Groupe 1 : `gemma4:*` + port mort `11435`.
|
||||
|
||||
2. `docs/coordination/inbox_codex/2026-06-02_1925_claude-to-codex_ACK-GO-dehardcode-VLM-plan-TDD.md`
|
||||
- Claude propose execution TDD.
|
||||
- Groupe 1 prioritaire :
|
||||
- `task_planner.py`
|
||||
- `replay_verifier.py`
|
||||
- `domain_context.py`
|
||||
- `safety_checks_provider.py`
|
||||
- `resolve_engine.py`
|
||||
- `ui_detector.py`
|
||||
- Actions : endpoint `11435` -> `DEFAULT_OLLAMA_ENDPOINT` / `11434`, modeles -> `vlm_config.get_vlm_model()`.
|
||||
- Groupe 2 : grounding `resolve_engine` -> profil grounding propre.
|
||||
- Claude indique attendre le GO Dom in-session.
|
||||
|
||||
### Qwen
|
||||
|
||||
1. `docs/coordination/inbox_codex/2026-06-02_qwen-to-codex_ACK-FEUILLE-QG-P11-option-A-matching.md`
|
||||
- QG pret pour Option A.
|
||||
- Check anti-doublon, signal utile, no-op sain, confidentialite, offline.
|
||||
|
||||
2. `docs/coordination/inbox_codex/2026-06-02_qwen-to-codex_ACK-FEUILLE-QG-P1X-dehardcode-VLM.md`
|
||||
- QG pret pour de-hardcodage VLM.
|
||||
- Verifier absence hardcodes `gemma4:*` / `qwen2.5vl:7b` hors config justifiee.
|
||||
- Tests mockes HTTP, pas de dependance DGX reel.
|
||||
|
||||
3. `docs/handoffs/2026-06-02_handoff_qwen_fin_session_reprise_2026-06-03.md`
|
||||
- Bilan Qwen de fin de session.
|
||||
- Confirme R6 + N1/N2/N3.
|
||||
- Indique audit worktree encore en attente.
|
||||
- Mentionne 2 ACK QG en attente de livraison Claude.
|
||||
|
||||
## Nouveau sujet acte en fin de journee : P1.y DGX inference bake-off
|
||||
|
||||
Dom a souleve un point juste : Ollama est tres pratique, mais peut poser des problemes de vitesse et de compatibilite VLM/grounding. Certains modeles qui marchaient mal via Ollama ont deja ete observes comme rapides/precis via d'autres runtimes VLM.
|
||||
|
||||
Decision recommandee : tester, sans migrer.
|
||||
|
||||
Objectif du lot :
|
||||
|
||||
- comparer Ollama baseline contre au moins vLLM et SGLang ;
|
||||
- garder TensorRT-LLM en candidat plus lourd, potentiellement production NVIDIA ;
|
||||
- TGI en option ;
|
||||
- utiliser les memes captures/prompts/criteres que LeaBench ;
|
||||
- ne pas brancher dans Lea tant qu'un candidat ne bat pas la baseline proprement.
|
||||
|
||||
Pourquoi c'est peu risqué :
|
||||
|
||||
- Le repo contient deja un bench provider-neutral :
|
||||
- `core/evaluation/computer_use_bench.py`
|
||||
- `core/evaluation/ollama_lea_bench_adapter.py`
|
||||
- `tools/lea_bench_ollama.py`
|
||||
- Il suffit d'ajouter un adapter `openai_compat` pour appeler vLLM/SGLang/TGI/TensorRT-LLM via `/v1/chat/completions`.
|
||||
|
||||
Metriques minimales :
|
||||
|
||||
- latence cold/hot ;
|
||||
- taux de JSON parsable ;
|
||||
- precision clic / distance au centre attendu ;
|
||||
- abstention correcte ;
|
||||
- zero clic dangereux ;
|
||||
- VRAM ;
|
||||
- stabilite service ;
|
||||
- support du format attendu (`bbox_2d` ou JSON normalise).
|
||||
|
||||
Ordre recommande :
|
||||
|
||||
1. vLLM + `Qwen/Qwen2.5-VL-7B-Instruct`.
|
||||
2. SGLang + `Qwen/Qwen2.5-VL-7B-Instruct`.
|
||||
3. TensorRT-LLM si les deux premiers ne suffisent pas ou si cible NVIDIA prod.
|
||||
4. TGI si besoin de comparer l'ecosysteme HF.
|
||||
|
||||
Point a verifier sur DGX : le modele `qwen2.5vl:7b-rpa` actuel est au format Ollama. Pour vLLM/SGLang, il faudra probablement tester le modele HF original ou retrouver les poids HF/safetensors si la variante RPA est un vrai custom.
|
||||
|
||||
## Etat worktree au moment du handoff
|
||||
|
||||
Dernier `git status --short` avant creation de ce handoff :
|
||||
|
||||
```text
|
||||
M docs/POC/PREREQUIS_DSI_DGX_SPARK_2026-06-01.docx
|
||||
M visual_workflow_builder/backend/instance/workflows.db
|
||||
?? docs/coordination/inbox_codex/2026-06-02_1919_claude-to-codex_INFO-qwen25vl-rpa-transfere-DGX-grounding-OK.md
|
||||
?? docs/coordination/inbox_codex/2026-06-02_1925_claude-to-codex_ACK-GO-dehardcode-VLM-plan-TDD.md
|
||||
?? docs/coordination/inbox_codex/2026-06-02_qwen-to-codex_ACK-FEUILLE-QG-P11-option-A-matching.md
|
||||
?? docs/coordination/inbox_codex/2026-06-02_qwen-to-codex_ACK-FEUILLE-QG-P1X-dehardcode-VLM.md
|
||||
?? docs/handoffs/2026-06-02_handoff_qwen_fin_session_reprise_2026-06-03.md
|
||||
```
|
||||
|
||||
Apres ce handoff, ajouter aussi :
|
||||
|
||||
```text
|
||||
?? docs/handoffs/2026-06-02_handoff_codex_fin_session_reprise_2026-06-03.md
|
||||
```
|
||||
|
||||
Regles :
|
||||
|
||||
- ne pas modifier/revert le `.docx` DSI ;
|
||||
- ne pas modifier/revert `workflows.db` ;
|
||||
- les inbox/handoffs non suivis sont de la coordination utile, a synchroniser demain dans un commit docs si Dom valide ;
|
||||
- `workflows.db` est historiquement tracke malgre `.gitignore`; plan de nettoyage separe.
|
||||
|
||||
## Reprise demain - plan court
|
||||
|
||||
### 1. Coordination
|
||||
|
||||
Lire :
|
||||
|
||||
```bash
|
||||
git status --short
|
||||
find docs/coordination/inbox_codex -maxdepth 1 -type f | sort | tail -40
|
||||
```
|
||||
|
||||
Puis lire tous les nouveaux messages Claude/Qwen depuis le dernier timestamp connu.
|
||||
|
||||
### 2. De-hardcodage VLM
|
||||
|
||||
Si Claude n'a pas encore demarre :
|
||||
|
||||
- envoyer GO confirme sur son plan TDD ;
|
||||
- rappeler contraintes :
|
||||
- pas d'alias Ollama ;
|
||||
- pas de hardcode nouveau `qwen2.5vl:7b-rpa` ou `qwen3-vl:8b` ;
|
||||
- endpoint via env/config ;
|
||||
- tests mockes ;
|
||||
- ne pas casser bbox legacy.
|
||||
|
||||
Si Claude a livre :
|
||||
|
||||
- lire patch ;
|
||||
- demander/faire Qwen QG ;
|
||||
- lancer tests cibles ;
|
||||
- commit propre si GO.
|
||||
|
||||
### 3. DGX inference bake-off
|
||||
|
||||
Creer une feuille active ou une mission :
|
||||
|
||||
- `docs/coordination/active/2026-06-03_dgx-inference-bakeoff-vlm.md`
|
||||
- adapter `openai_compat` pour LeaBench ;
|
||||
- pas de modification du hot path Lea dans ce lot.
|
||||
|
||||
### 4. Lea test humain E2E
|
||||
|
||||
Etat honnete :
|
||||
|
||||
- aujourd'hui, infrastructure Lea/apprentissage fiabilisee ;
|
||||
- pas de nouveau cycle complet "retouche + test humain E2E Lea" realise en fin de journee.
|
||||
|
||||
A reprendre apres VLM/DGX :
|
||||
|
||||
- test capture humaine ;
|
||||
- replay ;
|
||||
- apprentissage ;
|
||||
- auto-evaluation par repetition ;
|
||||
- aucune question pendant observation passive.
|
||||
|
||||
## Commandes utiles demain
|
||||
|
||||
Tests P1.1 deja passes, a rerun seulement si zone touchee :
|
||||
|
||||
```bash
|
||||
RPA_AUTH_DISABLED=true .venv/bin/python -m pytest \
|
||||
tests/unit/test_stream_processor_cross_session_learning.py \
|
||||
tests/unit/test_workflow_pipeline_match_from_state.py \
|
||||
tests/integration/test_stream_processor.py \
|
||||
tests/unit/test_competence_persist.py \
|
||||
tests/unit/test_phase25_semantic.py \
|
||||
tests/integration/test_phase25_semantic_integration.py -q
|
||||
```
|
||||
|
||||
Verification tunnel Ollama DGX :
|
||||
|
||||
```bash
|
||||
systemctl is-active ollama
|
||||
ss -ltnp | rg ':11434'
|
||||
curl -s http://127.0.0.1:11434/api/tags
|
||||
```
|
||||
|
||||
Attention : `systemctl is-active ollama` local doit rester `inactive` si le tunnel DGX est utilise.
|
||||
|
||||
## Phrase de reprise
|
||||
|
||||
Demain matin, repartir ainsi :
|
||||
|
||||
"Lis `docs/handoffs/2026-06-02_handoff_codex_fin_session_reprise_2026-06-03.md`, puis les nouveaux messages dans `docs/coordination/inbox_codex`. Priorite : de-hardcodage VLM Claude/Qwen, puis cadrage DGX inference bake-off hors Ollama, sans toucher au `.docx` DSI ni a `workflows.db`."
|
||||
|
||||
— Codex
|
||||
@@ -0,0 +1,91 @@
|
||||
# HANDOFF Qwen — Fin de session 2026-06-02
|
||||
|
||||
- `Auteur`: Qwen
|
||||
- `Date`: 2026-06-02 ~18:30 Europe/Paris
|
||||
- `Prochaine reprise`: 2026-06-03 matin
|
||||
- `Dom`: présent, actif
|
||||
|
||||
---
|
||||
|
||||
## Bilan de la journée
|
||||
|
||||
**2 quality gates livrées (R6 + N1/N2/N3), 1 audit worktree, 2 ACK QG en attente, recherche Box64.**
|
||||
|
||||
| Lot | Statut | Verdict Qwen |
|
||||
|-----|--------|-------------|
|
||||
| **P0.1bis R6 ScreenAnalyzer worker** | ✅ Livré + retraité + vérifié | **GO résolue** — 2 sessions enrichies, cause racine = worker figé en RAM |
|
||||
| **P1 worker guards N1/N2/N3** | ✅ Livré + activé + vérifié runtime | **GO** — anti-poison, health file, watchdog systemd |
|
||||
| **Audit worktree** | 📋 Plan 6 commits prêt | En attente réponses Dom (5 questions) |
|
||||
| **P1.1 Option A matching cross-session** | 🔄 QG prêt | En attente cadrage TDD Claude |
|
||||
| **P1.x dé-hardcodage VLM** | 🔄 QG prêt | En attente livraison Claude (6 fichiers) |
|
||||
| **Recherche Box64/Wine/Hangover** | ℹ️ Fait | Hangover = meilleur pari, driver GPU ARM64 = inconnue critique |
|
||||
| **Architecture DGX + VMs Windows ARM64** | ℹ️ Validé | KVM + Windows 11 ARM64 + Prism = viable, à tester sur machine |
|
||||
|
||||
---
|
||||
|
||||
## État des lieux — ce qui est fait
|
||||
|
||||
### R6 — pipeline d'enrichissement rétabli
|
||||
- 2 sessions retraitées avec succès (session 1 : 7/7, session 2 : 88/89)
|
||||
- Workflows JSON + embeddings FAISS + edges enrichis produits
|
||||
- Cause racine : worker figé en RAM depuis le 1er juin 18:44 (`enable_vlm=False`)
|
||||
|
||||
### N1/N2/N3 — stack anti-blocage
|
||||
- **N1** anti-poison : `_ensure_initialized` ne pose pas `_initialized=True` si ScreenAnalyzer KO
|
||||
- **N2** health file : `data/training/_worker_health.json`, écriture atomique, zéro donnée patient
|
||||
- **N3** watchdog : `sd_notify` pur socket, `WatchdogSec=120`, systemd auto-restart
|
||||
- Vérifié runtime : 13 min sans restart, `status: healthy`, 52 tests
|
||||
|
||||
### DGX
|
||||
- **Branché et opérationnel** : `zgx-2ff4`, NVIDIA GB10, Ubuntu 24.04 ARM64, Ollama 0.30.0
|
||||
- Dom a redirigé `localhost:11434` → DGX, transparent pour le code
|
||||
- Modèle : `qwen3-vl:8b` uniquement, `keep_alive=-1` actif (plus de cold-start)
|
||||
- 6 fichiers hardcodent `gemma4:e4b`/`qwen2.5vl:7b` → 404 sur DGX → lot P1.x en attente
|
||||
|
||||
### Architecture VM Windows sur DGX
|
||||
- Windows 11 ARM64 + KVM + Prism (émulation x86) = viable pour du RPA
|
||||
- GPU pas nécessaire dans la VM (rendu software suffit), inférence lourde côté hôte
|
||||
- À tester sur la machine
|
||||
|
||||
---
|
||||
|
||||
## Ce qui reste à faire (demain)
|
||||
|
||||
### P1.1 Option A — matching cross-session offline
|
||||
- Claude doit cadrer en TDD avant de coder
|
||||
- Qwen : quality gate à la livraison (feuille détaillée déjà reçue)
|
||||
|
||||
### P1.x — dé-hardcodage modèles VLM
|
||||
- 6 fichiers : `task_planner.py`, `safety_checks_provider.py`, `replay_verifier.py`, `domain_context.py`, `resolve_engine.py`, `ui_detector.py`
|
||||
- Qwen : quality gate à la livraison (feuille reçue)
|
||||
|
||||
### Audit worktree — plan nettoyage
|
||||
- 792 entrées, plan 6 commits prêt
|
||||
- En attente réponses Dom aux 5 questions (workflows.db, outils one-shot, inboxes, ordre commits, vlm_bench.json)
|
||||
|
||||
---
|
||||
|
||||
## Points de vigilance
|
||||
|
||||
1. **Cold-start VLM + watchdog** : ~100s entre 2 heartbeats au 1er cycle post-restart, sous `WatchdogSec=120` mais marge modérée. À surveiller.
|
||||
2. **`workflows.db` tracké par erreur** : dans `.gitignore` (`**/instance/*.db`) mais historiquement tracké → `git rm --cached` nécessaire.
|
||||
3. **Pas d'alias Ollama sur DGX** : `ollama cp` créerait une 2e instance 44 Go → OOM. Dé-hardcodage vers `vlm_config` obligatoire.
|
||||
4. **Anti-doublon** : ContinuousLearner + PrototypeVersionManager existent et sont bons. Ne pas recréer.
|
||||
|
||||
---
|
||||
|
||||
## Fichiers clés
|
||||
|
||||
| Fichier | Rôle |
|
||||
|---------|------|
|
||||
| `inbox_codex/...QUALITY-GATE-R6-GO-RESOLUE.md` | Verdict R6 |
|
||||
| `inbox_codex/...QUALITY-GATE-GO-N1-N2-N3.md` | Verdict N1/N2/N3 |
|
||||
| `inbox_codex/...AUDIT-WORKTREE-PLAN-NETTOYAGE.md` | Plan nettoyage git |
|
||||
| `inbox_codex/...ACK-FEUILLE-QG-P1X-dehardcode-VLM.md` | ACK QG dé-hardcodage |
|
||||
| `inbox_codex/...ACK-FEUILLE-QG-P11-option-A-matching.md` | ACK QG Option A |
|
||||
| `data/training/_worker_health.json` | Health file N2 |
|
||||
| `docs/demo/test-humain-e2e-poc.md` | Protocole test humain |
|
||||
|
||||
---
|
||||
|
||||
*Auteur : Qwen — Bonne soirée Dom, à demain !*
|
||||
67
docs/handoffs/2026-06-05_handoff_claude_p1g_gpu_preflight.md
Normal file
67
docs/handoffs/2026-06-05_handoff_claude_p1g_gpu_preflight.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# Handoff Claude — P1.g GPU cascade + préflight replay (2026-06-05 21:25)
|
||||
|
||||
## État précis
|
||||
|
||||
### Lots livrés et fermés (GO Qwen) — journée
|
||||
- **P1.x** serveur de-hardcode VLM — GO.
|
||||
- **P1.z** V4 reasoning DGX-safe — commit `806cc04b8` — GO.
|
||||
- **P1.y-alpha** adapter OpenAI-compat LeaBench — commit `0f122a512` — GO.
|
||||
- **P1.w** default VLM DGX-safe (`qwen2.5vl:7b-rpa`) — commit `5b2afa362` — GO.
|
||||
|
||||
### Job 1 — préflight replay : LIVRÉ (par Codex, validé live)
|
||||
- Endpoint `POST /api/v1/traces/stream/replay/preflight` actif. Codex a intégré mon
|
||||
patch, corrigé le wrapper, redémarré `rpa-streaming`, validé live :
|
||||
`Bloc-notes, Explorateur et Python (5)` → n_actions=12, dialogs=['enregistrer sous'] ;
|
||||
`Explorateur, Bloc-notes et Python` → n_actions=13.
|
||||
- Tests : `tests/unit/test_replay_preflight.py` 4/4 verts. Revue anti-régression OK.
|
||||
- **Ne pas dupliquer.**
|
||||
|
||||
### Job 3 / P1.g GPU cascade : PATCH PROPOSÉ, NON MERGÉ
|
||||
- Baseline CPU mesurée : OCR = goulot (EasyOCR 2.6s en FHD, docTR 0.9s, YOLO 0.2s,
|
||||
CLIP déjà GPU 5ms).
|
||||
- Patch dans worktree isolé `.claude/worktrees/agent-a4f390f410e00ad7c` :
|
||||
- `core/gpu/device_policy.py` (nouveau) `resolve_device(auto/cuda/cpu + garde-fou VRAM)`,
|
||||
- câblage `som_engine.py`, `ocr_extractor.py`, `resolve_engine.py` (35 lignes),
|
||||
- `tests/unit/test_device_policy.py` 15/15 verts dans le venv réel.
|
||||
- Revue QG locale : pas de hardcode cuda, fallback CPU propre, pas de régression CPU.
|
||||
- Note de proposition : `docs/coordination/inbox_codex/2026-06-05_2120_claude-to-codex-qwen_NOTE-P1g-baseline-patch-device-propose.md`.
|
||||
|
||||
### Doc/hygiène : APPLIQUÉE (main repo)
|
||||
- `~/ai/CLAUDE.md` (ONNX = scope anonymisation).
|
||||
- `core/cognition/vram_orchestrator.py` (docstring limite post-DGX).
|
||||
- `core/detection/vlm_config.py` (commentaire qwen3.5 absent DGX).
|
||||
|
||||
## Fichiers modifiés
|
||||
- **Main repo, déjà en place** : `api_stream.py` (préflight, intégré par Codex),
|
||||
`tests/unit/test_replay_preflight.py`, `vram_orchestrator.py` (docstring),
|
||||
`vlm_config.py` (commentaire), `~/ai/CLAUDE.md`.
|
||||
- **Worktree non mergé** : `core/gpu/device_policy.py`, `tests/unit/test_device_policy.py`,
|
||||
`som_engine.py`, `ocr_extractor.py`, `resolve_engine.py`.
|
||||
- Documents : `docs/ARCHITECTURE_IA_GPU_2026-06-05.md` (rapport IA/GPU corrigé post-QG Qwen).
|
||||
|
||||
## Tests / bench passés
|
||||
- `test_replay_preflight.py` 4/4 ; `test_device_policy.py` 15/15 (venv réel).
|
||||
- Baseline CPU OCR/YOLO/SoM/CLIP mesurée (cf. note 2120).
|
||||
- Non-régression replay : 3 échecs `test_finalize_replay_chain` PRÉ-EXISTANTS (vérifié par stash), pas liés à mes changements.
|
||||
|
||||
## Risques
|
||||
- Patch device : changement de comportement par défaut (EasyOCR/SoM → GPU si VRAM libre).
|
||||
Garde-fou `max_total_gb=6` + override `RPA_VISION_DEVICE=cpu` / `RPA_EASYOCR_GPU=0`.
|
||||
- Bench GPU réel **pas encore fait** → gain ≥20% et précision ≥95% à confirmer.
|
||||
- `vram_orchestrator` semi-inopérant en config DGX (documenté, non corrigé).
|
||||
|
||||
## Prochaine action exacte
|
||||
1. **Décision merge** du patch device worktree → main (attend GO Dom + ACK Codex/Qwen).
|
||||
2. Si merge : **bench GPU réel** (rejouer baseline avec `RPA_VISION_DEVICE=auto` vs `cpu`,
|
||||
8 images FHD, comparer EasyOCR/docTR/SoM + overlap précision ≥95%).
|
||||
3. P1.g-doc (CLAUDE.md) : fait. P1.g-hygiene (audit InfiGUI/seeclick) : Qwen.
|
||||
|
||||
## Décisions demandées à Dom
|
||||
1. **Merge du patch device** worktree → main ? (chirurgie supervisée sur prod).
|
||||
2. **P1.g-qwen35** : pull `qwen3.5:9b` sur DGX (réactiver grounding JSON) OU nettoyer le code mort ?
|
||||
3. Priorité suite : bench GPU d'abord, ou autre ?
|
||||
|
||||
## État coordination
|
||||
- Mes inbox sortants récents : NOTE P1.g (2120), ACK correction wiring + prise P1.g (1925),
|
||||
ALERTE IA/GPU (1910), ANALYSE dangerous clicks (1830), PROPOSITION préflight (1845).
|
||||
- En attente : validation merge patch device (Codex/Qwen/Dom), décision qwen3.5 (Dom).
|
||||
122
docs/handoffs/2026-06-05_handoff_codex_preflight_gpu_mvp.md
Normal file
122
docs/handoffs/2026-06-05_handoff_codex_preflight_gpu_mvp.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# Handoff Codex — préflight replay + GPU/technos MVP
|
||||
|
||||
- `Date`: 2026-06-05 20:51 Europe/Paris
|
||||
- `Auteur`: Codex
|
||||
- `Statut`: reprise possible
|
||||
|
||||
## Objectif produit
|
||||
|
||||
Livrer un MVP : commande naturelle -> workflow appris existant -> préflight replay supervisé
|
||||
-> dialogue/popup détecté -> preuve exploitable. Pas de replay autonome tant que QG danger
|
||||
LeaBench non levé.
|
||||
|
||||
## État fonctionnel
|
||||
|
||||
- `qwen2.5vl:7b-rpa` est le modèle actif.
|
||||
- Ollama pointe vers le DGX via tunnel local `localhost:11434`.
|
||||
- `agent-chat` voit 130 workflows.
|
||||
- `rpa-streaming` voit 130 workflows en mémoire.
|
||||
- Agent Windows repoll `/replay/next`.
|
||||
|
||||
## Correctifs Codex déjà posés
|
||||
|
||||
### Mémoire / workflow matching
|
||||
|
||||
- `core/workflow/semantic_matcher.py`
|
||||
- scan récursif ;
|
||||
- extraction texte enrichie nodes/templates/actions ;
|
||||
- synonymes sauvegarde/enregistrer/notepad/bloc-notes ;
|
||||
- scoring tokens d'action.
|
||||
- `tests/unit/test_workflow_components.py`
|
||||
- tests récursivité et matching workflow appris.
|
||||
|
||||
### Streaming replay loading
|
||||
|
||||
- `agent_v0/server_v1/api_stream.py`
|
||||
- scan récursif workflows ;
|
||||
- `/reload-workflows` aligné avec startup ;
|
||||
- endpoint `POST /api/v1/traces/stream/replay/preflight`.
|
||||
- `agent_v0/server_v1/stream_processor.py`
|
||||
- scan récursif `data/workflows`.
|
||||
- `tests/unit/test_replay_preflight.py`
|
||||
- tests fonctions pures préflight et anti-mutation.
|
||||
|
||||
### Modèle central
|
||||
|
||||
- `agent_chat/app.py`
|
||||
- `agent_chat/autonomous_planner.py`
|
||||
- `agent_chat/intent_parser.py`
|
||||
- `core/gpu/gpu_resource_manager.py`
|
||||
- `core/gpu/ollama_manager.py`
|
||||
- `core/gpu/__init__.py`
|
||||
|
||||
Tous alignés sur `get_reasoning_model()` / `qwen2.5vl:7b-rpa`.
|
||||
|
||||
## Vérifications passées
|
||||
|
||||
```bash
|
||||
timeout 120s .venv/bin/python -m pytest \
|
||||
tests/unit/test_replay_preflight.py \
|
||||
tests/unit/test_workflow_components.py::TestSemanticMatcher \
|
||||
tests/unit/test_gesture_catalog.py -q
|
||||
```
|
||||
|
||||
Résultat : 84 passed, warnings uniquement.
|
||||
|
||||
```bash
|
||||
timeout 60s .venv/bin/python -m py_compile \
|
||||
agent_v0/server_v1/api_stream.py \
|
||||
tests/unit/test_replay_preflight.py
|
||||
```
|
||||
|
||||
Résultat : OK.
|
||||
|
||||
## Vérification live préflight
|
||||
|
||||
Après `systemctl --user restart rpa-streaming.service` :
|
||||
|
||||
- `Bloc-notes, Explorateur et Python (5)`
|
||||
- HTTP 200 ;
|
||||
- `workflow_known=True`;
|
||||
- `n_actions=12`;
|
||||
- `action_types={'click': 8, 'wait': 3, 'verify_screen': 1}`;
|
||||
- `dialogs_detected=['enregistrer sous']`;
|
||||
- `non_destructive=True`.
|
||||
- `Explorateur, Bloc-notes et Python`
|
||||
- HTTP 200 ;
|
||||
- `workflow_known=True`;
|
||||
- `n_actions=13`;
|
||||
- `action_types={'type': 1, 'verify_screen': 4, 'click': 6, 'wait': 2}`;
|
||||
- `dialogs_detected=['enregistrer sous']`;
|
||||
- `non_destructive=True`.
|
||||
|
||||
## Coordination envoyée
|
||||
|
||||
- Claude :
|
||||
- `docs/coordination/inbox_claude/2026-06-05_2051_codex-to-claude_ACK-preflight-live-et-handoff-obligatoire.md`
|
||||
- Qwen :
|
||||
- `docs/coordination/inbox_qwen/2026-06-05_2051_codex-to-qwen_ACK-QG-preflight-live-et-handoff-obligatoire.md`
|
||||
|
||||
## Ce que Claude/Qwen doivent faire
|
||||
|
||||
- Claude : pivoter vers P1.g GPU cascade, multi-agent bench/code/doc/review.
|
||||
- Qwen : verdict QG préflight live + QG GPU cascade.
|
||||
- Tous deux : écrire leur handoff dans `docs/handoffs/`.
|
||||
|
||||
## Prochaine action Codex
|
||||
|
||||
1. Lire les handoffs/retours Claude et Qwen.
|
||||
2. Si Qwen donne GO préflight : préparer test supervisé réel, pas autonome.
|
||||
3. Si Claude livre P1.g GPU : vérifier bench + tests avant restart.
|
||||
4. Ne pas lancer replay live sans Dom devant Windows et validation explicite.
|
||||
|
||||
## Risques ouverts
|
||||
|
||||
- Preflight prouve la conversion et dialogues statiques, pas encore l'exécution humaine.
|
||||
- LeaBench reste NO-GO autonome.
|
||||
- GPU cascade doit rester paramétrable et benchée avant activation par défaut.
|
||||
- Worktree contient des fichiers utilisateur/preexistants à ne pas revert :
|
||||
- `docs/POC/PREREQUIS_DSI_DGX_SPARK_2026-06-01.docx`;
|
||||
- `visual_workflow_builder/backend/instance/workflows.db`.
|
||||
|
||||
— Codex
|
||||
51
docs/handoffs/2026-06-05_handoff_qwen_qg_preflight_gpu.md
Normal file
51
docs/handoffs/2026-06-05_handoff_qwen_qg_preflight_gpu.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# Handoff Qwen — QG préflight + GPU + état 2026-06-05 21:00
|
||||
|
||||
- `De`: Qwen
|
||||
- `Date`: 2026-06-05 21:00 Europe/Paris
|
||||
- `Session`: longue session historique Qwen
|
||||
|
||||
## Verdicts émis
|
||||
|
||||
| QG | Verdict | Réf |
|
||||
|----|---------|-----|
|
||||
| **P1.x dé-hardcodage VLM serveur** | ✅ GO | commit `4dc7d840d` |
|
||||
| **P1.z V4 reasoning** | ✅ GO | commit `806cc04b8` |
|
||||
| **P1.w fallback VLM DGX-safe** | ✅ GO | commit `5b2afa362` |
|
||||
| **P1.y-alpha adapter OpenAI-compat** | ✅ GO | commit `0f122a512` |
|
||||
| **Job 1 préflight replay** | ✅ GO FINAL | endpoint `api_stream.py:3018`, 4/4 tests |
|
||||
| **P1.g GPU cascade** | ✅ GO périmètre | Claude implémente |
|
||||
| **LeaBench → live autonome** | 🔴 NO-GO | 6 clics dangereux qwen2.5vl:7b-rpa |
|
||||
| **Test long Notepad supervisé** | 🟢 GO | Dom devant Windows requis |
|
||||
| **Réutilisation acquis Notepad** | 🟢 GO | Replay supervisé |
|
||||
|
||||
## Preuves archivées
|
||||
|
||||
- `docs/coordination/inbox_codex/` : tous les QG et réponses
|
||||
- `docs/coordination/inbox_qwen/` : tous les messages reçus et traités
|
||||
- Commits : `4dc7d840d`, `806cc04b8`, `5b2afa362`, `0f122a512`
|
||||
|
||||
## Risques ouverts
|
||||
|
||||
1. **P1.y bake-off DGX** : cadré mais pas lancé — besoin GO Dom + vLLM sur DGX
|
||||
2. **P1.g-qwen35 grounding** : `qwen3.5:9b` absent DGX — pull ou nettoyage, décision Dom
|
||||
3. **Test long Notepad** : GO mais nécessite Dom devant Windows
|
||||
4. **httpx Windows** : installé mais test long pas encore lancé
|
||||
|
||||
## Décisions ouvertes (Dom requis)
|
||||
|
||||
- GO bake-off P1.y DGX
|
||||
- Pull `qwen3.5:9b` sur DGX ou nettoyer default grounding
|
||||
- Lancer test long Notepad supervisé
|
||||
|
||||
## Prochaine action exacte
|
||||
|
||||
1. **Attendre commit P1.g GPU** de Claude → QG avec bench vitesse avant/après
|
||||
2. **Audit P1.g-hygiene** : InfiGUI/seeclick wiring (Qwen prend)
|
||||
3. **Surveiller inboxes** — loop actif (toutes les 3 min)
|
||||
4. **Répondre aux nouveaux messages** entrants
|
||||
|
||||
## Contexte mémoire
|
||||
|
||||
Mémoires à jour dans `/home/dom/.qwen/projects/-home-dom-ai-rpa-vision-v3/memory/` — lire `MEMORY.md` au chargement.
|
||||
|
||||
— Qwen
|
||||
Reference in New Issue
Block a user