Self-hosted LLM observability for local-first development.
server/FastAPI ingestion API, SQLite persistence, pricing engine, query APIs, and live WebSocket broadcastingsdk/Python SDK with sync/async transport plus OpenAI, Anthropic, and Gemini wrappersdashboard/React SPA for live traces, costs, failures, sessions, replay, and demo controls
python -m venv .venv
.venv\Scripts\activate
pip install -e ./server
pip install -e ./sdk[providers]
python -m lens_serverIn another terminal:
cd dashboard
npm install
npm run devOpen http://localhost:4200.
docker-compose up --build- API:
http://localhost:8100 - Dashboard:
http://localhost:4200
Seed the product with synthetic traces from either:
- the dashboard
Seed demobutton - or the CLI script:
python scripts/demo_trace.pyWith the API running locally:
python scripts/e2e_smoke.pyThis sends a trace through the SDK, verifies it lands in the API, and confirms session aggregation updates.
Install the official Python package locally from this repo:
pip install ./sdkOr with provider integrations:
pip install "./sdk[providers]"See sdk/README.md for package usage details.
Python SDK release automation is documented in docs/publishing.md.
POST /api/v1/tracesPOST /api/v1/demo/traceGET /api/v1/tracesGET /api/v1/traces/{trace_id}GET /api/v1/sessionsGET /api/v1/sessions/{session_id}GET /api/v1/stats/overviewGET /api/v1/stats/costsGET /api/v1/stats/failuresGET /api/v1/healthGET /ws/traces
- backend ingest/query/live stream is working
- Python SDK core and provider wrappers are working
- dashboard live feed, costs, failures, sessions, and demo flow are working
- Docker now runs both API and dashboard
- end-to-end smoke coverage exists for SDK to API flow