lab-llm is the browser-side observability and control surface for a local LLM lab.
This repo is intentionally separate from the runner/backend repo. Its job is to:
- consume telemetry from the runner
- visualize runtime behavior
- compare sessions and experiments
- grow toward a shared browser surface for observability first, chat later
This repo starts as a dashboard product, not a model runner.
That means:
- no backend execution logic should be duplicated here
model-runnerremains the telemetry producer- this repo owns ingestion, read models, dashboard APIs, SSE, and browser UX
The current architecture notes live in:
docs/dashboard_repo_architecture.mddocs/decisions/docs/specs/
python -m venv .venv
source .venv/bin/activate
pip install ruff pyright pytest python-dotenv
cd frontend && npm install && cd .../scripts/dev.sh
./scripts/check-quick.sh
./scripts/check-full.shpyright is intentionally not in the default local loop.
Backend with fixture replay:
./scripts/dev-backend.sh --fixtures fixtures/telemetry/sample_session.jsonlBackend ingesting model-runner JSONL telemetry:
./scripts/dev-backend.sh --telemetry-jsonl /path/to/model-runner-telemetry.jsonlFrontend:
./scripts/dev-frontend.shIntegrated build served by Python:
cd frontend && npm run build && cd ..
./scripts/dev-backend.sh --no-replay-fixtures