Skip to main content

RoboJev

Did the robot complete the task? RoboJev-27B looks at the robot trying to complete the task and returns a probability, in roughly a quarter of a second.

Launch page  ·  Try your video  ·  Every result  ·  Evaluation data  ·  Model card

Accuracy against cost: RoboJev-27B at 95.2% balanced accuracy and $0.192 per 1,000 answers, frontier models at 91.9% to 93.3% and $2.08 to $9.29

On the 268 held-out SO-101 runs, RoboJev-27B achieves 95.2% balanced accuracy at a cost of $0.19 per 1,000 answers. GPT-6 Astra, GPT-6.1 Sol, Claude Opus 5.5, and Claude Sonnet 5.5 achieve 91.9%-93.3% accuracy at a cost of $2.08-$9.29 per 1,000 answers. The accuracy gap compared to GPT-6 Astra is within noise and its cost is ~48x higher.

The language models all received the same question from four frames of the main camera, while RoboJev-27B read ten frames plus the other cameras. Costs are API list prices from our runs, and one H100 at $2.69 an hour for RoboJev-27B.

All model responses are in the data explorer and the model card contains the full tables and explains the methodology.

RoboJev-27B: Model card, benchmarks, weights available on Hugging Face. The code for the Python client, dataset grader, video overlay, and LeRobot plugin for RoboJev-27B can be found in this repo.

Install

To install RoboJev and the RoboJev command-line tools, install the RoboJev client with pip:

pip install robojev
pip install pyarrow          # LeRobot v3.0 datasets
pip install opencv-python    # live camera

To play with videos you will need to install ffmpeg. To work with LeRobot Datasets v3.0 you will need pyarrow and to use a live camera you will need OpenCV.

Use it

Serve the model using vLLM and then call it from the small client in this repo.

vllm serve josefchen/RoboJev-27B --served-model-name robojev --max-model-len 32768 \
  --limit-mm-per-prompt '{"image": 16}' --logprobs-mode processed_logprobs --trust-request-chat-template
from robojev import RoboJev

judge = RoboJev("http://localhost:8000")
judge.done("Put the ring on the peg", "attempt.mp4")          # cuts ten frames from the video
judge.done("Put the ring on the peg", frames)                 # or pass ten frames, start to end
judge.done("Put the ring on the peg", "attempt.mp4",
           views={"wrist": "wrist_last.jpg"})                 # with other cameras' last frames

The done method returns P(completed). The model requires 1x 80 GB GPU (bf16).

Making the same call from a shell works, and displays the probability of having successfully completed the task.

robojev "Put the ring on the peg" attempt.mp4

If you want to draw the probability on a video or live camera input:

robojev-overlay "Put the ring on the peg" attempt.mp4 out.mp4
robojev-overlay "Put the ring on the peg" --camera 0       # requires opencv-python

Grade a LeRobot dataset

The command below will grade all episodes in a LeRobot dataset on the Hub. Note that the server must be running.

robojev-grade owner/eval_dataset --server http://localhost:8000 --out results.csv

For each episode, the command prints the episode index, task, P(done), and verdict (Done or Not yet). The summary includes the number graded, the success rate at the threshold (default = 0.5), and how many episodes are worth a look (with P(done) between 0.2 and 0.8). Results can also be saved as CSV with the --out option.

It will pick a 3rd person camera and parse ten frames/episode via HTTP byte ranges. Use --camera to specify a camera, --episodes to specify episodes, and --header for additional server headers. No token is required for public datasets, but set HF_TOKEN when using private ones. LeRobot v2.0 and v2.1 require requests, pillow and ffmpeg, and v3.0 also requires pyarrow to read its Parquet episode metadata.

LeRobot

The lerobot_plugin directory provides a robojev reward model for LeRobot to use on recorded episodes as well as a reward step for real-robot training that supersedes the per-task reward classifier. See its README for more info.

The plugin can also be installed with pip directly from the repository.

pip install "git+https://github.com/josefchen/robojev#subdirectory=lerobot_plugin"

How it works

Ten frames of each attempt and the other cameras go into RoboJev-27B; the attempt that lands the ring gets P(success) 1.00, the one where it slips off gets 0.02

Task is sent as free text, along with the video. Client samples 10 frames from the main camera uniformly between the first and last frame. You can optionally add the last frame from each additional camera. No text output from the model. Instead, the model outputs a probability, p(true), at the answer token. This means each answer requires only a single forward pass.

The model doesn't actually generate anything. We just stop the prompt at [decision]:, and the client reads the log-probs of the tokens false and true at that position, adds the biases from decision.json, divides by the temperature and applies a softmax. decision.json also contains the number of frames the model reads.

Limitations

  • The weakest performance of RoboJev-27B is in wrist cameras and on long horizon tasks like stirring or folding.
  • RoboJev-27B can only see what you show it. If the video cuts off before the result, its answer is no good.
  • When using just the final frame as input, RoboJev-27B performs worse on new robots, achieving an AUROC of 0.776 on the unseen labs.
  • In robots outside its training set, RoboJev-27B isn't any more accurate than JEV-27B-VL when given the same 10 frames.
  • Community training labels are from 2 models, and have been verified against 200 human labels; some are incorrect.
  • RoboJev-27B is not a safety measure.

Tests

pip install -e ".[test]"
pytest

These tests use a mock vLLM server instead of an actual GPU-based model server. This allows them to validate the functionality without requiring a GPU.

License

Like the weights, the code in this repository is licensed under Apache-2.0. For licenses of the data used for training, see the model card.

Metadata

Release files for robojev 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for robojev 0.1.0
File Size Uploaded Provenance
robojev-0.1.0.tar.gz 26.1 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for robojev 0.1.0
File Interpreter ABI Platform
robojev-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 48.0 kB

Release files / robojev-0.1.0.tar.gz

Download URL robojev-0.1.0.tar.gz
Size 26.1 kB
Tags Source
SHA-256 checksum
How to use checksums
afbfe25f40bc373a1f6e79909e6ac4588fa05f92afc472d2b7e1a3106769d1eb
BLAKE2b-256 checksum
How to use checksums
af8e2a0afddf3b00cbd5afc24937c7fdc12a7643a19f00f1addd283d39cc69c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / robojev-0.1.0-py3-none-any.whl

Download URL robojev-0.1.0-py3-none-any.whl
Size 21.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
191b288e1ebcae174db0a045bf5549aeed0ada5276db57c6a1bd6b7a85998d5b
BLAKE2b-256 checksum
How to use checksums
9812ad336e0bf31cea4a55914fce2164b2bd56648ad8354ad551df1590fc07cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Security for robojev 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for robojev-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page