Token Classification
Transformers
Safetensors
modernbert
semantic-router
vela
hallucination-detection

Vela Halu

Vela Halu finds answer spans unsupported by the supplied evidence, for grounded answers and response verification.

307M parameters · Supported input length: 8,192 tokens, including special tokens.

Labels are supported (0) and hallucinated (1). Spans use Unicode character offsets in the answer. Evidence support is distinct from real-world factual truth; an empty result does not guarantee correctness.

Answers requiring arithmetic or multi-step reasoning beyond explicit context may be incorrectly flagged.

Evaluation

Reported scores on the 10,698-example fixed evaluation set. Each cell is Vela Halu / LettuceDetect, on a 0-100 scale; higher is better. Bold Vela scores exceed the paired baseline.

Source Samples Span F1 Span P Span R Example F1 IoU
ALL 10,698 64.7 / 64.2 70.0 / 68.4 60.1 / 60.5 87.5 / 86.9 67.9 / 67.1
ACL 440 60.3 / 57.9 72.0 / 70.5 51.9 / 49.2 85.9 / 87.3 65.1 / 63.7
Code agent 2,015 53.0 / 50.8 65.5 / 61.9 44.6 / 43.0 78.3 / 77.0 58.0 / 58.1
README 641 76.7 / 75.1 81.8 / 78.9 72.2 / 71.6 91.5 / 90.0 78.4 / 76.8
Tool output 617 64.3 / 58.8 78.0 / 73.6 54.7 / 49.0 82.7 / 76.3 70.3 / 64.5
Wikipedia 1,388 73.4 / 70.8 77.1 / 74.1 70.1 / 67.8 93.0 / 91.7 79.1 / 76.8
PsiloQA (multilingual) 2,897 70.8 / 71.4 70.5 / 69.6 71.1 / 73.3 94.1 / 94.3 62.5 / 62.7
RAGTruth 2,700 52.5 / 52.8 67.4 / 66.8 43.1 / 43.7 74.9 / 74.3 72.8 / 72.4

LettuceDetect scores are from its published model card, rounded to three decimal places on the 0-1 scale before conversion.

Span metrics measure character overlap; example F1 measures whether an answer contains any hallucinated span. IoU is mean character-set intersection over union. Vela evaluation uses bfloat16, an 8,192-token limit, only_first pair truncation, and token scores strictly above 0.5. Full scores include all source groups and truncation statistics.

Quick start

With PyTorch and Transformers 4.57.6:

import torch
from transformers import AutoConfig, AutoModelForTokenClassification, AutoTokenizer

model_id = "llm-semantic-router/Vela-1.0-Encoder-307M-Halu"
tokenizer = AutoTokenizer.from_pretrained(model_id, use_fast=True)
config = AutoConfig.from_pretrained(model_id)
config.reference_compile = False
model = AutoModelForTokenClassification.from_pretrained(
    model_id, config=config, attn_implementation="sdpa"
).eval()

context = "The museum opens at 10:00 on Tuesday."
question = "When does the museum open on Tuesday?"
answer = "The museum opens at 09:00 on Tuesday."
prompt = f"User request: {question}\n\n{context}"
inputs = tokenizer(prompt, answer, return_offsets_mapping=True,
                   return_tensors="pt", truncation=False)
assert inputs.input_ids.shape[1] <= 8192
sequence_ids = inputs.sequence_ids(0)
offsets = inputs.pop("offset_mapping")[0].tolist()
with torch.inference_mode():
    scores = model(**inputs).logits.float().softmax(-1)[0, :, 1].tolist()

spans, current = [], None
for sequence, (start, end), score in zip(sequence_ids, offsets, scores):
    if sequence != 1 or end <= start:
        continue
    if score > 0.5:
        if current is None:
            current = {"start": start, "end": end}
        else:
            current["end"] = max(current["end"], end)
    elif current is not None:
        spans.append(current)
        current = None
if current is not None:
    spans.append(current)
print([{**span, "text": answer[span["start"]:span["end"]]} for span in spans])

Keep the complete evidence, request and answer within the supported input length. The example checks this limit before inference.

Explore the Vela model collection

Downloads last month
45
Safetensors
Model size
0.3B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for llm-semantic-router/Vela-1.0-Encoder-307M-Halu

Finetuned
(11)
this model

Datasets used to train llm-semantic-router/Vela-1.0-Encoder-307M-Halu

Space using llm-semantic-router/Vela-1.0-Encoder-307M-Halu 1

Collection including llm-semantic-router/Vela-1.0-Encoder-307M-Halu