Open weights · Qwen3.5-4B fine-tune开放权重 · 基于 Qwen3.5-4B 微调

Calibrated typed decisions from a 4B model一个 4B 模型,给出校准过的决策概率

ezjev reads a piece of state — an email, a contract, a ticket, a tool list — and answers choice, noul and score questions with a probability for every option. One prefill, no generated tokens, served through the Jev-style /v1/systemone API. ezjev 读入一段状态(邮件、合同、工单、工具列表……),回答 choice、noul、score 三类问题,给每个选项一个概率。只做一次 prefill,不生成文字,接口是 Jev 风格的 /v1/systemone。

POST /v1/systemone
// request
{
  "state": "I was charged twice. Please refund
            the duplicate.",
  "questions": {
    "refund": {
      "type": "noul",
      "instructions": "Does the user request a refund?" },
    "dept": {
      "type": "choice",
      "instructions": "Which department?",
      "criteria": {
        "billing": "Payments and refunds",
        "technical": "Software bugs" } } }
}
// response — numbers illustrative
{
  "answers": {
    "refund": { "type": "noul", "noul": 0.98 },
    "dept": { "type": "choice", "choice": "billing",
      "probabilities": { "billing": 0.97,
                         "technical": 0.03 } } }
}
46.95
Decision Index 0.3 Full score — best of all models ≤ 5B (ezjev-4b-s2)Decision Index 0.3 总分——5B 以下所有模型中第一(ezjev-4b-s2)
official · #35 of 111正式成绩 · 111 个中第 35
187/231
JevBench public items, self-test (ezjev-4b-s3)JevBench 公开题自测(ezjev-4b-s3)
official run queued正式评测排队中
34ms
p50 latency per decision, one RTX PRO 6000单次决策 p50 延迟,一张 RTX PRO 6000
0.044
Expected calibration error on JevBench public itemsJevBench 公开题上的校准误差(ECE)

Leaderboard submissions榜单提交

ezjev has been submitted to two leaderboards. Decision Index has published its result; JevBench is still in the queue — status as of 2026-10-07.ezjev 已经提交到两个榜单。Decision Index 已经公布成绩,JevBench 还在排队——以下是 2026-10-07 的状态。

Jev Decision Index 0.3 Listed · official result已上榜 · 正式成绩

46.95 ezjev-4b-s2

Submitted 2026-10-04 (PR #55) · listed 2026-10-06 · #35 of 1112026-10-04 提交(PR #55)· 2026-10-06 上榜 · 111 个中第 35

Best of all models ≤ 5B — every entry ranked above it has at least 9B parameters. Decision Index 0.3 scores 20% public benchmarks (ezjev: 50.82), 50% private tests of the same skills (46.22) and 30% private tasks from new domains (40.73), so most of the score comes from tests nobody can train on. See the leaderboard.在 5B 以下的所有模型中排第一——排在它前面的模型都至少有 9B 参数。Decision Index 0.3 的总分由三部分组成:20% 公开 benchmark(ezjev 50.82)、50% 同类技能的私有测试(46.22)、30% 新领域的私有任务(40.73),大部分分数来自谁都没法拿来训练的题。详见榜单。

JevBench Queued · official run pending排队中 · 正式评测未出

187/231 ezjev-4b-s3

Submitted 2026-10-07 · ref 7B97B020 · model ezjev-4b-s3 · free queue, position #322026-10-07 提交 · 编号 7B97B020 · 模型 ezjev-4b-s3 · 免费队列第 32 位

Self-test on the public items only. The official JevBench Score (Intelligence, Calibration, Speed, Cost, incl. sealed items) is measured by the maintainer; we submitted through the official form (the earlier GitHub request #193 was closed at the maintainer's request), and the result will appear on the live board.这里只是公开题的自测。正式的 JevBench 总分(准确率、校准、速度、成本四项,包括封存题)由维护者测量;我们已通过官方表单提交(之前在 GitHub 上的报名 #193 应维护者要求已关闭),结果会出现在榜单上。

Three question types三类问题

Every question comes back as a probability distribution over its options, so you can set thresholds, route on confidence, or abstain.每个问题返回的都是选项上的概率分布,可以按置信度设阈值、分流,或者选择不回答。

choice

Pick one option多选一

Routing, intent, tool selection, policy outcomes. Named options with descriptions; up to hundreds of options.路由、意图识别、工具选择、政策判定。选项带名称和说明,最多可以有几百个。

noul

Is it true?是否成立

Returns P(true): phishing or not, supported by the evidence or not, did the answer meet every requirement.返回 P(true):是不是钓鱼邮件、证据是否支持、回答是否满足了所有要求。

score

Ordinal scale有序打分

Severity, urgency, quality — a distribution over ordered levels, not just a single number.严重程度、紧急程度、质量——给出各个等级上的分布,而不只是一个数字。

Models模型

Both are full merged BF16 weights (~9.1 GB) on Hugging Face. Use s3 unless you need to reproduce the Decision Index run.两个版本都是合并好的完整 BF16 权重(约 9.1 GB),放在 Hugging Face 上。除非要复现 Decision Index 的成绩,否则用 s3。

Recommended推荐
ezjev-4b-s3

Latest. s2 plus ~20k code-generated long-document and date/number reasoning decisions. Submitted to JevBench.最新版。在 s2 基础上加了约 2 万道代码生成的长文档、日期和数字推理题。已报名 JevBench。

Revision版本
36d180d
Temperature温度
1.34
JevBench
187/231 public self-test · ECE 0.044公开题自测 187/231 · ECE 0.044
shell
hf download everettjf/ezjev-4b-s3 --local-dir ezjev-4b-s3
ezjev-4b-s2

The checkpoint listed on Jev Decision Index 0.3 — the best model ≤ 5B on that board.上榜 Jev Decision Index 0.3 的版本,是该榜单上 5B 以下最好的模型。

Revision版本
3d77eb1
Temperature温度
1.26
Decision Index
0.3: 46.95 (#35 of 111)0.3:46.95(111 个中第 35)
shell
hf download everettjf/ezjev-4b-s2 --local-dir ezjev-4b-s2

Quickstart快速上手

About 10 minutes from a fresh GPU machine to your first decision. Two processes run side by side: vLLM loads the model and computes option logprobs, and llm2jev turns them into the /v1/systemone API your code calls.从一台新的 GPU 机器到拿到第一个决策结果,大约 10 分钟。需要同时运行两个进程:vLLM 加载模型、计算各选项的 logprob;llm2jev 把结果包装成 /v1/systemone 接口,供你的代码调用。

You need准备

  • Linux + one NVIDIA GPU with ≥ 24 GB (weights are 9.1 GB in BF16)Linux + 一张 24 GB 以上显存的 NVIDIA GPU(BF16 权重 9.1 GB)
  • Python 3.10+ and a recent CUDA driverPython 3.10+ 和较新的 CUDA 驱动
  • ~12 GB of disk for the weights约 12 GB 磁盘空间放权重

You get得到

  • An HTTP endpoint on port 8080一个监听 8080 端口的 HTTP 接口
  • Many questions per request, each answered with per-option probabilities一次请求可以问多个问题,每个问题返回各选项的概率
  • ~34 ms per decision, no generated tokens每次决策约 34 毫秒,不生成文字

Which model?用哪个模型

  • ezjev-4b-s3, temperature 1.34: use this oneezjev-4b-s3,温度 1.34:一般用这个
  • ezjev-4b-s2, temperature 1.26: to reproduce the Decision Index runezjev-4b-s2,温度 1.26:复现 Decision Index 成绩时用
1

Install安装

Use a fresh virtual environment; these are the exact versions we test with.建议用一个新的虚拟环境;下面是我们测试时用的确切版本。

shell
python -m venv ezjev-env && source ezjev-env/bin/activate
pip install "vllm==0.30.0" "llm2jev==0.6.1"
2

Start vLLM (terminal 1)启动 vLLM(终端 1)

The first start downloads the weights from Hugging Face (9.1 GB). Leave it running.第一次启动会从 Hugging Face 下载权重(9.1 GB)。启动后让它一直运行。

shell
vllm serve everettjf/ezjev-4b-s3 --port 8000 \
  --max-logprobs 256 --return-tokens-as-token-ids --max-model-len 32768

Ready when curl -s localhost:8000/health returns HTTP 200. --max-logprobs and --return-tokens-as-token-ids are required — without them every request fails.就绪的标志:curl -s localhost:8000/health 返回 HTTP 200。--max-logprobs 和 --return-tokens-as-token-ids 两个参数必须加,否则每个请求都会失败。

3

Start the decision API (terminal 2)启动决策接口(终端 2)

--model must match the model vLLM serves; --temperature must match the model (1.34 for s3).--model 要和 vLLM 加载的模型一致;--temperature 要和模型对应(s3 用 1.34)。

shell
llm2jev --model everettjf/ezjev-4b-s3 --backend vllm \
  --url http://127.0.0.1:8000 --port 8080 --prompt chat --temperature 1.34

Ready when curl -s localhost:8080/health returns {"status": "ok", ...}.就绪的标志:curl -s localhost:8080/health 返回 {"status": "ok", ...}。

4

Ask questions提问

Send a state (any text, or a JSON object) and one or more named questions. Write criteria as short, mutually exclusive descriptions — they are what the model chooses between.发送一段 state(任意文字,也可以是 JSON 对象),加上一个或多个带名字的问题。criteria 写成简短、互斥的描述——模型就是在这些描述之间做选择。

curl
curl -s http://127.0.0.1:8080/v1/systemone -d '{
  "state": "I was charged twice. Please refund the duplicate.",
  "questions": {
    "refund": {"type": "noul",
               "instructions": "Does the user request a refund?"},
    "dept": {"type": "choice", "instructions": "Which department?",
             "criteria": {"billing": "Payments and refunds",
                          "technical": "Software bugs"}}
  }
}'
python
import requests

API = "http://127.0.0.1:8080/v1/systemone"
r = requests.post(API, json={
    "state": "Order 1182 arrived with a cracked screen.",
    "questions": {
        "urgency": {"type": "score",
                    "instructions": "How urgent is this?",
                    "criteria": ["routine", "soon", "urgent"]},
        "replace": {"type": "noul",
                    "instructions": "Is a refund or replacement due?"},
    },
}, timeout=30)
r.raise_for_status()
a = r.json()["answers"]
print(a["urgency"]["probabilities"])   # {"0": .., "1": .., "2": ..}
print(a["replace"]["noul"])            # P(true)
5

Read the answer读取结果

Type题型What you send请求里写什么What you get back返回什么
noulinstructions (a yes/no statement); optional criteria {"true": …, "false": …}instructions(一个是非判断);可选 criteria {"true": …, "false": …}"noul": P(true), between 0 and 1"noul":P(true),0 到 1 之间
choicecriteria: {name: description}criteria:{名称: 描述}"choice" (the most likely name) and "probabilities" per name"choice"(概率最高的选项名)和每个选项的 "probabilities"
scorecriteria: list of levels, lowest firstcriteria:等级列表,从低到高"probabilities" keyed by level index "0", "1", …"probabilities",键是等级下标 "0"、"1"……

Using the probabilities: act automatically above a threshold (e.g. 0.9) and send the rest to a human or a bigger model. On the 231 JevBench public items, s3 was ≥ 0.9 confident on 132 of them and got 97% of those right (all 93 answers at ≥ 0.95 were right).怎么用这些概率:高于某个阈值(比如 0.9)就自动处理,其余交给人工或更大的模型。在 JevBench 公开题上,s3 在 231 道 JevBench 公开题里,有 132 道的置信度 ≥ 0.9,其中 97% 答对;置信度 ≥ 0.95 的 93 道全部答对。

Troubleshooting常见问题

  • 422 / 400 on every request → vLLM was started without --max-logprobs 256 --return-tokens-as-token-ids.每个请求都返回 422 / 400 → 启动 vLLM 时漏了 --max-logprobs 256 --return-tokens-as-token-ids。
  • vLLM fails compiling a kernel (no nvcc, e.g. slim containers) → add VLLM_USE_FLASHINFER_SAMPLER=0 and --additional-config '{"gdn_prefill_backend": "triton"}'. Neither changes the logprobs.vLLM 编译 kernel 失败(没有 nvcc,比如精简容器)→ 加上 VLLM_USE_FLASHINFER_SAMPLER=0 和 --additional-config '{"gdn_prefill_backend": "triton"}',两者都不影响 logprob。
  • Out of memory → lower --max-model-len (e.g. 16384) or add --gpu-memory-utilization 0.85.显存不够 → 调小 --max-model-len(比如 16384),或加 --gpu-memory-utilization 0.85。
  • Different name in vLLM (local path or --served-model-name) → pass the same name to llm2jev with --served-model-name.vLLM 里的模型名不同(用了本地路径或 --served-model-name)→ 给 llm2jev 也传同样的 --served-model-name。

Offline / pinned setup离线 / 固定版本部署

Download once at a pinned revision, then serve from the local folder — nothing needs the network afterwards.按固定版本下载一次,之后从本地目录启动,不再需要联网。

shell
hf download everettjf/ezjev-4b-s3 \
  --revision 36d180dcdf09ddb7168b06c41f88f1919c20981d --local-dir ./ezjev-4b-s3
vllm serve ./ezjev-4b-s3 --served-model-name ezjev-4b-s3 --port 8000 \
  --max-logprobs 256 --return-tokens-as-token-ids --max-model-len 32768
llm2jev --model ./ezjev-4b-s3 --served-model-name ezjev-4b-s3 --backend vllm \
  --url http://127.0.0.1:8000 --port 8080 --prompt chat --temperature 1.34

Only the vLLM backend is validated for ezjev. llm2jev also offers SGLang, transformers and MLX backends (untested with this model).我们只在 vLLM 后端上验证过 ezjev。llm2jev 还支持 SGLang、transformers 和 MLX 后端(没有用这个模型测试过)。

How it works工作原理

No special head and no generation. The question and all options go into one chat prompt; the model reads the logits of the option letters right after Answer:.没有特殊结构,也不生成文字。问题和所有选项放进同一个对话提示词,模型在 Answer: 之后读出各个选项字母的 logit。

state email · contract · ticket question A) billing B) technical chat template user: <state> user: <question+opts> assistant: Answer:▮ Qwen3.5-4B + ezjev LoRA one prefill logits A 4.1 B −0.8 ÷ T, softmax probabilities billing 0.97 technical 0.03 illustrative numbers

Training训练

LoRA r=16 on every linear layer, including Qwen3.5's Gated-DeltaNet linear attention, merged into full weights.LoRA rank 16,覆盖所有线性层,包括 Qwen3.5 的 Gated-DeltaNet 线性注意力层,训完合并成完整权重。

Loss损失函数

Cross-entropy + Brier over the option letters only — the same prompt as inference.只看选项字母的 logit:交叉熵加 Brier。训练和推理用同一套提示词。

Calibration校准

One global temperature fitted on a held-out dev split after training (1.34 for s3).训练后在留出的开发集上拟合一个全局温度(s3 是 1.34)。

Results成绩

Submission status is above. Two leaderboards with different philosophies. Decision Index rewards breadth (37 public benchmarks plus private tests of the same skills and new domains); JevBench weighs accuracy, calibration, speed and cost equally.提交状态见上方。两个思路不同的榜单:Decision Index 考的是覆盖面(37 个公开 benchmark,加上同类技能和新领域的私有测试);JevBench 把准确率、校准、速度和成本四项同等看待。

Jev Decision Index 0.3 · ezjev-4b-s2

Official result, compared with the next-best 4B entry and with Jev itself. Skill scores, 0 = chance:正式成绩,与第二好的 4B 模型以及 Jev 本身对比。技能分,0 = 随机水平:

ezjev-4b-s2 (#35)(第 35)vLLM-SR Nox 4B (#38)(第 38)Jev 1.13.0 (#3)(第 3)
Source: the leaderboard's data/index.json, generated 2026-10-06. On our own 0.2.1 run (public suite only) the same checkpoint scored 51.15.数据来源:榜单的 data/index.json(2026-10-06 生成)。同一个模型在我们自己跑的 0.2.1(只有公开题)上是 51.15。

JevBench · ezjev-4b-s3

Public items answered correctly, by tier (official typesafe adapter, serial requests):各档公开题答对的数量(官方 typesafe adapter,串行请求):

ezjev-4b-s2ezjev-4b-s3
ECEp50p95$ / 1k每千次
s20.05934 ms98 ms$0.027
s30.04434 ms99 ms$0.027
Raw latency on one RTX PRO 6000. Cost estimated at a $0.04/M input price, ~668 input tokens per decision.一张 RTX PRO 6000 上的原始延迟。成本按每百万输入 token 0.04 美元估算,平均每次决策约 668 个输入 token。

Training data训练数据

Three stages, all reproducible from the repository on Hugging Face Jobs.一共三个阶段,都能用代码仓库在 Hugging Face Jobs 上复现。

stage 1 · v2

Coverage覆盖题型

~85k samples / 106k questions from the train splits of public datasets, matched to Decision Index task formats (ContractNLI, RAGTruth, ToolACE/Glaive, When2Call, ESCI, SGD …) plus code-generated BBH / CRUXEval / GSM8K-style items.约 8.5 万条样本、10.6 万个问题,来自公开数据集的 train 部分,按 Decision Index 的题型格式整理(ContractNLI、RAGTruth、ToolACE/Glaive、When2Call、ESCI、SGD……),另加代码生成的 BBH / CRUXEval / GSM8K 风格题。

stage 2 · s2

Weak spots补弱项

Low-LR pass on weak tasks (RAGTruth, ESCI, CRUXEval, MMLU, SATA, NLI4CT) plus new phishing-email and claim-verification data, with 40% replay.用较低学习率针对弱项再训一轮(RAGTruth、ESCI、CRUXEval、MMLU、SATA、NLI4CT),另加新写的钓鱼邮件和说法核查数据,40% 回放。

stage 3 · s3

Long documents & dates长文档与日期

~20k code-generated decisions: multi-clause policies with amendments, business-day / time-zone / leap-year deadlines, pro-rating, alias → record → rule lookups, answer judging, “cannot determine” cases. Gold labels are computed by code.约 2 万道代码生成的决策题:带修订条款的多条件政策、营业日 / 时区 / 闰年期限、按比例计算、别名 → 主数据 → 规则的多跳查表、答案评判、“无法判断”的情况。答案都由程序算出。

Decontamination去重

  • Only train / dev splits are used; every row is checked against the full Decision Index suite (exact sentences + 13-gram overlap) and overlapping rows are dropped.只用 train / dev 部分;每条训练样本都和完整的 Decision Index 评测集比对(整句相同 + 13-gram 重合),重合的整条删掉。
  • No JevBench item — public or sealed — was used for training or checkpoint selection; the public items are used only for the self-test.训练和挑选模型都没用过任何 JevBench 题目(公开题和封存题都没有),公开题只用来自测。

Limits & licence局限与授权

  • Weakest on knowledge-heavy tasks (GPQA, MuSR), on multi-step date/number arithmetic inside long documents — a single forward pass can only do so much — and on unseen domains: on Decision Index 0.3 the private new-domain score (40.73) is 10 points below the public one (50.82).最弱的是依赖知识的题(GPQA、MuSR)、长文档里需要多步计算的日期和数字题(只做一次前向计算,能力有限),以及没见过的领域:在 Decision Index 0.3 上,私有新领域得分(40.73)比公开题(50.82)低 10 分。
  • The Qwen base is Apache-2.0, but some training sources are non-commercial (e.g. ANLI, CC BY-NC 4.0) and some have no stated licence: treat the weights as research / non-commercial unless you have checked them.Qwen 底座是 Apache-2.0,但部分训练数据是非商用授权(例如 ANLI 是 CC BY-NC 4.0),有些没有写明授权。在核对清楚之前,请把权重当作仅供研究和非商用。