beetle


Open source · Apache-2.0 · Python
CPU-first Zero downloads Reproducible

Train in ~15s on a laptop
HuggingFace-compatible checkpoints
Built for BabyLM-scale research

What is beetle?

beetle is a minimal, transparent framework for training tiny language models end-to-end — with zero downloads and a reproducible baseline a newcomer can run on a laptop CPU in a couple of minutes. No GPU, no dataset hunt, no hidden state.

It ships a family of architectures, a bilingual data and tokenizer pipeline, continual-learning extensions, and a HuggingFace-compatible checkpoint format. There are two entry points:

  • beetlelm-toy — the newcomer path: trains the real PicoDecoder on a tiny in-repo byte corpus on CPU, no downloads, light dependencies. Great for kicking the tires and CI.
  • beetlelm-train — the full research trainer (Lightning, HuggingFace datasets, the architecture zoo, continual-learning modules) for multi-GPU clusters.

Checkpoints from both are standard HuggingFace and reload with from_pretrained.

Try the quickstart Browse the models

The paper

The framework, model suite and psycholinguistic evaluations, in full.

EMNLP · Camera-ready

Beetle: A Bilingual Model Suite for Modelling Second-Language Processing

1University of Cambridge  ·  2EleutherAI  ·  3University of Oxford  ·  Correspondence: sas245@cam.ac.uk

Abstract Bilingual language models (LMs) offer a controlled setting for studying how training conditions shape second-language (L2) behaviour, but prior work typically varies exposure structure, scale, and architecture at once, making it difficult to attribute effects to any single factor. We introduce Beetle, a controlled LM pretraining framework in which tokeniser, target language, training budget, and exposure structure are each independently manipulable. Using Beetle, we train and release 285 bilingual and 45 monolingual open-source LMs with rich checkpoints across a range of exposure schedules, data scales and first languages (L1s). Evaluating on human bilingual and second-language reading-time prediction and grammaticality judgement, we find that staged, temporally structured curricula consistently improve alignment with language-learner reading time compared to balanced bilingual training — with the largest gains at smaller data scales and for typologically closer language pairs.

The framework & why these models exist

Beetle lets you manipulate pretraining conditions one at a time — that is the rationale for the whole suite.

Beetle framework and the B1-B5 exposure curricula
Figure 1. Beetle is an open-source LM pretraining framework used to study bilingual and multilingual language acquisition under tightly controlled conditions. Each facet shows a structured exposure curriculum (B1–B5) used to pretrain bilingual models that vary in the relative per-language data distribution across training steps.

Controlled manipulation of pretraining

Beetle is a language-model pretraining framework that allows controlled manipulation of pretraining conditions. We use it to isolate variables that prior L2-LM work manipulated separately: L2 onset timing, L2 exposure ratio, and continual-learning regularisation. Language exposure in bilingual pretraining is modelled as changing continuously over the course of training, so we can represent gradual or abrupt transitions between languages, periodic bursts of exposure, and clustered, context-dependent input. Holding architecture, tokeniser and data source fixed makes the effect of L1, curriculum and data scale attributable to a single factor.

Architecture

The default backbone, PicoDecoder (Diehl Martinez et al., 2025), is a 125M-parameter LLaMA-style causal decoder — a contemporary LLaMA-class stack (RoPE, SwiGLU, RMSNorm, grouped-query attention) rather than the GPT-2-style decoder of B-GPT.

Params
125M
Layers
14
d_model
768
Heads
12 attn / 1 KV (GQA)
Positions
RoPE
Activation
SwiGLU
Norm
RMSNorm
Seq. length
512

Tokenisation

Tokenisation is a modular element of the framework, so it can be used to study the benefits of vocabulary overlap and different schemes (SentencePiece, UnigramLM, SuperBPE, BPE) and equal compression.

Beetle models use a BPE tokenizer (HuggingFace tokenizers) with a 50K vocabulary, trained with equal compression so both languages share the same compression rate — each model sees the same amount of information per language in each sequence.

Browse tokenizers

Exposure curricula. We compare five curricula that manipulate how L2 input is distributed over training. Four differ mainly in when L2 is introduced and how the L1:L2 mixture then changes; B4 instead keeps L2 available throughout but concentrates it into discrete episodes. We report the total proportion of training tokens in L2, since curricula that introduce L2 at different points provide different amounts of it. Models are named by curriculum (b1b5), scale and language pair (e.g. nld-eng).

B1
Balanced

Constant 50:50 mixture throughout; L2 available from the start. L2 = 50%.

B2
Simultaneous

L1 only, then a sigmoid to 50:50 at the halfway point. L2 = 25%.

B3
Sequential

L1 only, then a sigmoid to an L2-dominant 33:67 mixture. L2 = 33.5%.

B4
Classroom

80:20 overall, L2 clustered into intermittent episodes (available throughout). L2 = 20%.

B5
Late

L1 only until 80% of training, then a sigmoid to 50:50 — an L1-attrition setting. L2 = 10%.

Languages, transfer & monolingual baselines

We release 285 bilingual + 45 monolingual models over 21 L1s, all with English as L2 (for reading-time and CEFR data). At 100M FineWeb we cover:

DanishGermanGreekEstonianBasqueFilipinoFinnishHebrewHindiIcelandicItalianJapaneseKoreanDutchPolishRussianSpanishTurkishChinese

Cross-lingual transfer is measured against matched monolingual baselines (German, Dutch, Chinese at all scales; Russian, Italian, Turkish, Basque at 100M/2B) and against massively multilingual LLMs — Apertus 8B, XGLM 4.5B, Llama 3.1 1B, Gemma 3 270M, Qwen 3 0.6B. Larger scales focus on 9 L1s; BabyBabelLM covers German, Chinese, Dutch.

Learning dynamics & cross-lingual transfer

Because checkpoints are dense near phase boundaries, Beetle exposes when cross-lingual transfer emerges and how it depends on typological similarity, exposure timing and mixture. Sentence-level NLL trajectories on parallel FLORES-200 text track L1 and L2 across training, before and after L2 introduction.

FLORES sentence NLL trajectories per model
Figure 3. FLORES Sentence NLL. Each facet is one model; curves report mean sentence-level NLL in bits on 1,012 parallel FLORES-200 devtest sentences (lower is better), with solid lines for L1 and dashed lines for English. The vertical dashed line marks L2 English introduction.

How to use a Beetle model

Every model, tokenizer and dataset is standard HuggingFace. If you use one, cite the paper and note the curriculum, scale and language pair you loaded — that is what the model name encodes.

python
from transformers import AutoModelForCausalLM, AutoTokenizer

# B1 (balanced) Dutch-English, 100M FineWeb
name = "Beetle-FineWeb-100M/beetle-bilingual-balanced-b1-fineweb-nld-eng"
model = AutoModelForCausalLM.from_pretrained(name)
tok   = AutoTokenizer.from_pretrained("Beetle-Data/tokenizer-nl-en")

Motivation & related work

Beetle builds on prior bilingual / L2-LM and acquisition work, but differs by holding architecture, tokeniser and data fixed while varying only exposure structure — with a LLaMA-class backbone, fine-grained early checkpoints, matched monolingual controls, and 21 typologically diverse L1s.

Matusevych et al., 2013Yadavalli et al., 2023Oba et al., 2023Aoyama & Schneider, 2024Arnett et al., 2025Constantinescu et al., 2025Feng et al., 2026

Quickstart

1 · Install

bash — full stack
$ git clone https://github.com/beetlelm/beetlelm.git
$ cd beetlelm
$ pip install -e .
bash — light (CPU quickstart only)
$ pip install "torch>=2.5.1" transformers numpy pyyaml click
$ pip install -e . --no-deps

Prefer one command? ./install.sh --toy does a light install plus a smoke train.

2 · Train (CPU, zero downloads)

bash
$ beetlelm-toy --config_path configs/tiny_cpu.yaml
python
from beetlelm.toy import train
results = train("configs/tiny_cpu.yaml")
print(results["final_loss"], results["checkpoint_dir"])

# reload the checkpoint — standard HuggingFace
from beetlelm.pico_decoder.pico_decoder import PicoDecoderHF
model = PicoDecoderHF.from_pretrained("runs/tiny_cpu")

Point data.train_file at any UTF-8 text file to train on your own corpus, or change one variable with --seed, --max_steps, --d_model.

Tutorials

Step-by-step guides — from a first CPU run to loading a pretrained beetle checkpoint.

01

Install beetle

Clone the repo and install in editable mode. The light install pulls only what the CPU quickstart needs.

git clone https://github.com/beetlelm/beetlelm.git
cd beetlelm
pip install -e .
Full install options
02

Train your first model

Train a real PicoDecoder end-to-end on CPU with zero downloads — done in a couple of minutes.

beetlelm-toy \
  --config_path configs/tiny_cpu.yaml
Open the trainer
03

Train on your own text

Point data.train_file at any UTF-8 file, and tune the run with a couple of flags.

beetlelm-toy \
  --config_path configs/tiny_cpu.yaml \
  --seed 42 --max_steps 500 --d_model 128
Prepare a corpus
04

Load a pretrained model

Every beetle checkpoint is standard HuggingFace — reload it with from_pretrained.

from transformers import AutoModelForCausalLM
m = AutoModelForCausalLM.from_pretrained(
  "Beetle-HumanScale/beetle-monolingual-humanscale-eng")
Browse the models
05

Use a beetle tokenizer

Bilingual and human-scale BPE tokenizers are published on the Hub and load the same way.

from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained(
  "Beetle-Data/tokenizer-nl-en")
print(tok("Hello, beetle!"))
All tokenizers
06

Analyse & evaluate

Score learning dynamics and BLiMP-style minimal-pair accuracy, or play in Colab — no code required.

# minimal-pair evaluation
from beetle_analyze import blimp_accuracy
blimp_accuracy("runs/tiny_cpu")
Try it in Colab

Psycholinguistic evaluation

We evaluate the models against human second-language reading times, grammaticality and structural priming.

Cross-lingual structural priming

Curr.FineWeb (24B)HumanScale
diffpdiffp
Bernolet (genitive)
B11.051.00041.369<.0001
B20.991.0371.095<.0001
B30.969.0511.216<.0001
B41.252.00080.565.005
B51.075.00030.571<.0001
Table 1. Cross-lingual structural priming for the 24B FineWeb and HumanScale models: surprisal difference (nats) between congruent and incongruent primes, with permutation p-values.

Reproduce it in Colab

Open the reading-time, grammaticality and priming analyses in Google Colab — no local setup.

German structural priming

RQ A — cross-lingual structural priming for German–English Beetle models (Bernolet genitive & dative).

Priming across scale

RQ B — how cross-lingual structural priming develops across 100M / 2B / 24B token budgets and over training checkpoints.

Multilingual priming

RQ C — structural priming across multiple L1s, comparing curricula and directionality (L1→L2 vs. L2→L1).

BLiMP grammaticality (human-scale)

Reproduce the human-scale BLiMP grammatical-judgement evaluations (P2/P3) for the Beetle model suite.

FLORES sentence NLL

Sentence-level NLL trajectories on parallel FLORES-200 devtest sentences for the 100M model variants.

Interpretability

Hierarchical / layerwise interpretability analyses from the paper’s learning-dynamics appendices.

CPU smoke test

A minimal CPU notebook to check the analysis stack end-to-end before running the GPU evaluations.

Models, tokenizers & datasets

Every beetle model, tokenizer and dataset — published open on the Hugging Face Hub.

The suite released with the paper: 285 bilingual and 45 monolingual models across curricula (b1b5), scales (100M/2B/24B, humanscale) and language pairs. See the framework for the rationale, curricula and architecture; each model card on the Hub documents its curriculum, scale and language pair.

English BLiMP accuracy across 15 L1s and 5 curricula
Grammatical competence of the released models. Beetle English BLiMP accuracy for 100M FineWeb models across 15 L1s and 5 exposure curricula. At 100M tokens, balanced exposure (B1) gives the strongest English grammar, and every bilingual curriculum beats its L1-monolingual control.

Type to filter across every repository below. Each chip links to its page on Hugging Face.

No repositories match your filter.

Beetle-Data

Bilingual data pipeline: BPE tokenizers, raw & pre-tokenized corpora.

Open on HF
326 repositories

BabyBabel corpora 99

BabyBabel-eng-100M BabyBabel-fas-66M BabyBabel-deu-30M BabyBabel-eng-66M BabyBabel-fra-80M BabyBabel-ind-100M BabyBabel-ind-70M BabyBabel-ind-80M BabyBabel-ukr-20M BabyBabel-ukr-70M BabyBabel-zho-50M BabyBabel-deu-20M BabyBabel-deu-70M BabyBabel-ind-30M BabyBabel-ukr-100M BabyBabel-ukr-33M BabyBabel-zho-60M BabyBabel-deu-100M BabyBabel-deu-10M BabyBabel-deu-33M BabyBabel-eng-40M BabyBabel-fas-30M BabyBabel-fra-100M BabyBabel-fra-20M BabyBabel-fra-33M BabyBabel-ind-40M BabyBabel-ukr-10M BabyBabel-bul-50M BabyBabel-bul-70M BabyBabel-bul-80M BabyBabel-eng-60M BabyBabel-fas-40M BabyBabel-fra-10M BabyBabel-fra-30M BabyBabel-ind-10M BabyBabel-ind-20M BabyBabel-ind-60M BabyBabel-nld-70M BabyBabel-ukr-30M BabyBabel-ukr-80M BabyBabel-zho-100M BabyBabel-zho-40M BabyBabel-bul-100M BabyBabel-deu-66M BabyBabel-deu-80M BabyBabel-eng-10M BabyBabel-fas-50M BabyBabel-fra-70M BabyBabel-ind-33M BabyBabel-nld-100M BabyBabel-nld-40M BabyBabel-nld-80M BabyBabel-zho-20M BabyBabel-zho-66M BabyBabel-eng-20M BabyBabel-eng-50M BabyBabel-fas-60M BabyBabel-nld-50M BabyBabel-zho-70M BabyBabel-bul-40M BabyBabel-bul-60M BabyBabel-deu-50M BabyBabel-nld-33M BabyBabel-ukr-66M BabyBabel-zho-10M BabyBabel-zho-30M BabyBabel-bul-20M BabyBabel-bul-30M BabyBabel-eng-30M BabyBabel-fas-20M BabyBabel-fas-80M BabyBabel-fra-50M BabyBabel-nld-10M BabyBabel-ukr-40M BabyBabel-bul-33M BabyBabel-eng-80M BabyBabel-fas-100M BabyBabel-fas-10M BabyBabel-fas-70M BabyBabel-fra-40M BabyBabel-fra-60M BabyBabel-fra-66M BabyBabel-ind-50M BabyBabel-nld-60M BabyBabel-nld-66M BabyBabel-ukr-60M BabyBabel-zho-80M BabyBabel-bul-10M BabyBabel-bul-66M BabyBabel-deu-60M BabyBabel-eng-70M BabyBabel-nld-20M BabyBabel-nld-30M BabyBabel-ukr-50M BabyBabel-zho-33M BabyBabel-deu-40M BabyBabel-fas-33M BabyBabel-ind-66M BabyBabel-eng-33M

Pre-tokenized shards 108

it-2B-pretok en-for-hi-2B-pretok es-2B-pretok hi-2B-pretok zh-2B-pretok de-2B-pretok en-for-eu-2B-pretok en-for-it-2B-pretok ru-2B-pretok tr-2B-pretok en-for-ru-2B-pretok en-for-nl-2B-pretok tl-2B-pretok en-for-tr-2B-pretok ko-2B-pretok en-for-is-2B-pretok en-for-ar-2B-pretok en-for-ro-2B-pretok nl-2B-pretok en-for-pl-2B-pretok en-for-ko-2B-pretok sv-2B-pretok en-for-eu-100M-pretok en-for-hi-100M-pretok en-for-zh-2B-pretok tr-100M-pretok en-for-it-100M-pretok es-100M-pretok eu-100M-pretok eu-2B-pretok en-for-tr-100M-pretok ro-2B-pretok tl-100M-pretok pl-2B-pretok hi-100M-pretok en-for-zh-100M-pretok en-for-tl-100M-pretok ru-100M-pretok en-for-ru-100M-pretok zh-100M-pretok en-for-pl-100M-pretok no-2B-pretok de-100M-pretok it-100M-pretok no-100M-pretok pl-100M-pretok en-for-de-100M-pretok fi-100M-pretok is-100M-pretok en-for-nl-100M-pretok en-for-he-100M-pretok en-for-tl-2B-pretok he-100M-pretok en-for-is-100M-pretok el-2B-pretok en-for-el-2B-pretok el-100M-pretok fi-2B-pretok en-for-da-2B-pretok ja-2B-pretok en-for-ca-100M-pretok en-for-el-100M-pretok en-for-et-2B-pretok et-100M-pretok en-for-he-2B-pretok he-2B-pretok cs-2B-pretok da-100M-pretok en-for-et-100M-pretok en-for-ja-100M-pretok en-for-ko-100M-pretok en-for-no-100M-pretok en-for-ta-2B-pretok ca-2B-pretok en-for-ca-2B-pretok en-for-da-100M-pretok en-for-es-100M-pretok en-for-sv-2B-pretok en-for-ta-100M-pretok et-2B-pretok is-2B-pretok ta-2B-pretok ar-100M-pretok en-for-cs-100M-pretok en-for-cs-2B-pretok en-for-de-2B-pretok en-for-es-2B-pretok en-for-ja-2B-pretok en-for-no-2B-pretok en-for-sv-100M-pretok nl-100M-pretok ro-100M-pretok sr-100M-pretok sv-100M-pretok ar-2B-pretok ca-100M-pretok da-2B-pretok en-for-fi-100M-pretok en-for-fi-2B-pretok en-for-ro-100M-pretok en-for-sr-100M-pretok en-for-sr-2B-pretok sr-2B-pretok cs-100M-pretok en-for-ar-100M-pretok ja-100M-pretok ko-100M-pretok ta-100M-pretok

FineWeb corpora 1

Beetle-HumanScale

Human-scale (100M-word) tokenizers, corpora & trained beetle models.

Open on HF
163 repositories

Bilingual & continual-learning models 27

beetle-bilingual-balanced-b1-humanscale-nld-eng beetle-bilingual-l2-50-simultaneous-b2-humanscale-nld-eng beetle-bilingual-l2-50-sequential-33-67-b3-humanscale-nld-eng beetle-bilingual-l2-50-sequential-0-100-b3-humanscale-nld-eng beetle-bilingual-l2-50-classroom-20-b4-humanscale-nld-eng beetle-bilingual-l2-50-sequential-33-67-b3-humanscale-nld-eng-seed97 beetle-bilingual-l2-50-simultaneous-b2-humanscale-deu-eng beetle-bilingual-l2-80-late-b5-humanscale-nld-eng beetle-bilingual-l2-50-simultaneous-b2-humanscale-zho-eng beetle-bilingual-balanced-b1-humanscale-deu-eng beetle-bilingual-l2-50-classroom-20-b4-humanscale-deu-eng beetle-bilingual-l2-50-simultaneous-b2-humanscale-nld-eng-seed13 beetle-bilingual-l2-80-late-b5-humanscale-deu-eng beetle-bilingual-l2-50-simultaneous-b2-humanscale-nld-eng-seed97 beetle-bilingual-l2-50-simultaneous-b2-humanscale-nld-eng-seed42 beetle-bilingual-l2-50-sequential-33-67-b3-humanscale-deu-eng beetle-bilingual-l2-50-sequential-33-67-b3-humanscale-nld-eng-seed13 beetle-bilingual-l2-50-sequential-33-67-b3-humanscale-zho-eng beetle-bilingual-l2-50-sequential-33-67-b3-humanscale-nld-eng-seed42 beetle-bilingual-l2-80-late-b5-humanscale-zho-eng beetle-bilingual-l2-50-sequential-33-67-b3-humanscale-nld-eng-perlang-safe beetle-bilingual-balanced-b1-humanscale-nld-eng-episodic beetle-bilingual-l2-50-simultaneous-b2-humanscale-nld-eng-ewc-l20 beetle-bilingual-l2-50-simultaneous-b2-humanscale-nld-eng-lamol-l20 beetle-bilingual-l2-50-simultaneous-b2-humanscale-nld-eng-lr-b2 beetle-bilingual-balanced-b1-humanscale-zho-eng beetle-bilingual-l2-50-classroom-20-b4-humanscale-zho-eng

Beetle-FineWeb-100M

Beetle models trained on the 100M-token FineWeb slice.

Open on HF
188 repositories

Bilingual & continual-learning models 161

beetle-bilingual-tiso0-iid-humanscale-nld-eng-seed13 beetle-bilingual-tiso0-iid-humanscale-nld-eng-seed42 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-heb-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-nld-eng beetle-bilingual-tiso0-iid-humanscale-nld-eng-seed97 beetle-bilingual-tiso0-iid-humanscale-nld-eng-seed7 beetle-bilingual-balanced-b1-fineweb-100m-dan-eng beetle-bilingual-tiso3-block-humanscale-nld-eng-seed42 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-isl-eng-1xa100 beetle-bilingual-tiso1-smooth-humanscale-nld-eng-seed42 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-dan-eng beetle-bilingual-tiso3-block-humanscale-nld-eng-seed13 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-nld-eng beetle-bilingual-l2-80-late-b5-fineweb-100m-isl-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-dan-eng beetle-bilingual-tiso0-iid-humanscale-nld-eng-seed23 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-dan-eng beetle-bilingual-balanced-b1-fineweb-100m-nld-eng beetle-bilingual-l2-80-late-b5-fineweb-100m-dan-eng beetle-bilingual-tiso3-block-humanscale-nld-eng-seed97 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-heb-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-nld-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-heb-eng beetle-bilingual-tiso1-smooth-humanscale-nld-eng-seed97 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-tur-eng beetle-bilingual-tiso1-smooth-humanscale-nld-eng-seed13 beetle-bilingual-tiso2-burst-humanscale-nld-eng-seed97 beetle-bilingual-tiso2-burst-humanscale-nld-eng-seed42 beetle-bilingual-tiso3-block-humanscale-nld-eng-seed23 beetle-bilingual-tiso1-smooth-humanscale-nld-eng-seed23 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-est-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-spa-eng-1xa100 beetle-bilingual-tiso3-block-humanscale-nld-eng-seed7 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-ell-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-deu-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-est-eng-1xa100 beetle-bilingual-tiso2-burst-humanscale-nld-eng-seed13 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-ell-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-ita-eng beetle-bilingual-tiso4-shuffled-humanscale-nld-eng-seed13 beetle-bilingual-tiso4-shuffled-humanscale-nld-eng-seed42 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-spa-eng-1xa100 beetle-bilingual-tiso1-smooth-humanscale-nld-eng-seed7 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-isl-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-ell-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-hin-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-ita-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-rus-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-tur-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-fin-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-spa-eng-1xa100 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-fil-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-fin-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-deu-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-hin-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-fin-eng-1xa100 beetle-bilingual-tiso2-burst-humanscale-nld-eng-seed23 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-est-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-rus-eng beetle-bilingual-l2-80-late-b5-fineweb-100m-est-eng-1xa100 beetle-bilingual-l2-80-late-b5-fineweb-100m-ell-eng-1xa100 beetle-bilingual-tiso4-shuffled-humanscale-nld-eng-seed23 beetle-bilingual-tiso4-shuffled-humanscale-nld-eng-seed7 beetle-bilingual-tiso4-shuffled-humanscale-nld-eng-seed97 beetle-bilingual-l2-80-late-b5-fineweb-100m-fin-eng-1xa100 beetle-bilingual-tiso2-burst-humanscale-nld-eng-seed7 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-nld-eng-safe beetle-bilingual-l2-80-late-b5-fineweb-100m-fil-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-100m-est-eng-1xa100 beetle-bilingual-l2-80-late-b5-fineweb-100m-heb-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-pol-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-rus-eng-1xa100 beetle-bilingual-tiso0-iid-humanscale-deu-eng-seed42 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-pol-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-deu-eng-1xa100 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-tur-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-100m-ita-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-hin-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-100m-deu-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-ita-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-100m-spa-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-nld-eng-ewc beetle-bilingual-l2-80-late-b5-fineweb-100m-ita-eng-1xa100 beetle-bilingual-tiso0-iid-p33-humanscale-nld-eng-seed42 beetle-bilingual-balanced-b1-fineweb-100m-heb-eng beetle-bilingual-balanced-b1-fineweb-100m-ell-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-100m-hin-eng beetle-bilingual-balanced-b1-fineweb-100m-rus-eng beetle-bilingual-l2-80-late-b5-fineweb-100m-hin-eng-1xa100 beetle-bilingual-tiso0-iid-p33-humanscale-nld-eng-seed13 beetle-bilingual-tiso0-iid-p33-humanscale-nld-eng-seed97 beetle-bilingual-balanced-b1-fineweb-100m-fin-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-100m-tur-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-eus-eng beetle-bilingual-tiso0-iid-humanscale-deu-eng-seed13 beetle-bilingual-l2-80-late-b5-fineweb-100m-deu-eng-1xa100 beetle-bilingual-tiso0-iid-humanscale-zho-eng-seed42 beetle-bilingual-tiso3-block-p33-humanscale-nld-eng-seed42 beetle-bilingual-l2-80-late-b5-fineweb-100m-nld-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-eus-eng beetle-bilingual-tiso3-block-humanscale-deu-eng-seed42 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-pol-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-100m-zho-eng-1xa100 beetle-bilingual-tiso3-block-p33-humanscale-nld-eng-seed97 beetle-bilingual-tiso3-block-p33-humanscale-nld-eng-seed13 beetle-bilingual-tiso3-block-humanscale-zho-eng-seed42 beetle-bilingual-balanced-b1-fineweb-100m-pol-eng beetle-bilingual-tiso0-iid-humanscale-zho-eng-seed13 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-zho-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-zho-eng-1xa100 beetle-bilingual-l2-80-late-b5-fineweb-100m-pol-eng-1xa100 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-eus-eng-1xa100 beetle-bilingual-l2-80-late-b5-fineweb-100m-zho-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-zho-eng-1xa100 beetle-bilingual-l2-80-late-b5-fineweb-100m-eus-eng-1xa100 beetle-bilingual-tiso0-iid-humanscale-deu-eng-seed97 beetle-bilingual-balanced-b1-fineweb-100m-eus-eng beetle-bilingual-l2-80-late-b5-fineweb-100m-spa-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-jpn-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-100m-kor-eng-1xa100 beetle-bilingual-tiso2-burst-humanscale-zho-eng-seed42 beetle-bilingual-tiso4-shuffled-humanscale-zho-eng-seed42 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-jpn-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-kor-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-100m-isl-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-isl-eng-1xa100 beetle-bilingual-tiso0-iid-humanscale-zho-eng-seed97 beetle-bilingual-tiso1-smooth-humanscale-zho-eng-seed42 beetle-bilingual-tiso3-block-humanscale-deu-eng-seed13 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-jpn-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-kor-eng-1xa100 beetle-bilingual-tiso1-smooth-humanscale-deu-eng-seed42 beetle-bilingual-l2-80-late-b5-fineweb-100m-kor-eng-1xa100 beetle-bilingual-tiso4-shuffled-humanscale-deu-eng-seed42 beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-kor-eng-1xa100 beetle-bilingual-l2-80-late-b5-fineweb-100m-jpn-eng-1xa100 beetle-bilingual-tiso2-burst-humanscale-deu-eng-seed42 beetle-bilingual-tiso3-block-humanscale-zho-eng-seed13 beetle-bilingual-balanced-b1-fineweb-100m-jpn-eng-1xa100 beetle-bilingual-l2-80-late-b5-fineweb-100m-rus-eng-1xa100 beetle-bilingual-l2-80-late-b5-fineweb-100m-tur-eng-1xa100 beetle-bilingual-tiso3-block-humanscale-zho-eng-seed97 beetle-bilingual-tiso3-block-humanscale-deu-eng-seed97 beetle-bilingual-balanced-b1-fineweb-100m-fil-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-nld-eng-lamol beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-fil-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-fil-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-nld-eng-alibi beetle-bilingual-l2-80-late-b5-fineweb-100m-nld-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-heb-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-zho-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-nld-eng-pre-pretrain beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-zho-eng beetle-bilingual-balanced-b1-fineweb-100m-zho-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-100m-zho-eng beetle-bilingual-l2-80-late-b5-fineweb-100m-zho-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-nld-eng-layer-growth beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-nld-eng-maml beetle-bilingual-balanced-b1-fineweb-100m-arb-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-100m-arb-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-100m-arb-eng-1xa100

Beetle-FineWeb-2B

Beetle models trained on the 2B-token FineWeb slice.

Open on HF
61 repositories

Bilingual & continual-learning models 51

beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-nld-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-zho-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-rus-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-zho-eng beetle-bilingual-balanced-b1-fineweb-2b-zho-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-rus-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-nld-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-hin-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-ita-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-deu-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-pol-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-pol-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-ita-eng-1xa100 beetle-bilingual-l2-80-late-b5-fineweb-2b-hin-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-2b-rus-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-deu-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-hin-eng beetle-bilingual-balanced-b1-fineweb-2b-rus-eng-1xa100 beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-tur-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-tur-eng-1xa100 beetle-bilingual-l2-50-classroom-20-b4-fineweb-2b-tur-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-2b-zho-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-2b-ita-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-2b-hin-eng beetle-bilingual-l2-80-late-b5-fineweb-2b-ita-eng beetle-bilingual-l2-80-late-b5-fineweb-2b-tur-eng beetle-bilingual-l2-80-late-b5-fineweb-2b-zho-eng beetle-bilingual-l2-80-late-b5-fineweb-2b-rus-eng beetle-bilingual-balanced-b1-fineweb-2b-deu-eng beetle-bilingual-balanced-b1-fineweb-2b-ita-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-2b-nld-eng beetle-bilingual-balanced-b1-fineweb-2b-pol-eng beetle-bilingual-balanced-b1-fineweb-2b-hin-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-2b-tur-eng-1xa100 beetle-bilingual-l2-50-classroom-20-b4-fineweb-2b-nld-eng beetle-bilingual-l2-80-late-b5-fineweb-2b-pol-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-2b-pol-eng beetle-bilingual-l2-80-late-b5-fineweb-2b-deu-eng beetle-bilingual-l2-80-late-b5-fineweb-2b-nld-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-2b-deu-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-hin-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-2b-eus-eng beetle-bilingual-l2-80-late-b5-fineweb-2b-eus-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-eus-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-2b-eus-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-eus-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-2b-eus-eng-1xa100 beetle-bilingual-balanced-b1-fineweb-2b-eus-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-eus-eng-1xa100 beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-arb-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-2b-kor-eng

Beetle-FineWeb2-24B

Beetle models trained on FineWeb2 (24B tokens).

Open on HF
43 repositories

Bilingual & continual-learning models 43

beetle-bilingual-balanced-b1-fineweb-spa-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-spa-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-spa-eng beetle-bilingual-l2-80-late-b5-fineweb-spa-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-zho-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-rus-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-spa-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-rus-eng beetle-bilingual-balanced-b1-fineweb-rus-eng beetle-bilingual-b3-fineweb-24b-zho-eng-ewc beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-ita-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-zho-eng beetle-bilingual-b3-fineweb-24b-deu-eng-ewc beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-deu-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-tur-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-hin-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-ita-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-hin-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-tur-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-rus-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-tur-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-zho-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-ita-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-hin-eng beetle-bilingual-l2-80-late-b5-fineweb-ita-eng beetle-bilingual-l2-80-late-b5-fineweb-hin-eng beetle-bilingual-l2-50-sequential-33-67-b3-fineweb-pol-eng beetle-bilingual-l2-50-simultaneous-b2-fineweb-pol-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-deu-eng beetle-bilingual-balanced-b1-fineweb-zho-eng beetle-bilingual-l2-80-late-b5-fineweb-deu-eng beetle-bilingual-balanced-b1-fineweb-hin-eng beetle-bilingual-balanced-b1-fineweb-tur-eng beetle-bilingual-balanced-b1-fineweb-ita-eng beetle-bilingual-l2-80-late-b5-fineweb-zho-eng beetle-bilingual-l2-80-late-b5-fineweb-rus-eng beetle-bilingual-l2-50-classroom-20-b4-fineweb-pol-eng beetle-bilingual-l2-80-late-b5-fineweb-tur-eng beetle-bilingual-balanced-b1-fineweb-pol-eng beetle-bilingual-l2-80-late-b5-fineweb-pol-eng beetle-bilingual-b3-fineweb-24b-deu-eng-lamol beetle-bilingual-b3-fineweb-24b-400m-deu-eng beetle-bilingual-b3-fineweb-24b-zho-eng-sim-replay

The beetle ecosystem

Four small, reproducible repositories that fit together end-to-end.

Why beetle

Zero downloads

The toy path trains on an in-repo byte corpus. No dataset hunt, no network, works offline and in CI.

Reproducible

Deterministic on CPU given the seed. Expected numbers are committed as baselines you can diff against.

Transparent

Everything is driven by a readable YAML config. Comprehensive checkpoints for learning-dynamics research.

Scales up

Graduate from the toy trainer to Lightning, HF datasets, the architecture zoo, and continual learning.

Cite beetle

If beetle is useful in your research, please cite the paper:

@inproceedings{salhan2026beetle,
  title     = {Beetle: A Bilingual Model Suite for Modelling
               Second-Language Processing},
  author    = {Salhan, Suchir and Arnett, Catherine and
               Michaelov, James A. and Buttery, Paula},
  booktitle = {Proceedings of EMNLP},
  year      = {2026},
  url       = {https://beetlelm.github.io/}
}

Get involved & contact

beetle is open source and welcomes issues, pull requests, and questions.

Acknowledgements

The Beetle framework and models were trained by: