Metadata-Version: 2.4
Name: gsql-track
Version: 0.3.0
Summary: Lightweight experiment tracking and ML infrastructure with SQLite backend
Author-email: Dennis Liu <dennisl@example.com>
License: MIT
Project-URL: Homepage, https://github.com/ByteDennis/gsql-track
Project-URL: Repository, https://github.com/ByteDennis/gsql-track
Project-URL: Issues, https://github.com/ByteDennis/gsql-track/issues
Keywords: mlops,sqlite,experiment-tracking,ml-infrastructure
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: springs>=1.13.0
Requires-Dist: omegaconf>=2.3.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: tqdm>=4.60.0
Requires-Dist: loguru>=0.7.0
Provides-Extra: gpu
Requires-Dist: torch>=2.0.0; extra == "gpu"
Provides-Extra: wandb
Requires-Dist: wandb>=0.15.0; extra == "wandb"
Provides-Extra: bench
Requires-Dist: pandas>=2.0.0; extra == "bench"
Requires-Dist: numpy>=1.24.0; extra == "bench"
Provides-Extra: tune
Requires-Dist: optuna>=3.0.0; extra == "tune"
Requires-Dist: pandas>=2.0.0; extra == "tune"
Requires-Dist: numpy>=1.24.0; extra == "tune"
Requires-Dist: requests>=2.28.0; extra == "tune"
Provides-Extra: all
Requires-Dist: torch>=2.0.0; extra == "all"
Requires-Dist: wandb>=0.15.0; extra == "all"
Requires-Dist: pandas>=2.0.0; extra == "all"
Requires-Dist: numpy>=1.24.0; extra == "all"
Requires-Dist: optuna>=3.0.0; extra == "all"
Requires-Dist: requests>=2.28.0; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Requires-Dist: build>=1.0.0; extra == "dev"

# gsql-track

Lightweight experiment tracking backed by SQLite. Zero dependencies beyond the Python standard library.

## Install

```bash
pip install gsql-track
```

## Quick Start

```python
from gsql_track import GsqlTrack

t = GsqlTrack("my-experiment")
run = t.start_run("baseline")
run.log_params({"lr": 0.001, "bs": 64})

for step in range(100):
    run.log(step=step, loss=loss, acc=acc)

run.finish()
t.close()
```

## Log Predictions (for mistake analysis)

```python
run.log_predictions([
    {"id": "e1", "pred": "A", "label": "A", "conf": 0.95, "text": "..."},
    {"id": "e2", "pred": "B", "label": "A", "conf": 0.60, "text": "..."},
])
```

## Web Dashboard

View results in the browser with the companion Go CLI:

```bash
gsql track serve
```

## Bulk / Async Loading (tune & bench results)

Load results after all runs finish — useful for distributed or async workflows:

```python
from gsql_track import GsqlTrack

t = GsqlTrack("bench/weak_labels")

# Single-step results (final metrics only)
for result in all_results:
    t.log_completed_run(
        f"{result.model}/{result.task}/seed_{result.seed}",
        params={"lr": result.lr, "bs": result.bs},
        metrics={"acc": result.acc, "f1": result.f1},
    )

# Or multi-step (full training curves)
t.log_completed_run("bert/sst2/seed_0", metrics=[
    {"step": 0, "loss": 2.3, "acc": 0.1},
    {"step": 100, "loss": 0.5, "acc": 0.8},
    {"step": 200, "loss": 0.1, "acc": 0.93},
])

t.close()
```

## Wrapper API

Wrap an existing tracker class to automatically log to gsql:

```python
from gsql_track import tracked
tracker = tracked(MyTracker(config), experiment="mnist")
```
