Instructions to use cua-ai/cua-s1-4b-0.1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use cua-ai/cua-s1-4b-0.1 with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-4B") model = PeftModel.from_pretrained(base_model, "cua-ai/cua-s1-4b-0.1") - Notebooks
- Google Colab
- Kaggle
cua-s1-4b-0.1
cua-s1-4b-0.1 is a pair of research LoRA adapters for closed-option
computer-use decisions. Given a description of the current screen and a
closed set of candidate (element, action) options, it selects one option.
The adapters are trained on the frozen
Qwen/Qwen3.5-4B base model.
This checkpoint belongs to the Cua-S1
research family. cua-s1-4b-0.2
is a separately trained checkpoint on the same base. It does not replace
this repository. On the published held-out cross-dataset and live-environment
evaluations, 0.2 scores higher. 0.1 scores higher only on the
same-distribution multimodal split that it was trained on. Use 0.2 for new
work, and use 0.1 for comparison or reproduction.
It is not a general-purpose assistant. Do not treat a result on one task family as evidence of reliability outside it.
Files
| Path | Contents |
|---|---|
text/ |
Text adapter: adapter_config.json and adapter_model.safetensors |
multimodal/ |
Multimodal adapter: adapter_config.json and adapter_model.safetensors |
adapter_config.json, adapter_model.safetensors |
Root copy of the text adapter, byte-identical to text/ |
Both adapters use LoRA rank 16, alpha 32, and dropout 0.05, and were saved
with PEFT 0.18.1. The text adapter targets the language model's attention and
MLP projections. The multimodal adapter also targets the vision-merger
projections (linear_fc1, linear_fc2). All weights are safetensors; this
repository contains no pickle files.
Intended use
- Research on closed-option computer-use decisions. The caller supplies the screen state and an enumerated set of candidate actions, and the model scores them.
- Baseline and ablation comparisons against
cua-s1-4b-0.2and other Cua-S1 checkpoints oncua-bench-s1. - Studying failure modes, abstention, and human-oversight boundaries in isolated, controlled environments.
Out of scope
- General-purpose or open-ended computer operation.
- Unsupervised operation on production accounts or sensitive data.
- Actions with financial, legal, medical, employment, safety, or other high-impact consequences.
- Bypassing access controls, consent, rate limits, or service policies.
- Treating a selected option, or a high probability, as proof that the action is correct, safe, or succeeded. The model chooses only among options the caller provides, so its choice says nothing about whether that option set was safe, complete, or correctly scoped.
How it works
A chat-template prompt describes the screen and lists the candidate options, each labeled with a letter. Every letter is a single tokenizer token. The model runs one forward pass, and the logits for the option letters at the final position are converted with softmax into per-option probabilities. This is closed-set selection, not open-ended generation, and it supports at most 26 options.
- Text mode describes the screen with an accessibility tree.
- Multimodal mode describes it with a screenshot.
The two adapters were trained independently.
cua_s1.four_b.FourBModel
selects text/ or multimodal/ based on the requested modality.
Training summary
Both adapters were supervised fine-tuned on the data/v1 split of the
cua-bench-s1 core GUI task families: form_filling, login_auth,
consent_checkbox, multi_step_submit, pagination, and search_filter.
cua-bench-s1 builds these families with its synthetic generator and its
converters for AndroidControl
(Apache-2.0) and GUI-360 (MIT). For exact provenance, see
Data sources and provenance.
The training recipe is
libs/cua-s1/training/train_4b.py.
It applies soft-label cross-entropy over the option-letter logits, with
uniform target mass across every gold option. The base model stayed frozen,
and no reinforcement-learning stage was applied.
The multimodal adapter saw only the six core families' synthetic,
same-distribution data. It does not generalize to out-of-distribution
families such as chess or game_control. The safety_gate "finetuned"
result in cua-bench-s1 comes from a separate LoRA trained on that family,
which is not published here.
Evaluation
These are measured results from the cua-bench-s1
Results section:
- Held-out cross-dataset text split: task-level accuracy of 0.167 to 0.571, depending on family.
- Same-distribution multimodal split for the six core families (the split it was trained on): 1.000.
chess, on the same 15-position subset used for every model: 0.000 task accuracy.game_control: 0.000 task accuracy. Neither result survives chance correction.safety_gate: 0.071 zero-shot.- External
general_decisionbenchmark: 0.563 zero-shot.
In local runtime smokes through the jev-use chooser (Apple M1 Ultra, mps,
float16, 2026-09-25), this checkpoint failed on two of three synthetic
requests in both modalities:
- It abstained on the checked-in positive fixture, where the expected answer
was
submit-form. - It chose the wrong target on a 12-region, 8-candidate request.
The base model without an adapter passed the positive fixture. For the full table, see Verification scope and known failure modes.
Run it with the jev-use chooser
Pin both downloads. These are the revisions the Cua-S1 documentation was verified against. The adapter weights are unchanged at later revisions of this repository that change only documentation.
| Artifact | Revision |
|---|---|
Qwen/Qwen3.5-4B |
851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a |
cua-ai/cua-s1-4b-0.1 (weights) |
88d8b8a90c2da4470d005cc23ec8665a6442ebe1 |
From a checkout of trycua/cua, create the
locked inference environment (torch 2.14.0, Transformers 5.17.0, PEFT
0.21.0), then download the weights. The base weights take about 9.3 GB and
need at least 16 GB of free memory.
uv sync --frozen --project libs/cua-s1/python --python 3.12 --extra four-b
HF=libs/cua-s1/python/.venv/bin/hf
S1_MODELS="$HOME/cua-s1-models"
"$HF" download Qwen/Qwen3.5-4B \
--revision 851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a \
--local-dir "$S1_MODELS/Qwen3.5-4B"
"$HF" download cua-ai/cua-s1-4b-0.1 \
--revision 88d8b8a90c2da4470d005cc23ec8665a6442ebe1 \
--local-dir "$S1_MODELS/cua-s1-4b-0.1"
Run one decision through the
jev-use closed-candidate chooser.
Set S1_DEVICE=mps on Apple silicon or cuda on NVIDIA. For the multimodal
adapter, set S1_MODALITY=multimodal and pass --screenshot <png> and
--screenshot-capture-id <capture_id> from the same capture as the request.
export S1_BASE_MODEL_PATH="$S1_MODELS/Qwen3.5-4B"
export S1_ADAPTER_PATH="$S1_MODELS/cua-s1-4b-0.1"
export S1_DEVICE=cpu S1_DTYPE=float16 S1_MODALITY=text
libs/cua-s1/python/.venv/bin/python \
libs/cua-driver/examples/jev-use/python/choose_decision.py --model s1 \
< libs/cua-driver/examples/jev-use/fixtures/jev-choice-request-v1.json
The chooser prints one cua.decision_choice_v1 object. Its kind is
selected, reobserve, abstain, or error, and it includes one
probability per candidate. The model field names the adapter, revision, and
modality, but not the base model, so record the base revision with your
evidence.
To load the adapters directly in Python:
from cua_s1.four_b import FourBModel
model = FourBModel(
base_model="/path/to/Qwen3.5-4B",
lora_adapter_path="/path/to/cua-s1-4b-0.1", # local directory, not a Hub ID
modality="text", # or "multimodal"
device="cpu",
dtype="float16",
)
Pass a local directory. FourBModel resolves the text/ or multimodal/
subdirectory only for local paths.
Limitations
- It chooses only among caller-enumerated options, up to 26, and cannot propose an action outside that set.
- Computer-use behavior can fail on unfamiliar layouts, changed interface state, ambiguous labels, localization, timing, occlusion, unexpected dialogs, or adversarial on-screen instructions.
- A specialist checkpoint may overfit its training distribution without recognizing that a task is outside it.
- No weights-backed CI or canonical Cua Driver desktop E2E covers this checkpoint. Inference on Linux, Windows, and CUDA has not been measured.
Run it in an isolated environment with least-privilege credentials and bounded actions. Verify outcomes independently, and require human confirmation before consequential or irreversible actions.
License
The adapter weights in this repository are licensed under Apache-2.0. This
license covers only the adapters. Qwen/Qwen3.5-4B is not redistributed
here: download it from Qwen's repository, where its own license governs it.
The Cua-S1 source code is MIT-licensed in
trycua/cua.
- Downloads last month
- 81