Model reference · open weights

amx-reasoning

Available as managed deployment LLMs gdiamos · community Text gen 1 variants 566 dl/mo

amx-reasoning is an open-weight language model from gdiamos. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.

Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.

What it is

Released bygdiamos
TypeLanguage models
TaskText gen
Parameters (lead)7M
Runs withpytorch
Released2026-09-07
Popularity566 downloads / month
LicenceOpen weights

About

What amx-reasoning is

A causal language model trained end to end on one CPU core --- a single Intel Emerald Rapids core, bf16 through AMX, OMP_NUM_THREADS=1. 3,315,552 active parameters per token, 7,492,448 stored.

The point of the project is not that a small model runs on a CPU. It is that the architecture is derived from a single-core roofline, that training is confined to the same core, and that at this scale the interesting behaviours show up much earlier in the token budget than we expected.

Paper: Outrageously Small Neural Networks: Emergent Basic Reasoning at 6,616 tok/sec on One Intel AMX Core, shipped here as paper.pdf. This checkpoint is the model behind its evaluation table, so the numbers below and the numbers in the paper are the same numbers.

Read the full model card

What it does

It answers questions about a passage you give it, in one or two words, and it stops. On held-out extractive QA it reaches 18.2% exact match and 23.2% F1, and on DROP specifically 25.0% EM against a 7.5% majority baseline.

That is a weak model by contemporary standards and a surprising one for its size. The paper's framing applies here too: what is interesting is not the absolute score but that a model with 3,315,552 active parameters, trained on one core, does passage-grounded retrieval at all --- and that its remaining failures are specific and nameable rather than general incompetence. It retrieves and compares; it cannot calculate.

Running it

AutoModelForCausalLM.from_pretrained will not work: the architecture is not one transformers knows --- chunked sliding-window attention interleaved with log-decay linear attention, and a tied readout. The model's own source ships here under m2r/, unmodified from the repository that trained it.

hf download gdiamos/amx-reasoning-v1-instruct --local-dir amx-reasoning-v1-instruct
cd amx-reasoning-v1-instruct && pip install -r requirements.txt && python example.py

example.py is the whole thing, and it is short. The two parts that are not optional:

from m2r.data.templates import EOT, render_prompt

# 1. THE PROMPT FORMAT the model was tuned on, imported rather than copied so
#    it cannot drift. It already emits BOS -- do not prepend one.
prompt = render_prompt([f"{{question}}\n\n{{passage}}"], thinking=False)
ids = tok.encode(prompt, add_special_tokens=False).ids

# 2. THE VOCABULARY MASK from generation.json. See "The vocabulary mask" below;
#    without it this model answers " ballo" to a fifth of DROP questions.
BAN = torch.tensor(json.loads(open("generation.json").read())["banned_token_ids"])
logits[BAN] = -1e30
next_id = int(logits.argmax())        # greedy: answers are one or two words

Decode greedily and stop on EOT. Sampling is the right call for the base model and the wrong one here --- this checkpoint was tuned to emit a short span and halt.

What is in this repo

file
model.safetensorsthe weights, bf16
generation.jsondecode settings, and the vocabulary mask described below
config.jsonevery architecture field, machine readable
training_config.yamlthe run's config, and what example.py loads
tokenizer.jsona tokenizers BPE; Tokenizer.from_file loads it alone
m2r/the model source, imported by example.py
example.pyload and generate, correctly
paper.pdfthe write-up, when shipped with this export
LICENSEApache 2.0

Architecture

d_model256
layers6
layer typeslin, swa, swa, lin, swa, lin
mixerssliding-window attention (window 256), log-decay linear attention (d_state 32)
MLP width640
vocabulary16384
readouttied to the embedding
parameters7,492,448 stored, 3,315,552 active per token

Attention is confined to document boundaries: a training window packs many documents, and without isolation sliding-window attention reaches into its neighbours while linear attention carries state across the whole window.

The shape is deliberate. One AMX core sustains roughly 2,231 GF/s of bf16 matrix multiply at these dimensions but pays a 1.4--1.5 microsecond floor per GEMM dispatch, so every design choice here is about issuing few large matrix multiplies rather than many small ones.

Lineage

The token count for this checkpoint is only its last stage. Three runs, each starting from the previous one's weights:

stagetokenswhat it added
pretraining4,910,000,000a base model, well calibrated teacher-forced (top-1 43.4%), that cannot generate: a repetition basin within ~5 free-running tokens
instruction tuning250,000,000stopping. Stop-on-EOT 0% -> 52.5%, Dolly F1 0.3% -> 12.8%
QA tuning (this checkpoint)250,000,000passage-grounded answering and abstention

About 5.4B tokens in total, at roughly 1,481 tokens per active parameter --- far past compute-optimal, deliberately, because the target is inference cost rather than training cost. Applying the QA stage on top of the instruction-tuned model rather than directly on the base was worth +1.3 EM, +2.2 F1, and 8.7 points less over-abstention.

Evaluation

Held-out extractive QA, greedy decoding, generation.json mask applied. EM and F1 are over answerable rows only. Over-abstention is refusing when the answer was present; missed abstention is answering when it was not.

sourcenEMF1over-abstainmissed abstain
DROP20025.0%27.3%0.0%--
SQuAD v220018.1%24.2%31.2%62.9%
Dolly791.3%11.1%30.4%--
all47918.2%23.2%16.1%62.9%

Examples

Real greedy outputs, two per source, chosen to show a success and the characteristic failure rather than a highlight reel.

DROP --- retrieval and comparison work; arithmetic does not.

Q Which field g

From the published model card. Full card on the HuggingFace links in the sidebar.

Using it via the API

Call it like any OpenAI endpoint

Once AxForge deploys amx-reasoning for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (amx-reasoning below is illustrative; you get the exact model name on deployment.)

$ curl -sS https://api.axforge.ai/v1/chat/completions \
  -H "Authorization: Bearer $AXFORGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"amx-reasoning","messages":[{"role":"user","content":"Hello"}]}'

Create an account — your API key is available in the console. 3M free tokens every 30 days with every new account.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms