AuthonAuthon Blog
news9 min read

Cloudflare clef-omni: The Open Jev Alternative That Never Writes Text

A minute of video costs about a quarter of a cent on Workers AI, and Cloudflare's own benchmarks show the jobs where Jev still wins.

AW
Alan West
Authon Team
Cloudflare clef-omni: The Open Jev Alternative That Never Writes Text

Cloudflare just put clef-omni, a 30B multimodal model, on Hugging Face under Apache 2.0, and it can't write you a haiku. It can't write you anything. You give it text, images, audio or video plus a list of typed questions, and it returns a probability for each answer you allowed. It's Cloudflare's open-weight answer to TypeSafe's Jev, it costs $0.15 per million input tokens on Workers AI, and a minute of video comes to about a quarter of a cent.

If you saw "Cloudflare open model" in your feed and expected a Llama competitor, this isn't one. I think it'll end up more useful in production than most of the chat models people self-host, with two big caveats that come straight from Cloudflare's own benchmark table: reasoning and RAG hallucination checks.

What the Cloudflare clef-omni model actually is

The model card calls it a "30B-A3B mixture-of-experts multimodal model" that turns a state and a schema of typed questions into decisions. You send it some context (a JSON blob, a support ticket, a screenshot, a 20-second clip) plus 1 to 64 questions. Each question is one of three types:

  • noul: yes/no
  • choice: pick one of N labelled options
  • score: an ordered scale, like "No impact / Minor / Major / Critical"

The model does one forward pass and returns a logit per allowed option per question. Since it never generates tokens, there's no JSON to parse and no trailing comma to break your pipeline at 3 a.m.

The quick specs:

| | clef-omni |
|---|---|
| Base model | Qwen3-Omni-30B-A3B-Instruct (thinker only, speech output unused) |
| Parameters | 30B total, 3B active (card lists 35B in BF16 safetensors) |
| Inputs | text, JSON, images, audio, video (sampled at 2 fps) |
| Context | 64,000 tokens |
| License | Apache-2.0 |
| Released | October 9, 2026 |
| Workers AI ID | @cf/cloudflare/clef-omni |
| Hosted price | $0.15 per million input tokens, output free |

Cloudflare kept the Qwen3-Omni comprehension backbone frozen, trained LoRA adapters and used label-smoothed cross-entropy with Brier score calibration, according to the announcement post. The model card adds the piece that replaces text generation: a small "joint schema head" that reads the backbone's final hidden states and scores every option of every question together. I care most about the calibration part, because if you're going to threshold on "0.85 confident this is phishing", you need those probabilities to mean something.

Clef vs Jev: why Cloudflare built this

Clef-omni is the third model in a family that's only ten days old. Cloudflare shipped Clef and Clef-flash on October 1 as an open-weight answer to Jev, TypeSafe's decision model that launched September 15. The Clef API is Jev-compatible, so switching means changing the model ID.

The first launch got a rough reception. Per Traictory's roundup, one commenter in the Hacker News thread (614 points, 214 comments) assumed about 300 tokens per call and put a million decisions at about $12.60 on Jev versus about $72 on Clef. Clef was $0.24 per million tokens against Jev's $0.042, nearly six times the price. Another wrote that "public benchmarks are easy to cheat." On r/LocalLLaMA, people argued Cloudflare had benchmarked against weaker open Jev variants.

Eight days later Cloudflare cut Clef-flash from $0.09 to $0.038 (now below Jev), moved Clef serving to SGLang for a 1.7x to 2.0x median speedup, and shipped clef-omni. Clef itself stayed at $0.24. I'd bet somebody at Cloudflare read those threads.

clef-omni benchmarks vs Jev: read the bad rows first

All of these are self-reported, from Cloudflare's internal run of its Decision Index 0.2.1 suite on the model card. The changelog repeats some of them with an extra decimal (Clef 97.43 on CLINC150, for example). Nobody has reproduced them independently yet.

| Benchmark | clef-omni | Clef | Clef-flash | Jev |
|---|---|---|---|---|
| BANKING77 (macro-F1) | 94.8 | 94.2 | 90.9 | 79.7 |
| CLINC150+OOS (macro-F1) | 97.7 | 97.4 | 66.8 | 89.3 |
| BFCL (case exact) | 98.2 | 98.5 | 98.8 | 95.8 |
| MMLU | 92.7 | 90.3 | 91.8 | 91.7 |
| GPQA Diamond | 47.4 | 48.0 | 51.0 | 78.3 |
| BBH | 69.0 | 73.7 | 68.9 | 92.9 |
| MMLU-Pro | 70.6 | 65.9 | 65.3 | 82.7 |
| RAGTruth (hallucination F1) | 42.0 | 79.4 | 35.6 | 76.5 |
| PhishNChips (accuracy) | 73.2 | 79.6 | 75.0 | 62.5 |

For intent classification and routing (BANKING77, CLINC150), clef-omni is excellent and beats Jev by a wide margin. For anything that needs multi-step reasoning (GPQA, BBH, MMLU-Pro), Jev wins by 12 to 31 points.

The row I'd care about is RAGTruth. Clef scores 79.4 at catching hallucinations in RAG output and clef-omni drops to 42.0. If you were planning to use clef-omni as a cheap "is this answer grounded in the retrieved docs?" check, use plain Clef instead. My guess is that adding audio and video cost something there, though Cloudflare doesn't explain the drop.

On the workflow evals, clef-omni sits below Clef on every row: 60.2 vs 64.7 exact actions on invoice processing, 71.6 vs 76.3 on customer service. It also trails Jev on both (61.8 and 76.0).

Audio and video in one call: latency and cost

Cloudflare wants you to stop chaining models. Instead of running Whisper to transcribe and then a captioning step, you send the clip and ask your question. The blog quotes about 130 ms median for text-only decisions, about 150 ms for images, and about 1.5 seconds for a 21-second video with sound, in one API call.

The changelog published the same day says about 20 ms for text and about 300 ms for that same 21-second clip. Those can't both be the same measurement. My guess is server-side compute versus end-to-end, but Cloudflare doesn't say, so budget against the slower numbers.

Cost-wise, the Workers AI docs put audio at about 780 tokens per minute and video at up to about 15,400 tokens per minute at max resolution (480p is around 8,600). At $0.15/M, a minute of max-res video with sound comes to roughly a quarter of a cent, which is cheap enough that you could screen every clip your users upload.

Check the hosted limits before you build anything: up to 4 images, 4 audio clips and 2 videos per request, 60 seconds max per video clip, 300 seconds per audio clip, and 16 MiB of audio+video combined. Remote URLs aren't accepted either, so media has to be base64-embedded in the request.

One more catch from Digital Applied: as of October 11, OpenRouter's catalogue lists only text and image input for clef-omni. If you need audio or video, go straight to Workers AI.

Calling clef-omni on Workers AI

From a Worker, it's one env.AI.run call:

ts
const result = await env.AI.run("@cf/cloudflare/clef-omni", {
  model: "clef-omni",
  state: "Checkout has been failing for every customer for the last hour.",
  questions: {
    urgent: { type: "noul", instructions: "Is this support request urgent?" },
    team: {
      type: "choice",
      instructions: "Which team should handle this request?",
      criteria: {
        billing: "Payments, invoices, and refunds",
        technical: "Outages, errors, and configuration",
        sales: "Plans and upgrades",
      },
    },
    severity: {
      type: "score",
      instructions: "How severe is the customer impact?",
      criteria: ["No impact", "Minor", "Major", "Critical"],
    },
  },
});

The docs wrap this in a full fetch handler. result.answers comes back keyed by the same IDs: a probability for urgent, the chosen team with per-option probabilities for team, and a probability-weighted score for severity.

Or with curl against https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run/@cf/cloudflare/clef-omni and a bearer token. Same body.

How to run clef-omni locally with transformers

Bring a big GPU. The card says the backbone needs about 64 GB of GPU memory in bfloat16 and was tested with torch 2.11 and transformers 5.10.2 on a single H200. Plan on an 80 GB card. A 24 GB consumer GPU won't hold it at bf16.

bash
pip install "torch==2.11.*" "transformers==5.10.2" huggingface_hub pillow av
pillow handles images, av handles audio and video. Then, from the model card:
python
import sys
import torch
from huggingface_hub import snapshot_download

path = snapshot_download("Cloudflare/clef-omni")
sys.path.insert(0, path)
from joint_schema_model import collate_records, encode_record, load_release_model

model, processor = load_release_model(path, device="cuda")

record = {
    "state": {"invoice": {"vendor": "Acme", "total": 1250.0, "currency": "USD", "status": "overdue"}},
    "questions": {
        "status": {
            "type": "choice",
            "instructions": "What is the invoice status?",
            "criteria": {"paid": "Invoice is paid.", "overdue": "Invoice is past due.", "draft": "Not sent."},
        },
        "large": {"type": "noul", "instructions": "Is the total above 1000 USD?"},
    },
}

encoded = encode_record(processor.tokenizer, record, processor=processor)
batch = collate_records([encoded], processor.tokenizer.pad_token_id, torch.device("cuda"))
with torch.inference_mode():
    logits = model(batch)[0]

for question, question_logits in zip(encoded.questions, logits):
    probabilities = question_logits.float().softmax(-1).tolist()
    print(question.question_id, dict(zip(question.option_ids, probabilities)))

That snippet calls sys.path.insert(0, path) and then imports joint_schema_model from the downloaded repo. That's executing Python from a Hugging Face snapshot, the same trust decision as trust_remote_code=True without the flag making you think about it. Read joint_schema_model.py before running it, and pin a revision with snapshot_download("Cloudflare/clef-omni", revision="") so the code can't change under you.

Should you use clef-omni?

My take: if you're routing tickets, tagging uploads, moderating content or picking which tool an agent calls, and part of your input is screenshots, voice notes or short clips, clef-omni is the most practical open option right now. It's Apache 2.0, the probabilities are calibrated, there's no output to parse, and video costs about a quarter of a cent per minute.

If your decisions need actual reasoning, or you're checking RAG answers for hallucinations, the published numbers say look elsewhere. And "open" here means open weights. A Cloudflare PM confirmed to The Register that the training data isn't public.

I'm more curious why Cloudflare is doing this at all. Its blog says it uses Clef internally for spam on its docs repo, phishing in plugin libraries, PII scanning and malicious domain detection. So a CDN and security company has decided classification is infrastructure, and it doesn't want to rent that from TypeSafe.

So what's your read: is Cloudflare training its own models because hosting everyone else's is a commodity business with no moat, or because its security products need a classifier it controls? And has anyone actually swapped Jev for Clef in production yet?

Sources

Cloudflare clef-omni: The Open Jev Alternative That Never Writes Text | Authon Blog