Quick start
pip install torch torchvision transformers peft accelerate pillow safetensors huggingface_hubhf download ayushadarsh7/RuntimeLabs-Kayak-Qwen3-VL-4B-LoRA infer.py --local-dir kayak-inferencepython kayak-inference/infer.py --model Qwen/Qwen3-VL-4B-Instruct --adapter ayushadarsh7/RuntimeLabs-Kayak-Qwen3-VL-4B-LoRA --image screenshot.png --instruction "Click the Search button."
Screenshot grounding model fine-tuned on Kayak flight-search interfaces. Given a clean screenshot and a single-step instruction, it predicts JSON containing an action and a normalized bounding box, plus a value when applicable.
This is not an autonomous booking agent. It does not plan or execute browser actions.
bbox is [x, y, width, height] on a 0–1000 scale, with x/y at the top-left corner. For an image of width W and height H: pixel x = x/1000W, pixel y = y/1000H, and similarly for width/height. For clicking, use the box centre. Fill actions may also include value.
Training and evaluation
- Base model: Qwen/Qwen3-VL-4B-Instruct
- Training: 548 samples, 6 epochs, batch size 1, gradient accumulation 4, learning rate 2e-4, LoRA rank 16 and alpha 16.
- Original adapter evaluation: 69 held-out screenshots, deterministic generation.
- Predicted centre inside labelled box: 63/69 (91.30%).
- IoU >= 0.5: 62/69 (89.86%). Mean IoU: 0.8558.
- Action accuracy: 100%; fill-value exact match: 8/8.
These are single-step offline grounding metrics, not end-to-end browser task success rates. They describe the original adapter evaluation, not a new full benchmark of the merged export.
Merge validation: standalone BF16 reload succeeded; 3/3 checked predictions exactly matched the unmerged adapter. See merge_validation.json. BF16 merging can introduce small numerical differences.
Limits
Fine-tuned on a small domain-specific dataset; UI changes, different screen sizes, and unfamiliar sites can reduce accuracy. Inspect generated coordinates before executing consequential actions. No booking, payment, or personal-data workflow was evaluated here.
License and provenance
This derivative uses the base model's Apache-2.0 license. Original base revision: ebb281ec70b05090aa6165b016eac8ec08e71b17. Original adapter SHA-256: adf546ef4902717cfbeca735e9f764688dbf3cb335279935ddfb448b70ae26e3. The upstream license is included when supplied by the base repository.