SAVRN
Search Contact SAVRN

Open-weight model · Text classification

OpenJudgement-4B-Preview

by Kitani kitaniai/OpenJudgement-4B-Preview

OpenJudgement-4B-Preview is an open-weight model for text classification from Kitani, released under Apache License 2.0. It has 4.5B parameters and a 262,144-token context. At 16-bit it needs about 10.9 GB of GPU memory, which fits on 1x MI300X from $1.85 an hour, at the lowest prices in the SAVRN Index. It draws 4 downloads a month.

Experimental open-weights judgment model by Kitani OpenJudgement is unfinished. We're releasing this checkpoint for people to experiment with, inspect, and build on. It still needs work on judgment quality, calibration, and inference efficiency.

Parameters4.5B
Context262,144
Weights9.1 GB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads4

Runs On

What it takes to serve OpenJudgement-4B-Preview (4.5B parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.

PrecisionWeightsMemory neededCheapest setupPer hourAlso fits
16-bit 9.1 GB 10.9 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
8-bit 4.5 GB 5.4 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
4-bit 2.3 GB 2.7 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00

Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Oct 1, 2026.

OpenJudgement-4B-Preview on every accelerator the SAVRN Index prices, at every precision

Model Card

By Kitani, published under apache-2.0, revision eb2384f98ffa.

Experimental open-weights judgment model by Kitani OpenJudgement is unfinished. We're releasing this checkpoint for people to experiment with, inspect, and build on. It still needs work on judgment quality, calibration, and inference efficiency. It is not as good as Jev overall in our internal task comparisons. It does show a meaningful improvement over untouched Qwen on our recorded validation comparison: 75.4% versus 64.2% annotation agreement. That is a result on a particular evaluation set, not a claim that we beat the base model on every task. There are questions it handles well and questions it confidently gets wrong. Please judge the preview by your own examples rather than assuming…

Read Kitani's full model card
# OpenJudgement 4B Preview **Experimental open-weights judgment model by Kitani** [Dataset](https://huggingface.co/datasets/kitaniai/OpenJudgment-4B-Preview) · [Python example](examples/basic.py) · [HTTP API](serve.py) · [Evaluation results](reports/final_metrics.json)

This is a preview, and we mean that

OpenJudgement is unfinished. We're releasing this checkpoint for people to experiment with, inspect, and build on. It still needs work on judgment quality, calibration, and inference efficiency.

It is not as good as Jev overall in our internal task comparisons. It does show a meaningful improvement over untouched Qwen on our recorded validation comparison: 75.4% versus 64.2% annotation agreement. That is a result on a particular evaluation set, not a claim that we beat the base model on every task.

There are questions it handles well and questions it confidently gets wrong. Please judge the preview by your own examples rather than assuming that clean JSON means a correct answer.

What is this?

OpenJudgement-4B-Preview is a Qwen3.5-4B derivative trained on custom typed-judgment datasets. Give it evidence, a question, and criteria; it returns a probability or a distribution over your answer options.

It supports three question types:

Type What it returns Example
Noul A number from 0 to 1 for the true option Does this ticket describe a damaged delivery?
Choice A selected key and probabilities over named options Which support team should handle it?
Score An expected value over an ordered rubric, plus its distribution How urgent is this request?

The API accepts multiple questions about the same state. The reference runtime currently evaluates those questions sequentially; it does not share document computation between them.

This is the checkpoint previously named OpenJudgment-4B-v2, released under the Preview name. The weights are unchanged. It does not contain our later experimental shared-document reader or encoder models.

How we modified Qwen

We kept Qwen's pretrained backbone, tokenizer, and vocabulary output head. We trained rank-16 LoRA adapters on the text backbone, including its attention, recurrent, and feed-forward projections, then merged the selected adapters into the released weights.

The important change is the training objective and inference path:

state + question + indexed answer criteria
                    ↓
       Qwen3.5 text backbone, one forward pass
                    ↓
    scores for answer-index tokens: 0, 1, 2, ...
                    ↓
     temperature scaling + probability normalization
                    ↓
          Python constructs the response JSON

Each candidate is assigned a numeric index. We score the corresponding next-token logits at the final prompt position, normalize over the available candidates, and train against the target distribution. We preserve soft human-label distributions where the dataset provides them. Thinking is disabled in the prompt.

The model does not generate the JSON token by token. It also does not generate an explanation or a hidden reasoning trace through this runtime. It remains an LLM-derived model with a causal backbone; this is not a newly invented encoder architecture or a model trained from scratch.

All options for one question are scored together. Seven questions still require seven backbone passes. This distinction matters when measuring latency.

Run it

The reference implementation uses Python 3.12, PyTorch, and Transformers. A CUDA GPU is recommended. The stored weights alone are approximately 9.1 GB; activations and runtime overhead require additional memory, especially for long inputs. CPU execution is available through device="cpu", but uses float32 weights and is much slower.

Download the repository, including its Python files and weights:

python -m venv .venv
source .venv/bin/activate
python -m pip install huggingface_hub
hf download kitaniai/OpenJudgement-4B-Preview --local-dir ./OpenJudgement-4B-Preview
cd OpenJudgement-4B-Preview

# Linux / NVIDIA CUDA 12.8 reference installation:
python -m pip install torch==2.8.0 --index-url https://download.pytorch.org/whl/cu128
python -m pip install -r requirements.txt
python examples/basic.py --device cuda

Use a PyTorch build appropriate for your platform if you are not using that CUDA environment. The merged checkpoint does not require PEFT for inference.

From a Python script in the downloaded repository:

import json
from openjudgement import OpenJudgement

model = OpenJudgement.from_pretrained(".", device="cuda")

result = model.system_one(
    state={"ticket": "My parcel arrived with a cracked screen. I need a replacement."},
    questions={
        "damaged_delivery": {
            "type": "noul",
            "instructions": "Does the customer report receiving a damaged item?",
        },
        "team": {
            "type": "choice",
            "instructions": "Which team should handle this ticket?",
            "criteria": {
                "shipping_returns": "Damaged deliveries, returns, and replacements.",
                "billing": "Payment failures, duplicate charges, and invoices.",
                "account": "Passwords and account access.",
            },
        },
        "urgency": {
            "type": "score",
            "instructions": "Rate urgency using this ordered rubric.",
            "criteria": [
                "Routine information request; no reported problem.",
                "Minor inconvenience; the product is still usable.",
                "Damaged or unusable product requiring a timely resolution.",
                "Immediate danger or an explicitly reported safety emergency.",
            ],
        },
    },
)

print(json.dumps(result, indent=2))
print(result["answers"]["damaged_delivery"]["noul"])
print(result["answers"]["team"]["choice"])
print(result["answers"]["urgency"]["score"])

Once these Python files are available, OpenJudgement.from_pretrained("kitaniai/OpenJudgement-4B-Preview", device="cuda") can also download/cache the weights. Pass revision="<commit SHA>" to pin a Hub checkpoint.

Use the supplied wrapper, not a generic text-generation or text-classification pipeline. Simply calling .generate() does not reproduce this judgment API.

Serve a small HTTP API

From the downloaded repository:

uvicorn serve:app --host 127.0.0.1 --port 8000 --workers 1

The API loads one model instance. It exposes /health, /v1/judgments, and interactive API documentation at /docs.

curl http://127.0.0.1:8000/v1/judgments \
  -H 'Content-Type: application/json' \
  --data-binary @examples/request.json

Or run the included standard-library Python client:

python examples/client.py

OPENJUDGEMENT_MODEL, OPENJUDGEMENT_DEVICE, and OPENJUDGEMENT_MAX_LENGTH override the local model path, device, and context limit. Use one worker per model instance; increasing Uvicorn workers loads additional copies. This is a minimal local serving example, not a managed production service.

Understanding the response

  • Noul: answers[key].noul is the model's normalized true-option probability. Optional criteria must contain both "true" and "false" descriptions. Absence of evidence is not universally the same as falsity; define your intended meaning in the question.
  • Choice: choice is the highest-probability key; probabilities contains every supplied key. Keys remain in input order.
  • Score: rubric positions are zero-based. score is the probability-weighted position, not necessarily the winning level. With four criteria, its range is 0–3. legend maps positions to their descriptions.
  • Confidence: Choice uses normalized maximum probability, (K × max(p) − 1) / (K − 1); Score uses 1 − H(p) / log(K). These are distribution-concentration heuristics, not independently calibrated probabilities of correctness.

Per-type temperatures from calibration.json are applied before normalization. This improves fit to the recorded calibration data; it does not guarantee reliable uncertainty on a new domain. We do not claim these formulas reproduce Jev's internal calibration.

Training and data

Dataset available at kitaniai/OpenJudgment-4B-Preview.

The custom corpus adapts human-supervised preference, moderation, evidence-assessment, and intent datasets into the same typed decision format. Sources include HelpSteer3, Aegis 2.0, ClimateCheck, UAReviews, and CoVal. This is not a dataset of Jev API responses.

Item Recorded value
Full corpus 111,049 decisions
Training split 87,621 decisions
Native training-split input tokens 98,928,078
Selected checkpoint Step 700
Examples seen at selected checkpoint 44,741
Input tokens seen at selected checkpoint 49,046,168
LoRA rank 16
Stored model parameters 4,539,265,536

Corpus size, training-split size, and actual training exposures are different quantities. The selected checkpoint did not consume every training row. The repository retains the complete upstream backbone, including multimodal weights, but the judgment API is text-only.

Source revisions, annotations, adaptations, and source-specific licenses are documented in the dataset. Original training and evaluation records are retained in reports/; historical filenames and repository names in those records reflect the run at the time.

How good is it?

The saved comparison against untouched Qwen used the same 786 validation decisions:

Metric Qwen3.5-4B base Selected fine-tune
Annotation argmax agreement ↑ 64.2% 75.4%
Macro-source negative log-likelihood ↓ 0.918 0.661

The calibrated release recorded 76.8% annotation agreement on 816 test decisions. That test figure is not a base-versus-fine-tune comparison. Some targets encode subjective preferences or tied human votes, so agreement is not universal factual accuracy. Validation was used for selection and is not an untouched final test.

Full per-source and per-type results are in reports/final_metrics.json. These numbers are not a Jev benchmark and should not be read as a general model ranking. Our separate internal comparisons still put Jev ahead overall.

Known problems

It's unfinished. Date arithmetic, experience-duration questions, nuanced qualifiers, unfamiliar rubrics, and complicated evidence combinations can still go wrong. It can assign confident scores to an incorrect answer. Results vary by domain, and a better aggregate result can hide weak individual tasks.

The runtime currently supports 2–10 options per Choice or Score question, 1–128 questions per request, and a configured limit of 32,768 tokens per encoded question, including state, criteria, and prompt overhead. Oversized questions are rejected rather than silently truncated. Supporting a context length is not a guarantee of equal quality throughout that context.

Performance depends on hardware, input length, question count, and kernel support. Transformers can fall back to slower PyTorch implementations for Qwen's recurrent layers if optimized dependencies are absent. We are not advertising a universal latency number for this preview.

Why release it now?

The checkpoint is useful enough to experiment with, and the implementation is small enough to inspect. We would rather make the working weights, data, and inference path available than present an unfinished experiment as a finished Jev replacement.

The remaining work includes better evidence reasoning, stronger domain coverage, calibration, and reducing repeated work across questions. If you benchmark this checkpoint, please call it OpenJudgement-4B-Preview so the results stay tied to this release.

Attribution and license

Developed by Kitani, based on Qwen3.5-4B from the Qwen team / Alibaba. The upstream developers are not responsible for our fine-tuning, runtime, evaluations, or model behavior.

Model and release code: Apache 2.0; see LICENSE and NOTICE. Dataset contents retain their source-specific terms; the model license does not relicense the dataset.

**OpenJudgement 4B Preview** experimental · open weights · unfinished **Kitani**

Configuration

Architecture
Qwen3_5ForConditionalGeneration
Context length (tokens)
262,144
Layers
32
Hidden size
2,560
Feed-forward size
9,216
Attention heads
16
Key/value heads
4
Head dimension
256
Vocabulary size
248,320
Model type
qwen3_5

Identity and Version

Repository
kitaniai/OpenJudgement-4B-Preview
Publisher
Kitani
Task
Text classification
Modality
Text
Library
transformers
Parameters
4.5B parameters
Languages
en, uk
Revision
eb2384f98ffa273bb31b175dcdb02b3de321a9dc
First published
2026-09-17
Last updated
2026-09-24

Files and Weights

50 files, 9.1 GB in total. The weights are 3 files totalling 9.1 GB in safetensors.

Weights3 files · 9.1 GB
Configuration37 files · 401.4 KB
Tokenizer2 files · 20.0 MB
Documentation3 files · 25.1 KB
Other4 files · 9.5 KB
Repository1 file · 1.6 KB
Every file
FileTypeSizeSHA-256
model-00001-of-00003.safetensorsWeights4.0 GB 036d2e8cb9c0
model-00002-of-00003.safetensorsWeights4.0 GB 9f7a3846fa50
model-00003-of-00003.safetensorsWeights1.1 GB 575e42fc3e7f
artifact_manifest.jsonConfiguration9.5 KB —
calibration.jsonConfiguration360 B —
config.jsonConfiguration2.9 KB —
core.pyConfiguration3.5 KB —
examples/basic.pyConfiguration835 B —
examples/client.pyConfiguration471 B —
examples/request.jsonConfiguration1.3 KB —
generation_config.jsonConfiguration116 B —
model.safetensors.index.jsonConfiguration66.2 KB —
openjudgement.pyConfiguration1.4 KB —
openjudgment_config.jsonConfiguration571 B —
preprocessor_config.jsonConfiguration390 B —
reports/audit.jsonConfiguration726 B —
reports/build.jsonConfiguration6.1 KB —
reports/calibration.jsonConfiguration360 B —
reports/dataset_manifest.jsonConfiguration6.1 KB —
reports/encoding.jsonConfiguration514 B —
reports/final_evaluation_plan.jsonConfiguration171.0 KB —
reports/final_metrics.jsonConfiguration9.6 KB —
reports/final_validation_selection.jsonConfiguration4.6 KB —
reports/preview_release_checks.jsonConfiguration479 B —
reports/reload_verification.jsonConfiguration73 B —
reports/run_provenance.jsonConfiguration940 B —
reports/selected_training_checkpoint.jsonConfiguration250 B —
reports/tokenization.jsonConfiguration1.2 KB —
reports/training_complete.jsonConfiguration289 B —
reports/training_plan.jsonConfiguration1.2 KB —
serve.pyConfiguration1.7 KB —
tests/test_api.pyConfiguration1.7 KB —
tests/test_release.pyConfiguration1.8 KB —
tests/test_runtime.pyConfiguration5.7 KB —
v4_finalize.pyConfiguration19.9 KB —
v4_model.pyConfiguration11.4 KB —
v4_prompt.pyConfiguration1.9 KB —
v4_train.pyConfiguration18.2 KB —
verification_fixture.jsonConfiguration47.7 KB —
video_preprocessor_config.jsonConfiguration385 B —
LICENSEDocumentation11.5 KB —
NOTICEDocumentation672 B —
README.mdDocumentation12.9 KB —
chat_template.jinjaOther7.8 KB —
reports/environment.txtOther1.5 KB —
requirements-dev.txtOther49 B —
requirements.txtOther255 B —
.gitattributesRepository1.6 KB —
tokenizer.jsonTokenizer20.0 MB 06b9509352d2
tokenizer_config.jsonTokenizer1.1 KB —

License and Download

License
apache-2.0
Access
Open weights, no gate
Download size
9.1 GB
Download from Kitani

Released by Kitani through its official repository on Hugging Face. Read the license.

Built From

Memory Requirements

PrecisionWeights in memory
As published9.1 GB
16-bit9.1 GB
8-bit4.5 GB
4-bit2.3 GB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About OpenJudgement-4B-Preview

How much GPU memory does OpenJudgement-4B-Preview need?

About 10.9 GB at 16-bit and 2.7 GB at 4-bit: the weights (4.5B parameters) plus a working margin. A long context needs more.

What is the cheapest GPU to run OpenJudgement-4B-Preview on?

At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.

Can I use OpenJudgement-4B-Preview commercially?

Yes. OpenJudgement-4B-Preview is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

What is OpenJudgement-4B-Preview's context length?

262,144 tokens, from the maximum position embeddings in its published configuration.

Similar Models

Model · Text classification

metask-jev-4b-policy-mix

Raymond wei

A calibrated typed-decision model: give it a state (text, ticket, policy, JSON) and a typed question — choice, boolean, or rubric score — and it returns a probability for every option in a single forward pass (~24 ms). No generation, no parsing, nothing to hallucinate. 12 of 13 subsets exceed Bespoke Nimble-9B — a model 2.2× its size — same prompt format, same scoring protocol. The primary suite: BoolQ, MultiNLI, PAWS, PubMedQA, SQuAD-2, VitaminC, Civil Comments, Aegis 2.0, MASSIVE (en/de), HelpSteer-2, SummEval (consistency / relevance). Every item human-labeled; byte-reproducible (manifest-locked ids + sha256); same protocol as the Bespoke Nimble evaluation. Wins: verification-style noul…

Open weights apache-2.0 4.5B parameters 262,144 tokens transformers

Model · Text classification

blink-4b

Govind Kamtamneni

Small, fast decisions for routing and checks at volume. Send text or JSON state with choice, noul (yes/no), or score questions. Get a probability for every offered answer, not generated text. Each batch takes one forward pass; large requests can use several batches. Use choice to route a request, noul for a yes/no check, or score for an ordered rating. The same call can ask several questions about a single state. Try it: POST /v1/systemone, GET /v1/models, and GET /healthz. Point TypeSafe's server-side Python or JavaScript SDKs at it with TYPESAFEBASEURL; text decisions use the same request and response fields as hosted Jev. Requests run one at a time by default; --batch-window-ms 5 enables…

Open weights other 4.2B parameters 262,144 tokens transformers

Model · Text classification

decider-4b-fp8

LLM Tech

Mapika/decider-4b v2.1 quantized to FP8 for vLLM: FP8 E4M3 weights with one scale per output channel and FP8 activations scaled per token at run time. 4.85 GB against 8.41 GB for the bf16 checkpoint. Quantized and measured by LLM Tech; the model, its training and its evaluation protocol are Mapika's. Read the bf16 card for what the model is and how it was trained. The base revision is eb5fbdfc9448473ec25e399882912863afbdb70e. Tokenizer, chat template, generation config and deciderconfig.json (temperatures included) are the author's files unchanged, apart from the version and quantization fields. Both models were run through vLLM 0.29.0 on the same rows: the author's regression set rebuilt…

Open weights apache-2.0 4.2B parameters 262,144 tokens

Model · Text classification

Kev-4B-MLX-Serve-8bit

Alin C Selea

Kev-4B (a LoRA on Qwen3.5-4B-Base with a pointer head) packed for mlx-serve's POST /v1/decisions. Kev answers typed questions about a piece of text (choice, noul, score) with calibrated probabilities. It never generates text. The pack folds the LoRA into the base the way kev does on MLX, quantizes the trunk to 8-bit (affine, group 64; a bf16 build comes from --q-bits 0), and stores the pointer head as kevhead.safetensors with the calibration temperature in kevconfig.json. No PyTorch or pickle file is needed to serve it. Built with tests/convertkevweights.py from the mlx-serve repo. Kev and Qwen3.5 are Apache-2.0.

Open weights apache-2.0 4.2B parameters 262,144 tokens mlx-serve

Model · Text classification

Qwen3-Reranker-4B-W4A16-G128

Mou Geren

GPTQ Quantized Qwen/Qwen3-Reranker-4B with Ultrachat, THUIR/T2Ranking and m-a-p/COIG-CQIA for calibration set. VRAM Usage: 17430M -> 11000M (w/o FA2, according to Embedding model's result). I think <5% accuracy, further evaluation on the way... The Embedding one shows ~0.7%. pip install compressed-tensors optimum and auto-gptq / gptqmodel, then goto the official usage guide.

Open weights apache-2.0 4.1B parameters 40,960 tokens transformers

Model · Text classification

VirbiusGuard-4B

Min Cai

VirbiusAgent 安全分类器(Prompt L1 检测),基于 Qwen3Guard-Gen-4B 微调的 LoRA 模型。 输出严格 JSON:hitrule 与 triggeredid。 同口径评测相对基座:漏检 15.4% 降到 0.8%(gold1000 / V15),jailbreak 召回 57.1% 升到 100%。 0.6B 轻量版:https://www.modelscope.cn/models/i1see1you/VirbiusGuard 基座用官方 Safety 模板(Unsafe / Controversial 视为拦截);VirbiusGuard-4B 用引擎 JSON 协议。评测集与口径相同。 评测集:data/eval/gold1000.jsonl(615 unsafe / 385 safe)。误报 = FP / 385。 基座漏掉的主要是越狱与 Agent 工具滥用。V13.3 召回拉满但误报过高;V15 起进入可用区。V17 误报最低,但召回/自伤回退。 - 架构:Qwen3ForCausalLM(4B),LoRA(rank 32 / alpha 64) - 基座:Qwen3Guard-Gen-4B - 相对基座的补强:jailbreak 与 agent-behavior - V17 数据:与 0.6B V15 同口径,良性切片再平衡,含 oasst1、COIG 中文散文、OCR 风格文本 输出 10 种 unsafe 类别(triggeredid)或 safe(hitrule 为 false)。每条输入只输出一个主要类别:…

Open weights apache-2.0 4B parameters 32,768 tokens transformers