AA-VL-4B

AA-VL-4B — Data-Efficient GUI Grounding (4B)

Weights for AA-VL-4B: a LoRA (r=32) merged into Qwen3-VL-4B-Instruct for computer-screen grounding — a natural-language instruction maps to exact click coordinates on a screenshot.

  • Repo: emirozcan16/AA-VL-4B (merged safetensors)
  • GGUF for llama.cpp: emirozcan16/AA-VL-4B-GGUF
  • Base: Qwen/Qwen3-VL-4B-Instruct
  • Trained on ~7K curated samples: LoRA (r=32), initial adapter trained in 4-bit (QLoRA), final 250 steps in fp16. The assembled training set is not released for now (sources below); evaluation is fully open.
  • Interactive demo: AA-VL-4B-demo — real OSWorld-G predictions with the click and target region overlaid.

Scores (raw greedy, pass@1, single prediction, no crop/zoom/planner — our own runs; eval script + per-sample predictions included)

Benchmark AA-VL-4B
OSWorld-G Original 65.2
OSWorld-G Refined 74.5
UI-Vision Final 29.93

UI-Vision breakdown: Basic 39.28 · Functional 37.75 · Spatial 14.21.

No cross-model comparison table here on purpose: published numbers for other models vary with prompt, protocol and agent scaffolding, so we report only our own raw runs and ship the artifacts to reproduce them.

Verification

Per-sample re-scoring artifacts ship with this repo — every raw generation, coordinate and ground-truth box is included:

Benchmark File Rows Correct
OSWorld-G (Original / Refined) osworld_g_predictions.jsonl 1128 (564 × 2) 368 / 420
UI-Vision Final predictions.jsonl 5479 1640
python3 -c "import json;r=[json.loads(l) for l in open('osworld_g_predictions.jsonl')];print({v:sum(a['correct'] for a in r if a['variant']==v) for v in ('original','refined')})"

OSWorld-G rows store both the emitted 0–999 coordinates (pred_xy_norm999) and the pixel coordinates used by the official rule (pred_xy_px); UI-Vision rows store pred_xy_px + target_bbox_px. Every row carries the model output, the ground-truth box and the computed correct, so both benchmarks can be re-scored from scratch. See VERIFY.md.

Usage (transformers)

from transformers import AutoProcessor, AutoModelForImageTextToText
from PIL import Image

MODEL = "emirozcan16/AA-VL-4B"
proc = AutoProcessor.from_pretrained(MODEL, trust_remote_code=True)
model = AutoModelForImageTextToText.from_pretrained(
    MODEL, trust_remote_code=True, torch_dtype="auto", device_map="auto")

img = Image.open("screen.png").convert("RGB")
msgs = [{"role": "user", "content": [
    {"type": "image", "image": img},
    {"type": "text",
     "text": "Instruction: Click the funnel icon right of the search bar. "
             "Reply with the single action line now, nothing else:"}]}]
txt = proc.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
inp = proc(text=[txt], images=[img], return_tensors="pt").to(model.device)
out = model.generate(**inp, max_new_tokens=64, do_sample=False)
print(proc.batch_decode(out[:, inp["input_ids"].shape[1]:],
                        skip_special_tokens=True)[0])
# -> click x=<int> y=<int>   (0-999 normalized scale)   or   refuse

Optional LoRA-only weights: emirozcan16/AA-VL-4B-adapter.

For the exact prompt used in the reported scores, see SYS_CLICK in osworld_g_eval.py; the snippet above is the minimal form.

Training data

7K curated rows (60% click, ~40% refusal). Sources:

Source What we used Role License
Jedi (xlangai/Jedi, HF) icon/component grounding clicks (train_raw/val_raw, os_layout, component libraries) click labels see upstream
GroundCUA GUI grounding click slice (~2.5K rows, picked_json + images) click labels MIT
ScreenSpot-v2 (OS-Copilot/ScreenSpot-v2, HF) desktop screenshots only build synthetic refusal pairs see upstream
Our synthesis instruction ↔️ unrelated screenshot cross-pairing (doc–doc, icon–icon, desktop) refusal examples ours

Base model: Qwen/Qwen3-VL-4B-Instruct (Apache-2.0). No private or scraped user data. The assembled training set is not released for now. We did not train on any benchmark's answer labels.

Eval protocol

  • OSWorld-G: official point-in-box (510 click + 54 refusal), Original instructions.
  • Refined: official OSWorld-G_refined.json instructions, same 564 samples (510 click + 54 refusal), reported separately.
  • UI-Vision: official harness over its three subsets.

Single greedy prediction per sample, no crop/zoom/planner/pass@k.

Notes & limitations

  • Coordinates are on a 0–999 normalized grid.
  • Benchmarks were not independently reproduced by third parties; single seed.

Community quantizations

Thanks to mradermacher for independent static GGUF quants of this model — a big help for the llama.cpp community.

Project

Built in ~3 months on a ~$8 compute budget. Contact: ozcannemir08@gmail.com

Downloads last month
40
Safetensors
Model size
4B params
Tensor type
F16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for emirozcan16/AA-VL-4B

Finetuned
(493)
this model
Quantizations
1 model

Space using emirozcan16/AA-VL-4B 1