How to use from the
Use from the
Transformers library
# Use a pipeline as a high-level helper
from transformers import pipeline

pipe = pipeline("image-text-to-text", model="OpenMobile-2/OpenMobile-2-9B")
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"},
            {"type": "text", "text": "What animal is on the candy?"}
        ]
    },
]
pipe(text=messages)
# pip install -U transformers accelerate
# Load model directly
from transformers import AutoProcessor, AutoModelForMultimodalLM

processor = AutoProcessor.from_pretrained("OpenMobile-2/OpenMobile-2-9B")
model = AutoModelForMultimodalLM.from_pretrained("OpenMobile-2/OpenMobile-2-9B", device_map="auto")
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"},
            {"type": "text", "text": "What animal is on the candy?"}
        ]
    },
]
inputs = processor.apply_chat_template(
	messages,
	add_generation_prompt=True,
	tokenize=True,
	return_dict=True,
	return_tensors="pt",
).to(model.device)

outputs = model.generate(**inputs, max_new_tokens=256)
print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:]))
Quick Links

HuggingFace | Paper | GitHub | HomePage

Introduction

OpenMobile-2-9B is a mobile GUI agent fine-tuned from Qwen3.5-9B on OpenMobile-Data-v2. It completes Android tasks from screenshots, and can call app-native tools when the foreground app exposes them.

Results

Model AndroidWorld Pass@1 MobileWorld GUI MobileGym SR MobileGym++ Hybrid SPA-Bench L3
Qwen3.5-9B 54.3 12.8 9.4 12.1 25.5
OpenMobile-1-8B 64.7 17.7 13.7 7.0 --
UI-Venus-1.5-8B 73.7 -- 15.4 16.3 29.8
GUI-Owl-1.5-8B 69.0 38.2 17.2 12.6 --
MAI-UI-8B 70.7 27.5 16.8 18.6 --
OpenMobile-2-9B 74.0 38.5 38.3 46.5 48.9

Deploy

The commands below use a context length of 65536 and tensor parallel 2

vLLM

We use vLLM 0.19.1.

pip install vllm==0.19.1
vllm serve OpenMobile-2/OpenMobile-2-9B \
  --tensor-parallel-size 2 \
  --max-model-len 65536 \
  --gpu-memory-utilization 0.90 \
  --max-num-seqs 16 \
  --reasoning-parser qwen3 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_coder \
  --gdn-prefill-backend triton

SGLang

We use SGLang 0.5.10.post1.

pip install sglang==0.5.10.post1
python -m sglang.launch_server \
  --model-path OpenMobile-2/OpenMobile-2-9B \
  --tp-size 2 \
  --mem-fraction-static 0.8 \
  --context-length 65536 \
  --reasoning-parser qwen3 \
  --tool-call-parser qwen3_coder \
  --enable-multimodal

Citation

If you find this model useful, please cite our paper:

@article{openmobile2,
  title={OpenMobile-2: Building Versatile Mobile Agents with Scalable Environments and App-Native Tools},
  author={Chenyang Yan and Yingying Zhang and Kanzhi Cheng and Qiushi Sun and Zhengyuan Pan and Zheng Ma and Hang Yan and Yian Wang and Nuo Chen and Jialin Cao and Xingdong Gong and Wenpo Song and Han Chen and Zichen Ding and Fangzhi Xu and Shujian Huang and Xinyu Dai and Yichen Liu and Tiankuo Yao and Bo Wang and Ben Kao and Jianbing Zhang and Lewei Lu and Dahua Lin},
  journal={},
  year={}
}
Downloads last month
31
Safetensors
Model size
9B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for OpenMobile-2/OpenMobile-2-9B

Finetuned
Qwen/Qwen3.5-9B
Finetuned
(1004)
this model
Quantizations
1 model