A retention-based language model built from scratch in C: O(N) training, O(1) inference
Project description
PointRetta
A retention-based language model, built from scratch in C — trainable and runnable directly from Python.
PointRetta replaces self-attention with a retention mechanism: O(N) training (fully parallelizable) and O(1) inference per token (fixed-size state, doesn't grow with context length — unlike attention's ever-expanding KV-cache).
Install
pip install pointretta
No external Python dependencies — the core engine is self-contained C, compiled into the extension at install time.
Quick Start
import pointretta
# Train a small model on your own text
loss = pointretta.train_and_save(
text=open("corpus.txt").read(),
output_path="model.pr",
dim=64, heads=4, head_dim=16, layers=4,
iters=500,
)
print(f"Final loss: {loss:.4f}")
# Load it back and generate
text = pointretta.load_and_generate("model.pr", prompt="once upon a time", max_tokens=50)
print(text)
API train_and_save(text, output_path, **kwargs) -> float Trains a byte-level BPE tokenizer on text, builds a retention-based model, trains it, and saves everything (architecture + tokenizer + weights) into a single .pr file. Returns the final training loss.
| Parameter | Default | Description |
|---|---|---|
| dim | 32 | Model dimension (must equal heads * head_dim) |
| heads | 04 | Number of retention heads |
| head_dim | 08 | Dimension per head |
| ffn_hidden | 64 | SwiGLU hidden dimension |
| layers | 02 | Number of layers |
| vocab_size | 280 | Target BPE vocabulary size |
| iters | 300 | Training iterations |
| lr | 0.05 | Learning rate (Adafactor) |
| window | 32 | Training window size (tokens) |
| decay_min / decay_max | 0.7 / 0.95 | Multi-scale retention decay range |
** load_and_generate(pr_path, prompt, max_tokens=20) -> str ** Loads a .pr file and greedily generates a continuation of prompt.
What Makes This Different
- No attention, no softmax in the core loop — retention uses a linear decay mechanism instead, which is what makes the O(1) recurrent inference form possible.
- Every core operation is validated — forward/backward equivalence, numerical gradient checking, and forward-parallel vs. forward-recurrent equivalence were all checked before this was trusted to work.
- Multi-scale decay — each attention head "forgets" at a different rate, so the model retains both short- and long-range information without attention's O(N) memory cost.
Native CLI & ASM Kernels
This PyPI package builds with portable C for maximum compatibility. For SIMD-accelerated (NEON/AVX2) native builds and the full CLI (build / train / delete), see the Github Repo.
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pointretta-0.1.1.tar.gz.
File metadata
- Download URL: pointretta-0.1.1.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ce36de64b6371f016690b524c1ad3159e80607700716dd4b097698d124b03ff
|
|
| MD5 |
4a97c7e58596aa4f7a94550c23939b3b
|
|
| BLAKE2b-256 |
b58d5e4b5dd2e989eb41024e697b03f8820b4d019beb0aee391b9dffcefec8c1
|