aprender 0.25.1

Next-generation machine learning library in pure Rust
Documentation

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.

Table of Contents

Features

  • Pure Rust — Zero C/C++ dependencies, memory-safe, thread-safe by default
  • SIMD Acceleration — Vectorized operations via trueno backend
  • WebAssembly Ready — Compile to WASM for browser and edge deployment
  • Native Model Format.apr format with encryption, signatures, and zero-copy loading
  • Interoperability — Export to SafeTensors and GGUF formats

Installation

Add aprender to your Cargo.toml:

[dependencies]
aprender = "0.25"

Optional Features

[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

Quick Start

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(())
}

Algorithms

Supervised Learning

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

Unsupervised Learning

Algorithm Description
KMeans k-means++ initialization with Lloyd's algorithm
DBSCAN Density-based spatial clustering
PCA Principal component analysis
IsolationForest Anomaly detection

Additional Modules

  • Graph Analysis — PageRank, betweenness centrality, community detection
  • Time Series — ARIMA forecasting
  • Text Processing — Tokenization, TF-IDF, stemming, chat templates
  • Neural Networks — Sequential models, transformers, mixture of experts
  • Metaheuristics — ACO, Tabu Search, DE, PSO, GA, CMA-ES

Chat Templates

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.

Related Crates

Crate Description
aprender-tsp TSP solver with CLI and .apr model persistence
aprender-shell AI-powered shell completion trained on your history

Resources

Resource Description
apr-cookbook 50+ idiomatic Rust examples for .apr format, WASM deployment, and SIMD acceleration

Model Persistence

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)?;

Format Capabilities

  • Security — AES-256-GCM encryption, Ed25519 signatures, X25519 key exchange
  • Performance — Memory-mapped loading, 600x faster than standard deserialization
  • Integrity — CRC32 checksums with automatic corruption detection
  • Commercial — License blocks, watermarking, buyer-specific encryption

APR CLI Tool

The apr CLI provides comprehensive model operations for the .apr format.

Installation

cargo install apr-cli

Commands

Command Description
apr run Run model directly (auto-download, cache, execute)
apr serve Start inference server (REST API, streaming, metrics)
apr chat Interactive chat with language models
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 pull Download and cache model from HuggingFace (Ollama-style UX)
apr list List cached models
apr rm Remove model from cache
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
apr tree Model architecture tree view
apr hex Hex dump tensor data
apr flow Data flow visualization
apr bench Benchmark throughput (spec H12: >= 10 tok/s)
apr eval Evaluate model perplexity (spec H13: PPL <= 20)
apr profile Deep profiling with Roofline analysis
apr qa Falsifiable QA checklist for model releases
apr showcase Qwen2.5-Coder showcase demo
apr check Model self-test: 10-stage pipeline integrity check
apr publish Publish model to HuggingFace Hub
apr cbtop ComputeBrick pipeline monitor
apr compare-hf Compare APR model against HuggingFace source

Quick Examples

# Run model directly (auto-downloads if needed)
apr run hf://openai/whisper-tiny --input audio.wav

# Download and cache models (Ollama-style UX)
apr pull hf://Qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF -o ./models/
apr list  # List cached models

# 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

# Publish to HuggingFace Hub
apr publish ./model-dir/ org/model-name --license mit

Showcase: Qwen2.5-Coder Inference

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

Benchmark Results (2026-01-18)

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.

QA & Testing

The project includes comprehensive QA infrastructure for model validation:

# Run full 21-cell QA matrix (modality × format × backend)
cargo run --example qa_run -- --full-matrix

# Run QA falsification suite (Popperian methodology)
cargo run --example qa_falsify

# Single modality test with Ollama comparison
cargo run --example qa_run -- --modality serve --backend cpu --format gguf --with-ollama

QA Matrix Coverage:

  • Modalities: run, chat, serve
  • Formats: GGUF, SafeTensors, APR
  • Backends: CPU, GPU
  • Features: Hang detection (60s), garbage output detection, answer verification

See examples/qa_run.rs and examples/qa_falsify.rs for implementation.

Documentation

Resource Link
API Reference docs.rs/aprender
User Guide paiml.github.io/aprender
Examples examples/
APR Format Spec docs/specifications/APR-SPEC.md
QA Protocol docs/specifications/qa-showcase-methodology.md

Contributing

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.

License

Aprender is distributed under the MIT License. See LICENSE for details.