From: interfaze-ai <huggingface.co/interfaze-ai>Newsgroups: alt.freeweights.qwenSubject:

lev

Date: 2026-11-15Commit: 8721908Signed: 2DC28CC7B26A283B ✓

Zero shot classification model. Safetensors weights, 206 MB in all. Published by interfaze-ai under Apache-2.0.

qwen206MBlevsafetensorspermissive
FactsParamsnot statedSize206 MBFormatssafetensorsTaskzero shot classificationLicenseApache-2.0From sourcepermissive
$ fw get interfaze-ai/lev
# manifest sha256 c7acc3c9ac65… · 206 MB · 18 files
$ fw verify ./lev interfaze-ai/lev
From sourceHosted (signed)interfaze-ai/levLast check: 2026-11-15 05:17 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Adapter of Qwen3.5-4B.

Works with

Runs with

Ranked by fit to this model (safetensors), then by GitHub stars.

Overview

Size
206 MB
Weights
170 MB (safetensors)
Parameters
not stated
Formats
safetensors
Task
zero shot classification
License
Apache-2.0 (permissive)
Files
18, each with a sha256
Publisher
interfaze-ai
Added
2026-11-15
Section
alt.freeweights.qwen
Lineage

Original release from the publisher.

Base model: Qwen/Qwen3.5-4B

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 05:17 UTCpassed

Model card

From the publisher at commit 8721908. Shown as plain text with links; images open at the publisher.

Image: lev: one state, many typed decisions, one forward pass

lev answers typed questions about a piece of context in a single forward pass. You give it a state (text, a ticket, an email, or JSON) and a set of yes/no, choice, and score questions. It reads each answer from the logits it already computed and returns calibrated probabilities over exactly the options you supplied. It is a LoRA adapter on Qwen3.5-4B, and it speaks TypeSafe's /v1/systemone protocol, so code written for the TypeSafe SDK works against it once you change the base URL.

Image: Apache-2.0 Image: Qwen3.5-4B Image: Zero output tokens Image: /v1/systemone compatible GitHub Blog interfaze

74.3% on all 13 S1Bench subsets. 4B parameters. Zero output tokens.#

Qwen3.5-4B + LoRA on one H100. On the six subsets the public S1Bench board completed, behind only Jev and two open models of 26B and up, ahead of reflex-4b and a 35B model.

Quickstart · Self-hosting · Benchmarks · Speed · Why it works · Training · Boundaries · GitHub

No generated tokens, no JSON to parse, no retries. lev cannot return a label outside your options, because the answer space is the option set you send. It can still pick the wrong option: the guarantee is structural, not a guarantee of correctness.

QuestionYou giveYou get
noula yes/no questionnoul = p(yes)
choiceinstructions + options (name → description or null)choice, probabilities, confidence
scoreinstructions + 2–10 ordered levelsscore (expected level), probabilities, confidence

It is built for the high-volume judgement calls inside a product: routing, moderation, intent detection, triage, grading, and checking LLM output.

Installation#

pip install "lev[serve] @ git+https://github.com/Abhinavexists/lev#subdirectory=packages/lev"

This needs Python 3.12 or newer and, for real-time use, a CUDA GPU. The serve extra installs torch, transformers, peft, and the HTTP server. The first load downloads the base model (Qwen/Qwen3.5-4B, 9.3 GB of weights) and this release (about 205 MB: the 170 MB adapter, the 15 MB Mode B head and the tokenizer).

Quickstart#

import lev

model = lev.load("interfaze-ai/lev")

state = "Hi, I was charged twice for my order #4471 and I want a refund."
questions = {
    "intent": {
        "type": "choice",
        "instructions": "What does the customer want?",
        "criteria": {
            "refund": "wants money back",
            "cancel": "wants to cancel an order",
            "track": "wants to know where an order is",
            "other": "anything else",
        },
    },
    "urgent": {"type": "noul", "instructions": "Does this need a human within the hour?"},
    "frustration": {
        "type": "score",
        "instructions": "How frustrated is the customer?",
        "criteria": ["calm", "mildly annoyed", "annoyed", "angry"],
    },
}

result = model.system_one(state, questions)
print(result.answers["intent"].choice)  # refund
print(result.answers["intent"].probabilities)
# {'refund': 0.84, 'cancel': 0.094, 'track': 0.012, 'other': 0.054}
print(result.answers["urgent"].noul)  # 0.43
print(result.answers["frustration"].score)  # 1.57, between "mildly annoyed" and "annoyed"
print(result.usage.output_tokens)  # 0

These are real outputs from this checkpoint. The answers are objects, and result.model_dump() gives the same JSON the HTTP server returns.

All the questions share one forward pass, so asking three questions costs about the same as asking one. lev.load reads lev_release.json from this repository to find the base model, the prompt format the adapter was trained with, and the strength to apply the adapter at. It also applies the shipped calibration and loads the matching head, so there is nothing to configure.

Because the probabilities are calibrated, you can gate on them. For example, act automatically above 0.9 and send anything lower to a person.

Self-hosting: a Jev-compatible HTTP server#

lev serve --checkpoint interfaze-ai/lev --host 0.0.0.0 --port 8000
curl -s localhost:8000/v1/systemone -H 'content-type: application/json' -d '{
  "state": "The package arrived crushed and the screen is cracked.",
  "questions": {"damaged": {"type": "noul", "instructions": "Was the item damaged?"}}
}'

Existing TypeSafe clients work once you point them at the server:

from typesafe_sdk import Choice, Noul, TypeSafeClient

# The first request after startup compiles kernels; allow more than the default 10 s.
client = TypeSafeClient(base_url="http://localhost:8000", api_key="local", timeout=60)
response = client.system_one(
    state={"ticket": "The app crashes every time I open settings."},
    questions={
        "team": Choice(
            instructions="Which team owns this?",
            criteria={"billing": "payments, refunds", "technical": "bugs, crashes", "other": None},
        ),
        "bug": Noul(instructions="Is this a bug report?"),
    },
)
print(response.answers["team"].choice, response.answers["bug"].noul)  # technical 0.92

GET /health reports the loaded checkpoint, whether calibration is active, the routing settings, and requests in flight against max_pending. The server batches every question in a request into one forward pass, and concurrent requests into shared forwards, so clients need not batch for throughput. Past --max-pending requests in flight (default 64) it answers 503 at once rather than queueing; a request queued past 30 s gets 504, and a malformed question gets 422 with the reason.

Benchmarks#

S1Bench#

Image: lev and Jev accuracy on each S1Bench subset

subsettasklevJevalways the most common label
vitaminc-devclaim verification0.7260.8010.503
massive-en-USintent routing, 18 scenarios0.8690.8740.163
massive-de-DEintent routing, German0.8290.8710.163
boolqyes/no reading comprehension0.8530.8930.580
squad2answerability0.8190.8360.502
pawsadversarial paraphrase0.8440.9000.516
multinlinatural language inference0.8490.8360.361
civil_commentstoxicity0.7830.8030.893
aegis2safety moderation0.8360.8040.568
helpsteer2helpfulness, 5 levels0.3610.3410.422
summeval-relevancesummary relevance, 5 levels0.3710.3580.458
summeval-consistencysummary faithfulness, 5 levels0.8060.8120.840
pubmedqabiomedical yes/no/maybe0.7160.7640.532
macro0.7430.761

lev and TypeSafe Jev ran through the same harness on all 3,880 items S1Bench scores, pinned by Nimble's manifests. The Jev run lands within 0.8 points of TypeSafe's published figure on every subset, so the harness is not the gap. The adapter scale was chosen by leave-one-family-out over these subsets; scored only on families held out of that choice, it estimates 0.728 (FINDINGS §19).

  • Noise: at these sizes a per-subset difference needs roughly 5–9 points to be real. lev's leads on aegis2, helpsteer2, multinli and summeval-relevance are all inside that.
  • Where Jev is clearly ahead: the minimal-edit pairs (vitaminc −7.5, paws −5.6). The adapter runs at a quarter of its trained strength, which narrowed those gaps from −13.3 and −12.4 and closed summeval-consistency's from −54.1 to −0.6: at full strength it rated most fully faithful summaries one level low.
  • Constant baselines: on civil_comments (89% not toxic) and the three 5-level rating subsets, always answering the most common label beats both models.
  • Calibration: mean ECE 0.097 for lev, 0.091 for Jev; lev is better calibrated on 6 of 13. summeval-consistency is the outlier, under-confident at 0.303.

Image: S1Bench leaderboard over the six subsets every listed model completed

Image: Macro accuracy against parameter count

Held-out split#

A held-out split of the 29 training sources, with no row shared with training:

metricvalue
weighted accuracy0.807\*
expected calibration error0.061\* (0.180 before calibration)
banking77 (77 intents)0.980
clinc_oos (151 intents)0.968
FEVER claim verification0.872\*

\* Measured on this checkpoint before the serving update that skips split label codes. That update routes choice sets of more than 68 options to label-token readout and re-selects the temperatures. The banking77 and clinc_oos rows come from after the update, which raised banking77 from 0.818. Smaller option sets are routed the same way as before.

Speed#

Image: lev compute per call on one H100: 169 ms to 69 ms

A call is one batched forward pass over every question, so compute stays flat from one question to eight, and a 60-option choice costs the same as a yes/no.

The 69 ms is engine compute for a short request (a three-sentence state), measured inside the container; S1Bench's longer states take more. End to end from a laptop, Jev's hosted API answered in 335–346 ms median and lev on one Modal H100 in 414–654 ms across two runs.

Why it works#

Image: State and questions go through one forward pass, then label-token readout or the candidate-path head, then per-bucket temperatures, then typed answers

  • Label-token readout. Each option gets a short code, and the answer is read from the next-token logits over those codes. Codes that would split into two tokens are skipped, so every option stays one token. This handles yes/no, scores, and choice lists up to several hundred options. Choices are read in two option orders and averaged, which cancels position bias. Score levels stay in their trained order unless lev serve runs with --score-order-average, which is off by default.
  • Candidate-path head. Past that point, a small learned head matches the state against each option's text, so the number of options has no fixed ceiling.
  • Calibration. Temperatures fitted after training are applied at load time. There is one per question type, readout mode, and choice option-count band. They were selected by how well they carry over to task families left out of the fit, not only by how well they fit held-out rows.
The optimizations that mattered#
  • One batched forward instead of prefill-and-fork: 169 → 69 ms. At this size the forward pass is bound by kernel launches, not arithmetic, so forking the cache saved FLOPs and cost time. One batched forward plus the depthwise-conv kernel cut compute by 59%. ADR-023
  • Label-token readout up to the tokenizer's limit: +51 points on MASSIVE's 60 intents. Serving 60 options through label codes instead of the learned head took accuracy from 0.231 to 0.746. ADR-025
  • Skipping codes that split: banking77 0.818 → 0.980. Passing over codes that tokenize to two tokens lifts label-token readout from 68 options to several hundred. ADR-028
  • The backbone's own prompt format: 0.653 → 0.710 frozen. The untuned instruct model scored 5.7 points higher on the earlier six-subset S1Bench set when questions are dressed in its chat template, so the final run trained in that format. ADR-027

Training#

  • Data: 200,000 examples from 29 sources built on 26 public Hugging Face datasets. The tasks cover topic, sentiment, and emotion classification; intent detection (banking77, clinc_oos, snips); NLI (SNLI, ANLI, FEVER); paraphrase (MRPC, QQP, PARADE, plus word-swapped hard negatives); multiple-choice QA (RACE, ARC, SciQ, OpenBookQA, CommonsenseQA, StrategyQA); toxicity and safety (ToxiGen, ToxicChat, BeaverTails); and helpfulness (UltraFeedback). Questions are paraphrased, negated, and recast between types, and option sets are shuffled and resized, so the model learns the question format and not one wording.
  • Contamination guard: the data build refuses any source that resolves to one of the 13 S1Bench subsets.
  • Recipe: LoRA r=32, α=64 on the q/k/v/o attention and MLP projections; 3 epochs, 18,750 steps, batch size 32, learning rate 5e-5, in the base model's chat format, on one H100 in 7.8 hours.

Boundaries worth understanding#

  • Minimal edits and fine-grained ratings are weak. Inputs that differ by one swapped word or number, and quality ratings over five levels, are where lev is least accurate and can be confidently wrong.
  • Calibration is fitted on the training distribution. Temperatures are chosen to transfer across task families. Even so, a task very unlike the training mix may be less well calibrated. Check on your own data before you gate on the probabilities.
  • Questions are answered independently. Answers in one request do not condition on each other. Encode a joint decision as one choice, or ask in stages.
  • English only.
  • Needs a GPU for real-time use. It runs on CPU, but a 4B backbone there takes seconds per call, not milliseconds.

Hosted classification#

Text classification in Interfaze runs on a similar system to lev: the model reads the answer from the set of labels you define. The difference is that Interfaze is still token based, so it's a hybrid.

ItemlevInterfaze
OutputProbabilities, zero output tokensTokens, returned as structured output
QuestionsTyped only: yes/no, choice, scoreAny JSON schema, labels included
In the same requestClassification onlyOCR, web search, transcription, extraction, and more
Where it runsYour GPUInterfaze API

Tokens cost a little speed, but they let one request classify a document while also reading, searching, and extracting from it. Define your labels as an enum in the schema, and the label comes back as a typed field.

Interfaze docs → interfaze.ai/docs

Files#

filerole
adapter_model.safetensors, adapter_config.jsonLoRA adapter
mode_b_head.ptcandidate-path head (tensor state dict, loaded with weights_only=True)
tokenizer*, chat_template.jinjathe tokenizer that the label codes were verified against
calibration.jsonfitted temperatures
lev_release.jsonmanifest: base model, prompt format, readout, training step

License#

The adapter is released under Apache-2.0, the same license as the base model. Some of the training datasets have their own terms, including non-commercial licenses. Review them before commercial use.

Not affiliated with or endorsed by TypeSafe AI.

Apache 2.0 · Interfaze

Files

18 files · 206 MBWeights 170 MB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 18 files with their sha256
FileSizesha256
.gitattributes1.82 KB9ff8abcf975e554e3d4ace3f9e6113dfbf09d31efd933bcbf80c27e1c0acc2c1
README.md17.7 KB11900a08e20786fe515d2df305c3a24691c7da75fb45ad8f019913d66bcd6f6d
adapter_config.json1.17 KBafaec9caca2abb6166eee47adf90b8af7d34ea27e602b2b9e0ff7ea1f1ce6c51
adapter_model.safetensors170 MB64c718974d7ed0c9b22a0304060669fa3289ff89b57e572d08b9e9a0dc0623c1
assets/accuracy-by-subset.png176 KB4b210c5e114da342201b48d283223a5b84303760c48a4e0802e8c769dec4b544
assets/accuracy-per-parameter.png103 KBed23c1d747a8b1a4eb54727ff7a5e95c53cae56bb379ffe52da214a45ad48127
assets/compute.png91.4 KBb1e1d3c0804f78e28edd360f39ead7d5cc091189994c58d02538882274a32c31
assets/hero.png151 KBa8d0d817ad2fd121347f51e61b268ed176f37a13c8e4487f4e17c0a60ef2c6c8
assets/how-it-works.png62.4 KB7ff4545190b68e40e2fe5e429340614d4a34bb478dac76afa959997cce4bdd1a
assets/latency.png94.5 KBca8121dd4b69d32d79aab6f2bbfd13b7ba17797c83a112abc059c330c1d84539
assets/leaderboard.png246 KB65ceec18ae05b937ff8183d2a248de30bd5940fa765cd35ad8c1a733a6c44644
assets/social-card.png67.3 KBc640bab089fb6a81093518ab07cb905801c61bbc4115dc6fa3d3e60b5f15a223
calibration.json603 B173661f626b60a83745237b8dadec8967349a0941b1a773dc9026e25e82528f4
chat_template.jinja7.76 KBa4aee8afcf2e0711942cf848899be66016f8d14a889ff9ede07bca099c28f715
lev_release.json502 Bbaf88cedd58a76ec5633ffc8751382e4460be489fc7d34e0e73baef51518dfb4
mode_b_head.pt14.7 MB27eedf7bb9e20d66432882b91297ef6e1ce3d23d81e94ed105ffadba77c6d3ad
tokenizer.json20.0 MB06b9509352d2af50381ab2247e083b80d32d5c0aba91c272ca9ff729b6a0e523
tokenizer_config.json1.13 KB9cf04fffe3d8c3b85e439fb35c7acad0761ab51c422a8c4256d9f887c3a0be7d
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
8721908e50 pinned now2026-11-15 05:17 UTC18 files · 206 MB

Use it

$ fw get interfaze-ai/lev
# manifest sha256 c7acc3c9ac65… · 206 MB · 18 files
$ fw verify ./lev interfaze-ai/lev
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/interfaze-ai/lev.json --dir ./lev $ python3 fw.py verify ./lev ./interfaze-ai__lev.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download interfaze-ai/lev --revision 8721908e50dffd5fe8726507c09498e3def5b2f6 --local-dir ./lev

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
11900a08e20786fe515d2df305c3a24691c7da75fb45ad8f019913d66bcd6f6d
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: interfaze-ai <huggingface.co/interfaze-ai>Newsgroups: alt.freeweights.qwenSubject: levDate: 2026-11-15Commit: 8721908Signed: 2DC28CC7B26A283B ✓
Upstream
interfaze-ai/lev
Pinned commit
8721908e50dffd5fe8726507c09498e3def5b2f6
Manifest
lev.json · .minisig
Manifest sha256
c7acc3c9ac657160c56e6e7941a604d459a89b7054ed9b19129f20563d3d0243
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 05:17 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/interfaze-ai/lev.json $ curl -O https://freeweights.allternit.com/manifests/interfaze-ai/lev.json.minisig $ minisign -Vm lev.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

Qwen/Qwen3.5-4B · this model is a adapter of it

1 model in the catalog name this one as their parent.

Quantizations
1
Quantizations 1
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download interfaze-ai/lev
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. lev.json. Provenance. Takedown history: none.

Variants

1 quantized or adapter build of lev. Each has its own license check and page.

From: BAAI <huggingface.co/BAAI>Subject: Aquila-VL-2B-llava-qwen
From: Perciqa <huggingface.co/Perciqa>Subject: Aurora-Code-1
From: BAAI <huggingface.co/BAAI>Subject: bge-reasoner-embed-qwen3-8b-0923
From: amazon <huggingface.co/amazon>Subject: BMOJOF-primed-HQwen3-8B-Instruct
From: nbeerbower <huggingface.co/nbeerbower>Subject: Bubba-Qwen3.6-27B-LoRA
From: bartowski <huggingface.co/bartowski>Subject: bytkim_Qwen3.8-27B-pi-GGUF