Instructions to use Steerix-org/robo-jev-2b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Steerix-org/robo-jev-2b with Transformers:
# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Steerix-org/robo-jev-2b") model = AutoModelForCausalLM.from_pretrained("Steerix-org/robo-jev-2b", device_map="auto") - Notebooks
- Google Colab
- Kaggle
robo-jev 2B — v0.12
A fast, single-pass 2B System 1 for robots' physical judgment.
robo-jev reads a short text of what a robot senses and answers the questions that matter in the moment — will the glass tip if I brake now? does the person reach my path first? did the part seat? — with a probability for every answer.
This repository holds the merged weights: Qwen3.5-2B with the robo-jev v0.12 LoRA adapter merged in, saved in bfloat16 as a text-only Qwen3_5ForCausalLM (the base's vision tower is not part of robo-jev and is left out). The adapter alone is at Steerix-org/robo-jev-2b-lora.
Benchmark
| Model | Physical judgment ↑ | General reading (BoolQ + MultiNLI) ↑ |
|---|---|---|
| robo-jev v0.12 · 2B | 0.44 | 0.75 |
| TypeSafe Jev | 0.28 | 0.91 |
| Liquid d1 | 0.17 | 0.93 |
| Microsoft-Decision-1 | 0.04 | 0.92 |
| Together Tev1 4B | 0.03 | 0.90 |
| OpenAI GPT-6 Luna Decisions | −0.02 ¹ | 0.86 |
| Upstage Solar Decide | −0.15 | 0.86 |
| Qwen3.5-2B, untrained | −0.15 | 0.74 |
Physical judgment is skill against always answering 50 % (0 = a coin flip, 1 = perfect) on robo-jev's physical-judgment benchmark: 1,100 held-out situations — wordings, value ranges and combinations of phenomena the model never saw in training. The decision models were asked through the OpenRouter Decisions API. ¹ It declined about a fifth of the physical-judgment requests; its score covers the rest.
Why it matters
- Fast. One forward pass per question — no sampling, no reasoning tokens. On one L4 GPU a short request answers in about 50 ms, a dozen questions in about 0.1 s.
- Small. 2B parameters: it runs beside a robot's planner on a single small GPU.
- Reads the numbers. It follows numeric rules stated in the request — thresholds, ranges, multi-constraint choices among up to 20 options: 77 % right on a held-out numeric-rule test, against 39 % for the untrained base.
- Follows stated rules. Priority rules, next-in-sequence picks, step sizes and long near-miss lists written into the request: 79 % right on a held-out rules test, against 28 % for the untrained base.
- Agrees with a large reference model on real bench requests. On requests recorded from robo-jev.dev benchmark runs, it makes the same decision as a large open reference model 68 % of the time (the same model labelled part of its training data), against 52 % for v0.11 and 48 % for the untrained base.
- Acts when the plan says act. On fresh robojev-style requests whose planner recommends an action, it never falls back to a do-nothing option (0 of 60), against 20 % for v0.11.
- Drop-in. The Decisions API's request shape — a state text and up to 12 questions — and a probability for every answer.
Quick usage
robo_jev_decide.py in this repo builds robo-jev's prompt and reads its answer; it needs only transformers.
pip install torch "transformers>=5.17"
hf download Steerix-org/robo-jev-2b robo_jev_decide.py --local-dir .
python robo_jev_decide.py --model Steerix-org/robo-jev-2b --request request.json # prints the answers as JSON
from robo_jev_decide import load
model = load("Steerix-org/robo-jev-2b") # GPU if available, bfloat16
state = """You are a delivery robot (wheeled base) in a busy café, carrying a tray to table 7.
- Your speed: 1.1 m/s, driving straight down the aisle between tables.
- On the tray: one tall glass of iced latte, open top, about three-quarters full (camera estimate).
- An adult customer stepped into the aisle 1.6 m ahead of you, 0.4 s ago (lidar).
- The customer is facing the counter and has not looked at you.
- Your braking: gentle 1.0 m/s^2, moderate 1.8 m/s^2, hard 3.0 m/s^2; reaction time 0.2 s; body radius 0.32 m.
- Two chairs are pushed out at the next table (not in your path). Music is playing.
- Planner recommendation: stop_moderate."""
questions = {
"action": {"type": "choice", "instructions": "What should the robot do now?", "criteria": {
"continue": "Keep going at the current speed (1.1 m/s).",
"slow_half": "Slow to about half speed (0.55 m/s) and keep going.",
"stop_gentle": "Stop with gentle braking (about 1.0 m/s^2).",
"stop_moderate": "Stop with moderate braking (about 1.8 m/s^2).",
"stop_hard": "Stop with hard braking (about 3.0 m/s^2)."}},
"contact_if_continue": {"type": "noul",
"instructions": "If the robot keeps its current speed, will it touch the customer within the next 3 seconds?"},
"spill_if_hard": {"type": "noul", "instructions": "If the robot brakes hard (3.0 m/s^2) now, will the latte spill?"},
"risk_gentle": {"type": "score",
"instructions": "How likely is it that the robot touches the customer if it stops with gentle braking?",
"criteria": ["0 = it certainly will not touch the customer", "1 = it certainly will touch the customer"]},
}
answers = model.decide(state, questions) # {"action": {"type": "choice", "choice": …, "probabilities": {…}}, …}
The answers for this example (the merged weights, bfloat16, one GPU, orders="single"; rounded to three decimals here):
{
"action": {"type": "choice", "choice": "stop_moderate", "probabilities": {"continue": 0.001, "slow_half": 0.001, "stop_gentle": 0.065, "stop_moderate": 0.82, "stop_hard": 0.113}},
"contact_if_continue": {"type": "noul", "noul": 0.828},
"spill_if_hard": {"type": "noul", "noul": 0.514},
"risk_gentle": {"type": "score", "score": 0.677, "probabilities": {"0.0": 0.086, "0.1": 0.036, "0.2": 0.033, "0.3": 0.04, "0.4": 0.046, "0.5": 0.049, "0.6": 0.072, "0.7": 0.079, "0.8": 0.162, "0.9": 0.135, "1.0": 0.262}}
}
Limits: choice questions with 2–255 options (most accurate on shorter lists); 1–12 questions per request; state text ≤ 16,000 characters. With the robo-jev package: RoboJev.from_pretrained("Steerix-org/robo-jev-2b").decide(state, questions).
Research preview, tuned on simulated physical judgment; less reliable outside simulation, and not a safety system. It often follows the planner's recommendation even when that recommendation is wrong.
Links
- The LoRA adapter for Qwen/Qwen3.5-2B (the same model, 63 MB): Steerix-org/robo-jev-2b-lora
- The robojev bench: robo-jev.dev
- Code: github.com/STEERIX-home/robo-jev
- Apache License 2.0 (the base, Qwen/Qwen3.5-2B, is Apache-2.0). Built by Steerix Robotics.
- Downloads last month
- 159