feat: replay E2E fonctionnel — 25/25 actions, 0 retries, SomEngine via serveur

Validé sur PC Windows (DESKTOP-58D5CAC, 2560x1600) :
- 8 clics résolus visuellement (1 anchor_template, 1 som_text_match, 6 som_vlm)
- Score moyen 0.75, temps moyen 1.6s
- Texte tapé correctement (bonjour, test word, date, email)
- 0 retries, 2 actions non vérifiées (OK)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-03-31 14:04:41 +02:00
parent 5e0b53cfd1
commit a7de6a488b
79542 changed files with 6091757 additions and 1 deletions

Binary file not shown.

View File

@@ -0,0 +1,234 @@
{
"sessions": [
{
"name": "sess_20260318T010719_62a058",
"clicks_total": 87,
"clicks_tested": 30,
"found": 23,
"not_found": 7,
"no_screenshot": 0,
"rate": 76.66666666666667
},
{
"name": "sess_20260317T102307_67dfad",
"clicks_total": 12,
"clicks_tested": 12,
"found": 11,
"not_found": 1,
"no_screenshot": 0,
"rate": 91.66666666666666
},
{
"name": "sess_20260316T204729_61eb09",
"clicks_total": 14,
"clicks_tested": 14,
"found": 11,
"not_found": 3,
"no_screenshot": 0,
"rate": 78.57142857142857
},
{
"name": "sess_20260316T194221_f2f762",
"clicks_total": 8,
"clicks_tested": 8,
"found": 7,
"not_found": 1,
"no_screenshot": 0,
"rate": 87.5
},
{
"name": "sess_20260316T192726_179860",
"clicks_total": 11,
"clicks_tested": 11,
"found": 8,
"not_found": 3,
"no_screenshot": 0,
"rate": 72.72727272727273
}
],
"total_clicks": 75,
"total_found": 60,
"total_not_found": 15,
"total_no_screenshot": 0,
"rate": 80.0,
"source_counts": {
"yolo": 50,
"ocr": 10
},
"label_counts": {
"(vide)": 27,
"Gmail": 1,
"Nouveau": 1,
"Envoyer": 1,
"Arrêter": 2,
"18/03/202601:06": 1,
"Cliquez": 1,
"Sélectionner": 1,
"pseudonymisation": 1,
"journal": 1,
"dossier": 1,
"préformatic": 1,
"Ouvrir": 4,
"Fichier": 3,
"Enregistrer": 5,
"hl": 1,
"Rechercher": 3,
"Ab": 1,
"Terminer": 3,
"Bloc-notes": 1
},
"analysis_times_unique_ms": [
2013.3683681488037,
208.77361297607422,
225.54421424865723,
192.9166316986084,
345.1664447784424,
291.99981689453125,
294.2180633544922,
302.0186424255371,
304.4416904449463,
308.41851234436035,
344.38085556030273,
344.75064277648926,
341.2017822265625,
348.62232208251953,
341.8588638305664,
336.70878410339355,
331.38418197631836,
336.25245094299316,
329.3941020965576,
328.51481437683105,
161.28921508789062,
183.08258056640625,
182.10196495056152,
203.06897163391113,
222.0137119293213,
212.538480758667,
210.69622039794922,
188.07601928710938,
216.73846244812012,
273.4973430633545,
209.98382568359375,
207.79013633728027,
178.24649810791016,
182.1115016937256,
203.29999923706055,
214.74170684814453,
176.44286155700684,
215.38472175598145,
214.16163444519043,
220.98016738891602,
245.7442283630371,
232.87606239318848,
214.62345123291016,
220.23653984069824,
227.33664512634277,
177.81615257263184,
186.5978240966797,
184.3409538269043,
235.48293113708496,
214.87188339233398,
207.49187469482422,
178.64704132080078,
212.9981517791748,
215.17205238342285,
211.95173263549805,
222.06664085388184,
214.0963077545166,
215.04783630371094,
177.89340019226074,
184.5870018005371,
177.15930938720703,
208.62793922424316,
211.54332160949707,
219.22612190246582,
208.97364616394043,
208.94289016723633,
175.1537322998047,
173.86698722839355,
168.77007484436035,
172.75238037109375,
187.55531311035156,
196.0773468017578,
178.44009399414062,
174.10540580749512,
188.54856491088867
],
"element_counts": [
275,
235,
239,
196,
429,
382,
387,
385,
383,
382,
434,
430,
422,
416,
410,
407,
402,
418,
409,
406,
164,
185,
189,
221,
256,
223,
229,
167,
162,
301,
254,
263,
186,
190,
205,
253,
188,
246,
257,
257,
257,
268,
220,
241,
253,
175,
180,
180,
177,
237,
237,
179,
222,
237,
235,
244,
146,
252,
189,
187,
189,
140,
224,
232,
221,
229,
182,
176,
177,
181,
190,
233,
181,
199,
203
]
}

View File

@@ -0,0 +1,113 @@
# Benchmark SomEngine vs Résolution actuelle
**Date** : 31 mars 2026
**Objectif** : Évaluer la capacité de SomEngine (YOLO + docTR) à identifier les éléments UI cliqués sur des sessions de replay réelles.
---
## Résumé exécutif
| Métrique | Valeur |
|----------|--------|
| Sessions analysées | 5 |
| Clics testés | 75 |
| Éléments trouvés | 60 |
| Éléments non trouvés | 15 |
| **Taux de réussite global** | **80.0%** |
| Temps médian par screenshot | 213 ms |
| Éléments détectés par screenshot (médiane) | 233 |
## Méthodologie
- 5 sessions les plus récentes (16-18 mars 2026), toutes capturées sur Windows (2560x1600)
- Pour chaque clic `mouse_click` avec `screenshot_id` et `pos`, SomEngine analyse le screenshot full et cherche un élément UI dans un rayon de 30px autour du point de clic
- Maximum 30 clics testés par session (session 87 clics limitée à 30)
- Pas de comparaison directe avec VLM Quick Find (pas de données VLM enregistrées dans les sessions)
## Résultats par session
| Session | Date | Clics testés | Trouvés | Taux | Contexte |
|---------|------|:---:|:---:|:---:|----------|
| `sess_20260318T010719_62a058` | 18 mars | 30 | 23 | 76.7% | Gmail, Explorateur, Pseudonymisation |
| `sess_20260317T102307_67dfad` | 17 mars | 12 | 11 | 91.7% | Bloc-notes, Explorateur, Rechercher |
| `sess_20260316T204729_61eb09` | 16 mars | 14 | 11 | 78.6% | Bloc-notes, Enregistrer sous |
| `sess_20260316T194221_f2f762` | 16 mars | 8 | 7 | 87.5% | Bloc-notes, Rechercher |
| `sess_20260316T192726_179860` | 16 mars | 11 | 8 | 72.7% | Bloc-notes, Enregistrer sous |
## Performance temporelle
| Métrique | Valeur |
|----------|--------|
| Temps moyen (warm) | 229 ms |
| Temps médian | 213 ms |
| P95 | 345 ms |
| Min | 161 ms |
| Max | 2013 ms (cold start) |
| Cold starts (>1s) | 1 sur 75 |
A comparer avec VLM Quick Find qui nécessite un appel Ollama (typiquement 1-5s selon le modèle et la charge GPU).
**SomEngine est ~5-20x plus rapide que le VLM** pour la détection pure.
## Répartition par source de détection
| Source | Éléments trouvés | Proportion |
|--------|:---:|:---:|
| YOLO (icônes/boutons) | 50 | 83.3% |
| OCR (texte docTR) | 10 | 16.7% |
YOLO domine largement, ce qui est attendu : les clics ciblent principalement des boutons et icônes interactifs.
## Labels les plus fréquents (éléments trouvés)
| Label | Occurrences | Source typique |
|-------|:---:|:---:|
| *(vide — icône sans texte)* | 27 | yolo |
| Enregistrer | 5 | yolo |
| Ouvrir | 4 | yolo/ocr |
| Fichier | 3 | yolo/ocr |
| Rechercher | 3 | yolo |
| Terminer | 3 | yolo |
| Arrêter | 2 | yolo/ocr |
**Observation** : 45% des éléments trouvés n'ont pas de label textuel (icônes YOLO sans OCR associé). C'est une faiblesse pour le replay sémantique car on ne sait pas QUOI a été cliqué, seulement OU.
## Analyse des échecs (15 MISS)
Les 15 clics non résolus tombent dans ces catégories :
1. **Clics dans des zones de texte/contenu** (majorité) : corps d'email Gmail, zone d'édition Bloc-notes, barre d'adresse. SomEngine détecte les boutons et labels mais pas les zones de saisie libre.
2. **Éléments très proches** : dans Gmail, plusieurs éléments d'email empilés verticalement. Le clic tombe entre deux bbox détectées.
3. **Marge de 30px insuffisante** : certains clics tombent juste en dehors de la bbox détectée, surtout pour les petits éléments.
Malgré 140-434 éléments détectés par screenshot, le taux de MISS reste significatif (20%) car les zones de contenu pur (textarea, corps d'email) ne sont pas modélisées comme éléments interactifs.
## Comparaison qualitative avec VLM Quick Find
| Critère | SomEngine | VLM Quick Find |
|---------|-----------|----------------|
| **Vitesse** | ~230ms | ~2-5s |
| **Taux de résolution** | 80% | Non benchmarké (estimation ~60-70% basée sur les logs) |
| **Sémantique** | Faible (label OCR ou vide) | Forte (description contextuelle) |
| **Dépendance GPU** | YOLO + docTR (~200ms) | Ollama inference (~2-5s) |
| **Zones de texte** | Non détectées | Détectées via VLM |
| **Robustesse écrans complexes** | Bonne (233 éléments médians) | Variable |
## Recommandations
1. **SomEngine est un excellent complément**, pas un remplacement du VLM. La vitesse (230ms vs 2-5s) le rend idéal comme premier pass.
2. **Stratégie hybride recommandée** : SomEngine d'abord (fast pass), puis VLM en fallback uniquement si SomEngine échoue. Cela devrait réduire le temps moyen de résolution de 70-80%.
3. **Améliorer le labeling** : 45% des éléments YOLO n'ont pas de label. Croiser la bbox YOLO avec l'OCR docTR pour enrichir les labels (si un texte OCR est adjacent ou contenu dans la bbox YOLO).
4. **Augmenter la marge pour les zones de saisie** : les clics dans les textarea/champs d'édition ne sont pas captés. Ajouter une détection spécifique des zones de saisie (via OCR contextuel ou heuristique de grandes zones vides).
5. **Le taux de 80% est bon pour un premier déploiement** et supérieur aux estimations du VLM seul. Combiné en hybride, on peut viser >90%.
---
*Données brutes : `data/analytics/som_benchmark_raw.json`*
*Script de benchmark exécuté manuellement, pas de modification du code source.*