multimodal-mllog
Experiment logbook pipeline for researchers training ML models with coding agents.
An external observer that automatically captures per-run facts (agent events, git state, optional MLflow info) as JSONL records via a sensor/adapter/sink architecture, and on demand generates a PDF experiment report from them via the coding agent.
coding agent --> mllog capture (automatic via hook) --> JSONL store
coding agent --> /logbook --from yesterday --> PDF report
researcher --> mllog dashboard --> local web UI
Architecture
Record envelope (stored as one JSONL line per record in ./mllog/records/<YYYY-MM-DD>.jsonl):
{
"schema_version": "0.1",
"record_id": "<ULID>",
"display_name": "Fix LR scheduler bug", // short title for UI (≤60 chars)
"activity_type": "train | eval | analysis | attempt_failed",
"status": "ok | failed",
"started_at": "<iso8601>",
"ended_at": "<iso8601>",
"sources": {
"agent": { "event_count": 12, "edit_ledger": {}, "config_deltas": [], "commands": [] },
"git": { "commit": "abc123", "dirty": false, "changed_files": [] },
"mlflow": { "run_id": "...", "params": {}, "metrics": {} }, // present only if active
"env": { "python_version": "3.13", "platform": "..." }
},
"digest": null, // optional, evidence-gated
"transcript_ref": null // pointer to session JSONL, never raw content
}
Installation
pip install multimodal-mllog # core (capture, query)
pip install "multimodal-mllog[mlflow]" # + optional MLflow sensor/sink
pip install "multimodal-mllog[dashboard]" # + local web dashboard (Flask + PDF rendering)
Quickstart
- Open your ML project in a coding agent (Claude Code, Codex, etc.).
- Run your experiment: train, evaluate, or analyze.
- The
Stophook captures the run automatically, or run/mllogmanually. - Run
/logbook --from yesterdayto generate a PDF experiment report from stored records. - Run
mllog dashboardto browse records in a local web UI.
CLI reference
# Capture a run (sensors gather git, agent events, optional MLflow automatically)
mllog capture --type {train|eval|analysis|attempt_failed} --status {ok|failed} \
[--name "short title"] [--session-path <path>] [--mlflow-run-id <id>] [--auto]
# Query records
mllog get-logs --from <when> [--to <when>] [--json]
# <when>: ISO date (2026-07-01), 'yesterday', 'today'
# Local dashboard
mllog dashboard [--port 8265] [--mllog-dir ./mllog]
# Sensor / adapter / sink status
mllog doctor
# Checkpoint
mllog checkpoint [--show | --advance]
Reports
Reports are agent-generated: the /logbook skill instructs the coding agent to read
session records, analyze them, and produce a professional PDF report using reportlab. This
produces rich narrative documents with tables, cross-run comparisons, failure analysis, and
recommendations — not a mechanical data dump.
/logbook --from 2026-07-01 --to 2026-07-19
The dashboard also offers a quick summary generator for simple tabular overviews.
Storage
- Records:
./mllog/records/<YYYY-MM-DD>.jsonl(append-only, one line per record, fsynced) - Checkpoint:
./mllog/checkpoint.json - Logbooks:
./mllog/logbooks/<from>_<to>.pdf - Override root with
MLLOG_DIRenv var. - Override logbooks dir with
MLLOG_LOGBOOKS_DIRenv var.
Dashboard
A local read-only web UI for browsing records and viewing experiment details.
pip install "multimodal-mllog[dashboard]"
mllog dashboard
# opens http://localhost:8265
Two views: Sessions (table, filterable) and Record Detail (metrics, config deltas, agent activity).
Development
git clone https://github.com/jean-johnson-zwix/multimodal_mllogger
cd multimodal_mllogger
make install # create venv + install deps
make test # run pytest
make lint # check core purity (no banned imports)
make frontend # rebuild dashboard frontend
License
MIT
Metadata
Release files for multimodal-mllog 1.2.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| multimodal_mllog-1.2.6.tar.gz | 117.1 kB | Without provenance | Details for multimodal_mllog-1.2.6.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| multimodal_mllog-1.2.6-py3-none-any.whl | Python 3 | none | any | Details for multimodal_mllog-1.2.6-py3-none-any.whl |
Total release size: 234.8 kB
Release files / multimodal_mllog-1.2.6.tar.gz
| Download URL | multimodal_mllog-1.2.6.tar.gz |
|---|---|
| Size | 117.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cd0386380c9e16a441ff7fb9f755ec34f6a57beaf2e0142874e8c4313743cd3b
|
|
BLAKE2b-256 checksum How to use checksums |
57481781c7152b5da4dda002e80fa6722dd329276f7720eae277a843f5dfa9b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Release files / multimodal_mllog-1.2.6-py3-none-any.whl
| Download URL | multimodal_mllog-1.2.6-py3-none-any.whl |
|---|---|
| Size | 117.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
55d57774a0d2c374110a9e16ed954648aa98644dc630e4f08cc7d06ae35a3219
|
|
BLAKE2b-256 checksum How to use checksums |
36bedec088c4c6d8c7775070a49bb12a877cdb55212169c59928472513671885
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Security for multimodal-mllog 1.2.6
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.