RepoInclusionAI (Ant Group)InclusionAI (Ant Group)published Aug 31, 2026seen 11h

inclusionAI/LLaDA-UI

Python

Open original ↗

Captured source

source ↗
published Aug 31, 2026seen 11hcaptured 10hhttp 200method plain

inclusionAI/LLaDA-UI

Language: Python

Stars: 6

Forks: 0

Open issues: 0

Created: 2026-08-31T07:21:54Z

Pushed: 2026-09-09T03:38:24Z

Default branch: master

Fork: no

Archived: no

README: LLaDA-UI

Bringing Block-wise Diffusion to Vision-Language GUI Agents

LLaDA-UI is an MoE-based, block-wise diffusion vision-language GUI agent. It combines a native dynamic-resolution vision encoder with the LLaDA2.0-mini-base diffusion language backbone, and generates reasoning and GUI actions through the same block-wise diffusion decoder.

Figure 1. LLaDA-UI GUI-agent performance and qualitative block-wise diffusion decoding. The radar chart and GUI observation remain static while the model output is progressively denoised.

Highlights

  • Diffusion-native multimodal agent: LLaDA-UI extends a masked diffusion

language model to visual understanding and executable GUI interaction.

  • MoE architecture: approximately 16.7B total parameters end to end.
  • Two-stage training: large-scale multimodal pre-training aligns a

native-resolution SigLIP-initialized ViT with LLaDA2.0-mini-base, followed by GUI-agent supervised fine-tuning.

  • Cross-platform interaction: training covers grounding, mobile, desktop,

and web tasks, including data from more than 100 Chinese mobile applications and more than 70 English mobile applications.

  • Competitive GUI performance: LLaDA-UI outperforms Qwen2.5-VL-7B across

all six reported GUI benchmarks and surpasses Qwen3-VL-8B on ScreenSpot-Pro, AndroidWorld, MobileWorld, and WebVoyager.

  • Diffusion-specific analysis: the accompanying report studies structured

action validity, trajectory-length effects, EOS handling, denoising steps, and block size.

Model Overview

| Item | Description | |---|---| | Model type | MoE block-wise diffusion vision-language GUI agent | | Total parameters | Approximately 16.7B end-to-end | | Language backbone | LLaDA2.0-mini-base | | Vision encoder | Native-resolution ViT initialized from SigLIP, with 2D RoPE | | Vision-language connector | Spatial 4-to-1 feature grouping followed by a two-layer MLP projector | | Output | Text reasoning and structured GUI actions | | Spatial convention | Normalized coordinates in [0, 999] | | Training stages | Multimodal pre-training, then GUI-agent SFT | | Supported domains | GUI grounding, mobile, desktop, and web |

Training and Inference Pipelines

Inference Pipeline

Figure 2. GUI observations from web, mobile, and desktop environments are encoded at native resolution and combined with task and interaction-history tokens. The LLaDA2.0 decoder progressively denoises the model output into reasoning and executable actions.

GUI Data Generation

Figure 3. Overview of the GUI data-generation pipeline, from task construction and sub-skill decomposition to compositional trajectory collection and quality control.

Benchmark Results

GUI-Agent Evaluation

GUI-agent evaluation reproduced directly from Table 3 of the technical report.

Evaluation versions, task counts, prompts, reset policies, action limits, serving backends, and baseline provenance will be documented in the final release.

Qualitative GUI-Agent Traces

The following GIFs replay complete successful trajectories. Every frame shows the original screenshot together with the verbatim model output for that step.

WebVoyager: constrained flight search

LLaDA-UI configures a one-way Calgary-New York flight, navigates to December 3, 2026, applies the lower-emissions constraint, and returns the verified lowest-CO2 itinerary over a 20-step trajectory.

OSWorld: Calc to Writer

LLaDA-UI selects a formatted table in LibreOffice Calc, transfers it to Writer, and saves the resulting document as price.docx on the desktop.

MobileWorld: email to alarm

LLaDA-UI reads the 7:00 PM Christmas-party time from email, computes the one-hour offset, opens the Clock application, and verifies the enabled 6:00 PM alarm.

Quickstart

Use separate environments for standalone Hugging Face inference and SGLang serving because their tested Transformers and PyTorch versions differ.

Hugging Face inference

[inference/inference_hf.py](inference/inference_hf.py) is a self-contained grounding entry point; it does not require the training repository.

pip install torch==2.5.1 torchvision \
--index-url https://download.pytorch.org/whl/cu124
pip install transformers==4.51.0 Pillow numpy einops accelerate \
sentencepiece protobuf safetensors
pip install ninja
pip install flash-attn==2.7.4.post1 --no-build-isolation --no-cache-dir

Download the checkpoint from the LLaDA-UI Hugging Face repository, then pass its local directory to --ckpt:

CUDA_VISIBLE_DEVICES=0 IMAGE_MAX_PIXELS=12845056 \
python -u inference/inference_hf.py \
--ckpt /path/to/hf_ckpt_unpacked \
--image /path/to/screenshot.png \
--prompt "close this window" \
--gen-length 32 \
--steps 32 \
--block-length 32

The script prints the verbatim generation and parsed normalized point. Use IMAGE_MAX_PIXELS=1003520 for the default-resolution profile. ScreenSpot-V2 pipeline verification is also available; see python inference/inference_hf.py --help.

SGLang serving

[inference/sglang_client.py](inference/sglang_client.py) is a single-file, standard-library client for an OpenAI-compatible endpoint. Use a dedicated serving environment and follow the [minimal server recipe](inference/sglang_server/README.md):

CUDA_VISIBLE_DEVICES=0,1 SGLANG_DP_SIZE=2 \
bash serve_llada_ui.sh /path/to/hf_ckpt_unpacked

Then replay the packaged mobile, desktop, and web requests:

export SGLANG_BASE_URL=http://127.0.0.1:30000/v1
export SGLANG_MODEL=LLaDA-UI

python3 inference/sglang_client.py --example mobile
python3 inference/sglang_client.py --example desktop
python3 inference/sglang_client.py --example web

Each JSON embeds its screenshot and an evaluated current-image-only multi-turn request. The packaged step-$t>0$ cases use the exact role sequence system, user(""), assistant(previous), user(current): the empty historical user turn is followed by the latest raw ...... response, while the final user turn contains text first and exactly one image, the current screenshot. Historical screenshots are never replayed. Mobile keeps its task/history headings in the current user caption; desktop and web keep the task in the system prompt and use `Current...

Excerpt shown — open the source for the full document.