llmprobe-server

September 14, 2026 ยท View on GitHub

Archive for llmprobe --upload. Express + Prisma + Postgres. The JSON report is the record; everything the page shows is projected out of it at query time.

Run

cp .env.example .env
docker compose up -d --build     # db + server on :3000

Set UPLOAD_TOKEN to require a bearer token on upload; leave it empty for an open endpoint (localhost only).

Upload

llmprobe localhost:8080 --upload                    # http://localhost:3000
llmprobe localhost:8080 --upload https://probe.lan  # or $LLMPROBE_UPLOAD_URL

Auth comes from $LLMPROBE_UPLOAD_TOKEN. A run with no benchmark is refused โ€” timings are the point of the archive.

API

MethodPath
POST/api/runs{ key, data }, upserts on key
GET/api/runs?model=&hardware=Filtered summaries, newest first
GET/api/runs/:keyThe full JSON report
GET/api/facetsDistinct models and hardware for the filters

Filtering runs in Postgres over the JSONB column. hardwareLabel() in src/summary.ts and HARDWARE_SQL in src/queries.ts build the same string and must stay in lockstep.

Develop

npm install
npm run dev          # tsx watch, needs DATABASE_URL
npm run typecheck
npm test             # unit only
npm run test:db      # + API tests, needs TEST_DATABASE_URL

test:db truncates between cases, so it uses its own database (llmprobe_test, created by initdb/), never the one holding uploads.