Instructions to use lethargicgeek/UI-Venus-2-9B-mlx-6bit with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use lethargicgeek/UI-Venus-2-9B-mlx-6bit with MLX:
# Make sure mlx-vlm is installed # pip install --upgrade mlx-vlm from mlx_vlm import load, generate from mlx_vlm.prompt_utils import apply_chat_template from mlx_vlm.utils import load_config # Load the model model, processor = load("lethargicgeek/UI-Venus-2-9B-mlx-6bit") config = load_config("lethargicgeek/UI-Venus-2-9B-mlx-6bit") # Prepare input image = ["http://images.cocodataset.org/val2017/000000039769.jpg"] prompt = "Describe this image." # Apply chat template formatted_prompt = apply_chat_template( processor, config, prompt, num_images=1 ) # Generate output output = generate(model, processor, formatted_prompt, image) print(output) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Pi
How to use lethargicgeek/UI-Venus-2-9B-mlx-6bit with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "lethargicgeek/UI-Venus-2-9B-mlx-6bit"
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "lethargicgeek/UI-Venus-2-9B-mlx-6bit" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent
How to use lethargicgeek/UI-Venus-2-9B-mlx-6bit with Hermes Agent:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "lethargicgeek/UI-Venus-2-9B-mlx-6bit"
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default lethargicgeek/UI-Venus-2-9B-mlx-6bit
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use lethargicgeek/UI-Venus-2-9B-mlx-6bit with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "lethargicgeek/UI-Venus-2-9B-mlx-6bit"
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "lethargicgeek/UI-Venus-2-9B-mlx-6bit" \ --custom-provider-id mlx-lm \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
UI-Venus-2-9B-mlx-6bit
The safe default. Highest precision in this lineup; pick it if you have the RAM and want the fewest surprises outside pure grounding.
MLX quantization of inclusionAI/UI-Venus-2-9B — a GUI-agent vision-language model on the Qwen3.5 architecture (hybrid Gated-DeltaNet linear attention + full attention, SigLIP-style vision tower). Converted with mlx-vlm 0.6.17 / mlx 0.32.2.
The lineup
| Build | Size | Effective bpw | ScreenSpot-Pro (n=50) | Notes |
|---|---|---|---|---|
→ 6bit |
7.7 GB | 6.96 | 60% (30/50) | Uniform 6-bit RTN. Closest to Q6_K. |
mixed_4_6 |
6.2 GB | 5.67 | 56% (28/50) | Mixed 4/6-bit on llama.cpp's Q4_K_M recipe. Closest to Q4_K_L. |
4bit-awq |
5.6 GB | 5.06 | 58% (29/50) | AWQ, calibrated on 64 real GUI screenshots. Closest to an imatrix Q4_K_S. |
4bit |
5.6 GB | 5.06 | 60% (30/50) | Uniform 4-bit RTN, no calibration. Baseline. |
Measured with Click on: <instruction> over 50 held-out
ScreenSpot-Pro samples (images capped at 2048 px;
a prediction counts as correct only if the point falls inside the ground-truth bbox). These four numbers are
within noise of each other — see below. This is not the paper's evaluation protocol and 50 samples is a small
set, so read it as a relative check between quants, not as a benchmark score for the model.
Usage
pip install -U mlx-vlm
python -m mlx_vlm.generate \
--model lethargicgeek/UI-Venus-2-9B-mlx-6bit \
--image screenshot.png \
--prompt "Click on: the Save button" \
--max-tokens 64
from mlx_vlm import load, generate
from mlx_vlm.prompt_utils import apply_chat_template
model, processor = load("lethargicgeek/UI-Venus-2-9B-mlx-6bit")
prompt = apply_chat_template(processor, model.config, "Click on: the Save button", num_images=1)
print(generate(model, processor, prompt, ["screenshot.png"], max_tokens=64))
Output format
Grounding prompts return a <point> tag. Coordinates are normalized to 0–1000, not pixels:
px = x / 1000 * image_width
py = y / 1000 * image_height
Both <point>X Y</point> and <point x1="X" y1="Y" alt="..."> forms occur, so parse for either.
Quantization details
| Method | RTN (round-to-nearest), no calibration |
| Bits | 6 uniform |
| Group size | 64 |
| Mode | affine |
The vision tower is not quantized. All 333 vision tensors stay at bfloat16 in every build here — mlx-vlm's
skip_multimodal_module() excludes them. This mirrors how GGUF conversions ship the vision encoder as a
separate f16 mmproj. Only the language model is quantized, which is why a "4-bit" build measures 5.06
effective bits per weight rather than 4.
What I actually measured
Grounding is essentially unaffected by quantization. All four builds landed between 56% and 60%. At n=50 with p≈0.6 the standard error is roughly ±7 percentage points, so a 4-point spread is noise. There is no evidence here that 6-bit grounds better than 4-bit, or that calibration helps.
AWQ did not measurably beat plain RTN. Worth stating plainly, since calibrated quants are usually assumed
to win. The likely reason is coverage: only 8 of 32 layers received AWQ scaling (layers: 8, groups: 24). The
other 24 are linear_attention (Gated DeltaNet) layers that AWQ's scale search does not handle, so they fell
back to RTN. On a conventional all-attention transformer AWQ would cover the whole network; on this hybrid it
reaches a quarter of it.
Structured description degrades somewhat at 4 bits. Asked to list the buttons in a screenshot, 4bit and
mixed_4_6 sometimes emit coordinate tags (<ex>10 110</ex>...) instead of prose, where 6bit and 4bit-awq
returned a proper list. That was 5 prompts across 4 builds — suggestive, not conclusive. Ordinary description
("what application is this?", "summarize this screen") worked on every build.
Picking one
- Grounding/clicking only, want it small → any 4-bit build; they measured the same.
- Mixed use, or you want the fewest edge cases →
6bit. 4bit-awqis included for completeness and reproducibility, not because it won.
License and attribution
The upstream repo inclusionAI/UI-Venus-2-9B declares no
license — no license tag, no cardData.license, no LICENSE file. None is asserted here. Check with
inclusionAI before using these weights in a product. (Some third-party conversions label this Apache-2.0; I
could not find a basis for that in the source repo.)
Credit for the model goes to inclusionAI (technical report, project page), derived in turn from Qwen/Qwen3.5-9B. This repo contains only a quantized conversion.
- Downloads last month
- -
6-bit