backup: snapshot post-démo GHT 2026-05-19
Some checks failed
tests / Lint (ruff + black) (push) Successful in 1m50s
tests / Tests unitaires (sans GPU) (push) Failing after 1m50s
tests / Tests sécurité (critique) (push) Has been skipped

Backup état complet après enregistrement vidéo démo de bout en bout.
À utiliser comme point de référence pour la consolidation post-démo.

Changements majeurs de la session 18-19 mai :
- AIVA-URGENCE : page autonome avec preset URL + auto-focus chain
- Workflow Demo_urgence_3_db : merge linux_db + steps AIVA + pause humaine NoMachine
- Bypass LLM (static_result / static_text) dans replay_engine
  pour démos déterministes sans appel Ollama
- Fix api_stream:3013 — replay_paused au premier polling /next
- dag_execute : lift duration_ms vers top-level pour wait runtime
- NPM bypass auth /aiva-urgence/ via location ^~ (proxy_host/10.conf hors git)
- scripts/cancel-replays.sh — workaround Stop VWB qui ne purge pas la queue

Anchors visuels (468) forcés dans le commit pour garantir restorabilité.
DB workflows actuelle + ~12 .bak DB de la journée incluses.

Sujets identifiés pour consolidation post-démo (TODO) :
1. Bug VWB recapture anchor ne régénère pas le PNG
2. Léa client accumule état mémoire (restart périodique requis)
3. Stop VWB ne purge pas la queue serveur (lien manquant vers /replay/cancel)
4. Bug coord client mss tronqué 2560x60 → mapping Y cassé
5. delay_before/delay_after ignorés au runtime (fix partiel duration_ms)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-05-19 14:55:06 +02:00
parent f2212e77e3
commit 5ea4960e65
627 changed files with 211348 additions and 169 deletions

View File

@@ -0,0 +1,91 @@
# Bench LLM décision T2A — 11 dossiers GHT Sud 95
_Généré le 2026-05-05 19:00 — **18 modèles** × 11 DPI consolidés (5 UHCD / 6 Forfait)_
> ⚠️ **Vérité-terrain corrigée 2026-05-05** : `25003284` reclassé **FORFAIT** (sortie domicile en 3h37, J12.1 VRS) — auparavant à tort UHCD. Tous les scores ci-dessous reflètent la nouvelle vérité-terrain.
## 🏆 Classement complet
| # | Modèle | Acc | p50 | Err HTTP | Parse | Calib | Verdict |
|---|---|---:|---:|:---:|:---:|:---:|---|
| #1 | `gemma3:27b-cloud` | **8/11 (73%)** | 10.6s | ✅ | ✅ | ❌ 2 | 🟢 **Recommandé démo** |
| #2 | `qwen3:8b` | **7/11 (64%)** | 7.6s | ✅ | ✅ | ❌ 1 | 🟡 Acceptable + garde-fou |
| #3 | `qwen2.5:7b` | **7/11 (64%)** | 10.0s | ✅ | ✅ | ❌ 2 | 🟡 Acceptable + garde-fou |
| #4 | `qwen3-vl:235b-instruct-cloud` | **7/11 (64%)** | 20.3s | ✅ | ✅ | ❌ 4 | 🟡 Acceptable + garde-fou |
| #5 | `qwen3.5:9b` | **7/11 (64%)** | 25.8s | ✅ | ⚠1 | ❌ 1 | 🟡 Acceptable + garde-fou |
| #6 | `t2a-gemma3-27b-q4:latest` | **7/11 (64%)** | 152.2s | ⚠1 | ✅ | ❌ 3 | 🟡 Acceptable + garde-fou |
| #7 | `thiagomoraes/medgemma-27b-it:Q4_K_S` | **7/11 (64%)** | 181.6s | ⚠1 | ✅ | ❌ 3 | 🟡 Acceptable + garde-fou |
| #8 | `gemma4:latest` | **6/11 (55%)** | 17.9s | ✅ | ✅ | ❌ 3 | 🔴 Insuffisant |
| #9 | `pmsi-runpod:latest` | **6/11 (55%)** | 18.8s | ✅ | ⚠1 | ❌ 4 | 🔴 Insuffisant |
| #10 | `qwen2.5:14b` | **6/11 (55%)** | 68.0s | ✅ | ✅ | ❌ 1 | 🔴 Insuffisant |
| #11 | `pmsi-coder:latest` | **5/11 (45%)** | 18.1s | ✅ | ⚠1 | ❌ 5 | 🔴 Insuffisant |
| #12 | `medgemma:4b` | **4/11 (36%)** | 4.4s | ✅ | ⚠6 | ❌ 1 | 🟠 Format JSON cassé via Ollama |
| #13 | `gpt-oss:120b-cloud` | **3/11 (27%)** | 16.0s | ✅ | ⚠5 | ❌ 3 | 🟠 Format JSON cassé via Ollama |
| #14 | `pmsi-coder-v2:latest` | **3/11 (27%)** | 23.4s | ✅ | ⚠5 | ✅ | 🟠 Format JSON cassé via Ollama |
| #15 | `qwen3:14b` | **1/11 (9%)** | 1.2s | ✅ | ⚠1 | ❌ 1 | 🔴 Insuffisant |
| #16 | `charlestang06/openbiollm:latest` | **1/11 (9%)** | 6.0s | ✅ | ✅ | ❌ 3 | 🔴 Insuffisant |
| #17 | `gpt-oss:20b-cloud` | **0/11 (0%)** | 0.0s | ✅ | ⚠11 | ✅ | 🟠 Format JSON cassé via Ollama |
| #18 | `qwen3-next:80b-cloud` | **0/11 (0%)** | 0.0s | ✅ | ⚠11 | ✅ | 🟠 Format JSON cassé via Ollama |
## 🎯 Recommandation pour la démo
**Modèle retenu : `gemma3:27b-cloud`** — 8/11 (73%), p50 10.6s
**Backup local si cloud KO** : `qwen3:8b` (7/11, 7.6s, 5 GB seulement → tient large dans 12 GB GPU).
## 📊 Détail dossier-par-dossier (top 5)
| IPP | Cas | Vérité | `gemma3` | `qwen3` | `qwen2.5` | `qwen3-vl` | `qwen3.5` |
|---|---|:---:|:---:|:---:|:---:|:---:|:---:|
| 25003284 | Pneumo VRS — Forfait | **Forfait** | ❌ UHCD | ❌ UHCD | ❌ UHCD | ❌ UHCD | ✅ Forfait |
| 25003362 | Intox PE2 | **Forfait** | ✅ Forfait | ✅ Forfait | ✅ Forfait | ✅ Forfait | ✅ Forfait |
| 25003364 | Pneumo SLA — UHCD | **UHCD** | ✅ UHCD | ✅ UHCD | ✅ UHCD | ✅ UHCD | ✅ UHCD |
| 25003451 | Plaie SU2 | **Forfait** | ✅ Forfait | ✅ Forfait | ❌ UHCD | ✅ Forfait | ✅ Forfait |
| 25003475 | Aura migr. — UHCD | **UHCD** | ✅ UHCD | ✅ UHCD | ❌ Forfait | ❌ Forfait | ❌ Forfait |
| 25005866 | Trauma hockey — UHCD | **UHCD** | ✅ UHCD | ❌ Forfait | ✅ UHCD | ✅ UHCD | ✅ UHCD |
| 25010621 | Laryngite PE2 | **Forfait** | ✅ Forfait | ✅ Forfait | ✅ Forfait | ✅ Forfait | ✅ Forfait |
| 25012257 | Douleur abdo — UHCD | **UHCD** | ❌ Forfait | ✅ UHCD | ✅ UHCD | ✅ UHCD | ⚠️ parse |
| 25048485 | Convulsion PE2 | **Forfait** | ✅ Forfait | ❌ UHCD | ✅ Forfait | ✅ Forfait | ✅ Forfait |
| 25056615 | Salpingite std | **Forfait** | ❌ UHCD | ❌ UHCD | ❌ UHCD | ❌ UHCD | ❌ UHCD |
| 25151530 | Colique std | **Forfait** | ✅ Forfait | ✅ Forfait | ✅ Forfait | ❌ UHCD | ❌ UHCD |
## ⚠️ Cas problématiques universels (3+ modèles top se trompent)
- **`25003284` (Pneumo VRS — Forfait, vérité Forfait)** : 4/5 modèles top se trompent → DPI à enrichir OU vérité-terrain à challenger avec Pauline
- **`25003475` (Aura migr. — UHCD, vérité UHCD)** : 3/5 modèles top se trompent → DPI à enrichir OU vérité-terrain à challenger avec Pauline
- **`25056615` (Salpingite std, vérité Forfait)** : 5/5 modèles top se trompent → DPI à enrichir OU vérité-terrain à challenger avec Pauline
## 🔬 Limites du bench (transparence)
Ce bench est **suffisant pour trier les modèles candidats** mais **PAS rigoureusement validant** :
- **n=11** dossiers — échantillon trop petit pour statistique robuste (cible : 50-100)
- **1 inférence par dossier** — pas de variance mesurée (un même DPI peut donner 2 réponses différentes)
- **Vérité-terrain dérivée** — partiellement corrigée mais pas encore validée à 100% par DIM
- **DPI source partiellement fictif** — voir `REVUE_DOSSIERS_PAULINE.md` (40+ noms inventés, 4 hallucinations cliniques graves, constantes tronquées). **Le bench tourne donc sur du contenu non-fidèle.** Re-bench prévu après reconstruction `data.js`.
- **Pas de cross-validation** — pas de split train/test
- **Pas de calibration formelle** — % de "elevee" fausses noté mais pas Calibration Error Score
- **Bench externes non utilisés** — MedQA, MedFrenchBenchmark, etc. pourraient compléter
**Pour un vrai bench de validation produit (post-démo)** :
1. Étendre à 50-100 dossiers anonymisés diversifiés (Pauline + DIM partenaires)
2. 3 inférences par dossier (mesure variance)
3. Cross-validation k-fold
4. Inter-rater agreement humain comme baseline
5. Tests robustesse (DPI avec fautes, abréviations atypiques)
## 🧪 Modèles non testés intéressants à explorer
- **MedGemma 1.5** (jan 2026, 91% MedQA — surpasse Med-PaLM 2) — disponible HuggingFace, à pull si compatible Ollama
- **DeepSeek-R1** (top open-source reasoning 2026) — cloud Ollama 403 sans abonnement
- **Modèles vllm** : qwen3-next, gpt-oss-120b ont eu 100% parse errors via Ollama, peut-être fonctionnels via vllm avec format JSON propre
- **Fine-tune T2A custom étendu** : `t2a-gemma3-27b` (28 GB non-quantized) sur DGX Spark
## 📦 Annexes
- Trace brute local : `/tmp/bench_t2a_full.json`
- Trace brute cloud : `/tmp/bench_t2a_cloud.json`
- Trace brute extra : `/tmp/bench_t2a_extra.json`
- Trace brute retry : `/tmp/bench_t2a_retry.json`
- Scripts : `/tmp/bench_t2a*.py`
- DPI consolidés : `/tmp/dpis.json`