From 7dec3ab63a84dcde140e6510d0d3883b87dd5fb5 Mon Sep 17 00:00:00 2001 From: Dom Date: Tue, 31 Mar 2026 15:44:56 +0200 Subject: [PATCH] fix: rejeter bavardage VLM dans _vlm_identify_element MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le VLM 8B répond souvent avec "several UI elements", "I can see", etc. au lieu d'un label court. Ces réponses remplissaient by_text avec du non-sens, empêchant le som_anchor_match de se déclencher pour les icônes sans texte (disquette, fermer, etc.). Co-Authored-By: Claude Opus 4.6 (1M context) --- agent_v0/server_v1/stream_processor.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/agent_v0/server_v1/stream_processor.py b/agent_v0/server_v1/stream_processor.py index 74f113de2..9b2cbcbc0 100644 --- a/agent_v0/server_v1/stream_processor.py +++ b/agent_v0/server_v1/stream_processor.py @@ -502,14 +502,24 @@ def _vlm_identify_element(anchor_b64: str, window_title: str = "") -> str: if raw.lower().startswith(prefix.lower()): raw = raw[len(prefix):] break + # Rejeter les réponses qui sont du bavardage, pas un label + reject_patterns = ( + "several", "multiple", "various", "image", + "I can", "there are", "there is", "elements", + "the following", "here are", + ) + if any(p in raw.lower()[:30] for p in reject_patterns): + logger.debug("VLM identify : réponse bavarde rejetée (raw='%s')", raw[:60]) + return "" + # Prendre les 5 premiers mots utiles words = raw.split()[:5] label = " ".join(words).strip('",.\' ').rstrip(".") - if label and 2 <= len(label) <= 60: + if label and 2 <= len(label) <= 40: logger.info("VLM identify element : '%s'", label) return label else: - logger.debug("VLM identify : label trop court ou vide après nettoyage (raw='%s')", raw[:80]) + logger.debug("VLM identify : label trop court/long après nettoyage (raw='%s')", raw[:80]) except Exception as e: logger.debug("VLM identify element échoué : %s", e)