Quick Start
v0.34.0 — MODEL-2 §88 stack-existence-proof shipped end-to-end.
paiml/albor-370m-v1is the first model trained with the pure-Rust Sovereign AI Stack and published to HuggingFace Hub with all three usage paths verified:apr run(Rust),AutoModelForCausalLM.from_pretrained(HF Transformers), andllama-cli(llama.cpp). The publish workflow is now codified in SPEC-HF-PUBLISH-001 so future model publishes follow a repeatable 12-file integration plus a 13-tier crates.io cascade (seescripts/cascade-publish.sh). See the v0.34.0 release notes for the PMAT-690 P3-C-prep defect cascade that motivated the spec.v0.33.0 — MODEL-1 SHIP % = 100%. SHIP-007 (GPU dispatch on the canonical 7B Q4K teacher) was LIVE-DISCHARGED. See the v0.33.0 release notes and SPEC-SHIP-TWO-001 §65–§75 for the cascade detail.
What is Aprender?
A complete ML framework in pure Rust. One cargo install, one apr binary,
the full model lifecycle — inference, training, quantization, profiling,
publishing — all backed by YAML provable contracts that fail CI on drift.
At HEAD
| Metric | Count | Source of truth |
|---|---|---|
| Workspace crates | 80 workspace crates | ls crates/ |
| Provable contracts | 1151 provable contracts | find contracts/ -name '*.yaml' |
| CLI commands | 103 CLI commands | apr --help |
These numbers are enforced by contracts/readme-claims-v1.yaml.
Drift between this table and live repo state fails bash scripts/check_readme_claims.sh
→ see FALSIFY-README-001..004.
Command surface
| Stage | Commands |
|---|---|
| Inference | apr run, apr chat, apr serve |
| Training | apr finetune, apr train, apr pretrain, apr distill |
| Model ops | apr convert, apr quantize, apr merge, apr export, apr compile |
| Inspection | apr inspect, apr validate, apr tensors, apr diff, apr trace, apr lint |
| Profiling | apr profile, apr bench, apr qa |
| Registry | apr pull, apr list, apr rm, apr publish, apr registry |
| GPU | apr gpu, apr parity, apr ptx |
| Observability | apr tui, apr monitor, apr cbtop |
Cookbook
End-to-end recipes (data prep → train → quantize → publish → serve) live in
paiml/apr-cookbook — 341 worked
examples with local book/src/ walkthroughs.
Install
A Qwen story
Eight beats, one narrative, every core command group. Anchored on the Qwen
series so the story scales from a 494-MB safetensors model to a 30 B-parameter
MoE GGUF. Every beat is a falsifier in
contracts/qwen-story-v1.yaml; the runnable
form is scripts/qwen-story.sh; nightly cron is
.github/workflows/qwen-story-daily.yml;
the dogfood gate is /dogfood Gate 18.
# Reproduce locally (uses ~/models cache; ~3-5 min on RTX 4090):
Beat 1 — Discover (Registry)
Beat 2 — Trust (QA gates)
Beat 3 — Explore (Inspection)
Beat 4 — Adapt (Model ops)
Beat 5 — Use (Inference)
Beat 6 — Serve (REST API)
# → {"choices":[{"message":{"content":"2 + 2 equals 4."}}],...}
Beat 7 — Operate (Profiling)
Beat 8 — Scale (MoE introspection)
Publish (separate flow)
# Publish a derived model to HuggingFace Hub (see SPEC-HF-PUBLISH-001 for the 12-file pipeline)
The bug-hunt layer. When run with
PMAT_HUNT=1(default), each beat emits a manifest of high-risk untested code in the command modules it just exercised:-- pmat bug-hunt manifest (run chat code) -- gap crates/apr-cli/src/commands/run.rs:resolve_model_alias (impact=42.3) churn crates/apr-cli/src/commands/code.rs:dispatch_agent (commits=11) fault crates/aprender-serve/src/api/cuda_chat_backend.rs:try_qwen3_moe (unwrap,panic)The nightly cron opens an issue when this manifest grows, so untested branches in command handlers can't accumulate quietly. See
contracts/qwen-story-v1.yaml§pmat_audit_per_beat.
Publishing a model? Read SPEC-HF-PUBLISH-001. It documents the 12-file minimum (.apr/.gguf/.safetensors/model.safetensors alias/config/tokenizer/LICENSE/etc.), the YAML front-matter schema, the three-path verification protocol, and the HF API gotchas (NDJSON commits, LFS batch for 5MB-5GB, empty
model-indexrejected, Q4_K K%256==0). First applied 2026-05-18 for paiml/albor-370m-v1.
Library usage
[]
= "0.34"
use LinearRegression;
use Estimator;
let model = new;
model.fit?;
let predictions = model.predict?;
Algorithms: Linear/Logistic Regression, Decision Trees, Random Forest, GBM, Naive Bayes, KNN, SVM, K-Means, PCA, ARIMA, ICA, GLMs, graph algorithms, Bayesian inference, text + audio processing.
Architecture
Monorepo, flat crates/aprender-* layout (same pattern as
Polars,
Burn,
Nushell):
paiml/aprender/
├── Cargo.toml # Workspace root + `cargo install aprender`
├── crates/
│ ├── aprender-core/ # ML library (use aprender::*)
│ ├── apr-cli/ # CLI logic (103 subcommands)
│ ├── aprender-compute/ # SIMD/GPU compute kernels
│ ├── aprender-gpu/ # CUDA PTX
│ ├── aprender-serve/ # Inference server
│ ├── aprender-train/ # Training loops
│ ├── aprender-orchestrate/ # Agents + RAG
│ ├── aprender-contracts/ # Provable contracts engine
│ ├── aprender-profile/ # Profiling
│ ├── aprender-db/ aprender-graph/ aprender-rag/
│ └── ... (80 crates total)
├── contracts/ # 1151 provable YAML contracts
└── book/ # mdBook documentation
Performance
| Model | Format | Speed | Hardware |
|---|---|---|---|
| Qwen2.5-Coder 1.5B | Q4_K | 40+ tok/s | CPU (AVX2) |
| Qwen2.5-Coder 7B | Q4_K | 225+ tok/s | RTX 4090 |
| TinyLlama 1.1B | Q4_0 | 17 tok/s | CPU (APR format) |
Reproduced from candle-vs-apr and ground-truth-apr-ludwig.
Provable contracts
Every CLI command and kernel is bound to a YAML contract with equations, preconditions, postconditions, and falsification tests:
equations:
validate_exit_code:
formula: exit_code = if score < 50 then 5 else 0
invariants:
- score < 50 implies exit_code != 0
falsification_tests:
- id: FALSIFY-CLI-001
prediction: apr validate bad-model.apr exits non-zero
1153 contracts across inference, training, quantization, attention, FFN, tokenization, model formats, CLI safety — and this README itself.
Migration from old crates
| Old | New | Status |
|---|---|---|
trueno = "0.18" |
aprender-compute = "0.33" |
Shim available |
entrenar = "0.7" |
aprender-train = "0.33" |
Shim available |
realizar = "0.8" |
aprender-serve = "0.33" |
Shim available |
batuta = "0.7" |
aprender-orchestrate = "0.33" |
Shim available |
Old repositories are archived. All development happens here.
Contributing
License
MIT