SAVRN
Search Contact SAVRN

Open-weight model · Text classification

groundcheck-modernbert

by Pranshu Raj Pranshurs/groundcheck-modernbert

groundcheck-modernbert is an open-weight model for text classification from Pranshu Raj, released under MIT License. It has 150M parameters and a 8,192-token context. At 16-bit it needs about 0.4 GB of GPU memory, which fits on 1x MI300X from $1.85 an hour, at the lowest prices in the SAVRN Index. It draws 27 downloads a month.

A ~150M-parameter encoder that checks whether a RAG answer is supported by the source it was given. Given an answer and a source (and optionally the question), it returns grounded or hallucinated with P(grounded). It runs on CPU.

Parameters150M
Context8,192
Weights598.4 MB
Licensemit
AccessOpen weights
Monthly Downloads27

Runs On

What it takes to serve groundcheck-modernbert (150M 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 0.3 GB 0.4 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
8-bit 0.1 GB 0.2 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
4-bit 0.1 GB 0.1 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 7, 2026.

groundcheck-modernbert on every accelerator the SAVRN Index prices, at every precision

Model Card

By Pranshu Raj, published under mit, revision ec4e62e576ed.

A ~150M-parameter encoder that checks whether a RAG answer is supported by the source it was given. Given an answer and a source (and optionally the question), it returns grounded or hallucinated with P(grounded). It runs on CPU. - Every number below is traceable to a committed report in that repository. Hashes for every file are in the repository's MODELPROVENANCE.json. python -m eval.provenance --verify re-checks them. All measured on CPU against the pinned weights, using test sets rebuilt from pinned public datasets. F1 is for the hallucinated class, and the 95% CIs come from a 2,000-resample bootstrap. - 512 tokens reproduces the training run's published numbers (F1 0.6824, acc 0.7468…

Read Pranshu Raj's full model card

GroundCheck v2 (ModernBERT-base)

A ~150M-parameter encoder that checks whether a RAG answer is supported by the source it was given. Given an answer and a source (and optionally the question), it returns grounded or hallucinated with P(grounded). It runs on CPU.

  • Labels: 0 = grounded, 1 = hallucinated, and P(grounded) = softmax(logits)[0].
  • Code, evaluation harness and provenance: https://github.com/Pranshurs/groundcheck
  • Every number below is traceable to a committed report in that repository.

Which weights

Recommended revision 998cec35563d6b90947409d1c7510adac7f7c80c (the groundcheck-rag package pins this)
Weights committed in 0c7dd0636c0d58b5e3865db8f1deee5a5acfeb6c (later commits change only this card)
model.safetensors SHA-256 9ec331ba6d8a9d93236dd72b239df518b07e61241323876f8aafc223d959461a
Base model answerdotai/ModernBERT-base (Apache-2.0)

Hashes for every file are in the repository's MODEL_PROVENANCE.json. python -m eval.provenance --verify re-checks them.

Results

All measured on CPU against the pinned weights, using test sets rebuilt from pinned public datasets. F1 is for the hallucinated class, and the 95% CIs come from a 2,000-resample bootstrap.

Suite n max_length 512 (training protocol) max_length 2048 (groundcheck-rag default)
RAGTruth test (first 2,500 of 2,700 responses) 2,500 F1 0.682 [0.658, 0.705], acc 0.746 F1 0.696 [0.672, 0.718], acc 0.758
VitaminC test 2,000 acc 0.850, F1 0.845 identical (all inputs are short)
One-fact flips caught (regenerated holdout) 500 78.0% 87.2%
Same answers unflipped, kept grounded 500 76.0% 74.0%
  • 512 tokens reproduces the training run's published numbers (F1 0.6824, acc 0.7468; VitaminC acc 0.8495) to within one prediction in 2,500.
  • On the same rows, 2048 tokens scores a paired ΔF1 of +0.014 (95% CI −0.001 to +0.028). That's a small gain, at about 2.5× the CPU time on long documents.
  • The flipped-fact holdout is regenerated. The original run's sample depended on Python's per-process hash seed and can't be rebuilt. The original sample reported 80.4% caught and 76.2% kept.
  • RAGTruth uses the first 2,500 of the 2,700 test responses, the same subset the training run evaluated on.

External published reference (not a controlled comparison)

The RAGTruth paper (Niu et al., 2024; tabulated in LettuceDetect, 2025) reports F1 0.634 for a zero-shot GPT-4-turbo prompt judge. That figure comes from a different protocol: a prompted judge scored on all 2,700 test responses. It was not run head-to-head with GroundCheck, so it's there for orientation and doesn't support a "beats GPT-4" claim.

Latency (one machine, not a guarantee)

Apple M1, CPU, 4 torch threads, single requests after warm-up, at max_length 2048:

Pair length p50
≤ 128 tokens 39 ms
129–512 tokens 172 ms
513–2,048 tokens 349 ms
> 2,048 tokens ~1.45 s

Other hardware will differ. Measure with python -m bench.latency.

Usage

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

name, rev = "Pranshurs/groundcheck-modernbert", "998cec35563d6b90947409d1c7510adac7f7c80c"
tok = AutoTokenizer.from_pretrained(name, revision=rev)
model = AutoModelForSequenceClassification.from_pretrained(name, revision=rev).eval()

source = "France's capital and largest city is Paris."
answer = "Paris is the capital of France."
enc = tok(source, answer, truncation="only_first", max_length=512, return_tensors="pt")
with torch.no_grad():
    grounded = torch.softmax(model(**enc).logits, dim=-1)[0, 0].item()
print("grounded" if grounded >= 0.5 else "hallucinated", round(grounded, 3))

Or use the library (pip install "groundcheck-rag[model]"), which pins the revision, truncates only the source, and raises an error rather than substituting a heuristic when the model can't load:

from groundcheck import GroundCheck
print(GroundCheck().check(source="...", answer="..."))

Training

Fine-tuned from answerdotai/ModernBERT-base (pinned at 8949b909) as a sequence-pair classifier: the premise is the optional question plus the source, and the hypothesis is the answer. The training run was on a single Kaggle P100 with torch 2.4.1 and transformers 4.49.0: 3 epochs, batch 16, learning rate 2e-5, linear schedule, warmup 0.06, weight decay 0.01, seed 42, fp16, sequence length 512.

The 28,500 training rows break down as: - 10,000 from RAGTruth (wandb/RAGTruth-processed @ eb4f4b9d), with the question dropped on ~50% of rows. - 16,000 from VitaminC (tals/vitaminc @ be6febb7): SUPPORTS → grounded; REFUTES and NOT ENOUGH INFO → hallucinated. - 2,500 rule-based one-fact flips (a number, date, direction word or entity) of grounded RAGTruth answers.

There is no LLM-generated augmentation and no private data. The recipe and data builders are in the repository's training/ directory.

Intended use

Use it as a post-generation check in RAG pipelines: flag answers the retrieved source doesn't support, so they can be routed to review, regeneration or a stronger checker. It checks support against the provided source only and isn't a world-knowledge fact-checker.

Limitations

  • English only. Verdicts are per answer, not per span.
  • Long sources are truncated from the end. 76% of RAGTruth test pairs exceed 512 tokens and 19 of 2,500 exceed 2,048, so chunk long documents.
  • RAGTruth precision is about 0.63, so roughly a third of hallucinated verdicts on long RAG answers are false alarms. Scores aren't calibrated probabilities; tune the threshold on your own data.
  • About a quarter of unedited grounded answers in the minimal-edit holdout are flagged.
  • It hasn't been evaluated on adversarial or out-of-domain inputs.

License and data terms

What Terms
These model weights MIT
Base model, answerdotai/ModernBERT-base Apache-2.0
The GroundCheck code Apache-2.0
Training data Keeps its upstream terms, which the MIT license on the weights does not change

The upstream data terms (detailed in the repository's DATA_LICENSES.md): - RAGTruth is MIT. Its source passages come from: - MS MARCO: Microsoft's terms allow non-commercial research use only. - The Yelp Open Dataset: academic and non-commercial use only. - CNN/DailyMail: the articles are copyrighted by their publishers. - VitaminC is CC BY-SA 3.0.

Whether a dataset's non-commercial terms extend to a model trained on it is legally unsettled. Review the data terms before any commercial use. This card is not legal advice.

Configuration

Architecture
ModernBertForSequenceClassification
Context length (tokens)
8,192
Layers
22
Hidden size
768
Feed-forward size
1,152
Attention heads
12
Vocabulary size
50,368
Stored precision
float32
Model type
modernbert

Identity and Version

Repository
Pranshurs/groundcheck-modernbert
Publisher
Pranshu Raj
Task
Text classification
Modality
Text
Library
transformers
Parameters
150M parameters
Languages
en
Revision
ec4e62e576ed478722d9dd08bcd3d75ef16dae93
First published
2026-06-11
Last updated
2026-10-04

Files and Weights

9 files, 602.1 MB in total. The weights are 2 files totalling 598.4 MB in bin, safetensors.

Weights2 files · 598.4 MB
Configuration3 files · 3.9 KB
Tokenizer2 files · 3.6 MB
Documentation1 file · 7.2 KB
Repository1 file · 1.5 KB
Every file
FileTypeSizeSHA-256
model.safetensorsWeights598.4 MB 9ec331ba6d8a
training_args.binWeights5.3 KB 11ad97336bca
config.jsonConfiguration1.5 KB —
metrics.jsonConfiguration1.7 KB —
special_tokens_map.jsonConfiguration694 B —
README.mdDocumentation7.2 KB —
.gitattributesRepository1.5 KB —
tokenizer.jsonTokenizer3.6 MB —
tokenizer_config.jsonTokenizer20.8 KB —

License and Download

License
mit
Access
Open weights, no gate
Download size
598.4 MB
Download from Pranshu Raj

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

Built From

Memory Requirements

PrecisionWeights in memory
As published598.4 MB
16-bit0.3 GB
8-bit0.1 GB
4-bit0.1 GB

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

Questions About groundcheck-modernbert

How much GPU memory does groundcheck-modernbert need?

About 0.4 GB at 16-bit and 0.1 GB at 4-bit: the weights (150M parameters) plus a working margin. A long context needs more.

What is the cheapest GPU to run groundcheck-modernbert 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 groundcheck-modernbert commercially?

Yes. groundcheck-modernbert is released under MIT License. The MIT License is a short permissive license. It permits commercial use, modification and redistribution, provided the copyright notice and permission notice are included.

What is groundcheck-modernbert's context length?

8,192 tokens, from the maximum position embeddings in its published configuration.

Similar Models

Model · Text classification

Firebird-ModernBERT-512-RW

Noumenon, Inc.

Firebird-ModernBERT-512-RW is an experimental post-trained variant of It is a ~149M parameter ModernBERT binary classifier for distinguishing: - 0 — HUMAN The maximum sequence length is 512 tokens. This checkpoint was produced through reward-weighted classifier post-training. The original Firebird checkpoint was kept frozen as a reference model. Training examples were scored by the original classifier, difficult examples received larger loss weights, and the post-trained model was constrained against the frozen reference using a KL penalty. L = weightedcrossentropy + beta KL(reference || policy) Hard human examples received greater weighting than ordinary examples because one goal of the…

Open weights 150M parameters 8,192 tokens transformers

Model · Text classification

pyrrho-v2-nano-g1

Yan Fitzner

Pyrrho is a CPU-runnable co-processor for retrieval-augmented generation. It reads a question before retrieval to suggest what evidence to seek, then reads the question with retrieved passages to assess whether those passages support an answer. A surrounding RAG runtime decides whether to answer, retrieve again, or surface a conflict. The broader project is described in the The evidence verdict is SUFFICIENT, DISPUTED, or INSUFFICIENT. These are predictions about the supplied passages. The model does not retrieve sources, generate answers or citations, check external facts, or prove that a corpus has been searched completely. The two passes use the same encoder with different input…

Open weights cc-by-nc-4.0 150M parameters 8,192 tokens transformers

Model · Text classification

tasksource-jev-nano-v0

Tasksource

High-Throughput Native Decision Model (<200M Parameters) Decoupled Multi-Vector Late Interaction for Fast, Calibrated System-One Decisions Tasksource-JEV-Nano is a compact (~149M parameter) decision model that picks the optimal action, category, or verdict from a candidate list using token-level multi-vector late interaction rather than conventional classification heads. Built on answerdotai/ModernBERT-base and lightonai/LateOn, it handles all three fundamental System-One decision types: 1. Choice: Selecting the best candidate among variable numbers of options ($K=2$ to $K=100+$). 2. NOUL: Yes/no uncertainty decisions. 3. Score: Quantitative ranking and graded scales. All evaluations below…

Open weights apache-2.0 149M parameters 8,192 tokens sentence-transformers

Model · Text classification

mailroom-modernbert-classifier

Lucius Morningstar

Hierarchical document classifier for the LLM-Mailroom intake pipeline: a fine-tuned ModernBERT-base encoder with a doctype head plus one subclass head per document class. It is the deterministic pre-check in the BERT-coupled intake overhaul (mailroom-issues #85). 8,192-token context, bf16. heads (contract, corporaterecord, correspondence, insuranceclaim, mergeragreement). MLP heads with dropout 0.1. by plurality vote over windows; subclass by plurality over windows whose doctype vote is the winning class. doctype (6): contract, mergeragreement, corporaterecord, correspondence, insuranceclaim, unknown (inference-only abstention — not a trained class) development, distributor, endorsement…

Open weights apache-2.0 149M parameters 8,192 tokens transformers

Model · Text classification

Julia-1-MLX

Zain Merchant

Julia-1 for Apple silicon. Runs Supersonic Labs' Julia-1 decision model on the Mac's GPU with MLX through the julia-mlx runtime: the same answers as the official PyTorch runtime on its published evaluations, 5–14× faster on the same Mac. The upstream model repository is SupersonicLabs/Julia-1. The files in this repository are Supersonic Labs' Julia-1 checkpoint, unchanged (model.safetensors SHA-256 df853bf7fe424420011f3d0c47a05d7341aa9eefa7fb9f203ea4aada4ad95b72). The runtime maps it into MLX directly, so no converted copy is needed. Precision (dtype="float16") and embedding placement are load-time options rather than separate files. This is an independent project, not affiliated with or…

Open weights apache-2.0 144M parameters mlx

Model · Text classification

julia-routing-strix-halo-multilingual

Richard

Experimental multilingual fine-tune of Julia-1 for fast bounded-decision routing on AMD Strix Halo-class local machines. This is an experimental v0.2 multilingual candidate, not a replacement for the English-focused v0.1 checkpoint. - task routing over fixed options - documentation-update triage - context-management metadata - non-authoritative tool-policy hints Do not use this model as the final authority for destructive commands, credential handling, production deploys, security replay safety, durable memory writes, summarization, or final prose. By language on the large multilingual holdout: All latency numbers in development were measured on CPU. NPU acceleration has not been validated.…

Open weights apache-2.0 144M parameters julia