Fermion Research

Introducing Neutrino.

Three foundation models in a proprietary ternary-family format eight times smaller than fp16, served by one engine built alongside them. All available today.

$ pip install fermion-research
$ fermion chat --model fermionresearch/Neutrino-8B
2.56 GB
download, 8B
1/8
the bits
763
tok/s, drafted

The family

Three models share one container format and one set of binaries. The 8B carries 36 decoder layers at a hidden width of 4,096; both 0.6B models carry 28 at 1,024, and tie their embedding table so a single tensor serves the input lookup and the output head. Because the runtime reads all three without a rebuild, the 0.6B loads into the 8B's own process as its drafting model rather than standing up a second deployment.

Neutrino-1 8B

flagship

Base model
Qwen3-8B
Parameters
8,190,735,360
Decoder layers
36
Hidden width
4,096
Feed-forward width
12,288
Attention
32 query, 8 key-value
Embedding table
untied, two tensors
KV cache
288 KiB
Context length
40,960 tokens
Download
2.56 GB
On disk
3.88 GB
Apple M5, CPU cores
24.9 tok/s
Runtimes
pip engine, GGUF pack, MLX pack
Role
General assistant and tool caller
Status
Available 2026-07-27

Neutrino-1 0.6B

certified draft

Base model
Qwen3-0.6B
Parameters
596,049,920
Decoder layers
28
Hidden width
1,024
Feed-forward width
3,072
Attention
16 query, 8 key-value
Embedding table
tied, one tensor
KV cache
224 KiB
Context length
40,960 tokens
Download
238 MB
On disk
328 MB
Apple M5, CPU cores
225 to 236 tok/s
Runtimes
pip engine, GGUF pack, MLX pack
Role
Draft model for the 8B's decode
Status
Available 2026-07-27

Neutrino-1 0.6B Chat

conversational

Base model
Qwen3-0.6B
Parameters
596,049,920
Decoder layers
28
Hidden width
1,024
Feed-forward width
3,072
Attention
16 query, 8 key-value
Embedding table
tied, one tensor
KV cache
224 KiB
Context length
40,960 tokens
Download
328 MB
On disk
328 MB
Apple M5, CPU cores
170 to 218 tok/s
Runtimes
pip engine, GGUF pack, MLX pack
Role
Small talk and short helpful replies
Status
Available 2026-07-27
Read from the shipped containers and the measured rates, July 2026.

Where a parameter stops being cheap

The format only touches the transformer linears. Token embeddings stay int8 because their rows are read one token at a time instead of being multiplied against the whole activation stream, and that split moves with scale. At 8B the coded lane holds 84.8% of the parameters in 67.2% of the bytes. At 0.6B it holds 73.9% of the parameters in 50.4% of the bytes, and the untouched vocabulary swells from a third of the file to nearly half. Both 0.6B models share that split exactly: the lane sizes follow from the tensor shapes, so the chat SKU is the same 328 MB down to the byte.

coded transformer linearstoken embeddings, int8scales, metadata, norms

Neutrino-1 8B

36 layers

parameters8,190,735,360
container bytes3.88 GB

Neutrino-1 0.6B

28 layers

parameters596,049,920
container bytes328 MB

Neutrino-1 0.6B Chat

28 layers

parameters596,049,920
container bytes328 MB
Parameter share against byte share for each model, by tensor class.
Available 2026-07-27

Neutrino-1 8B

Our most capable model. Frontier-class knowledge, instruction following, and tool use from a 3.88 GB artifact.

The full spec
Download
2.56 GB, lossless
Size on disk
3.88 GB
Runs on
a 16 GB MacBook (Apple M5)
General knowledge (MMLU)
72.1
Knowledge, re-annotated set (MMLU-Redux)
67.8
Instruction following (IFEval)
77.2
Tool use (BFCL)
68.9
Math (GSM8K, flexible)
53.4
Math (GSM8K, stated format)
51.73
License
Apache 2.0, open weights
Measured on standard public harnesses, July 2026. Methodology on the model card.

Neutrino-1 0.6B

The draft model.

Speculative decoding turns one large forward pass into several emitted tokens, and it only pays when the small model proposing those tokens is cheap enough to run six times in the gaps. Neutrino-1 0.6B is that model: 596 million parameters in a 328 MB container, 238 MB on the wire, decoding above 200 tokens a second on the CPU cores of a 16 GB Apple M5. The 8B accepts a proposal only when it equals its own argmax, which is why the drafted stream is the plain greedy stream and the certificate reads 27,648 tokens with zero divergences.

The same property makes it a model in its own right. It is the identical container format, read by the identical binaries, so a laptop that runs the 8B runs this one at nine times the rate from a file that fits on a phone.

596,049,92028 layers, hidden 1,024
Geometry

16 query heads share 8 key-value heads at a head width of 128, and the embedding table is tied: one int8 tensor serves both the input lookup and the output head.

47.5%of a 328 MB container
Composition

The share of the file held by that tied vocabulary. It is 26.1% of the parameters and nearly half the bytes, because the format touches the 196 transformer linears and leaves the token table alone.

225 to 236 tok/sApple M5, CPU cores, 9 threads
Native rate

Single-stream decode from the shipped binary with no GPU involved. The container is memory-mapped and executed as it arrives: there is no dequantization pass at load.

201.2 tok/sApple M5, 16 GB, MLX pack
Metal rate

Median of five 512-token greedy runs through the custom Metal kernels, peaking at 0.53 GiB of memory. The whole model plus its working set fits in half a gigabyte.

1,177 tok/sH100, inside the 8B's process
Draft walker

Standalone decode as the C-served draft, 0.85 ms per token. That headroom is what lets six proposals be generated in the time the 8B spends on one verify pass.

27,648 tokensH100, dynamic draft length
Certified drafting

Consecutive tokens drafted into the 8B and verified against plain greedy decode with zero divergences. On counting prompts every drafted token is accepted and the 8B delivers 762.6 tok/s, against 395.9 undrafted.

Geometry from the shipped container; rates measured on an Apple M5 and an H100 80 GB.

Against Qwen3-0.6B-Base

The control for a compressed model is its own base at full precision, graded on the same harness on the same day. The reference here is Qwen3-0.6B-Base in bf16. Both sides below carry 596,049,920 parameters, and both were run through eleven zero-shot tasks rather than one, because a single task is a cherry and a grid is a measurement. Winogrande retains 91.5% of the reference and PIQA 90.4%. Accuracy does not fall anything like as fast as the bytes do.

81.6 percent of Qwen3-0.6B-Base’s ability across seven common tasks, at 15.8 percent of the bytes.

Bytes on the wirethe artifact each model page serves
238 MB

15.8% of Qwen3-0.6B-Base, which ships 1,503 MB

Ability, seven common taskszero-shot accuracy, one harness, one day, both sides
81.6%

78.0% averaged across all eleven tasks measured

Both sides carry 596,049,920 parameters; Qwen3-0.6B-Base is bf16 and the Neutrino side is the shipping container.

Neutrino-1 0.6B on Hugging FaceThe drafted decode path on the 8B

Run Neutrino-1 0.6B
$ pip install fermion-research
$ fermion chat --model fermionresearch/Neutrino-0.6B

First run downloads the 0.24 GB coded transport, shows progress, verifies its SHA-256, and unpacks locally. Later runs load from cache.

Neutrino-1 0.6B Chat

A pocket conversationalist.

Conversation at 596 million parameters is a behavior install, not a capability curve. The chat SKU runs the same 28 layers at the same 1,024 width through the same tied embedding table, and it exports to a container of exactly 327,719,836 bytes, the same figure as the draft model. The behaviour is trained in; the geometry and the footprint do not move.

What it buys is measured on both shipping runtimes at one documented decode config each. On 20 held-out sentence fragments the model answers naturally 20 times out of 20, and on 30 held-out factual asks it is correct or honestly uncertain 30 times out of 30, with no template leaks across the five probes designed to draw one. Identity holds 8 of 8 on the native binary and 8 of 8 on the Apple-silicon pack. Across 200 held-out chat prompts the native binary terminates on its own 88.5% of the time at a 4.5% loop rate, and the Apple-silicon pack reads 85.0% and 5.0%.

sup

Hey there! What's up?

who you

I'm Neutrino, a tiny language model made by Fermion Research. What's up? How can I help?

what is the moon

The Moon is a natural satellite that orbits Earth. It reflects sunlight, which makes it visible in the night sky.

Are you ChatGPT?

No, I'm Neutrino. I'm a small language model made by Fermion Research. I chat and help with phrasing, but I'm not ChatGPT.

Four unedited replies from the shipping container on the native binary.

Neutrino-1 0.6B-Chat on Hugging Face

Run Neutrino-1 0.6B-Chat
$ pip install fermion-research
$ fermion chat --model fermionresearch/Neutrino-0.6B-Chat

First run downloads about 0.33 GB of raw model files with progress and verifies them. This model does not use the coded transport. Later runs load from cache.

Tuned settings

Already tuned when it lands.

Every runtime ships carrying the decode settings its behaviour was measured at, so the first command you type is the tuned one. Swept across conversation, factual, tool-shaped and long-form prompts on the shipping containers. Here is what each setting is tuned for, if you want to reach for a different one.

Neutrino-1 8B, conversationThe settings the assistant behaviour was measured at.
temperature 0 · penalty 1.05 · 512 tokens
Neutrino-1 8B, tool calls and JSONReturns valid, fence-free JSON on tool-shaped prompts at every temperature we swept, up to 0.7. Plain decoding keeps the calls reproducible.
temperature 0 · no penalty · 256 tokens
Neutrino-1 8B, long-form proseSampling buys variety here, and the budget matches how much the model actually writes.
temperature 0.7 · top-p 0.95 · 1024 tokens
Neutrino-1 8B, scripted and reproducibleWhat the pip engine does by default, so a script gives you the same tokens every run.
temperature 0 · no penalty
Neutrino-1 0.6B Chat, conversationThe settings the conversational record on this page was measured at, on all three runtimes.
temperature 0 · penalty 1.05 · 256 tokens
Neutrino-1 0.6B, drafting for the 8BNothing to tune. The draft sets the pace; the 8B decides every token that reaches you.
inherits the 8B
Swept on the shipping containers across four prompt families, July 2026.

Run it

Two commands to a streaming chat.

$ pip install fermion-research
$ fermion chat --model fermionresearch/Neutrino-8B

On the first 8B run, fermion 0.1.9 downloads a 2.56 GB coded transport with a progress bar, verifies its SHA-256, and unpacks it locally. Later runs load from cache.

  • A local OpenAI-compatible server
    $ fermion serve --model fermionresearch/Neutrino-8B

    Serves at http://127.0.0.1:8000/v1. Point any OpenAI client at that base URL; the key can be any string. Tool calling, streaming, and a persistent KV session are on by default.

  • Plain Transformers
    $ hf download fermionresearch/Neutrino-8B --local-dir Neutrino-8B \
    --exclude "gguf/*" --exclude "*.tv4z"
    import fermion
    from transformers import AutoModelForCausalLM, AutoTokenizer
    model = AutoModelForCausalLM.from_pretrained("Neutrino-8B")
    tokenizer = AutoTokenizer.from_pretrained("Neutrino-8B")

    Import fermion first to register the trtc_v4 model type. Load from the downloaded local directory; passing the Hub repository id directly to from_pretrained does not work.

  • GGUF, through our llama.cpp fork only
    $ git clone https://github.com/fermionresearch/llama.cpp && cd llama.cpp
    $ git checkout fermion-fv5
    $ cmake -B build -DCMAKE_BUILD_TYPE=Release -DLLAMA_CURL=OFF -DGGML_METAL=OFF
    $ cmake --build build -j --target llama-completion

    The pack uses the FV5 tensor type: stock llama.cpp, Ollama, and LM Studio cannot load it. The fermion-fv5 branch is the CPU/CUDA build and requires -DGGML_METAL=OFF. For Apple-GPU kernels, use the live fermion-fv5-metal branch and omit that flag.

  • MLX, on Apple silicon
    $ cd Neutrino-8B/mlx
    $ pip install -r requirements.txt
    $ python -m fermion_mlx --model ../neutrino-8b_v4.bin --mode chat --tokenizer .

    Run this exact sequence after downloading the repository. The working directory and relative model path are required.

The full CLI

fermion chat an interactive streaming chat (session cache on by default)
fermion serve a local OpenAI-compatible API with tool calling and streaming
fermion generate one-shot completion, deterministic by default for scripts
fermion info verify a download: container header + SHA-256 against the manifest
fermion bench measure decode speed on your machine
fermion inspect look inside a container: weight occupancy, per-layer bytes
fermion verify certify a draft/target pair produces identical tokens

Every command takes --model with a Hub id or local path.

Full engine documentation

Get the models

Neutrino-1 0.6B

The draft model, and a fast model on its own.

Hugging Face
$ fermion chat --model fermionresearch/Neutrino-0.6B
Run Neutrino-1 0.6B
$ pip install fermion-research
$ fermion chat --model fermionresearch/Neutrino-0.6B

First run downloads the 0.24 GB coded transport, shows progress, verifies its SHA-256, and unpacks locally. Later runs load from cache.

Neutrino-1 0.6B-Chat

The conversational small model.

Hugging Face
$ fermion chat --model fermionresearch/Neutrino-0.6B-Chat
Run Neutrino-1 0.6B-Chat
$ pip install fermion-research
$ fermion chat --model fermionresearch/Neutrino-0.6B-Chat

First run downloads about 0.33 GB of raw model files with progress and verifies them. This model does not use the coded transport. Later runs load from cache.

Three models. One runtime. From a datacenter GPU to a 16 GB laptop, the weights stay on your machine.