Moro
MoroAI is a local-first CLI for adapting open language models to private data.
Turn private data into reliable local models: import → clean → choose a recipe → train → evaluate → deploy.
Moro is for engineers and small teams building private support assistants, domain Q&A, and structured extraction workflows. The current focus is a repeatable local workflow on consumer hardware.
Status
Early development. The core CLI, dataset workflow, recipe heuristics, and training dry-run have automated coverage without downloading models. A real offline CPU smoke test validates one-step LoRA training, validation loss, checkpoint creation, and adapter reload for generation. Training, model-backed evaluation, and deployment integrations remain experimental and have not yet been validated end to end on a GPU. This is not a production release.
Install from source
Python 3.10 or newer:
git clone git@github.com:MoroAI/moro.git
cd moro
python -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
Use the source checkout for now; package publication is not part of this setup.
Try the local workflow
From the repository root:
moro init /tmp/moro-demo
cp examples/support.jsonl /tmp/moro-demo/data/raw/support.jsonl
cd /tmp/moro-demo
moro import data/raw/support.jsonl --name support
moro data build
moro data report
moro status
moro doctor
moro recipe suggest
moro train --dry-run
The sample data is synthetic and only demonstrates the workflow. Dry-run validates the normalized training rows and prints a rough memory estimate; it does not check installed training dependencies or prove a model will fit in memory.
The default config reads data/raw/support.jsonl. For another filename, update dataset.source in moro.yaml. Import registers a source but does not change that setting. Existing import destinations are protected against overwriting.
Commands
| Command | Current behavior |
|---|---|
moro init PATH |
Create project configuration and folders |
moro import SOURCE |
Copy, link, or register raw input |
moro data build |
Normalize, clean, deduplicate, score, and split data |
moro data report |
Show dataset statistics; supports JSON |
moro status |
Inspect project state; supports JSON |
moro doctor |
Inspect hardware and dependencies |
moro recipe suggest |
Suggest heuristic settings; supports JSON |
moro train --dry-run |
Validate data and estimate memory without ML dependencies |
moro train |
Experimental Hugging Face adapter training |
moro eval run SUITE |
Experimental model evaluation |
moro export |
Experimental artifact export |
moro deploy --target ollama |
Prepare deployment files; does not launch Ollama |
moro diagnose |
Inspect recorded training failures |
Use moro COMMAND --help for options. Recipe suggestions do not update moro.yaml; apply the settings manually before training. Estimates are heuristics, especially for custom models and sequence lengths. CPU and Apple hardware receive conservative unquantized suggestions; MPS training is unverified.
Experimental training
python -m pip install -e '.[train]'
# For CUDA quantization, additionally install:
python -m pip install -e '.[cuda]'
The backend uses a pinned Hugging Face / PEFT / TRL reference stack with an optional real CPU integration test. Actual CUDA training still needs hardware validation. See training validation for the environment and test scope. Checkpoint resume is explicitly unsupported. Failed and interrupted runs record their terminal status in SQLite, with configuration and training-data checksum snapshots in the run directory.
Data preparation and dry-run work locally. In local_only mode, training and evaluation resolve local directories or cached model snapshots and fail if weights are missing. allow_external permits downloads. Pre-download the selected model revision or use local model paths. Raw and processed datasets, credentials, and model weights should remain outside source control.
Development
python -m pytest -q
ruff check .
ruff format --check .
See CONTRIBUTING.md and the engineering status for the next milestones. CI runs core tests, lint, formatting, and package build checks on Python 3.10–3.12 without training dependencies.
License
Metadata
Release files for moroai 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 | |
|---|---|---|---|
| moroai-0.1.0.tar.gz | 248.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| moroai-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 478.2 kB
Release files / moroai-0.1.0.tar.gz
| Download URL | moroai-0.1.0.tar.gz |
|---|---|
| Size | 248.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f0f3e33240ebbe54b5a9b49d531dca5f1abbe58f14fbdaf93dc75547380368e
|
|
BLAKE2b-256 checksum How to use checksums |
fef929be8cb81e33bd7dd9bd9a1d70197013fc97421b50e2904e0bfcd51c0344
|
| 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 30, 2026.
Transparency logRelease files / moroai-0.1.0-py3-none-any.whl
| Download URL | moroai-0.1.0-py3-none-any.whl |
|---|---|
| Size | 229.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
135c7f105cac3e90ed8b4cd8e00c1d65be157e93cb6c02fcc5449d1397e3def8
|
|
BLAKE2b-256 checksum How to use checksums |
2b9451c8fb93659530c410329ba5294298ec3c294f77f780ef026fc06571ced4
|
| 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 30, 2026.
Transparency log