MagicMindNet
MagicMindNet (pip install magicmindnet) is a beginner-friendly Python AI library — import magicmindnet as ai — backed by a from-scratch Rust core. Train transformer chatbots, classifiers, and toy diffusion models locally; load Hub / GGUF checkpoints; serve an OpenAI-compatible API.
pip install magicmindnet
# optional: Hugging Face / ModelScope / Diffusers backends
pip install "magicmindnet[hub]"
import magicmindnet as ai
data = ai.DatasetQA(data=[
{"input": "hi", "output": "hello there!"},
{"input": "how are you?", "output": "doing great, thanks!"},
])
bot = ai.Chatbot(vocab_size=512, n_layer=2, d_model=64, seed=42)
bot.train(data, epochs=5, verbose=True) # prints per-epoch loss, returns loss history
print(bot.chat("hi"))
bot.save("my_bot.mmn")
bot = ai.load("my_bot.mmn") # loads any MagicMindNet checkpoint
# Universal hub: HF / ModelScope / Ollama / local
model = ai.from_pretrained("./my_bot.mmn")
print(model.generate("hi", max_new_tokens=8))
CLI after install: mmn-eval smoke · mmn-serve --model my_bot.mmn
Under the hood: custom tensors and autograd, AdamW + Muon hybrid optimizers, KV-cache generation with modern sampling (top-p/top-k/min-p, penalties, Mirostat, typical_p), BPE/unigram tokenizers, RoPE/learned/sinusoidal PE, GQA, vision-prefix multimodal, RL + SPIN, strict checkpoint IO, and global format interop (GGUF / PyTorch / NumPy / TF / ONNX / …).
Docs: getting started · docs site (charts & benchmarks) · hub · feature parity · PyPI
Table of contents
- Quick start
- Architecture
- Features at a glance
- Installation & development
- Python API overview
- Checkpoints & strict IO
- Training & examples
- Testing & coverage
- CUDA
- Project layout
- Documentation index
- Milestones
- License
Quick start
Requires: Python 3.12+ (wheels on PyPI). Building from source also needs Rust.
pip install magicmindnet
python -c "import magicmindnet as ai; print(ai.__version__)"
python examples/pip_quickstart.py # if you cloned the repo
mmn-eval smoke
From source / contributors (editable + full gate):
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
maturin develop --release
python examples/hello_ai.py
bash scripts/verify_gate.sh # Windows: .\scripts\verify_gate.ps1
Everything is also available function-style for scripting pipelines:
data = ai.DatasetQA(file="qa.json", user_row="input", ai_row="output")
bot = ai.Chatbot(autoset="sub-100M")
cfg = ai.TrainConfig(epochs=1, batch_size=4, cuda=False, optimizer="hybrid")
losses = ai.Train(bot, data, cfg) # same engine as bot.train(...)
ai.export(bot, "safetensors", "bot.mmn")
Learned position embeddings (opt-in; adds pos_embed to checkpoints):
bot = ai.Chatbot(vocab_size=512, n_layer=2, d_model=64, use_learned_pos_embed=True, max_seq_len=128)
See docs/position_encoding_coverage.md, examples/learned_pos_embed_roundtrip.py, and examples/rope_roundtrip.py.
Feature parity (llama.cpp sampling, Ollama stream/embed, ChatML, cosine LR): see docs/feature_parity.md.
Classification:
ds = ai.DatasetClassification(data=[
{"text": "sunny warm", "label": "nice"},
{"text": "rainy cold", "label": "gloomy"},
])
clf = ai.Classifier.from_classification(ds, input_dim=64, seed=42)
clf.train(ds, epochs=20)
print(clf.predict_label("sunny warm")) # -> "nice"
clf.save("classifier.mmn")
Architecture
flowchart TB
subgraph python [Python API - magicmindnet]
Datasets[Datasets QA/Corpus/Classification/Image]
Models[Chatbot / Classifier / Diffusion]
Train[Train / TrainClassifier / RL / SPIN]
IO[export / import / merge / quantize / limit]
end
subgraph rust [Rust workspace]
Core[mmn-core tensor + autograd]
NN[mmn-nn layers]
ModelsR[mmn-models]
TrainR[mmn-train]
IO_R[mmn-io checkpoints]
Optim[mmn-optim AdamW + Muon]
Data[mmn-data + ChatXML]
CUDA[mmn-cuda optional GEMM]
end
python -->|PyO3 mmn-py| rust
Core --> NN --> ModelsR --> TrainR
IO --> IO_R
Train --> TrainR
Train --> Optim
Datasets --> Data
| Crate | Role |
|---|---|
mmn-core |
Tensor, CPU ops, autograd tape, CE / embedding backward |
mmn-nn |
Linear, LayerNorm, GELU, transformer block pieces |
mmn-models |
Chatbot, Classifier, Diffusion (VAE + UNet training/sampling) |
mmn-train |
LM + classifier training loops, RL, SPIN, loss APIs |
mmn-io |
Safetensors JSON wrapper, merge, quantize, bin stub |
mmn-optim |
AdamW, Newton–Schulz Muon, hybrid optimizer, grad accumulation |
mmn-data |
Dataset loaders, ChatXML formatting |
mmn-resource |
limit() CPU/memory percent parsing |
mmn-cuda |
Optional CUDA GEMM parity path |
mmn-py |
PyO3 module magicmindnet |
Features at a glance
| Area | Capabilities |
|---|---|
| Datasets | DatasetQA, DatasetCorpus, DatasetClassification, DatasetImageGen, DatasetImageEdit; in-memory data=[...] lists; ChatXML think-tag split |
| Chatbot | bot.train / bot.chat / bot.save / Chatbot.load; autoset presets (sub-100M, sub-1B, sub-10B), vision flag, seed, shape getters |
| Classifier | from_classification, with_labels, clf.train, predict probs, predict_label |
| Training | Train, TrainClassifier, TrainDiffusion all return per-epoch loss history; verbose=True progress; batch accumulation; adamw / muon / hybrid optimizers (typos raise ValueError) |
| Generation | KV cache, top-k/top-p/min-p, repetition/frequency/presence penalties, stop strings, sliding context |
| RL / SPIN | Toy alignment loops on small models |
| IO | Universal ai.load(path) auto-detects model family + format; mmn-safetensors-v1, mmn-hf-safetensors-v1 (binary HF Chatbot), mmn-hf-classifier-v1, mmn-classifier-v1, mmn-bin-v1 stub; strict import |
| Global formats | Zero format libraries anywhere (safetensors container included — from scratch). GGUF: reads every current GGML tensor type, encodes classic quants byte-identical to the reference plus the complete k-quant family Q2_K–Q6_K + Q8_K (the reference Python package can't encode k-quants at all), cross-validated against llama.cpp's gguf package; embedded SentencePiece and gpt2 byte-BPE tokenizers. PyTorch zip + legacy .pt + sharded *.index.json. NumPy .npy/.npz with from-scratch DEFLATE both ways. TensorFlow: Keras .h5/.keras and checkpoint v2, read AND write — h5py and tf.train.load_checkpoint open our output. ONNX read + write (passes onnx.checker). Flax/JAX msgpack pytrees read + write (from-scratch MessagePack codec). Generic .safetensors arrays in every spec dtype. Official safetensors package opens our containers — docs/interop.md |
| Merge | Element-wise mean of all weights; vision OR; init_seed from first model |
| Quantize | int8 / int4 on chatbot + classifier weights |
| Diffusion | VAE encode/decode, UNet denoise training, inpainting, sampling, checkpoint IO |
| Errors | Typed Python exceptions: CUDAError, DataMismatchError, ModelMismatchError, …; constructor typos raise ValueError with the valid options |
| Typing | Ships py.typed + full .pyi stubs — IDE autocomplete for the whole API |
Known gaps: see docs/limitations.md (external HF model import, full diffusion backward, etc.).
Installation & development
PyPI (recommended)
pip install magicmindnet
pip install "magicmindnet[hub]" # transformers / diffusers / modelscope
Package metadata: version 0.2.1, console scripts mmn-serve and mmn-eval, typed stubs (py.typed).
Editable / from source
pip install -e ".[dev]"
maturin develop --release -m crates/mmn-py/Cargo.toml
# Linux/macOS gate scripts
bash scripts/ci_local.sh
bash scripts/verify_gate.sh
Windows:
.\scripts\ci_local.ps1
.\scripts\lint.ps1
.\scripts\count_tests.ps1
.\scripts\verify_gate.ps1
Pre-commit (optional): .pre-commit-config.yaml runs ruff on Python sources.
Product docs with charts: open docs/site/index.html in a browser.
Python API overview
Datasets
ai.DatasetQA(file="qa.json", user_row="input", ai_row="output")
ai.DatasetQA(data=[{"input": "hi", "output": "hello"}]) # no file needed
ai.DatasetCorpus(rowfile="rows.json", txtfile="corpus.txt")
ai.DatasetCorpus(data=["a chunk of text", "another chunk"])
ai.DatasetClassification(file="labels.json", text_col="text", tags_col="tag")
ai.DatasetClassification(data=[{"text": "yay", "label": "pos"}])
ai.DatasetImageGen("manifest.json")
ai.DatasetImageEdit("edit_manifest.json")
Models
bot = ai.Chatbot(vocab_size=..., n_layer=..., d_model=..., seed=..., autoset="sub-100M")
clf = ai.Classifier.from_classification(dataset, input_dim=..., seed=...)
diff = ai.Diffusion()
# Every model has the same four core methods:
model.train(dataset, epochs=..., learning_rate=..., verbose=True) # -> list of epoch losses
model.save("model.mmn")
Model.load("model.mmn") # or the universal ai.load("model.mmn")
bot.chat("hello") # chatbot only; clf.predict_label(text) for classifiers
Training config
cfg = ai.TrainConfig(
epochs=3,
batch_size=8,
learning_rate=0.001,
cuda=False,
optimizer="hybrid", # "adamw" | "muon" | "hybrid" — anything else raises ValueError
verbose=False, # True prints per-epoch mean loss
)
losses = ai.Train(bot, dataset, cfg) # returns per-epoch mean losses
losses = ai.TrainClassifier(clf, dataset, cfg)
losses = ai.TrainDiffusion(diff, dataset, cfg)
ai.RL(bot, dataset, cfg, reward_amount=1.0, punishment_amount=0.5)
ai.SPIN(bot, selfplay_epochs=2, dataset=dataset)
Checkpoint IO
model = ai.load(path) # universal: Chatbot / Classifier / Diffusion, any format
# (.mmn / .safetensors / .gguf / .pt / .npz — detected by content)
ai.export(bot, "safetensors", path)
bot2 = ai.import_model("safetensors", [path]) # first path only
bot.save("bot.gguf", format="gguf") # also "gguf-q8_0", "npz", "pt"
merged = ai.merge(bot_a, bot_b)
ai.quantize(bot, "int8") # or "int4"
ai.export_classifier(clf, "safetensors", path)
clf2 = ai.import_classifier("safetensors", [path])
ai.merge_classifier(clf_a, clf_b)
ai.quantize_classifier(clf, "int4")
ai.limit("50%") # resource cap helper
# Generic array IO — no numpy/torch/h5py required (but their arrays are accepted)
ai.save_npz("arrays.npz", {"w": [[1.0, 2.0]]})
ai.save_pt("arrays.pt", {"w": [[1.0, 2.0]]}) # torch.load-compatible
weights = ai.load_h5("model.weights.h5") # HDF5 / Keras without h5py
info = ai.gguf_info("model.gguf") # GGUF metadata, header-only read
tok = ai.load_gguf_tokenizer("model.gguf") # embedded SentencePiece vocab
Full API reference: docs/API.md. Beginner tutorial: docs/getting_started.md.
Checkpoints & strict IO
MagicMindNet checkpoints: JSON mmn-safetensors-v1 / mmn-classifier-v1 (default) or binary mmn-hf-safetensors-v1 / mmn-hf-classifier-v1 (Hugging Face tooling compatible).
Strict import guarantees:
- Required meta:
vocab_size,n_layer,d_model(chatbot);input_dim, non-emptylabels(classifier). - Every exported tensor key must be present; missing keys fail (no silent partial load).
- Tensor shapes must match meta-derived expectations (
Linearlayout[out, in]). - Tampered shape tests keep element count equal to data length so validation reaches shape checks.
100% tensor-key coverage (missing / shape / merge / quantize for all 12 chatbot keys):
Format details: docs/checkpoints.md.
Training & examples
| Script | Purpose |
|---|---|
examples/hello_ai.py |
Start here: in-memory data, bot.train, bot.chat, save/ai.load |
examples/quickstart.py |
QA load, train, export |
examples/benchmark_train.py |
Mean loss before/after train |
examples/rl_spin.py |
RL + SPIN on fixture QA |
examples/classification_benchmark.py |
Classifier benchmark |
examples/classification.py |
Train classifier end-to-end |
examples/eval_mean_loss.py |
Mean QA / classification loss |
examples/eval_harness.py |
Unified eval suites (smoke / all / …) |
examples/checkpoint_roundtrip.py |
Chatbot export → import |
examples/learned_pos_embed_roundtrip.py |
Learned pos_embed export → import + loss parity |
examples/rope_roundtrip.py |
RoPE chatbot export → import + loss parity |
examples/classifier_roundtrip.py |
Classifier export → import |
examples/train_glint2.py |
Glint-2 exact training (looped, RMS, SwiGLU, coda, window, BPE) |
examples/generate_glint2.py |
Generate with a trained Glint-2 MagicMindNet checkpoint |
Full catalog: examples/README.md.
Training notes: docs/training.md.
Testing & coverage
After pip install -e ".[dev]" and maturin develop --release:
| Command | Purpose |
|---|---|
cargo test --workspace |
Rust unit tests |
pytest -q |
Python integration tests |
pytest tests/test_io_checkpoint_matrix_py.py -q |
Full chatbot IO contract matrix |
.\scripts\ci_local.ps1 |
Full local CI gate |
.\scripts\verify_gate.ps1 |
CI + test count sanity check |
Current counts (run .\scripts\count_tests.ps1 after changes):
- Rust
#[test]: 580 - pytest: 1088
Test area map: docs/testing.md.
Deep review artifacts: docs/reviews/.
Subagent for IO gap scans: .cursor/agents/magicmindnet-checkpoint-strict.md.
CUDA
Build with CUDA when toolkit is installed:
maturin develop --features cuda -m crates/mmn-py/Cargo.toml
Without CUDA, TrainConfig(cuda=True) raises CUDAError with fix guidance. CPU path uses reference GEMM in mmn-core.
Project layout
MagicMindNet/
├── crates/ # Rust workspace (mmn-core … mmn-py)
├── magicmindnet/ # Python package stub / re-exports
├── tests/ # pytest integration + IO matrix
├── examples/ # Runnable demos
├── docs/ # API, training, checkpoints, coverage, reviews
├── scripts/ # ci_local, verify_gate, count_tests, lint
├── .cursor/agents/ # Project subagents (CI, IO, train, …)
├── pyproject.toml
├── CONTRIBUTING.md
├── AGENTS.md
└── CHANGELOG.md
Documentation index
| Doc | Contents |
|---|---|
| docs/site/index.html | Product docs site — install, charts, hub, parity |
| docs/getting_started.md | Beginner tutorial — install to first trained model |
| docs/API.md | Public Python surface |
| docs/feature_parity.md | PyTorch / llama.cpp / Ollama parity matrix |
| docs/hub.md | Universal from_pretrained routing |
| docs/benchmarks.md | Eval harness suites |
| docs/training.md | Losses, optimizers, batching |
| docs/training_coverage.md | Training regression matrix |
| docs/vision_coverage.md | Vision-flag chatbot IO/train path |
| docs/examples_coverage.md | Examples smoke matrix |
| docs/attention_coverage.md | Attention forward/train scope (alpha) |
| docs/layernorm_coverage.md | LayerNorm forward/train scope (alpha) |
| docs/nn_coverage.md | mmn-nn block unit tests |
| docs/quantize_coverage.md | int8/int4 quantize regression matrix |
| docs/dataset_coverage.md | Dataset loader regression matrix |
| docs/checkpoints.md | Formats, merge, quantize |
| docs/checkpoint_coverage.md | 100% IO regression matrix |
| docs/limitations.md | Known gaps |
| docs/testing.md | How to run tests |
| CONTRIBUTING.md | PR / gate expectations |
| AGENTS.md | Agent workflow notes |
| CHANGELOG.md | Release history |
Milestones
| Milestone | Status |
|---|---|
| M0 Bootstrap | Done |
| M1 Tensor / autograd / CUDA hooks | Done |
| M2 AdamW + Muon | Done |
| M3 Datasets + ChatXML | Done |
| M4 Chatbot + Train | Done |
| M5 Classification + vision flag | Done |
| M6 IO / merge / quantize / limit | Done |
| M7 RL + SPIN | Done |
| M8–M9 Diffusion / latent pipeline | TrainDiffusion, inpainting, sample/export/merge/quantize |
| M10 Release hardening | CI + strict IO tests + coverage matrix |
License
GPL-3.0-or-later — see LICENSE.
Release files for magicmindnet 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| magicmindnet-0.2.1.tar.gz | 368.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| magicmindnet-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.17+ x86-64 | Details |
Total release size: 4.4 MB
Release files / magicmindnet-0.2.1.tar.gz
| Download URL | magicmindnet-0.2.1.tar.gz |
|---|---|
| Size | 368.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
971422cfbd29fa0b4d02e6ea2c89c68c7a17eea79a8f7338404042bce83ce514
|
|
BLAKE2b-256 checksum How to use checksums |
c2e9fcc58d23a12f6f6264dbd95627fc8ec2692bac73fd65e535c797c55994f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / magicmindnet-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | magicmindnet-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ef4392aba3102844c7b404cd2b3e10ca08524edc91dfa1e78b588ecd1eff3e35
|
|
BLAKE2b-256 checksum How to use checksums |
8645531920b54bf46f1c8f667d85348b55a3d1241e062a74ffc102da83965c37
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|