feat(agent): add learn action flow and grounding guards
This commit is contained in:
@@ -44,3 +44,80 @@ def test_template_strategy_passes_fallback_coords_to_anchor_drift_guard():
|
||||
fallback_x_pct=0.708594,
|
||||
fallback_y_pct=0.35,
|
||||
)
|
||||
|
||||
|
||||
def test_server_explicit_reject_skips_local_text_fallback():
|
||||
executor = MagicMock()
|
||||
executor._server_resolve_target = MagicMock(
|
||||
return_value={
|
||||
"resolved": False,
|
||||
"method": "rejected_close_tab_zone_hybrid_text_direct",
|
||||
"reason": "close_tab_out_of_recorded_zone",
|
||||
"score": 0.8,
|
||||
}
|
||||
)
|
||||
executor._hybrid_vlm_resolve = MagicMock(
|
||||
return_value={
|
||||
"resolved": True,
|
||||
"x_pct": 0.1,
|
||||
"y_pct": 0.13,
|
||||
"method": "hybrid_text_direct",
|
||||
"score": 0.9,
|
||||
}
|
||||
)
|
||||
|
||||
engine = GroundingEngine(executor)
|
||||
engine._capture_window_or_screen = MagicMock(return_value="shot")
|
||||
|
||||
result = engine.locate(
|
||||
"http://server",
|
||||
{
|
||||
"by_text": "test",
|
||||
"context_hints": {"interaction": "close_tab"},
|
||||
"screen_scope": "full_screen",
|
||||
},
|
||||
fallback_x=0.7,
|
||||
fallback_y=0.04,
|
||||
screen_width=2560,
|
||||
screen_height=1600,
|
||||
)
|
||||
|
||||
assert result.found is False
|
||||
executor._hybrid_vlm_resolve.assert_not_called()
|
||||
|
||||
|
||||
def test_server_plain_not_found_allows_local_text_fallback():
|
||||
executor = MagicMock()
|
||||
executor._server_resolve_target = MagicMock(
|
||||
return_value={
|
||||
"resolved": False,
|
||||
"method": "server_no_match",
|
||||
"reason": "not_found",
|
||||
"score": 0.0,
|
||||
}
|
||||
)
|
||||
executor._hybrid_vlm_resolve = MagicMock(
|
||||
return_value={
|
||||
"resolved": True,
|
||||
"x_pct": 0.45,
|
||||
"y_pct": 0.5,
|
||||
"method": "hybrid_text_direct",
|
||||
"score": 0.9,
|
||||
}
|
||||
)
|
||||
|
||||
engine = GroundingEngine(executor)
|
||||
engine._capture_window_or_screen = MagicMock(return_value="shot")
|
||||
|
||||
result = engine.locate(
|
||||
"http://server",
|
||||
{"by_text": "Enregistrer", "screen_scope": "full_screen"},
|
||||
fallback_x=0.5,
|
||||
fallback_y=0.5,
|
||||
screen_width=1920,
|
||||
screen_height=1080,
|
||||
)
|
||||
|
||||
assert result.found is True
|
||||
assert result.method == "hybrid_text_direct"
|
||||
executor._hybrid_vlm_resolve.assert_called_once()
|
||||
|
||||
Reference in New Issue
Block a user