Fermion Research

Introducing the Neutrino-1 models

Three models ship today in one proprietary ternary-family weight format, one eighth the bytes of fp16: Neutrino-1 8B, Neutrino-1 0.6B, and Neutrino-1 0.6B-Chat. One engine serves all three, from a datacenter GPU to a 16 GB MacBook. Weights and engine together, now.

1. Three models, one format

An 8B-class model in fp16 is 16 GB of weights, and producing a single token moves nearly all of them through the processor. Neutrino-1 8B holds 8,190,735,360 parameters in a proprietary ternary-family weight format at one eighth the bytes of fp16, which puts the whole model in a 2.56 GB download and 3.88 GB on disk. Three models ship today in that format. Neutrino-1 8B is the capable one. Neutrino-1 0.6B is 596,049,920 parameters in 328 MB that decode at 225 tokens per second on a laptop, and it is the certified draft model that makes the 8B decode faster than the 8B can decode alone. Neutrino-1 0.6B-Chat is that small model finished for conversation.

The three share a tokenizer, a container layout, and an engine. One artifact per model, one loader, one set of kernels: the file that runs on an H100 is byte-identical to the file that runs on a MacBook, and the drafted path exists because two of the three containers can sit in the same process without a second runtime.

2. Architecture

Neutrino-1 8B is a 36-layer decoder-only transformer with a residual stream 4,096 wide. Attention is grouped-query: 32 query heads share 8 key-value heads at 128 dimensions per head, a 4:1 grouping that divides the decode-time cache by four, with rotary position embeddings over the full head dimension and RMS normalization applied per head to queries and keys before they reach the cache. Each layer carries a gated feed-forward block that expands 4,096 to 12,288 and projects back. The vocabulary is 151,936 tokens with separate input and output embedding tables, and the position range extends to 40,960 tokens.

Neutrino-1 0.6B is the same design at a quarter of the width. It runs 28 layers over a 1,024-wide stream, 16 query heads over the same 8 key-value heads for a 2:1 grouping, the same 128-dimension heads, and a feed-forward block of 3,072. It carries the identical 151,936-token vocabulary, and at that width a separate output table would cost more than the layers it serves, so the small model ties its input and output embeddings into one 156 MB table. Sharing the tokenizer with the 8B is what makes the two composable: drafted tokens need no remapping between models.

both geometries at one scale: row width is the residual stream, row count is the layer count
Neutrino-1 8B36 layers · 4,096 wide
Neutrino-1 0.6B28 layers · 1,024 wide
attention share of the layer’s bytesfeed-forward share

Neutrino-1 8B

Parameters
8,190,735,360
Layers
36
Residual stream
4,096
Attention
32 query / 8 KV heads
Feed-forward
12,288
Embeddings
untied, 622 MB each
On disk
3.88 GB
Download
2.56 GB
Vocabulary share of the file
32.1%

Neutrino-1 0.6B

Parameters
596,049,920
Layers
28
Residual stream
1,024
Attention
16 query / 8 KV heads
Feed-forward
3,072
Embeddings
tied, 156 MB
On disk
328 MB
Download
238 MB
Vocabulary share of the file
47.5%

Same tokenizer, same format, same engine. The small model spends 47.5 percent of its file on the vocabulary against the 8B’s 32.1 percent.

Fig. 1Both containers at one scale. Width is the residual stream, split at each model's measured attention share.

3. The container

The format decides what those parameters physically are. All 252 transformer projection matrices of the 8B, seven per layer across attention and the feed-forward block, live in the ternary lane: each stored weight is a three-way choice among minus, zero, and plus, and each output row carries scale metadata that sets the magnitude of the choice. The format extends the ternary family with proprietary structure, and the extensions are unpublished; the measurable consequence is that 6.95 billion projection weights occupy 2.60 GB of the container. Zero is a stored state, not a rounding outcome: 62.6 percent of all ternary weights are exactly zero, 18.7 percent positive, 18.7 percent negative. The signs land balanced to within two hundredths of a percentage point across 6.95 billion weights, with nothing in training enforcing that symmetry.

Occupancy is not uniform with depth. The attention projections hold a flat code density across all 36 layers, inside a band of about one percentage point. The feed-forward blocks of layers 1 through 3 spike instead: the down projection reaches 72.5 percent zeros at layer 2 and the gate 70.5 percent at layer 3, roughly ten points above the model-wide baseline. The earliest feed-forward blocks silence most of their connections; attention never does.

all 6.95B ternary weights, by stored state
− 18.7%
zero 62.6%
+ 18.7%
share of weights stored exactly zero, by layer
606570
down 72.5% at layer 2gate 70.5% at layer 3upattention (q·k·v·o band)
05101520253035
layer index, 0 to 35

Measured over the shipping container, 2026-07-27. Attention holds a flat code density at every depth; the first feed-forward blocks silence hardest.

Fig. 2Weight-state occupancy of the shipping container, measured over all 6.95 billion ternary weights.

Two thirds of the file is that ternary weight lane. Nearly a third is vocabulary: the two untied embedding tables stay outside the ternary lane as int8 rows with per-row scales, 622 MB each. That choice costs 1.24 GB and buys precision on the only tensors where a single row carries a token’s whole identity. Normalization vectors stay at full precision, 1.2 MB in total. Nothing in the container is fp16, and every one of the 36 layers costs exactly 72,351,744 bytes, 21.7 percent attention and 78.3 percent feed-forward.

The download is smaller than the artifact because the two lanes code differently. The ternary lane compresses losslessly to roughly 55 percent of its raw bytes, and the layers that silence hardest code tightest: layers 1 through 3 reach 0.516 where a typical layer sits near 0.550. The int8 embeddings hold at 88 percent. The shipped transport lands at 2.56 GB and expands to the byte-identical container.

the shipping container, area is bytes3.88 GB
input622 MB
output622 MB
ternary weight lane, 36 layers of 72.4 MB · 2.60 GBint8 embeddings · 1.24 GBscales, metadata, norms · 26 MB
ships tightestloosest · tile tint is the layer’s coded-transport ratio, 0.516 to 0.569
one of those 36 tiles, expanded by projection72.4 MB
q
k
v
o
gate
up
down
attention · 21.7%feed-forward · 78.3%

Every layer costs the same 72,351,744 bytes of weight lane, and the two embedding tables together cost more than seventeen layers.

Fig. 3The container drawn as area. Tile tint is each layer's coded-transport ratio, so the cheapest layers on the wire read lightest.

4. Training

Neutrino-1 8B was trained natively in its shipping format. There is no full-precision product model that was rounded afterward: the ternary representation is the medium the weights learned in, and the training methods that hold this quality at this depth are the lab’s unpublished work. The findings below are the part that travels.

Post-training ran as staged, single-axis behavioral campaigns: instruction following, tool calling, termination discipline, each stage graded against the full battery of every axis already installed. The staging exists because of a phenomenon we measured early and now design around: training pressure on one behavioral axis does not degrade the model uniformly. It degrades specific other axes, and which ones is an empirical property of each training diet, not of the model. One tool-calling stage in this lineage moved its tool-use score by twenty points while strict instruction following bled nine points on the same checkpoints and termination behavior improved. A mathematics-heavy diet collapsed tool calling instead. The damage chooses axes, so every stage has to watch all of them.

Protection is equally axis-specific. Folding an installed axis’s own training signal into a stage’s batches held that axis through the stage, and held only that axis: the nine-point instruction-following bleed fell to under half a point once the axis was represented, the tool-calling gain survived, and no axis absent from the mix was ever protected by accident. Dose behaves the same way. Tool-calling gains completed within roughly twenty-five optimization steps in every densely measured campaign, instruction following needed about fifty, and knowledge-heavy stages peaked mid-course and decayed past the peak. A dose plan copied from one axis to another is a category error.

Two more findings shaped the release. When a reward-driven stage plateaued, the cause was never a model ceiling: the model had exhausted its training material, corrective pressure faded, and further steps bought nothing that harder material did not. And a checkpoint that passes on the evaluation rig can still behave differently on a shipping runtime, so each stage’s winner is graded on the runtimes it ships on before it ships. Stages were accepted only when every installed axis held above preset floors. Several failed their floors and shipped nothing. The model that ships is the sequence of stages that held.

5. Evaluation

MMLU 72.1, five-shot, all 57 subjects, the full 14,042-question set. MMLU-Redux, the re-annotated subset, 67.8, run generatively with thinking off. IFEval 77.2 prompt-strict; the same run reads 80.2 instruction-strict and 76.3 prompt-loose. BFCL v3 68.9, macro-averaged over its thirteen categories.

GSM8K is scored twice, under both extraction rules the field uses, and the pair is more informative than either number. Flexible extraction takes the last number the model produced and reads 53.4. The stated rule accepts an answer only where the prompt asked for it, and reads 51.73: the arithmetic and the obedience are measured separately, and the gap between them is under two points. Both runs are zero-shot with no chain of thought, against the eight-shot chain-of-thought setting most published mathematics figures use.

The table below carries every model in the byte class on one measurement stack, with the same prompt format, shot count, extraction rule and generation cap on every side. Two cells are worth naming in advance. Requiring the answer in the stated form costs an instruction-tuned 16-bit rival almost everything it scored under the flexible rule, which is a formatting failure and not an arithmetic one.

How the weights were made
Neutrino-1 8BTernary, trained in it
Gemma-4-E4B16-bit, uncompressed
Llama-3.1-8B16-bit, uncompressed
Ternary-Bonsai-8BTernary, trained in it
Gemma-3n-E4B16-bit, uncompressed
AQLM 2-bit Llama-3-8B2-bit, after training
Download
Neutrino-1 8B2.56 GB
Gemma-4-E4B16.02 GB
Llama-3.1-8B16.06 GB
Ternary-Bonsai-8B2.18 GB
Gemma-3n-E4B15.70 GB
AQLM 2-bit Llama-3-8B4.08 GB
MMLUfive-shot
Neutrino-1 8B72.1
Gemma-4-E4B70.57
Llama-3.1-8B68.3
Ternary-Bonsai-8B65.75
Gemma-3n-E4B64.9zero-shot
AQLM 2-bit Llama-3-8B58.72
IFEvalprompt-strict
Neutrino-1 8B77.2
Gemma-4-E4B88.26our run, thinking off
Llama-3.1-8B80.4vendor, mean of four readings
Ternary-Bonsai-8B83.65our run; their card 81.8
Gemma-3n-E4B84.41external published run
AQLM 2-bit Llama-3-8Bnot published
BFCLv3, macro over 13 subsets
Neutrino-1 8B68.9
Gemma-4-E4Bnot published
Llama-3.1-8B76.1vendor, version unstated
Ternary-Bonsai-8B71.45our run; their card 73.9
Gemma-3n-E4Bnot published
AQLM 2-bit Llama-3-8Bnot published
GSM8K, stated format
Neutrino-1 8B51.73
Gemma-4-E4B1.00
Llama-3.1-8Bnot published
Ternary-Bonsai-8B39.67
Gemma-3n-E4Bnot published
AQLM 2-bit Llama-3-8Bnot published
GSM8K, flexible extraction
Neutrino-1 8B53.4
Gemma-4-E4B30.67
Llama-3.1-8B84.58-shot, with reasoning
Ternary-Bonsai-8B35.00our rule; card 91
Gemma-3n-E4B60.12external published run
AQLM 2-bit Llama-3-8B50.878-shot
Context windowtokens
Neutrino-1 8B40,960
Gemma-4-E4B131,072vendor card
Llama-3.1-8B131,072vendor card
Ternary-Bonsai-8B65,536vendor card
Gemma-3n-E4B32,768vendor card
AQLM 2-bit Llama-3-8B8,192inherits Llama-3
Decode, Apple laptoptok/s
Neutrino-1 8B33.7base M5
Gemma-4-E4B30community M4 Pro, 4-bit
Llama-3.1-8B32.0community M3 Max, llama.cpp
Ternary-Bonsai-8B49.0our run, base M5, MLX
Gemma-3n-E4Bvendor publishes no rate
AQLM 2-bit Llama-3-8Bno laptop runtime
Decode, one H100 80 GBtok/s
Neutrino-1 8B396
Gemma-4-E4Bnot published
Llama-3.1-8B158
Ternary-Bonsai-8Bnot published
Gemma-3n-E4Bnot published
AQLM 2-bit Llama-3-8Bnot published
Drafted decode, same machinetok/s
Neutrino-1 8B763
Gemma-4-E4Bno rate published
Llama-3.1-8B373
Ternary-Bonsai-8Bnone for the 8B
Gemma-3n-E4Bnot published
AQLM 2-bit Llama-3-8Bno drafting path
Runs in 16 GB of laptop memory
Neutrino-1 8BYes
Gemma-4-E4BNo at 16.02 GB
Llama-3.1-8BNo at 16.06 GB
Ternary-Bonsai-8BYes
Gemma-3n-E4BYesvendor targets laptops; PLE offload
AQLM 2-bit Llama-3-8BNo laptop runtime

Measured on standard public harnesses, July 2026. Byte counts are the whole artifact in decimal gigabytes. MMLU is five-shot everywhere except Gemma-3n-E4B, whose published figure is zero-shot. Our GSM8K is zero-shot with no chain of thought under two extraction rules: flexible takes the last number in the answer, stated requires the answer in the form the prompt asked for. Nobody else publishes a stated-format reading, so rival cards contribute only to the flexible row, and both of the ones that do are eight-shot. IFEval is prompt-level strict for every cell we measured; Llama-3.1-8B publishes one IFEval number that is the mean of its four prompt and instruction readings under strict and loose grading. BFCL is the thirteen-subset macro of version three; Llama-3.1-8B publishes a zero-shot BFCL accuracy without naming a version, so the two are not the same meter. The Ternary-Bonsai-8B and Gemma-4-E4B scores are our own runs of those checkpoints at settings identical to ours, Gemma-4-E4B from its base repository and with its reasoning mode off; where those runs disagree with the vendor card the cell prints the card figure beside ours. The Llama-3.1-8B figures are its published ones, as is the AQLM row. The two-bit rounded row is a published study of an 8B with no released artifact, so its bytes are a class figure. Not published means the vendor states no number and we hold none.

Fig. 4Six models, twelve axes, no empty cells. Rival columns carry every axis we could source, including the rows where the class is ahead of us; the full battery is on the model card.

Read down the byte row and the knowledge row together and the trade the class is built on comes apart. Every 16-bit artifact in the table buys its score with fifteen to sixteen gigabytes, and the two after-the-fact two-bit cuts buy their bytes with the score. Training in the shipping format is what breaks the trade, and the break is large enough to see as a shape rather than read as a number.

download, GB (log)MMLU
Neutrino2.56 GB72.1Llama-3.116.06 GB68.3Gemma-416.02 GB70.57Gemma-3n15.70 GB64.9Bonsai2.18 GB65.75AQLM 2-bit4.08 GB58.72

Six artifacts, each joined from its download to its MMLU: three 16-bit, two ternary, one rounded to 2-bit after training. Every rival line falls; the Neutrino-1 8B line is the only one that climbs.

Fig. 5Each line joins a model's download to its MMLU. One line climbs.

6. Tool use

The BFCL macro average is one number over thirteen separately scored suites, so the thirteen are published individually. Function composition against held signatures is the strongest block, 70.0 to 85.0 across simple, multiple, parallel, and parallel-multiple calls, and relevance detection sits alongside it at 77.1 to 80.0: the model declines to call a function nearly as reliably as it calls the right one. The live suites draw their schemas from real-world APIs collected in the wild, where argument names and nesting are nobody’s house style.

Held signatures
simple82.3
multiple83.5
parallel73.0
parallel multiple70.0
Relevance detection
irrelevance81.3
live relevance77.8
live irrelevance76.9
Live, real-world APIs
live simple61.6
live multiple52.0
live parallel56.3
live parallel multiple37.5
Other languages
javascript54.0
java43.0
2090

Scored subsets from the preceding run on one colour scale. The current independently measured macro is 68.9.

Fig. 6BFCL v3 by category, grouped by what each suite tests. The macro mean over the thirteen is 68.9.

7. Memory and decode

Decode is a bandwidth problem before it is a compute problem. Producing one token requires streaming essentially the whole model through the processor once: the 2.60 GB ternary lane, then the 622 MB output embedding to score the vocabulary. The ceiling on single-stream tokens per second is memory bandwidth divided by those bytes. Kernels decide how close a machine runs to its ceiling; only byte count moves the ceiling itself.

The clearest evidence is a pair of measurements on one laptop. A base-M5 MacBook decodes the optimized shipping artifact at 33.7tokens per second; the separately measured CPU-only path reaches 24.9 with the GPU idle. Both paths stream the same packed weights through one memory system, so the format’s job is to make each token cost fewer bytes. On an H100 80 GB the same artifact runs 396 tokens per second on the plain path.

The engine is separable from our weights, which makes the Apple number checkable against someone else’s model. Loading the public BitNet b1.58-2B4T ternary weights into our container and decoding them on a 16 GB Apple M5 reaches 102.4 tokens per second, against 89.0 from the reference bitnet.cpp build on the same machine in the same session, batteries and thermals shared. No published number for a ternary model on Apple silicon is higher than 102.4.

Weights are the flat cost; context is the growing one. With the 4:1 grouped-query cache, one token of context costs 147,456 bytes at 16-bit precision across the 36 layers, so 4,096 tokens of history hold 604 MB and the full 40,960-token range 6.0 GB against the constant 3.88 GB of weights. Ungrouped 32-head attention would multiply the cache by four and push the full-context total past 28 GB. Grouping is why the whole object, model plus maximal cache, stays under 10 GB.

resident memory, GB
481216
a 16 GB machineweights · 3.88 GB, constant16-bit KV cache9.92 GB total at 40,96032-bit KV cache(reference CPU runtime)4,096 ctx · 4.48 GB
016k32k40k
context length, tokens

Computed from the container’s attention geometry: 8 KV heads of 128 dimensions over 36 layers is 147,456 bytes per token of context at 16-bit precision.

Fig. 7Resident memory against context length, computed from the container's attention geometry.

8. Drafted decode

Drafted decode is a system of two models in one format. Neutrino-1 0.6B proposes a short run of tokens. The 8B scores the entire run in a single batched forward pass, one pass for up to seven positions instead of one pass per token. The engine keeps the longest prefix on which the two models agree exactly, takes the next token from the 8B’s own distribution, and repeats. Under greedy decoding this procedure cannot emit a token the 8B would not have produced alone, and the implementation is checked the same way: drafted path against plain path, token by token, 27,648 consecutive tokens with zero divergences.

Delivered speed follows acceptance, and acceptance follows the text. On an H100 80 GB the drafted path reaches 763 tokens per second on counting-style output against 396.7 plain, 500 on facts, 437 on code, 422 on prose, and 402 on chat. The spread is not tuning: on counting the 8B accepted every one of six drafted tokens on every verify pass, which emits about seven tokens per forward pass of the 8B.

The pairing also runs on a laptop. Both models load into one process on a 16 GB Apple M5 under a hard 6 GiB cap, peak at 4.3 GiB resident, and deliver 25.71 tokens per second on factual prompts against 22.00 undrafted in the same session, accepting 74 percent of drafted tokens. Six prompts came back token-identical with drafting on and off, which is the property that matters: on Apple silicon drafting changes the speed and never the text.

one verify cycle, end to end
  1. 01The 0.6B draftsOne to seven tokens, length chosen from recent acceptance.
  2. 02The 8B verifies in one passEvery drafted position scored in a single batched forward pass.
  3. 03The agreed prefix is keptThe longest run where both models chose the same token.
  4. 04The 8B emits the next tokenFrom its own distribution, then the loop restarts.

Factual prompts leave 5.0 drafted tokens alive per pass and need 86 passes for 512 tokens; code leaves 1.8 and needs 181.

certified delivered rate by content class, against 396.7 tok/s plain decode on an H100 80 GB
counting×1.92763.0 tok/s
facts×1.26500.1 tok/s
code×1.10436.6 tok/s
prose×1.06422.2 tok/s
chat×1.01401.8 tok/s
1.0×1.25×1.5×1.75×2.0×

Stage means come from the 2026-07-25 mechanics probe. The drafted path is certified exact on the shipping configuration: 27,648 consecutive tokens compared against plain decode with zero divergences.

Fig. 8The verify cycle and what it delivers per content class. Certified across 27,648 consecutive tokens.

Draft length is chosen per step rather than fixed, because the same draft model behaves differently on different text. Factual completions accept 96 to 99 percent of drafted tokens at every draft length tested, so the controller rides seven-token drafts there and the histogram piles up at the maximum. Elsewhere acceptance decays with length, and the controller reads recent acceptance and shortens the draft to one or two tokens, spending draft work only where it survives verification.

drafted tokens accepted by the 8B, percent
255075100
factsprose (technical)explanationexam-styleprose (story)codechat (factual)adversarial countingchat (open)
23456
draft length, tokens per verify pass

Nine prompt classes, one runtime, one draft model, 2026-07-25 probe. Factual text accepts long drafts almost losslessly, so the engine rides seven-token drafts there and shortens elsewhere.

Fig. 9Acceptance against draft length, nine prompt classes, one runtime and one draft model.

9. The small models

Neutrino-1 0.6B does two jobs. The first is drafting, and it is certified in that role rather than asserted: standing alone on an H100 80 GB it walks at 1,177 tokens per second, and paired with the 8B it produced 27,648 consecutive tokens with zero divergences from plain decode, carrying the 8B to 762.6 tokens per second on counting-class prompts with every one of six drafted tokens accepted on every verify pass. No published model of this size ships a bit-exact acceptance certificate for its drafted path.

The container is 596,049,920 parameters, 328 MB on disk and a 238 MB download, and it decodes at 225 tokens per second through the native binary on a 16 GB Apple M5, 201.2 through MLX inside 0.526 GiB of memory. It carries the 8B’s tokenizer, which is what makes the pairing composable: drafted tokens need no remapping between models. The vocabulary is the largest single object in the file at 47.5 percent of its bytes against 32.1 percent on the 8B, which is why the embeddings are tied. At this width the tokenizer is the model’s main expense.

The reference point for a format is the base model it was built from, at full precision, same parameter count, same harness. That reference is Qwen3-0.6B: 1.50 GB of bf16 weights, reading 60.82 on ARC-easy at zero-shot. The Neutrino container reads 53.45 from 238 MB, and it does that inside 0.526 GiB of process memory, just over a third of what the bf16 weights alone occupy.

87.9 percent of Qwen3-0.6B’s ARC-easy, at 6.3 times fewer bytes.

Neutrino-1 0.6BQwen3-0.6B, bf160.238 GBDownload1.50 GB0.328 GBOn disk1.50 GB596,049,920Parameters596,049,92053.45ARC-easy60.82

Both sides graded on our harness at zero-shot accuracy. Qwen3-0.6B is the base model this container was built from, and the Neutrino side is the shipping artifact.

Fig. 10Same 596,049,920 parameters, same harness, one eighth the precision.

Neutrino-1 0.6B-Chat is the same container finished for conversation, and the finishing is measurably small. The chat tune moved state occupancy by less than a tenth of a percentage point on every projection and left the tied embedding table byte-identical. Alignment at this scale is a rearrangement of ternary states inside the projections, not a rewrite of the model.

The chat model is graded on conversation and on the surfaces it ships on. Sentence fragments of the kind a person actually types get an answer instead of a request for clarification, factual prompts get the fact, absurd requests get a refusal rather than an agreement, and no reply carries chat-template scaffolding into the output. Stop discipline is measured on the compiled binary and on the MLX pack, because that is where a serve-time defect reaches a user, and the same container returns the same grades on both.

Decode rate

Neutrino-1 0.6B, single-stream greedy

225
tok/s, native binary on an Apple M5
201.2
tok/s, MLX on the same M5
0.53
GiB peak memory, MLX
1,177
tok/s drafting on an H100 80 GB

Conversation

Neutrino-1 0.6B-Chat, held-out prompts, shipping container

20/20
sentence fragments answered
30/30
factual prompts answered
0
absurd answers
0/5
chat-template leaks

Form and identity

Neutrino-1 0.6B-Chat, 100 held-out probes

8/8
identity probes held
1.000
well-formed replies
0.000
nonsense affirmation rate
0.000
parrot rate

Stop discipline

Neutrino-1 0.6B-Chat, on both shipping runtimes

0.885
termination, static C binary
0.045
loop rate, static C binary
0.85
termination, MLX pack
0.05
loop rate, MLX pack
Fig. 11The small models, graded on the shipping containers and the runtimes they ship on.

10. Deployment surfaces

The reference surface is the pip package: engine, loader, and chat front end in one wheel. The same repository carries prebuilt static binaries for macOS arm64 and Linux x86-64 that decode the container at native CPU speed with no Python in the path. Weights and engine version together; there is no build of one that does not match the other.

$ pip install fermion-research
$ fermion chat

The first run pulls the container and the native binary for the host, then the prompt opens. Later runs load from cache.

  • A local OpenAI-compatible serverfermion serve

    Serves at http://127.0.0.1:8000/v1. Point any OpenAI client at that base URL; the key can be any string.

  • Any of the three modelsfermion chat --model fermionresearch/Neutrino-0.6B-Chat

    --model takes a repository id or a path on disk. --backend native pins the compiled runtime instead of the torch path.

  • GGUF, through our llama.cpp forkllama-completion -m neutrino-8b-fv5.gguf -ngl 99

    Build the fork, then run the pack from the model repository. The CUDA build offloads all 36 layers.

  • MLX, on Apple siliconpython -m fermion_mlx --model neutrino-8b_v4.bin --mode chat --tokenizer .

    Run from the mlx/ folder of the model repository, after installing its requirements file.

Full engine documentation

zsh · fermion chat
$ pip install fermion-research$ fermion chatNeutrino-1 8B · 3.88 GB · loaded> how far away is the moon?The Moon orbits Earth at an average distance of about 384,400 km, roughly 1.3 light-seconds. The distance varies from around 363,000 km at perigee to 405,000 km at apogee.24.9 tok/s · Apple M5, CPU · 16 GB
Fig. 12fermion chat on a 16 GB MacBook (Apple M5), static capture; the rate line is the measured CPU-only figure.

For the llama.cpp ecosystem the release carries a GGUF pack and a public fork that adds the format as two tensor types. The CUDA build offloads all 36 layers: on an NVIDIA L4 the pack decodes at 30.7 tokens per second in 4.68 GiB of peak VRAM at 4,096 context, inside an 8 GB card. The CPU build is token-identical under greedy decoding against the container’s own full-precision expansion. An MLX pack serves Apple GPUs. Every pack is checked token for token against the shipping container before publication.

11. Availability

All three models are available now. Neutrino-1 8B ships as a single public repository holding the weights and the engine together, a 2.56 GB download. All three models ship as open weights under the Apache License 2.0, which permits commercial use, modification, fine-tuning, and redistribution. No waitlist, no gated preview.

Two research posts accompany this one: one on what survives when a model leaves floating point, and one on the engine.

More from the lab

All research