Skip to content
Tech News
← Back to articles

Show HN: Cactus Hybrid: We taught Gemma 4 to know when it's wrong

read original more articles
Why This Matters

Cactus Hybrid introduces an on-device AI model that intelligently assesses its confidence in responses, routing uncertain queries to larger models. This approach enhances privacy, reduces latency, and maintains high accuracy while minimizing reliance on cloud resources. Such innovations are pivotal for advancing efficient, private AI deployment in consumer and enterprise applications.

Key Takeaways

Cactus Hybrid

A small, on-device model is fast and private, but sometimes wrong. At Cactus we post-train models to know when they are wrong: we ship probes inside the checkpoint that score every answer with a confidence between 0 and 1, returned as structured data (never parsed out of the answer text). Answer on-device when confidence is high; you can re-route to a bigger model when it's low:

if confidence < 0.85 : answer = ask_a_bigger_model ( prompt )

We start the rollout with Gemma 4 E2B Hybrid , all builds live in the Cactus Hybrid collection on Hugging Face.

Gemma 4 E2B hybrid, the smallest Gemma model, matches Gemini 3.1 Flash-Lite on most benchmarks by routing only 15–35% of queries to the Gemini 3.1 Flash-Lite and running the remnant itself.

Benchmark Handoff to match Flash-Lite (FP16) At 4-bit At 3-bit ChartQA 15–20% 25–30% 40–50% MMBench 30–35% 40–45% 50–55% LibriSpeech 25–30% 35–40% 55–65% GigaSpeech 30–35% 40–45% 50–55% MMAU 30–35% 35–40% 50–55% MMLU-Pro 45–55% ~90% n/a

N/B: Quantisation quality is measured on Cactus Quants which performs well at uniform quantization.

Developers are encouraged to benchmark for Unsloth, GGUF, and MLX quantization independently.

Cactus

# pip install cactus-compute import json from cactus . bindings . cactus import cactus_complete , cactus_init from cactus . cli . download import download_bundle lm = cactus_init ( str ( download_bundle ( "Cactus-Compute/gemma-4-E2B-it" ))) result = cactus_complete ( lm , [{ "role" : "user" , "content" : "What is the capital of France?" }], json . dumps ({ "max_tokens" : 512 , "auto_handoff" : False }), None , lambda * _ : None , ) print ( result [ "response" ]. strip ()) print ( "confidence:" , result [ "confidence" ])

... continue reading