fix: grounding pour TOUT texte visible (OCR + VLM), auto-unload gemma4

1. Le grounding se déclenche pour by_text_source="vlm" (pas juste "ocr")
   Les textes lus par gemma4 (onglets, labels) sont du texte visible,
   le grounding doit les chercher comme n'importe quel texte OCR.

2. gemma4 est automatiquement déchargé après le build_replay
   pour libérer la VRAM et permettre à qwen2.5vl de charger au replay.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-04-05 12:24:44 +02:00
parent 1c5ff42006
commit f0b311306d
2 changed files with 22 additions and 4 deletions

View File

@@ -438,6 +438,20 @@ def _needs_post_wait(action: dict) -> int:
_GEMMA4_PORT = os.environ.get("GEMMA4_PORT", "11435")
def _unload_gemma4():
"""Décharger gemma4 du GPU Docker pour libérer la VRAM pour qwen2.5vl."""
try:
import requests as _req
_req.post(
f"http://localhost:{_GEMMA4_PORT}/api/generate",
json={"model": "gemma4:e4b", "keep_alive": 0},
timeout=5,
)
logger.info("gemma4 déchargé du GPU (VRAM libérée)")
except Exception:
pass
def _gemma4_read_element(
img_b64: str,
window_title: str = "",
@@ -1512,6 +1526,10 @@ def build_replay_from_raw_events(
"(%d/%d clics avec visual_mode, %d avec screenshot de référence)",
session_id, len(result), visual_clicks, total_clicks, verified_count,
)
# Libérer gemma4 du GPU pour que qwen2.5vl puisse charger au replay
_unload_gemma4()
return result