Image-Text-to-Text
Transformers
Safetensors
English
qwen3_5
vista
qwen3.5
vision-language
gui-grounding
reinforcement-learning
conversational
Instructions to use inclusionAI/VISTA-9B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use inclusionAI/VISTA-9B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="inclusionAI/VISTA-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)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("inclusionAI/VISTA-9B") model = AutoModelForMultimodalLM.from_pretrained("inclusionAI/VISTA-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?"} ] }, ] 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=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use inclusionAI/VISTA-9B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "inclusionAI/VISTA-9B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "inclusionAI/VISTA-9B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/inclusionAI/VISTA-9B
- SGLang
How to use inclusionAI/VISTA-9B with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "inclusionAI/VISTA-9B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "inclusionAI/VISTA-9B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "inclusionAI/VISTA-9B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "inclusionAI/VISTA-9B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use inclusionAI/VISTA-9B with Docker Model Runner:
docker model run hf.co/inclusionAI/VISTA-9B
| license: apache-2.0 | |
| language: | |
| - en | |
| library_name: transformers | |
| pipeline_tag: image-text-to-text | |
| tags: | |
| - vista | |
| - qwen3.5 | |
| - vision-language | |
| - gui-grounding | |
| - reinforcement-learning | |
| base_model: | |
| - Qwen3.5-4B | |
| - Qwen3.5-9B | |
| metrics: | |
| - accuracy | |
| # VISTA-9B | |
| VISTA-9B are GUI-grounding vision-language models trained from Qwen3.5 9B backbones with **VISTA: View-Consistent Self-Verified Training for GUI Grounding**. | |
| [](https://opensource.org/licenses/Apache-2.0) | |
| [](https://zjuscl.github.io/VISTA/static/pdfs/vista.pdf) | |
| [](https://zjuscl.github.io/VISTA) | |
| [](https://github.com/ZJUSCL/VISTA) | |
| ## Model Description | |
| VISTA-9B is a GUI-grounding model that maps a screenshot and a natural-language instruction to a click coordinate in the normalized `0-1000` image frame. | |
| - **View-consistent GRPO training.** VISTA builds each GRPO comparison group from target-preserving views of the same GUI instance, with exact coordinate remapping across cropped views. This exposes localization behavior under semantically equivalent but geometrically different screenshots. | |
| - **Self-verified cross-view anchoring.** The training objective adds an oracle-format center-point anchor only when model-generated rollouts have already produced a maximum-reward prediction, stabilizing short coordinate generation without unconditional imitation on all-fail groups. | |
| ## Evaluation | |
| Accuracy is reported for GUI grounding. The model predicts a normalized coordinate in the `0-1000` frame, and the prediction is counted as correct if the point lies inside the target element. All reported results use deterministic decoding at temperature 0 and single-view inference. | |
| ### Results on GUI Grounding benchmarks | |
| | Model | SSPro | SSV2 | OSWorld-G | OSWorld-G-R | | |
| | --- | ---: | ---: | ---: | ---: | | |
| | Qwen3.5-4B | 60.3 | 90.4 | 54.4 | 66.8 | | |
| | GRPO-4B | 62.2 | 94.2 | 59.9 | 69.2 | | |
| | **VISTA-4B** | **64.2** | 93.8 | **61.2** | **69.7** | | |
| | Δ | **+2.0** | -0.4 | **+1.3** | **+0.5** | | |
| | Qwen3.5-9B | 65.2 | 91.9 | 63.1 | 74.6 | | |
| | GRPO-9B | 68.3 | 95.2 | 67.5 | 75.2 | | |
| | **VISTA-9B** | **69.2** | **95.8** | **68.1** | **75.5** | | |
| | Δ | **+0.9** | **+0.6** | **+0.6** | **+0.3** | | |
| | Qwen3.5-35B-A3B | 68.6 | 93.8 | 65.8 | 72.5 | | |
| | GRPO-35B-A3B | 71.7 | 95.7 | 70.4 | 74.3 | | |
| | **VISTA-35B-A3B** | **72.9** | **95.8** | **71.5** | **75.3** | | |
| | Δ | **+1.2** | **+0.1** | **+1.1** | **+1.0** | | |
| ## Quick Start | |
| Use the same image-chat interface as the underlying Qwen3.5 vision-language model. The recommended prompt is: | |
| ```text | |
| Output the center point of the position corresponding to the instruction: {instruction}. The output should just be the coordinates of a point, in the format [x,y]. | |
| ``` | |
| Example: | |
| ```python | |
| import torch | |
| from PIL import Image | |
| from transformers import AutoModelForImageTextToText, AutoProcessor | |
| model_id = "inclusionAI/VISTA-9B" | |
| model = AutoModelForImageTextToText.from_pretrained( | |
| model_id, | |
| torch_dtype=torch.bfloat16, | |
| device_map="auto", | |
| trust_remote_code=True, | |
| ) | |
| processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True) | |
| image = Image.open("screenshot.png").convert("RGB") | |
| instruction = "Click the search button" | |
| prompt = ( | |
| "Output the center point of the position corresponding to the instruction: " | |
| f"{instruction}. The output should just be the coordinates of a point, " | |
| "in the format [x,y]." | |
| ) | |
| messages = [ | |
| { | |
| "role": "user", | |
| "content": [ | |
| {"type": "image", "image": image}, | |
| {"type": "text", "text": prompt}, | |
| ], | |
| } | |
| ] | |
| text = processor.apply_chat_template( | |
| messages, | |
| tokenize=False, | |
| add_generation_prompt=True, | |
| ) | |
| inputs = processor( | |
| text=[text], | |
| images=[image], | |
| padding=True, | |
| return_tensors="pt", | |
| ).to(model.device) | |
| generated = model.generate( | |
| **inputs, | |
| max_new_tokens=32, | |
| do_sample=False, | |
| ) | |
| new_tokens = generated[:, inputs.input_ids.shape[1]:] | |
| response = processor.batch_decode(new_tokens, skip_special_tokens=True)[0].strip() | |
| print(response) # e.g. [512,384] | |
| ``` | |
| ## Citation | |
| Please consider citing if you find our work useful: | |
| ```plain | |
| @misc{qiu2026vista, | |
| title={VISTA: View-Consistent Self-Verified Training for GUI Grounding}, | |
| author={Xinyu Qiu, Yunzhu Zhang, Heng Jia, Shuheng Shen, Changhua Meng, Linchao Zhu}, | |
| year={2026}, | |
| eprint={2606.14579}, | |
| archivePrefix={arXiv}, | |
| primaryClass={cs.AI}, | |
| url={https://arxiv.org/abs/2606.14579}, | |
| } | |
| ``` | |