jev-omni.js

A 12B decision classifier in the browser. A state, a question and its options in; one probability per option out, from a single forward pass on your GPU.

Jev-Omni is a Gemma 4 12B model with a 256-way decision head. @ai-ecoverse/jev-omni.js runs it on WebGPU through onnxruntime-web, for text and images.

Try it

Read this before you press the button. The first load downloads 13.6 GB from Hugging Face and keeps it in this browser's cache, so it downloads once. The model needs about 16 GB of GPU memory, and the tab holds the files in memory while they are uploaded to the GPU: plan on a machine with 64 GB or more of RAM or unified memory (it was tested on an Apple M4 Max with 128 GB). It needs WebGPU: a recent Chrome or Edge.

Checking for WebGPU…

One probability per option appears here, with the time it took.

Prediction JSON

Status

Text and images work in Chrome on WebGPU and match the full-precision model (below). The browser bundle is 13.6 GB and needs about 16 GB of GPU memory, so it is for machines like a large-memory Apple Silicon Mac. The weights are on Hugging Face. Video and audio are still to come.

Results

Chrome on WebGPU, Apple M4 Max, int8 weights with fp32 activations, against the fp32 PyTorch model.

SetAccuracy, browser / referenceAnswers changedMean / max |Δp|
DecisionBench medium, 293 text questions86.35% / 86.35%00.0019 / 0.131
kev.js vision-v1, 106 image questions98.1% / 99.1%10.0014 / –
kev.js vision-v2, 128 harder image questions85.2% / 85.2%10.0037 / 0.065

Latency on a quiet GPU: about 1.2–1.6 s per image question (31 ms for the image step), about 7 s for a text question under 2k tokens, longer for long prompts (up to about 8k tokens with onnxruntime-web 1.30). Details: text, images, feasibility.

API

import * as ort from "onnxruntime-web/webgpu";
import { loadJevOmni } from "@ai-ecoverse/jev-omni.js";

const jev = await loadJevOmni("https://huggingface.co/ai-ecoverse/jev-omni.js/resolve/main/jev-omni", { ort });
const res = await jev.predict({
  state: "The meeting starts at 10 AM. It is now 9 AM.",
  question: "Has the meeting started?",
  options: ["Yes", "No"],
  // image: { width, height, data }   // optional RGBA pixels
});
res.prediction;      // the likeliest option
res.probabilities;   // { Yes: …, No: … }

2 to 256 options per question; quality is established up to 20. The loader checks every file's SHA-256 against the manifest and keeps the files in Cache Storage under the manifest's revision, so later loads read from disk and a new revision replaces the old one. Run it in a Web Worker, as this page does. With onnxruntime-web 1.30, attention needs an n×n buffer per head, which caps prompts at about 8,000 tokens on a GPU with 4 GB buffers (as on Apple Silicon) and less on GPUs with smaller ones; predict rejects longer prompts with a clear error. Long prompts are also slower than with the sliding-window attention that later onnxruntime-web versions bring.

How it works

Compared with kev.js and cua-s1.js

In decision-vision-bench, Jev-Omni ties Kev-4B vision on image questions, at 2.5× the download. It is clearly the strongest of the three on long text decisions (92.5% on the DecisionBench slice). For images in the browser, use kev.js; for long text decisions on a big machine, use this.