openbmb / AgentCPM-GUI

huggingface.co
Total runs: 228
24-hour runs: 0
7-day runs: 19
30-day runs: 58
Model's Last Updated: June 14 2025
image-text-to-text

Introduction of AgentCPM-GUI

Model Details of AgentCPM-GUI

AgentCPM-GUI

GitHub | Technical Blog

News
  • [2025-05-13] 🚀🚀🚀 We have open-sourced AgentCPM-GUI , an on-device GUI agent capable of operating Chinese & English apps and equipped with RFT-enhanced reasoning abilities.
Overview

AgentCPM-GUI is an open-source on-device LLM agent model jointly developed by THUNLP and ModelBest . Built on MiniCPM-V with 8 billion parameters, it accepts smartphone screenshots as input and autonomously executes user-specified tasks.

Key features include:

  • High-quality GUI grounding — Pre-training on a large-scale bilingual Android dataset significantly boosts localization and comprehension of common GUI widgets (buttons, input boxes, labels, icons, etc.).
  • Chinese-app operation — The first open-source GUI agent finely tuned for Chinese apps, covering 30 + popular titles such as Amap, Dianping, bilibili and Xiaohongshu.
  • Enhanced planning & reasoning — Reinforcement fine-tuning (RFT) lets the model “think” before outputting an action, greatly improving success on complex tasks.
  • Compact action-space design — An optimized action space and concise JSON format reduce the average action length to 9.7 tokens, boosting on-device inference efficiency.

Demo Case (1x speed):

https://github.com/user-attachments/assets/5472a659-cd71-4bce-a181-0981129c6a81

Quick Start
Install dependencies
git clone https://github.com/OpenBMB/AgentCPM-GUI
cd MiniCPM-Agent
conda create -n gui_agent python=3.11
conda activate gui_agent
pip install -r requirements.txt
Download the model

Download AgentCPM-GUI from Hugging Face and place it in model/AgentCPM-GUI .

Huggingface Inference
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from PIL import Image
import json

# 1. Load the model and tokenizer
model_path = "model/AgentCPM-GUI"  # model path
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True, torch_dtype=torch.bfloat16)
model = model.to("cuda:0") 

# 2. Build the input
instruction = "请点击屏幕上的‘会员’按钮"
image_path = "assets/test.jpeg"
image = Image.open(image_path).convert("RGB")

# 3. Resize the longer side to 1120 px to save compute & memory
def __resize__(origin_img):
    resolution = origin_img.size
    w,h = resolution
    max_line_res = 1120
    if max_line_res is not None:
        max_line = max_line_res
        if h > max_line:
            w = int(w * max_line / h)
            h = max_line
        if w > max_line:
            h = int(h * max_line / w)
            w = max_line
    img = origin_img.resize((w,h),resample=Image.Resampling.LANCZOS)
    return img
image = __resize__(image)

# 4. Build the message format
messages = [{
    "role": "user",
    "content": [
        f"<Question>{instruction}</Question>\n当前屏幕截图:",
        image
    ]
}]

# 5. Inference
ACTION_SCHEMA = json.load(open('eval/utils/schema/schema.json', encoding="utf-8"))
items = list(ACTION_SCHEMA.items())
insert_index = 3
items.insert(insert_index, ("required", ["thought"])) # enable/disable thought by setting it to "required"/"optional"
ACTION_SCHEMA = dict(items)
SYSTEM_PROMPT = f'''# Role
你是一名熟悉安卓系统触屏GUI操作的智能体,将根据用户的问题,分析当前界面的GUI元素和布局,生成相应的操作。

# Task
针对用户问题,根据输入的当前屏幕截图,输出下一步的操作。

# Rule
- 以紧凑JSON格式输出
- 输出操作必须遵循Schema约束

# Schema
{json.dumps(ACTION_SCHEMA, indent=None, ensure_ascii=False, separators=(',', ':'))}'''

outputs = model.chat(
    image=None,
    msgs=messages,
    system_prompt=SYSTEM_PROMPT,
    tokenizer=tokenizer,
    temperature=0.1,
    top_p=0.3,
    n=1,
)

# 6. Output
print(outputs)

Expected output:

{"thought":"任务目标是点击屏幕上的‘会员’按钮。当前界面显示了应用的推荐页面,顶部有一个导航栏。点击‘会员’按钮可以访问应用的会员相关内容。","POINT":[729,69]}
vLLM Inference
# Launch the vLLM server
vllm serve model/AgentCPM-GUI --served-model-name AgentCPM-GUI --tensor_parallel_size 1 --trust-remote-code
import base64
import io
import json
import requests
from PIL import Image

END_POINT = "http://localhost:8000/v1/chat/completions"  # Replace with actual endpoint

# system prompt
ACTION_SCHEMA = json.load(open('eval/utils/schema/schema.json', encoding="utf-8"))
items = list(ACTION_SCHEMA.items())
insert_index = 3
items.insert(insert_index, ("required", ["thought"])) # enable/disable thought by setting it to "required"/"optional"
ACTION_SCHEMA = dict(items)
SYSTEM_PROMPT = f'''# Role
你是一名熟悉安卓系统触屏GUI操作的智能体,将根据用户的问题,分析当前界面的GUI元素和布局,生成相应的操作。

# Task
针对用户问题,根据输入的当前屏幕截图,输出下一步的操作。

# Rule
- 以紧凑JSON格式输出
- 输出操作必须遵循Schema约束

# Schema
{json.dumps(ACTION_SCHEMA, indent=None, ensure_ascii=False, separators=(',', ':'))}'''

def encode_image(image: Image.Image) -> str:
    """Convert PIL Image to base64-encoded string."""
    with io.BytesIO() as in_mem_file:
        image.save(in_mem_file, format="JPEG")
        in_mem_file.seek(0)
        return base64.b64encode(in_mem_file.read()).decode("utf-8")

def __resize__(origin_img):
    resolution = origin_img.size
    w,h = resolution
    max_line_res = 1120
    if max_line_res is not None:
        max_line = max_line_res
        if h > max_line:
            w = int(w * max_line / h)
            h = max_line
        if w > max_line:
            h = int(h * max_line / w)
            w = max_line
    img = origin_img.resize((w,h),resample=Image.Resampling.LANCZOS)
    return img

def predict(text_prompt: str, image: Image.Image):
    messages = [
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": [
            {"type": "text", "text": f"<Question>{text_prompt}</Question>\n当前屏幕截图:"},
            {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{encode_image(image)}"}}
        ]}
    ]

    payload = {
        "model": "AgentCPM-GUI",  # Your model name
        "temperature": 0.1,
        "messages": messages,
        "max_tokens": 2048,
    }

    headers = {
        "Content-Type": "application/json",
    }

    response = requests.post(END_POINT, headers=headers, json=payload)
    assistant_msg = response.json()["choices"][0]["message"]["content"]
    return assistant_msg

image = __resize__(Image.open("assets/test.jpeg"))
instruction = "请点击屏幕上的‘会员’按钮"
response = predict(instruction, image)
print(response)
Fine-tuning

Source code for SFT and RFT training is provided — see SFT and RFT .

Performance Evaluation
Grounding Benchmark
Model fun2point text2point bbox2text average
AgentCPM-GUI-8B 79.1 76.5 58.2 71.3
Qwen2.5-VL-7B 36.8 52.0 44.1 44.3
Intern2.5-VL-8B 17.2 24.2 45.9 29.1
Intern2.5-VL-26B 14.8 16.6 36.3 22.6
OS-Genesis-7B 8.3 5.8 4.0 6.0
UI-TARS-7B 56.8 66.7 1.4 41.6
OS-Altas-7B 53.6 60.7 0.4 38.2
Aguvis-7B 60.8 76.5 0.2 45.8
GPT-4o 22.1 19.9 14.3 18.8
GPT-4o with Grounding 44.3 44.0 14.3 44.2
Agent Benchmark
Dataset Android Control-Low TM Android Control-Low EM Android Control-High TM Android Control-High EM GUI-Odyssey TM GUI-Odyssey EM AITZ TM AITZ EM Chinese APP TM Chinese APP EM
AgentCPM-GUI-8B 94.39 90.20 77.70 69.17 90.85 74.96 85.71 76.38 96.86 91.28
Qwen2.5-VL-7B 92.11 82.12 69.65 57.36 55.33 40.90 73.16 57.58 68.53 48.80
UI-TARS-7B 93.52 88.89 68.53 60.81 78.79 57.33 71.74 55.31 71.01 53.92
OS-Genesis-7B 90.74 74.22 65.92 44.43 11.67 3.63 19.98 8.45 38.10 14.50
OS-Atlas-7B 73.03 67.25 70.36 56.53 91.83* 76.76* 74.13 58.45 81.53 55.89
Aguvis-7B 93.85 89.40 65.56 54.18 26.71 13.54 35.71 18.99 67.43 38.20
OdysseyAgent-7B 65.10 39.16 58.80 32.74 90.83 73.67 59.17 31.60 67.56 25.44
GPT-4o - 19.49 - 20.80 - 20.39 70.00 35.30 3.67 3.67
Gemini 2.0 - 28.50 - 60.20 - 3.27 - - - -
Claude - 19.40 - 12.50 60.90 - - - - -

*Different train/test splits

All evaluation data and code are open-sourced — see here for details.

Evaluation Data

We provide CAGUI , an evaluation benchmark for Chinese apps covering grounding and agent tasks. See the dataset on Hugging Face .

License
  • Code in this repository is released under the Apache-2.0 license.
Citation

If AgentCPM-GUI is useful for your research, please cite:

@misc{2025,
  author       = {THUNLP},
  title        = {AgentCPM-GUI},
  year         = {2025},
  publisher    = {GitHub},
  journal      = {GitHub repository},
  howpublished = {\url{https://github.com/OpenBMB/AgentCPM-GUI}}
}

Runs of openbmb AgentCPM-GUI on huggingface.co

228
Total runs
0
24-hour runs
1
3-day runs
19
7-day runs
58
30-day runs

More Information About AgentCPM-GUI huggingface.co Model

More AgentCPM-GUI license Visit here:

https://choosealicense.com/licenses/apache-2.0

AgentCPM-GUI huggingface.co

AgentCPM-GUI huggingface.co is an AI model on huggingface.co that provides AgentCPM-GUI's model effect (), which can be used instantly with this openbmb AgentCPM-GUI model. huggingface.co supports a free trial of the AgentCPM-GUI model, and also provides paid use of the AgentCPM-GUI. Support call AgentCPM-GUI model through api, including Node.js, Python, http.

AgentCPM-GUI huggingface.co Url

https://huggingface.co/openbmb/AgentCPM-GUI

openbmb AgentCPM-GUI online free

AgentCPM-GUI huggingface.co is an online trial and call api platform, which integrates AgentCPM-GUI's modeling effects, including api services, and provides a free online trial of AgentCPM-GUI, you can try AgentCPM-GUI online for free by clicking the link below.

openbmb AgentCPM-GUI online free url in huggingface.co:

https://huggingface.co/openbmb/AgentCPM-GUI

AgentCPM-GUI install

AgentCPM-GUI is an open source model from GitHub that offers a free installation service, and any user can find AgentCPM-GUI on GitHub to install. At the same time, huggingface.co provides the effect of AgentCPM-GUI install, users can directly use AgentCPM-GUI installed effect in huggingface.co for debugging and trial. It also supports api for free installation.

AgentCPM-GUI install url in huggingface.co:

https://huggingface.co/openbmb/AgentCPM-GUI

Url of AgentCPM-GUI

AgentCPM-GUI huggingface.co Url

Provider of AgentCPM-GUI huggingface.co

openbmb
ORGANIZATIONS

Other API from openbmb

huggingface.co

Total runs: 200.2K
Run Growth: 91.4K
Growth Rate: 45.63%
Updated:October 05 2025
huggingface.co

Total runs: 134.8K
Run Growth: -3.0K
Growth Rate: -2.19%
Updated:March 10 2026
huggingface.co

Total runs: 117.8K
Run Growth: 4.9K
Growth Rate: 4.17%
Updated:September 15 2025
huggingface.co

Total runs: 112.2K
Run Growth: 89.6K
Growth Rate: 79.87%
Updated:May 10 2026
huggingface.co

Total runs: 106.9K
Run Growth: -45.2K
Growth Rate: -42.32%
Updated:June 13 2025
huggingface.co

Total runs: 25.5K
Run Growth: 411
Growth Rate: 1.61%
Updated:October 24 2025
huggingface.co

Total runs: 20.0K
Run Growth: 1.8K
Growth Rate: 8.78%
Updated:October 24 2025
huggingface.co

Total runs: 19.9K
Run Growth: 406
Growth Rate: 2.04%
Updated:January 15 2025
huggingface.co

Total runs: 13.0K
Run Growth: 11.6K
Growth Rate: 88.94%
Updated:June 02 2023
huggingface.co

Total runs: 11.5K
Run Growth: 10.4K
Growth Rate: 90.57%
Updated:May 07 2026
huggingface.co

Total runs: 7.7K
Run Growth: -4.1K
Growth Rate: -52.99%
Updated:February 27 2025
huggingface.co

Total runs: 6.5K
Run Growth: 523
Growth Rate: 8.06%
Updated:January 14 2026
huggingface.co

Total runs: 5.4K
Run Growth: 5.4K
Growth Rate: 99.14%
Updated:June 10 2025
huggingface.co

Total runs: 5.2K
Run Growth: 3.7K
Growth Rate: 70.38%
Updated:October 20 2025
huggingface.co

Total runs: 4.8K
Run Growth: 2.7K
Growth Rate: 56.92%
Updated:November 04 2024
huggingface.co

Total runs: 1.4K
Run Growth: 79
Growth Rate: 5.80%
Updated:January 15 2025
huggingface.co

Total runs: 1.3K
Run Growth: 1.2K
Growth Rate: 94.75%
Updated:August 12 2023
huggingface.co

Total runs: 1.0K
Run Growth: 153
Growth Rate: 14.93%
Updated:September 19 2025
huggingface.co

Total runs: 891
Run Growth: 76
Growth Rate: 8.53%
Updated:June 27 2023
huggingface.co

Total runs: 847
Run Growth: 48
Growth Rate: 5.67%
Updated:August 24 2023
huggingface.co

Total runs: 436
Run Growth: 372
Growth Rate: 85.32%
Updated:February 12 2026
huggingface.co

Total runs: 416
Run Growth: -75
Growth Rate: -18.03%
Updated:October 14 2023
huggingface.co

Total runs: 307
Run Growth: -34
Growth Rate: -10.33%
Updated:May 14 2024
huggingface.co

Total runs: 200
Run Growth: 183
Growth Rate: 91.50%
Updated:October 14 2025
huggingface.co

Total runs: 193
Run Growth: 100
Growth Rate: 51.81%
Updated:February 21 2024
huggingface.co

Total runs: 190
Run Growth: -1.3K
Growth Rate: -699.47%
Updated:April 08 2024
huggingface.co

Total runs: 164
Run Growth: 73
Growth Rate: 44.51%
Updated:February 21 2024
huggingface.co

Total runs: 148
Run Growth: 19
Growth Rate: 12.84%
Updated:April 16 2024
huggingface.co

Total runs: 139
Run Growth: 73
Growth Rate: 52.52%
Updated:February 21 2024
huggingface.co

Total runs: 139
Run Growth: 120
Growth Rate: 86.33%
Updated:June 11 2025