Myelin — bio-mimetic dynamic layer-masking local LLM engine (Python bindings)
Project description
myelin — Python bindings
First-class PyO3 bindings for the Myelin engine: a
bio-mimetic, dynamic layer-masking local LLM runtime. import myelin loads a
native extension module — no ctypes, no manual signatures, no server process.
- Local: the model runs on your GPU; nothing leaves your machine.
- Lean: weights live in VRAM int8-quantized; host RAM stays near the embedding table (~1.6 GB for Llama 3.2 1B).
- Bio-mimetic masking: per-layer importance is calibrated from the model
itself at load; under hardware pressure (or an explicit
qualitybudget) unimportant layers are skipped for speed.
Install
pip install myel
The PyPI distribution name is myel; the importable module is myelin
(import myelin) — the two differ because myelin was already taken.
Terminal (Ollama-style CLI)
Installing the package also installs a myelin command:
myelin list # catalog + downloaded/active state
myelin pull gemma-2-2b-it # download a model
myelin run gemma-2-2b-it # interactive chat (REPL; /exit, /clear)
myelin run gemma-2-2b-it "What is 2+2?" # one-shot prompt
myelin show gemma-2-2b-it # model details
myelin hardware # detected GPU / telemetry
myelin version # package + engine version
Quick start
import myelin
eng = myelin.Engine() # returns immediately; the default
# model loads in the background
eng.wait_ready() # optional — generate() also waits
print(eng.generate("The capital of France is", max_tokens=32))
print(eng.chat("Explain transformers in one sentence."))
for piece in eng.stream_iter("Write a haiku about GPUs."):
print(piece, end="", flush=True)
First run with no model on disk:
eng = myelin.Engine("llama-3.2-1b-instruct", download=True) # ~2.5 GB, once
API
Engine
Engine(model=None, *, download=False, models_dir=None, profile=None)
model— catalog id to activate; blocks until loaded. Without it the default model auto-loads in the background.download— withmodel, fetch it first if missing.models_dir— model library root (defaultMYELIN_MODELS_DIRor./models).profile—"quality"(uniform int8, default) or"speed"(calibrated mixed int8/int4, ~25% faster at a small perplexity cost).
Generation
eng.generate(prompt, max_tokens=128, *, temperature, top_k, top_p,
repeat_penalty, seed, quality=1.0) -> str
Raw completion (no chat template). Sampling defaults are the Llama-family
chat settings (temperature 0.7, top-k 40, top-p 0.95, repeat penalty 1.1);
pass temperature=0.0 for greedy decoding, seed= for reproducibility.
quality is the decision engine's quality floor: 1.0 runs every layer;
lower values let the bio-mimetic mask skip calibrated-unimportant layers.
eng.chat(messages, max_tokens=256, *, system=None, ...) -> str
Chat completion through the Llama 3 instruct template. messages is a plain
string (single user turn) or a full conversation:
history = [
{"role": "user", "content": "My name is Ada."},
{"role": "assistant", "content": "Nice to meet you, Ada!"},
{"role": "user", "content": "What's my name?"},
]
eng.chat(history, system="Answer briefly.")
Streaming
eng.stream(messages, callback, max_tokens=256, ...) -> str # callback per fragment
for piece in eng.stream_iter(messages, ...): # or iterate
...
stream(..., inspect=True, on_activity=fn) additionally calls
fn(layer_norms, depth) per token with the real per-layer activation — the
"neuron liveness" signal (slower; deliberate).
Introspection
text, info = eng.generate_detailed(prompt, ...)
info["active_layers"] # per-layer bool mask this generation ran with
info["depth"] # how many layers were active
info["policy"] # layer-selection policy (e.g. BIOMIMETIC)
eng.hardware() # {'vram_used_mb', 'temperature_c', 'utilization_pct', ...}
Model library
eng.list_models() # curated catalog + download/active/loading status
eng.download_model("llama-3.2-3b-instruct", lambda p: print(p["downloaded_bytes"]))
eng.load_model("llama-3.2-3b-instruct") # hot-swap; frees old model's VRAM
eng.active_model() # -> str | None
eng.is_ready() # -> bool
eng.wait_ready(timeout=None)
Errors
Engine-level failures raise myelin.MyelinError (a RuntimeError subclass);
argument mistakes raise TypeError/ValueError.
Notes
- The GIL is released during Rust-side compute, so generations never block other Python threads; callbacks re-acquire it per fragment — keep them light.
- One
Engineper process is the intended pattern (it owns the GPU state). It is thread-safe; generations serialize on the single GPU. - The catalog is curated (Llama 3.2 1B/3B Instruct) — the runtime implements the Llama 3.x architecture only.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file myel-0.3.2.tar.gz.
File metadata
- Download URL: myel-0.3.2.tar.gz
- Upload date:
- Size: 153.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba31fd84a5328316a346cfa7d56ccdc8ed324683d9eb295f54f51fcfebd28e4b
|
|
| MD5 |
cf498cb9da24959521ed9cbf7df1a17c
|
|
| BLAKE2b-256 |
b297ee654e207dce3bbf8abbeb34fbbfe68fce213a2499948cd81ac1b505b17c
|
File details
Details for the file myel-0.3.2-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: myel-0.3.2-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d3b3291d2165112b1c7d42ac877c7bf766e1193cebe89951f40593a8d9d03d0
|
|
| MD5 |
416e5a7ddb349b6e24b3815abac82ac7
|
|
| BLAKE2b-256 |
3ca2571de2f2e9cc015fde616a8d08402f2d50a2084845d8fca8c0a504ce7822
|
File details
Details for the file myel-0.3.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: myel-0.3.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 4.1 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d5b5e5521f9a97a7f9ead86523f062dbc12aeab6ba6f65025a9e0eaa9568c69
|
|
| MD5 |
a6044b4b791638b20fab45a0b1adee2e
|
|
| BLAKE2b-256 |
ff536c4ebac307617caf9be0539cbfde873e7efe9e00366874cbcc0a0f69a138
|