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
Release files for multimodal-mllog 1.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| multimodal_mllog-1.2.4.tar.gz | 27.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| multimodal_mllog-1.2.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.6 kB
Release files / multimodal_mllog-1.2.4.tar.gz
| Download URL | multimodal_mllog-1.2.4.tar.gz |
|---|---|
| Size | 27.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7992c0037a1d08fe83fa4081f3edd07d01c15d8a9e482166552e09eab3c9ebb2
|
|
BLAKE2b-256 checksum How to use checksums |
561efc42e37c323d4682d54f9bc86bcec0570c69829d9191328babdf9450d187
|
| 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.4-py3-none-any.whl
| Download URL | multimodal_mllog-1.2.4-py3-none-any.whl |
|---|---|
| Size | 28.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b9aa9c2e18858fcf6b51b65ff645b1c94316f554f8e6c584e57d12eb75a5d6f2
|
|
BLAKE2b-256 checksum How to use checksums |
56d5f81fc5c7100beaab49c1556d7921afbf75521862ba07152bf8a04df7a88b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|