Chon-1.0-E2B

Chon-1.0-E2B is a typed-decision model. Given a state (text, JSON or a conversation) and one question with a closed set of options, it returns a calibrated probability for every option:

  • choice: pick one of 2-256 labelled options (more than 16 are read in groups, then a final round)
  • yes/no: P(yes)
  • score: a distribution over ordered levels

It is a LoRA adapter on google/gemma-4-E2B-it (Gemma 4 E2B, about 2B effective parameters) and serves the TypeSafe /v1/systemone wire format used by JevBench.

Serving code, full guide and Docker image: github.com/xoai/chon (MIT). The commands below are enough to run it.

Base model google/gemma-4-E2B-it, unmodified, loaded alongside this adapter
Adapter LoRA (~387 MB)
Question types choice (2-256 options), yes/no, score
Input state up to 6,000 tokens (longer states are truncated, keeping the start); prompt up to 8,192 tokens
Languages English; Vietnamese also supported
Hardware one GPU with 16 GB or more for bf16 (measured on one H100 80 GB); also runs on a Mac with Apple silicon and 18 GB or more (--device mps, about 1 s per decision), or on CPU
Licence Apache-2.0, as the base model

Use

pip install "chon[serve] @ git+https://github.com/xoai/chon@v1.1.1"
python -m chon.serve --model ninhnv/chon-1.0-e2b --port 8000      # downloads the base model and this adapter

The first start downloads the base model, google/gemma-4-E2B-it (public, no token needed), into the Hugging Face cache. --device defaults to auto: an NVIDIA GPU if there is one, else Apple's GPU, else the CPU.

On a Mac with Apple silicon (uses the Mac's GPU), or on CPU only:

python -m chon.serve --model ninhnv/chon-1.0-e2b --device mps --port 8000
python -m chon.serve --model ninhnv/chon-1.0-e2b --device cpu --port 8000
curl -s localhost:8000/v1/systemone -H 'Content-Type: application/json' -d '{
  "state": "Order #4411 shipped on 3 March; the customer reports it arrived damaged on 9 March.",
  "questions": {"decision": {"type": "choice", "instructions": "Route this ticket.",
    "criteria": {"refund": "Refund or replacement", "shipping": "Delivery status", "other": "Anything else"}}}
}'

The response holds answers.decision with choice and probabilities for choice, noul (P(yes); also as probabilities keyed true / false) for yes/no, or probabilities over the levels for score. usage reports input_tokens and output_tokens; every decision is a single forward pass, so output_tokens is 0.

Python

from chon.infer import DecisionModel

dm = DecisionModel.load("ninhnv/chon-1.0-e2b", device="auto")   # NVIDIA GPU, else Apple's GPU, else CPU
answers, usage = dm.predict(
    "Order #4411 shipped on 3 March; the customer reports it arrived damaged on 9 March.",
    {"damaged": {"type": "noul", "instructions": "Did the order arrive damaged?"}})
print(answers["damaged"]["noul"])   # P(yes)

When option labels are only ids ("0", "1", ...), add "option_keys": "hide" to the question so the model sees only the option descriptions.

What is in this repository

File What it is
adapter_model.safetensors, adapter_config.json the LoRA adapter (PEFT)
chon_config.json serving settings (prompt and calibration) read by the chon server
tokenizer files the base model's tokenizer and chat template, unchanged
README.md this card

Evaluation (our measurements, not official board numbers)

set Intelligence Calibration (proxy) Capability (proxy)
held-out replica (720) 57.6 79.7 68.7
JevBench public (231) 70.3 85.0 77.6

Serving, measured on one H100 80 GB, one request at a time: median response 0.05 s, p95 0.1 s; 740 input and 0 output tokens per decision on average.

On a MacBook Pro (Apple M3 Pro, 18 GB) with --device mps, bf16, one request at a time: median response 0.96 s, p95 2.2 s over 60 random held-out questions (810 input tokens on average).

On CPU only (bf16, one request at a time): median 1.8 s on 8 threads of an Intel Xeon Platinum 8480+ and 5.8 s on an Apple M3 Pro's 5 performance cores, over 30 short held-out questions (about 230 input tokens; typical questions are about three times longer and take roughly proportionally longer). On a Mac, use --device mps.

Official JevBench harness (typesafe adapter, public files) against the served package, accuracy: easy 100.0%, original 94.4%, hard 73.0%.

  • Held-out set: 720 items in the JevBench v1.5 sealed-set mix (Choice 360 / yes/no 180 / score 180; tiers 14/28/28/30%), written for this project and never trained on.
  • Scoring: the board's published formulas where they are public (equal type weights, tier weights 10/20/30/40, yes/no answers inside 0.2-0.8 count as wrong). The board's calibration mapping is not fully published, so the calibration column is our proxy.

Licence

Apache-2.0, as google/gemma-4-E2B-it.

Downloads last month
38
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for ninhnv/chon-1.0-e2b

Adapter
(215)
this model