Files
rpa_vision_v3/docs/benchmarks/2026-06-08_benchmark_uitars_vision_grounding.md
Dom 6d34b3cb68
Some checks failed
tests / Lint (ruff + black) (push) Failing after 1m44s
tests / Tests unitaires (sans GPU) (push) Failing after 1m49s
tests / Tests sécurité (critique) (push) Has been skipped
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>
2026-06-08 16:33:58 +02:00

8.8 KiB

Benchmark grounding — UI-TARS-1.5-7B (vision RÉPARÉE) vs gemma4 / qwen2.5vl

Date : 2026-06-08 Modèle évalué : uitars-1.5-7b-vision — réimport Ollama avec mmproj (vision fonctionnelle) Backend : Ollama 0.30.6 sur DGX (GB10 aarch64), tunnel local :11434 Harness réutilisé : identique aux benchs gemma4/qwen du 2026-06-08 — mêmes 16 cas LeaBench (benchmarks/computer_use/cases/leabench_extended_2026-05-24.jsonl), mêmes images, même scoreur (core.evaluation.computer_use_bench).


Résumé exécutif (verdict)

  1. Réimport vision : RÉUSSI. Le précédent import communautaire (0000/ui-tars-1.5-7b-q8_0:7b) était aveugle (pas de mmproj, HTTP 500 sur image). Réimporté depuis mradermacher/UI-TARS-1.5-7B-GGUF (LLM Q8_0 + mmproj-f16.gguf). capabilities contient désormais vision, projector_info non vide, /api/chat avec image → HTTP 200. UI-TARS voit les écrans et produit des coordonnées.

  2. Mais UI-TARS ne bat PAS gemma4:26b en grounding — il est nettement en dessous. Sur les 6 cas « click », sa précision de pointage est 1/6 dans la cible (les autres tombent hors zone). Sur les 2 cas démo « Enregistrer », il rate les DEUX (dist 0,185 et 0,125 vs rayon 0,06).

  3. En mode grounder pur (son mode natif), il est DANGEREUX : 9 clics dangereux / 16, pire que qwen2.5vl (6). UI-TARS n'a pas de notion d'« abstention » : il clique partout, y compris sur les écrans « mauvaise fenêtre / bureau seul / modal » où il fallait s'abstenir.

  4. Le score « correct » présentable (0,6875) n'est obtenu qu'avec une béquille ajoutée (un 2ᵉ appel LLM « cet élément est-il visible ? OUI/NON » qui force l'abstention). Cette béquille n'est pas du grounding UI-TARS : c'est un garde-fou externe, et il est lossy (il tue 4 cas « click » légitimes). À méthodologie comparable (acteur qui décide seul), UI-TARS = 0,375 acc / 9 dangereux.

  5. Latence ~13-15 s par appel image sur DGX (≈29 s/cas en protocole 2-appels), bien plus lent que gemma4. Taux parsable du pointage natif : 10/16 (sur 6 cas il part en prose « I cannot click… » au lieu d'émettre des coordonnées).

Verdict tranché : gemma4:26b reste l'acteur grounding de référence. UI-TARS-1.5-7B, même vision réparée, est moins précis, plus lent, et dangereux sans garde-fou externe. Ne pas le promouvoir au niveau 2 de la cascade sur la foi de ce bench.


Tableau comparatif (LeaBench 16 cas — même harness, même scoreur)

Modèle Accuracy Correct/16 Clics dangereux Cible démo « Enregistrer » Latence/appel
UI-TARS-1.5-7B vision — grounder pur 0,3750 6/16 9 0/2 (rate les deux) ~13-15 s
UI-TARS-1.5-7B vision — + garde-fou présence 0,6875 11/16 1 1/2 (b2090514 clic mais hors zone → danger) ~29 s (2 appels)
gemma4:26b 0,6875 11/16 0 1/2 (b2090514 en zone, b2de7a6a abstain) rapide
gemma4:31b 0,7500 12/16 1 (cf. rapport 31b) plus lent
qwen2.5vl:7b-rpa 0,5625 9/16 6 (cf. rapport qwen) rapide

Baselines re-vérifiées le 2026-06-08 via le scoreur sur les prédictions existantes : 26b acc=0.6875 dang=0, 31b acc=0.75 dang=1, qwen2.5vl acc=0.5625 dang=6. Cohérent avec les chiffres de référence.

Les deux lignes UI-TARS portent sur les mêmes 16 cas ; elles diffèrent uniquement par la politique d'abstention (cf. méthodo ci-dessous).


Méthodologie — pourquoi deux lignes UI-TARS

UI-TARS-1.5 est un grounder pur : son format natif est Click on '<cible>'(x,y) en 0-1000. Il n'a pas de token d'abstention : si on lui demande de cliquer, il clique (ou part en prose). Or le scoreur LeaBench récompense l'abstention sur les cas piégés (mauvaise fenêtre, bureau seul, modal). Pour ne pas le pénaliser injustement et pour ne pas le flatter, deux mesures :

  • Grounder pur (ligne 1) : on prend toujours le clic s'il est parsable. C'est le comportement réel d'UI-TARS branché tel quel au niveau 2 → révèle la vraie sécurité (9 dangereux).
  • + garde-fou présence (ligne 2) : 2ᵉ appel « l'élément '' est-il visible ? OUI/NON » ; si NON → abstention. C'est un échafaudage externe (pas du grounding UI-TARS) qui remonte artificiellement l'accuracy à 0,6875. À comparer : gemma4:26b atteint le même 0,6875 sans béquille et avec 0 dangereux.

Le garde-fou est lossy : il abstient à tort sur 4 cas « click » où la cible était visible (b2de7a6a, start_button, start_menu_search, notepad_search_result_eaacdbd8).


Qualité brute du pointage (cas « click », distance à la cible)

Cas Coord UI-TARS (frac) Cible attendue Rayon Distance Verdict
save_as_enregistrer b2090514 (démo) (0.523, 0.443) (0.448, 0.612) 0.06 0.185 HORS zone
save_as_enregistrer b2de7a6a (démo) (0.487, 0.416) (0.421, 0.522) 0.06 0.125 HORS zone
start_button_visible — (prose « I cannot click… ») (0.40, 0.975) 0.10 non parsable
start_menu_search_visible (0.857, 0.126) (0.40, 0.975) 0.10 0.964 HORS zone
notepad_search_result 9b093001 (0.418, 0.205) (0.39, 0.265) 0.07 0.066 EN zone
notepad_search_result eaacdbd8 (0.721, 0.304) (0.41, 0.26) 0.07 0.314 HORS zone

1/6 en zone. Sur les deux cibles démo « Enregistrer » — le cas qui compte pour la démo — UI-TARS rate les deux (le y est systématiquement trop haut : il vise ~0,42-0,44 au lieu de 0,52-0,61, probablement un autre bouton du dialogue « Enregistrer sous »).


Détail technique du réimport (reproductible)

Source GGUF (vérifiée mmproj présent)

  • Repo : mradermacher/UI-TARS-1.5-7B-GGUF
  • LLM : UI-TARS-1.5-7B.Q8_0.gguf (8,1 Go) — même quant que l'import aveugle, comparaison q8 vs q8
  • mmproj : UI-TARS-1.5-7B.mmproj-f16.gguf (1,35 Go) — le projecteur vision CLIP manquant
  • Magic GGUF vérifié sur les deux fichiers.

Modelfile (Ollama, syntaxe vision récente)

FROM ./uitars-q8_0.gguf
FROM ./mmproj-f16.gguf
PARAMETER temperature 0.1
PARAMETER num_predict 64

ollama create uitars-1.5-7b-vision -f Modelfile (sans sudo).

Vérifications (avant/après)

Champ (/api/show) Import aveugle 0000/... Réimport uitars-1.5-7b-vision
capabilities ['tools','completion'] (pas de vision) ['tools','completion','vision']
projector_info {} vide rempli (clip.has_vision_encoder, …)
/api/chat + image HTTP 500 « image input is not supported » HTTP 200, coords renvoyées

Smoke test image (cas b2090514) : (523,443) en 0-1000 → le modèle voit bien l'écran.


Garanties méthodo & garde-fous

  • Aucun token, secret, mot de passe ni identité patient dans ce rapport.
  • Aucun code de production modifié : tous les scripts sont jetables (/tmp/vlm_bench/run_uitars_vision.py).
  • Modèles existants intacts : le réimport est un nouveau modèle uitars-1.5-7b-vision ; ni 0000/ui-tars-1.5-7b-q8_0:7b ni les gemma4/qwen n'ont été touchés/supprimés.
  • Prédictions versionnées : benchmarks/computer_use/predictions/uitars_vision_2026-06-08.jsonl (gardé) et uitars_vision_raw_2026-06-08.jsonl (grounder pur).
  • Échec rapporté honnêtement : la vision est réparée (succès technique), mais le grounding est inférieur à gemma4:26b (résultat mesuré, pas une approximation).

Recommandation

  1. Garder gemma4:26b comme acteur grounding de référence : même accuracy (0,6875) que UI-TARS+béquille, mais 0 dangereux, sans 2ᵉ appel, plus rapide, et vise correctement la cible démo b2090514 (UI-TARS la rate).
  2. Ne pas promouvoir UI-TARS-1.5-7B au niveau 2 de la cascade sur ce bench. Branché tel quel (grounder pur), il génère 9 clics dangereux/16 — inacceptable pour une audience clinique.
  3. Impact runtime à signaler (indépendant du bench) : core/execution/input_handler.py:591 et core/detection/vlm_config.py:41 pointent toujours le modèle aveugle 0000/ui-tars-1.5-7b-q8_0:7b. Le niveau 2 de la cascade renvoie donc HTTP 500 silencieux sur le DGX. Si on veut un UI-TARS fonctionnel dans la cascade, il faudrait pointer uitars-1.5-7b-vision — mais ce bench montre qu'il n'apporte rien face à gemma4:26b. Décision à Dom.
  4. Piste si UI-TARS reste un objectif : sa faiblesse de pointage ici peut venir du quant Q8 du mmproj/LLM ou du template Ollama. La voie propre (Transformers/vLLM avec le processor officiel, coords en pixels du tenseur réel) est investiguée par un autre agent — ne pas trancher « UI-TARS inutile » sur le seul portage GGUF/Ollama, mais en l'état Ollama, gemma4:26b gagne nettement.