Instructions to use corbanyax/andy-select-2b-lora with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use corbanyax/andy-select-2b-lora with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
Andy-Select 2B LoRA adapters (v1, v2)
LoRA adapters that turn Qwen3.5-2B into Andy-Select, an on-device action selector for Android agents. Given the goal, the screen's accessibility tree and a numbered list of allowed actions, it picks the next action and says how sure it is, so the agent can act or hand the step to you.
| Model (AndroidControl test, 2,003 steps) | Step accuracy | File size |
|---|---|---|
| v2 adapter, merged, Q4_K_M | 0.655 | 1.27 GB |
| v1 adapter, merged, Q4_K_M (BF16: 0.664) | 0.635 | 1.27 GB |
| Qwen3.5 4B Q4_K_M | 0.501 | 2.74 GB |
| Qwen3.5 2B Q4_K_M (the base model, without an adapter) | 0.335 | 1.28 GB |
To run the model, use the GGUF repos below. They hold the merged files, their calibration and a quick start. Use this repo to inspect, merge, re-export or continue training.
Model family
| Repo | What | Use with |
|---|---|---|
| andy-select-v2-2b-GGUF (recommended) | v2, Q4_K_M + BF16 GGUF | prompt 2 |
| andy-select-2b-GGUF | v1, Q4_K_M + BF16 GGUF | prompt 1 |
| andy-select-2b-lora (this repo) | LoRA adapters for v1 and v2 | merge into Qwen3.5-2B |
| Folder | Prompt | Checkpoint | Contents |
|---|---|---|---|
v1/ |
prompt 1 | best of the full run (1,463 updates) | adapter_model.safetensors (62.6 MB), adapter_config.json, MANIFEST.json (SHA-256 of each file), trainer.pt |
v2/ |
prompt 2 | update 1,250 (run stopped at 1,720 of 1,835) | same |
Both adapters use LoRA r 16, α 32 and dropout 0 (15.6M trainable parameters, PEFT 0.21.2). They target the attention,
linear-attention input/output and MLP projections of the language model's decoder layers. trainer.pt is optimizer
state for resuming training. It is a PyTorch pickle that inference does not need, so only load it if you trust it.
Merge and convert
import torch, transformers
from peft import PeftModel
BASE, REV = "Qwen/Qwen3.5-2B", "15852e8c16360a2fea060d615a32b45270f8a8fc" # use this exact revision
tok = transformers.AutoTokenizer.from_pretrained(BASE, revision=REV)
cls = getattr(transformers, "AutoModelForImageTextToText", None) or transformers.AutoModelForCausalLM
base = cls.from_pretrained(BASE, revision=REV, dtype=torch.bfloat16)
model = PeftModel.from_pretrained(base, "corbanyax/andy-select-2b-lora", subfolder="v2") # or "v1"
merged = model.merge_and_unload()
merged.save_pretrained("andy-select-v2-hf", safe_serialization=True)
tok.save_pretrained("andy-select-v2-hf")
python convert_hf_to_gguf.py andy-select-v2-hf --outtype bf16 --outfile andy-select-v2-2b-BF16.gguf
llama-quantize --imatrix imatrix.dat andy-select-v2-2b-BF16.gguf andy-select-v2-2b-Q4_K_M.gguf Q4_K_M
Block-count fix. The merged model has no multi-token-prediction layer, but the converter writes
qwen35.block_count = 25 and qwen35.nextn_predict_layers = 1. llama.cpp then fails with
blk.24.attn_norm.weight not found. Set them to 24 and 0 in the BF16 file before quantizing, for example with
gguf-py's GGUFReader(path, "r+").
A re-export will not be byte-identical to the released GGUFs, so fit the temperature T and threshold tau80 again on validation data before you rely on the confidence. The released files use T = 0.907 with tau80 = 0.4494 (v2 Q4_K_M) or tau80 = 0.4195 (v1 Q4_K_M).
Intended use and limitations
Intended: research on small, calibrated on-device agents; reproducing or extending Andy-Select. The caller builds
the candidate list from the screen and the model picks one, scored by log-likelihood. The exact prompt formats are in
the GGUF cards and in andy_select.py in the GGUF repos.
Not for: a general chatbot, multi-step planning or unattended operation. This is a research preview. In the Andy app the agent never sends messages, deletes content, buys anything, enters passwords or grants permissions, and uncertain steps go to the user. The app enforces these rules, not the model.
Limitations:
- The model reads text only (no pixels).
- Single-step accuracy is not task success.
- Some measured errors are AndroidControl label noise.
- It was trained and tested on AndroidControl only and is English-centric.
- v2 is an early-stopped checkpoint.
Training (short)
LoRA fine-tune of Qwen3.5-2B (r 16, one epoch) on 67,907 AndroidControl training steps rendered with prompt 1 (v1) or prompt 2 (v2), distilled from a proprietary teacher's soft labels mixed with the official answers. The GGUF repos hold the merged models quantized to Q4_K_M.
License and data
- Adapters: Apache-2.0. The base model Qwen/Qwen3.5-2B is Apache-2.0.
- Training data: AndroidControl (Google). Check the AndroidControl dataset terms before redistribution: its code is Apache-2.0, but we could not confirm a license for the data.
- Teacher labels: part of the training targets are soft labels from a proprietary model.
Citation
Paper in preparation. Code: repository link to be added.
@misc{deo2026andyselect,
title = {Know When to Hand Off: Calibrated Closed-Set Action Selection for 4 GB On-Device Mobile Agents},
author = {Deo, Atharva},
year = {2026},
note = {Paper in preparation}
}
- Downloads last month
- -
Model tree for corbanyax/andy-select-2b-lora
Collection including corbanyax/andy-select-2b-lora
Evaluation results
- Step accuracy (merged, Q4_K_M, candidate scoring) on AndroidControl (2,003-step test sample)test set self-reported0.655
- Step accuracy (merged, BF16, candidate scoring) on AndroidControl (2,003-step test sample)test set self-reported0.664
- Step accuracy (merged, Q4_K_M, candidate scoring) on AndroidControl (2,003-step test sample)test set self-reported0.635
