Experiment tracking evaluation drift
vigily is a self-hosted experiment tracker that keeps watching after you stop. Log training runs and evaluations from Python, compare them in a fast web app, run evaluations on a schedule, and get the evidence when behaviour or inputs move. One binary; your storage.
examples/demo.pyA small Python SDK logs parameters and metric series. The runs table filters and sorts thousands of runs with a short query language; charts ask for about as many points as they have pixels, so 200 000 points draw as fast as 200. Select runs and they become A, B, C, D, the letters they keep when you compare them.
Datasets are content-addressed and immutable. evaluate() runs your target in your
process with exact match, regex, numeric, JSON schema or any Python function as the evaluator. Two
runs compare item by item, regressions first.
Schedules run your evaluation commands on cron in your time zone. Each run is compared with its baseline item by item, and a drift raises an alert in the app and to a webhook, with the items that flipped from pass to fail.
The web app, the API, the scheduler and the drift monitor are one Rust binary.
# train.py
from vigily import Run
run = Run(experiment="cifar10")
run["hparams"] = {"lr": 3e-3}
for step, loss in train():
run.track(loss, name="loss", step=step)
run.finish()
# serve the app, the API and the schedules
vigily up --config vigily.toml
# list runs in a terminal
vigily runs "exp:cifar10 loss[val]<0.3"
# run a schedule now
vigily schedules run nightly-intents
No. vigily writes to the directory or bucket you choose, has no telemetry, and never calls a model: evaluators that need one call your own client.
No. Storage is Lance tables through kv0, on local disk, S3, GCS or Azure.
No. Schedules come only from the server's vigily.toml; the API and the app can read them
but not create, change or start them.