EasyMoDD
EasyMoDD is a configurable, training-first machine-learning library. It is programmable from Python like a numerical library, with reusable tensors, modules, datasets, losses, optimizers, trainers, model families, and checkpoint policies.
Models initialize randomly unless a consuming project explicitly resumes from
its own checkpoint. EasyMoDD does not include a chatbot, web application,
built-in corpus, project config.txt, generated checkpoints, or demo data.
Install
python -m pip install easymodd
For a local checkout:
python -m pip install -e .
Publish to PyPI
The package is configured for GitHub Actions Trusted Publishing. Before the
first release, create a PyPI project named easymodd, then add this trusted
publisher on PyPI:
- Owner:
vnex-lab - Repository:
EasyMoDD - Workflow:
publish.yml - Environment:
pypi
After that one-time setup, publish a release from GitHub. The workflow builds the wheel and source archive, validates both with Twine, and publishes them without a stored PyPI token.
For a local dry run:
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
The package version is controlled by project.version in pyproject.toml.
Increase it for every PyPI release, and do not reuse an already-uploaded
version.
Optional integrations:
python -m pip install easymodd[cuda]
python -m pip install easymodd[data]
python -m pip install easymodd[dev]
Python API
import numpy as np
from easymodd import ArrayDataset, MSELoss, SGD, Trainer, build_mlp
model = build_mlp(input_size=1, hidden_sizes=[8], output_size=1)
dataset = ArrayDataset(
np.array([[1.0], [2.0], [3.0]], dtype=np.float32),
np.array([[2.0], [4.0], [6.0]], dtype=np.float32),
)
history = Trainer(
SGD(model.parameters(), learning_rate=0.01),
MSELoss(),
max_steps=100,
).fit(model, dataset)
print(history.values["loss"][-1])
The programmable foundation includes:
- NumPy and explicit CUDA backend helpers
Module,Parameter,Linear,ReLU, andSequential- GELU, sigmoid, tanh, and dropout layers
- MLP model factory
- Model registries for custom factories
ArrayDatasetand packedTextDatasetBatchLoader, deterministic splits, andSubset- Composable transforms and batch collation
- MSE and cross-entropy loss contracts
- L1 and Huber losses
- SGD, Adam, and AdamW optimizers
- Cosine and warmup learning-rate schedulers
- Reusable
TrainerandTrainingHistory - Accuracy, MAE, and perplexity metrics
- JSONL metrics logging and early stopping callbacks
- Local experiment tracking and dependency-free summaries
- Versioned model/optimizer/scheduler serialization
- Environment-only secrets for optional integrations
- Config loading and validation for consuming projects
- Checkpoint enable/disable, retention, and compression policy
- Separate text Transformer and Vision Transformer configuration modules
The restored prototype scripts remain available as compatibility programs for existing custom checkpoints. New projects should import EasyMoDD directly.
Consumer Project Configuration
EasyMoDD does not force users into one project layout. A consuming project can
create its own config.txt using TOML syntax and load it with:
from easymodd import load_config
config = load_config("config.txt")
The config loader supports project-defined paths for datasets, runs, models,
logs, and checkpoints. The library never assumes a filename such as
best.bin.
A consumer project can configure checkpoint behavior like this:
[checkpoints]
enabled = true
keep_recent = 2
compress_old = true
When disabled, CheckpointManager creates no directory or files. When enabled,
older numbered checkpoints can be compressed while recent checkpoints remain
available.
Package Layout
src/easymodd/
models/
mlp.py
text_transformer.py
vision_transformer.py
data.py
losses.py
nn.py
tensor.py
optim.py
training.py
checkpoints.py
config.py
cli.py
Each model family has its own module. The shared training contracts are designed so new model types can be added without changing dataset or checkpoint code.
Extending EasyMoDD
Register a custom model factory:
from easymodd import ModelRegistry
registry = ModelRegistry()
registry.register("my_model", lambda width=8: build_my_model(width))
model = registry.create("my_model", width=32)
Optional integrations can read environment variables without storing secrets:
from easymodd import SecretStore
secrets = SecretStore(prefix="MY_APP_")
token = secrets.get("TRACKING_TOKEN")
EasyMoDD never writes API keys to configs, checkpoints, experiment files, or logs. Provider-specific integrations can be built on top of this helper.
Data and Training
The library does not ship a general-purpose training database. Users provide legally obtained text, image, or tabular data in their own projects. EasyMoDD provides dataset contracts and validation helpers; it does not pretend that a small demo corpus can produce a general assistant.
Development Status
The tensor/module API, programmable MLP training loop, dataset contracts, checkpoint policy, model-family layout, and config loader are implemented. Text Transformer training, Vision Transformer training, full resume manifests, evaluation, schedulers, callbacks, and additional model families are active parts of the public-library roadmap.
Support development on Ko-fi.
Metadata
Release files for easymodd 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| easymodd-0.1.0.tar.gz | 20.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| easymodd-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 44.0 kB
Release files / easymodd-0.1.0.tar.gz
| Download URL | easymodd-0.1.0.tar.gz |
|---|---|
| Size | 20.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ed49559ac3d410ae8bfd45da23640b09277408dc4fff54a69dbcfa3f34c96750
|
|
BLAKE2b-256 checksum How to use checksums |
ee145957ab3293013e291430d3706b3ca93a082fb467747b836fc384ec50c431
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency logRelease files / easymodd-0.1.0-py3-none-any.whl
| Download URL | easymodd-0.1.0-py3-none-any.whl |
|---|---|
| Size | 23.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
576d8c9f3814c272eaa88c17ccc5c6abd5523843c95f9912365573ca934802de
|
|
BLAKE2b-256 checksum How to use checksums |
30b834bcc4f8487367bf49f764b967f1adcd06bd053359efd70facc818676b50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency log