Fermion Research

Introducing Neutrino.

Neutrino-1 8B, 0.6B, and 0.6B-Chat use the same file format and local runtime across CUDA, Apple silicon, and x86.

$ 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
Native CPU path
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
Native CPU path
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
Native CPU path
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 now

Neutrino-1 8B

A local general-purpose model for chat, tool calling, and OpenAI-compatible applications, served from a 3.88 GB artifact.

The full spec
Download
2.56 GB, lossless
Size on disk
3.88 GB
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 native CPU path. 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/snative CPU, 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/scustom MLX and Metal kernels
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 the native CPU path 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.

Speech recognition

Phonon-1

An open speech recognition model for English. It downloads in 415 MB, runs on a laptop or a datacenter GPU, and transcribes an hour of audio in about two and a half minutes.

The full spec
Download
415 MB
LibriSpeech test-clean, full set
2.640 %
LibriSpeech test-other, full set
5.699 %
Realtime factor, median of nine corpora
23.9×
95th-percentile latency
629 ms
Two models, on disk
455 and 331 MB
License
Apache 2.0
Phonon-1, the default model. Measured on a base M5 MacBook Air, 16 GB, on battery.

The full engineering account is in the release post.

Phonon-1 MicroThe smallest model: 285 MB download, 331 MB on disk, ahead of Moonshine base on all eight benchmarks of the evaluation suite.The full spec

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

Install and run Neutrino-1 8B.

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

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

  • Long context with bounded KV memory
    $ fermion chat --model fermionresearch/Neutrino-8B --kv-dtype int8 --yarn-factor 4

    The native window is 40,960 tokens. --yarn-factor 4 extends the loaded window toward 160K without changing the artifact; --kv-dtype int8 holds 131,072 tokens in about 9.3 GiB. fp16 is the default, fp32 preserves byte-identical 0.1.9 output, and --yarn-factor 1.0 is exact identity.

  • 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
Start an interactive streaming chat. Session caching is enabled by default.
fermion serve
Run a local OpenAI-compatible API with streaming and tool calling.
fermion generate
Generate a one-shot completion. Scripted output is deterministic by default.
fermion info
Verify the container header and SHA-256 against the model manifest.
fermion bench
Measure decode performance on the current machine.
fermion inspect
Inspect weight occupancy and per-layer byte counts inside a container.
fermion verify
Check that a speculative draft and target model produce identical tokens.

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

Fermion 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.

All three Neutrino-1 models run locally through the fermion runtime on supported GPUs and CPUs.