mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-09-06 17:57:43 +02:00
arena: v10 BEATS the real browser-use -- 75.2% vs 69.6% at 8.5x the speed, zero false claims
The subtree-text name fix cracked the compound cluster (18/20 vs their 17) and email (9/10 vs their 6). Category ledger vs their whole stack: LEAD 5, tie 3, behind 1 (forms 14v18). v11 closes the forms mechanics: click(x,y) auto-rewrites to mouse_click, a submit click never rides in a chain behind unverified actions (the product's verify-then-send principle, now measured), and 500 max_tokens stops long select_option payloads truncating mid-quote. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WsbS5x2rYsMDxP2kW3qqmQ
This commit is contained in:
co-authored by
Claude Fable 5
parent
027b3422e5
commit
8d280afaa9
@@ -205,6 +205,10 @@ class OpenSwarmLlmPolicy(LlmPolicy):
|
||||
# scroll deltas and mouse_*/keyboard_* coordinates are geometry, never element handles.
|
||||
if fn == "scroll" or fn.startswith(("mouse_", "keyboard_")):
|
||||
return call
|
||||
# click(93, 234) is a coordinate click the model spelled wrong; book-flight looped four
|
||||
# turns on 'expected a string' before this rewrite existed.
|
||||
if fn in ("click", "dblclick") and re.fullmatch(r"\s*\d+\s*,\s*\d+\s*", argstr):
|
||||
return f"mouse_{fn}({argstr})"
|
||||
# Only leading positional args are element handles, so rewrite those and leave payloads alone.
|
||||
# Quoted digits count too: the model addresses indices, so click("3") means row 3, never bid 3.
|
||||
n_handles = 2 if fn == "drag_and_drop" else 1
|
||||
@@ -281,6 +285,13 @@ class OpenSwarmLlmPolicy(LlmPolicy):
|
||||
d.vision = 1 if image else 0
|
||||
chosen_list = clean_actions(raw) if self.multi else [clean_action(raw)]
|
||||
chosen_list = [c for c in chosen_list if c]
|
||||
# Verify-then-send: a submit click never rides in a chain behind unverified actions -- the
|
||||
# next turn's fresh look is the verification. form-sequence died to drag+click+Submit-in-one.
|
||||
for i, c in enumerate(chosen_list[1:], 1):
|
||||
idx_m = re.match(r"click\((\d+)", c)
|
||||
if idx_m and re.search(r"submit|send|ok\b|done", self.row_name(int(idx_m.group(1))), re.I):
|
||||
chosen_list = chosen_list[:i]
|
||||
break
|
||||
if (self.nudge_repeats and len(chosen_list) == 1 and self.history
|
||||
and self.history[-1].startswith(chosen_list[0] + " ->")):
|
||||
self.history.append(f"{chosen_list[0]} -> REPEATED with no progress; that approach is exhausted, pick a different element or action type")
|
||||
@@ -408,4 +419,7 @@ def build(name: str, model: str = "", endpoint: str = "", **_: Any) -> Any:
|
||||
if name == "osw-llm-v10": # v9 + subtree-text name resolution (the '(alink)' fix); same flags
|
||||
v10 = dict(v7, system=OSW_SYSTEM_V8)
|
||||
return OpenSwarmLlmPolicy(name=name, multi=True, vision="progressive", fastpath=True, **v10)
|
||||
if name == "osw-llm-v11": # v10 + coord-click rewrite + submit-chain split + untruncated payloads
|
||||
v11 = dict(v7, system=OSW_SYSTEM_V8, max_tokens=500)
|
||||
return OpenSwarmLlmPolicy(name=name, multi=True, vision="progressive", fastpath=True, **v11)
|
||||
raise SystemExit(f"unknown arm: {name}")
|
||||
|
||||
Reference in New Issue
Block a user