Image-Text-to-Text
MLX
Safetensors
gemma4_unified
apple-silicon
multimodal
text-classification
image-classification
typed-decision
conversational
4-bit precision
Instructions to use Ruiruiz30/Jev-Omni-MLX-4bit with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use Ruiruiz30/Jev-Omni-MLX-4bit 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("Ruiruiz30/Jev-Omni-MLX-4bit") config = load_config("Ruiruiz30/Jev-Omni-MLX-4bit") # 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 Ruiruiz30/Jev-Omni-MLX-4bit with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Ruiruiz30/Jev-Omni-MLX-4bit"
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": "Ruiruiz30/Jev-Omni-MLX-4bit" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent
How to use Ruiruiz30/Jev-Omni-MLX-4bit 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 "Ruiruiz30/Jev-Omni-MLX-4bit"
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 Ruiruiz30/Jev-Omni-MLX-4bit
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use Ruiruiz30/Jev-Omni-MLX-4bit with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "Ruiruiz30/Jev-Omni-MLX-4bit"
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 "Ruiruiz30/Jev-Omni-MLX-4bit" \ --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"
File size: 6,437 Bytes
a1f6a44 33c5267 3ec2559 33c5267 a1f6a44 3ec2559 2ffc677 1eb9ccc 2ffc677 a1f6a44 2ffc677 a1f6a44 2ffc677 33c5267 a1f6a44 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | ---
license: apache-2.0
base_model: akhilaaa3/Jev-Omni
library_name: mlx
pipeline_tag: image-text-to-text
tags:
- mlx
- apple-silicon
- multimodal
- text-classification
- image-classification
- typed-decision
---
# Jev-Omni-MLX-4bit
An Apple Silicon MLX conversion of [`akhilaaa3/Jev-Omni`](https://huggingface.co/akhilaaa3/Jev-Omni) for local inference on a Mac mini with 16GB unified memory.
This repository keeps the upstream Jev-Omni unified multimodal checkpoint and its trained 256-way decision head, then converts the language-model weights to **4-bit affine quantization with group size 64**. The vision weights remain BF16 and the decision head remains FP32.
It is an independent conversion. It is not an official TypeSafe Jev release and does not claim to reproduce TypeSafe's proprietary system. It is also not a new fine-tune.
## Hardware and speed
Measured on:
- Mac mini, Apple M4, 10 CPU cores, 16GB unified memory
- macOS 26.5.1
- Python 3.13.12
- MLX 0.32.2
- MLX-VLM 0.7.1
- single request, batch size 1, no token generation
Ten warm requests were measured after one warm-up request. The image test used the recommended 20 visual-token budget and a 3-option question.
| Mode | Median | P95 | Peak Metal memory |
|---|---:|---:|---:|
| Text decision | ~963 ms | ~998 ms | ~7.0 GB |
| Image decision, 20 visual tokens | ~994 ms | ~1,021 ms | ~7.0 GB |
The first request includes MLX graph and memory warm-up. On the same machine, a 70-token image request is slower (roughly 1.8 seconds warm in an earlier run). Lowering visual tokens reduces latency but can lose small details; validate on your own game frames.
The published Jev-Omni H200 numbers are not transferable to this Mac mini. This model card reports local measurements only.

## Results
The public JevBench files were evaluated with the same typed-choice mapping used by the runtime. Temperature scaling changes probabilities only; it does not change the selected option.
| Benchmark | Accuracy / state macro | Micro accuracy | ECE-10 |
|---|---:|---:|---:|
| JevBench public · 195 groups / 231 decisions | **85.90%** | **87.88%** | 0.04497 raw / **0.03069** scaled |
| DecisionBench Medium · 293 questions | — | — | Full run not published |

The JevBench result is our local public-set measurement, not a claim that the 4-bit MLX conversion reproduces the upstream card's protocol. The upstream [Jev-Omni card](https://huggingface.co/akhilaaa3/Jev-Omni) reports its own merged-model result separately. Dataset revisions, item filtering and scoring splits must match before comparing the numbers.
## Validation
- Upstream unified verification cases: 4/4 argmax decisions matched after 4-bit conversion.
- Six simple red/blue/green circle and square image checks: 6/6 color decisions matched.
- Maximum absolute probability difference on the four upstream text cases: 0.244 in this small check.
- Public JevBench v1.2 public items (195 groups / 231 decisions) were re-run locally. Raw micro accuracy was **87.88%** and group-macro accuracy was **85.90%**. Raw ECE-10 was **0.04497**.
- A single global temperature was fit on even source rows (116 items) and checked on odd rows (115 items): `T=1.11517`. On all 231 items, ECE-10 was **0.03069** after scaling; the held-out ECE was **0.06774** versus raw **0.06261**, so this is a published post-hoc calibration artifact, not a universal confidence guarantee.
- DecisionBench medium was started with the original full states; an exact checkpoint (68/293 questions, 0 errors) is under `artifacts/benchmarks/runs/` in the source project. The partial aggregate is deliberately not presented as the official complete score because long states take tens of seconds to minutes on a 16GB Mac.
- The runtime supports the published temperature file through `--calibration calibration.json`. Accuracy/argmax is unchanged by temperature scaling; only the returned probability distribution changes.
## Installation
This release is intended for Apple Silicon. Download the repository and install the small MLX runtime:
```bash
hf download Ruiruiz30/Jev-Omni-MLX-4bit \
--local-dir Jev-Omni-MLX-4bit
cd Jev-Omni-MLX-4bit
python3.13 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
## Image decision
```bash
python -m omni_mlx.classifier \
--model . \
--calibration calibration.json \
--image /path/to/frame.png \
--state "A kart is approaching a right turn." \
--question "Which steering action is best?" \
--options "Turn left" "Hold center" "Turn right" \
--image-tokens 20
```
The classifier returns candidate probabilities and the selected option. It does not generate a free-form explanation. Use `--image-tokens 70` when the scene contains small or dense visual details.
Omit `--calibration` to inspect the raw quantized probabilities. The included calibration file was fit only on the public JevBench split described above; it is not trained on a user's game or on private benchmark items.
## Benchmark artifacts
- [`benchmarks/jevbench-4bit-report.json`](benchmarks/jevbench-4bit-report.json) contains the raw and temperature-scaled aggregate metrics.
- [`calibration.json`](calibration.json) is the small runtime file consumed by `--calibration`.
- The benchmark runner and raw checkpoints remain in the source project so the long DecisionBench run can be resumed without putting the full benchmark text into this model repository.
## Calibration
Temperature scaling was fit on 116 even-indexed public JevBench rows and checked on 115 odd-indexed rows. The fitted temperature is `T=1.11516790625`. On the full public set, ECE-10 moves from `0.04497` to `0.03069`; on the held-out split it moves from `0.06261` to `0.06774`. This is a transparent post-hoc calibration file, not a guarantee of calibrated confidence on game footage.

## Local conversion code
`omni_mlx/convert.py` contains the conversion path used for this release. The original unquantized checkpoint is not bundled here; it can be obtained from the upstream repository under its own license and terms.
## License and attribution
Apache-2.0. See [LICENSE](LICENSE) and [NOTICE.md](NOTICE.md). The upstream model card, Gemma 4 terms, and dataset rights remain authoritative for their respective components.
|