Skip to main content

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 quality budget) 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 (Myelin CLI)

Installing the package also installs a myelin command:

myelin list                    # catalog + downloaded/active state
myelin pull gemma-2-2b-it      # download a model (live progress bar)
myelin run gemma-2-2b-it       # interactive chat (REPL; /exit, /clear, /model <id>)
myelin run gemma-2-2b-it "What is 2+2?"   # one-shot prompt
myelin run llama-3.1-8b-instruct --stop "###" --min-p 0.05 --temperature 0.8
myelin show gemma-2-2b-it      # model details
myelin rm qwen2.5-0.5b-instruct  # delete a downloaded model from disk
myelin ps                      # active model + hardware state
myelin hardware                # detected GPU / telemetry
myelin version                 # package + engine version

Every reply prints a dim ⏱ N token, X tok/s stats line on stderr.

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 — with model, fetch it first if missing.
  • models_dir — model library root (default MYELIN_MODELS_DIR or ./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 Engine per 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

myel-0.5.1.tar.gz (168.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

myel-0.5.1-cp39-abi3-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.9+Windows x86-64

myel-0.5.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

File details

Details for the file myel-0.5.1.tar.gz.

File metadata

  • Download URL: myel-0.5.1.tar.gz
  • Upload date:
  • Size: 168.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for myel-0.5.1.tar.gz
Algorithm Hash digest
SHA256 0a1db49bd76d90db6a6835d8f036256eec2ff27a429be4c2f7664fa33efcdb50
MD5 525978b43b1c1aa0f2cc6e6041d41209
BLAKE2b-256 312c0757e8d9dfe99fc7192f7e4d7c3972598609004057b4e9405d5f21d1462f

See more details on using hashes here.

File details

Details for the file myel-0.5.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: myel-0.5.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.5 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

Hashes for myel-0.5.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f3c446d4e925d5dd27d5bf2e7d8b1f428f9a6e3aca035ff3a5bfe407128deae9
MD5 268419a25b4ea4a3a227b76c7eae825e
BLAKE2b-256 564a715dfa44effc81772fb0a3216b43f12ae3b44954c141aa65edf21bdb3393

See more details on using hashes here.

File details

Details for the file myel-0.5.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for myel-0.5.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 74d6ee681f2e9691efaddf05a86d2e833ecff7183bf05b72e33e0d0fce3eb59d
MD5 d7fc222ae75b0b0c861e61e20aed85c1
BLAKE2b-256 dcd9b6aa036a88aa53692454a9df5745f4aa41cd4670edf49fc2bbeba72608d7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page