| Crates.io | aprender |
| lib.rs | aprender |
| version | 0.24.1 |
| created_at | 2025-11-18 11:18:39.73307+00 |
| updated_at | 2026-01-19 22:02:42.000807+00 |
| description | Next-generation machine learning library in pure Rust |
| homepage | |
| repository | https://github.com/paiml/aprender |
| max_upload_size | |
| id | 1938262 |
| size | 21,442,231 |
Aprender provides implementations of classical machine learning algorithms optimized for performance and safety. The library requires no external dependencies beyond the Rust standard library and offers seamless compilation to WebAssembly.
.apr format with encryption, signatures, and zero-copy loadingAdd aprender to your Cargo.toml:
[dependencies]
aprender = "0.13"
[dependencies]
aprender = { version = "0.13", features = ["format-encryption", "hf-hub-integration"] }
| Feature | Description |
|---|---|
format-encryption |
AES-256-GCM encryption for model files |
format-signing |
Ed25519 digital signatures |
format-compression |
Zstd compression |
hf-hub-integration |
Hugging Face Hub push/pull support |
gpu |
GPU acceleration via wgpu |
use aprender::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Training data
let x = Matrix::from_vec(4, 2, vec![
1.0, 2.0,
2.0, 3.0,
3.0, 4.0,
4.0, 5.0,
])?;
let y = Vector::from_slice(&[3.0, 5.0, 7.0, 9.0]);
// Train model
let mut model = LinearRegression::new();
model.fit(&x, &y)?;
// Evaluate
println!("R² = {:.4}", model.score(&x, &y));
Ok(())
}
| Algorithm | Description |
|---|---|
LinearRegression |
Ordinary least squares regression |
LogisticRegression |
Binary and multiclass classification |
DecisionTreeClassifier |
GINI-based decision trees |
RandomForestClassifier |
Bootstrap aggregating ensemble |
GradientBoostingClassifier |
Adaptive boosting with residual learning |
NaiveBayes |
Gaussian naive Bayes classifier |
KNeighborsClassifier |
k-nearest neighbors |
LinearSVM |
Support vector machine with hinge loss |
| Algorithm | Description |
|---|---|
KMeans |
k-means++ initialization with Lloyd's algorithm |
DBSCAN |
Density-based spatial clustering |
PCA |
Principal component analysis |
IsolationForest |
Anomaly detection |
Format LLM conversations for different model families with automatic template detection:
use aprender::text::chat_template::{
auto_detect_template, ChatMessage, ChatTemplateEngine
};
// Auto-detect template from model name
let template = auto_detect_template("Qwen2-0.5B-Instruct");
let messages = vec![
ChatMessage::system("You are a helpful assistant."),
ChatMessage::user("Hello!"),
];
let formatted = template.format_conversation(&messages)?;
Supported Formats:
| Format | Models | System Prompt |
|---|---|---|
| ChatML | Qwen2, Yi, OpenHermes | Yes |
| Llama2 | TinyLlama, Vicuna, LLaMA 2 | Yes |
| Mistral | Mistral-7B, Mixtral | No |
| Phi | Phi-2, Phi-3 | Yes |
| Alpaca | Alpaca, Guanaco | Yes |
| Raw | Fallback | Passthrough |
| Custom | Any (Jinja2) | Configurable |
See examples/chat_template.rs for complete usage.
Verification: All templates are 100% tested via bashrs probar playbooks. See docs/model-verification-checklist.md for coverage status.
| Crate | Description |
|---|---|
aprender-tsp |
TSP solver with CLI and .apr model persistence |
aprender-shell |
AI-powered shell completion trained on your history |
| Resource | Description |
|---|---|
| apr-cookbook | 50+ idiomatic Rust examples for .apr format, WASM deployment, and SIMD acceleration |
The .apr format provides secure, efficient model serialization:
use aprender::format::{save, load, ModelType, SaveOptions};
// Save with encryption
save(&model, ModelType::LinearRegression, "model.apr",
SaveOptions::default()
.with_encryption("password")
.with_compression(true))?;
// Load
let model: LinearRegression = load("model.apr", ModelType::LinearRegression)?;
The apr CLI provides comprehensive model operations for the .apr format.
cargo install apr-cli
| Command | Description |
|---|---|
apr run |
Run model directly (auto-download, cache, execute) |
apr serve |
Start inference server (REST API, streaming, metrics) |
apr compile |
Build standalone executable with embedded model |
apr inspect |
Inspect model metadata, vocab, and structure |
apr debug |
Simple debugging output ("drama" mode available) |
apr validate |
Validate model integrity and quality |
apr diff |
Compare two models |
apr tensors |
List tensor names, shapes, and statistics |
apr trace |
Layer-by-layer trace analysis |
apr lint |
Check for best practices and conventions |
apr explain |
Explain errors, architecture, and tensors |
apr canary |
Regression testing via tensor statistics |
apr export |
Export to SafeTensors, GGUF formats |
apr import |
Import from HuggingFace, SafeTensors |
apr convert |
Quantization (int8, int4, fp16) and optimization |
apr merge |
Merge models (average, weighted strategies) |
apr tui |
Interactive terminal UI |
apr probar |
Export for visual testing |
# Run model directly (auto-downloads if needed)
apr run hf://openai/whisper-tiny --input audio.wav
# Build standalone executable with embedded model
apr compile whisper.apr --quantize int8 -o whisper-cli
# Validate model integrity
apr validate model.apr --quality
# Convert with quantization
apr convert model.safetensors --quantize int8 -o model-int8.apr
# Lint for best practices
apr lint model.apr
# Export to GGUF (llama.cpp compatible)
apr export model.apr --format gguf -o model.gguf
# Merge models (ensemble)
apr merge model1.apr model2.apr --strategy average -o ensemble.apr
# Create regression test
apr canary create model.apr --input ref.wav --output canary.json
# Check model against canary
apr canary check optimized.apr --canary canary.json
The apr CLI achieves 2.93x Ollama performance on Qwen2.5-Coder-1.5B with GPU acceleration:
# Interactive chat
apr chat qwen2.5-coder-1.5b-q4_k_m.gguf
# Single-shot generation
apr run qwen2.5-coder-1.5b-q4_k_m.gguf --prompt "Write hello world in Rust"
# Production server (OpenAI-compatible API)
apr serve qwen2.5-coder-1.5b-q4_k_m.gguf --port 8080
| Mode | Throughput | vs Ollama | Status |
|---|---|---|---|
| GPU Batched (M=16) | 851.8 tok/s | 2.93x | Pass |
| GPU Batched (M=8) | 770.0 tok/s | 2.65x | Pass |
| GPU Single | 120.1 tok/s | 1.0x | Pass |
| CPU | 25.3 tok/s | 1.69x | Pass |
See docs/specifications/qwen2.5-coder-showcase-demo.md for full benchmark methodology.
| Resource | Link |
|---|---|
| API Reference | docs.rs/aprender |
| User Guide | paiml.github.io/aprender |
| Examples | examples/ |
| APR Format Spec | docs/specifications/APR-SPEC.md |
We welcome contributions. Please ensure your changes pass the test suite:
cargo test --all-features
cargo clippy --all-targets -- -D warnings
cargo fmt --check
See CONTRIBUTING.md for guidelines.
Aprender is distributed under the MIT License. See LICENSE for details.
Built by Paiml