Model reference · open weights
baguettotron is an open-weight language model from PleIAs. baguettotron-600m (BF16) weighs 1.2 GB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the PleIAs/baguettotron-600m model card, 2026-10-09
What it is
| Released by | PleIAs |
|---|---|
| Released | 2026-07-27 |
| Parameters | 608M |
| VRAM | 1.2 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory |
|---|---|---|---|
| 2K each | |||
| RTX 3060 12 GB | 97 | all 2K | 11.6 GB |
| RTX 4060 Ti 16 GB | 135 | all 2K | 15.4 GB |
| RTX 3090 24 GB | 215 | all 2K | 23.4 GB |
| RTX 4090 24 GB | 214 | all 2K | 23.4 GB |
| RTX 5090 32 GB | 290 | all 2K | 31.0 GB |
| L40S 48 GB | 419 | all 2K | 44.0 GB |
| A100 80 GB | 759 | all 2K | 78.2 GB |
| H100 80 GB | 728 | all 2K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 884 | all 2K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 1000+ | all 2K | 107 GB |
| H200 141 GB | 1000+ | all 2K | 138 GB |
| B200 180 GB | 1000+ | all 2K | 176 GB |
| Requests at once | 2K tokens each |
|---|---|
| 1 | 1.9 GB |
| 5 | 2.3 GB |
| 8 | 2.6 GB |
| 16 | 3.4 GB |
| 32 | 5.0 GB |
| 64 | 8.2 GB |
One card, with vLLM's small-card settings.
From the model card
Baguettotron-600M is a 0.6B-parameter reasoning model trained from scratch on 158B tokens of SYNTH, a fully synthetic corpus amplified from 58,698 Wikipedia articles. It is the main reference model of our NeurIPS 2026 paper, It's All Training: A Fully Synthetic Single-Stage Recipe for LLMs.
Baguettotron-600M is a standard dense decoder (Llama/Qwen-style) and loads natively in transformers and vLLM (LlamaForCausalLM, no remote code).
| Parameters | 608M (incl. 67M tied embeddings) |
| Layers | 48 |
| Hidden size | 1024 |
| Attention | GQA, 16 query / 4 KV heads, head dim 64 |
| MLP | SwiGLU, intermediate size 2816 |
| Position encoding | RoPE, θ = 10,000 |
| Norm | RMSNorm (pre-norm), ε = 1e-6 |
| Embeddings | Tied input/output |
| Vocabulary | 65,536 (Pleias tokenizer) |
| Context length | 2,048 tokens |
torchtitan with FSDP, ~52.6 h, ~30% MFUAll scores are from the paper. Each model is prompted in its native format; Baguettotron models get no system prompt and have \n seeded after the assistant turn.
| Model | Training tokens | MCQ (22 tasks) | Open-ended (8 tasks) | FActScore (macro) |
|---|---|---|---|---|
| Baguettotron-600M | 158B | 42.2 | 24.3 | 41.7 |
| Baguettotron-MoE (13B / 1B active) | 50B | 39.6 | 23.8 | 46.3 |
| Baguettotron-350M | 200B | 36.3 | 16.0 | 32.4 |
| Qwen3-0.6B | ~36T | 46.9 | 25.0 | 31.6 |
| LFM2.5-350M | 28T | 42.3 | 20.8 | 22.0 |
| SmolLM2-360M-Instruct | 4T | 22.8 | 21.6 | 26.6 |
| Gemma-3-270M-IT | 2T | 22.5 | 14.9 | 19.4 |
The model was trained on ChatML with a `` block and no system prompt. The bundled chat template opens the assistant turn with \n:
What do you know about the Treaty of Westphalia?
The model writes its reasoning, closes it with , answers, and ends the turn with .
RAG. Pass sources inside the user turn. The answer then cites them with [quote]:
{question}
Reasoning notation. Traces use SYNTH's compact stenographic style (→ derivation, ↺ backtracking, ∴ conclusion, …). The confidence markers ● (high), ◐ (partial) and ○ (low) are informative: on traces dominated by uncertain markers, FActScore drops from 0.44 to 0.40, and the model commits to ~15–20% fewer facts. See the Baguettotron-350M card for the full notation.
vllm serve PleIAs/baguettotron-600m --reasoning-parser deepseek_r1
--reasoning-parser deepseek_r1 moves the `` trace into a separate reasoning field. Tested with vLLM 0.24.0.
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
resp = client.chat.completions.create(
model="PleIAs/baguettotron-600m",
messages=[{"role": "user", "content": "What do you know about the Treaty of Westphalia?"}],
temperature=0.1,
top_p=0.95,
presence_penalty=0.1,
max_tokens=1536,
)
print(resp.choices[0].message.reasoning) # trace
print(resp.choices[0].message.content) # answer
Recommended sampling: temperature=0.1, top_p=0.95, presence_penalty=0.1. Prompt and generation share the 2,048-token context, so keep max_tokens below 2,048 minus the prompt length.
from transformers import AutoModelForCausalLM, AutoTokenizer
repo = "PleIAs/baguettotron-600m"
tokenizer = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, dtype="bfloat16", device_map="auto")
messages = [{"role": "user", "content": "What do you know about the Treaty of Westphalia?"}]
inputs = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, return_tensors="pt"
).to(model.device)
out = model.generate(inputs, max_new_tokens=1536, do_sample=True, temperature=0.1, top_p=0.95)
print(tokenizer.decode(out[0, inputs.shape[1]:]))
@inproceedings{langlais2026itsalltraining,
title = {It's All Training: A Fully Synthetic Single-Stage Recipe for {LLMs}},
author = {Langlais, Pierre-Carl and Delobelle, Pieter and DeQuoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.