Troubleshooting an empty console
The question this page answers: my pipeline ran, but /runs (or /inferences) is empty. Why?
Telemetry export never fails your pipeline, so a run that succeeded tells you nothing about whether it was exported. Work the checks below in order. Each one rules out one cause, and most take a minute.
The console is empty: five checks, in order. If /runs (or /inferences) is empty for the org in the header badge, work these checks in order. The full tree is https://modelrig.dev/troubleshooting.html.
1. npx modelrig doctor, from the environment your app runs in.
no export sink configured → this process does not see MODELRIG_API_KEY: set it, redeploy, open a new shell.
malformed key → the value is truncated, quoted or padded: paste the whole rig_sk_… secret again.
AUTH FAILED (401 / 403) → the key is mistyped, revoked or not accepted: mint a key, set it, redeploy, open a new shell.
whoami unreachable → no network path to the ingest host (firewall, proxy, wrong MODELRIG_INGEST_URL): fix the route out, retry.
2. The org doctor prints is not the org in the badge → wrong org: switch the console, or mint a key in the org you meant.
3. /inferences has rows but /runs is empty → the calls are not inside run.scope / run.start.
4. A run is missing a step or a cost → that call is not on a ModelRig lane (see not-captured).
5. A doc describes something your install lacks → compare `npm ls modelrig` with the version stamp in modelrig.dev/llms.txt.
The decision tree
Is /runs (or /inferences) empty for the org in the header badge?
│
├─ 1. Is your code exporting at all?
│ Run: npx modelrig doctor (from the same environment your app runs in)
│ ├─ "no export sink configured" → the key is unset: the process doesn't see MODELRIG_API_KEY.
│ │ Set it → redeploy → open a NEW shell → doctor.
│ ├─ "AUTH FAILED" (401 / 403) → the key is mistyped, revoked, or from another deployment.
│ │ Mint a new key → set MODELRIG_API_KEY → redeploy → open a NEW shell → doctor.
│ ├─ "malformed key" → the value starts like rig_sk_ but is truncated, quoted or padded.
│ │ Paste the whole secret again (no quotes, no spaces) → redeploy → doctor.
│ ├─ "whoami unreachable" → no network path to the ingest host (firewall, proxy, wrong
│ │ MODELRIG_INGEST_URL). Export is fire-and-forget, so fix the route out, then doctor.
│ ├─ (still "no export sink configured" after setting it) → the process doesn't see the new value
│ │ (Render: a service override vs the env group; a shell opened
│ │ before the deploy still has the old environment).
│ └─ "→ org «X» (slug) ✓" → go to 2
│
├─ 2. Is «X» the org you are looking at?
│ Compare it with the console's org badge. Member of several orgs → use the picker.
│ ├─ different → WRONG ORG. Your data is in «X». Either switch the picker to «X», or mint a key
│ │ in the org you want and replace MODELRIG_API_KEY. Add createRig({ expectOrg }).
│ └─ same → go to 3
│
├─ 3. /inferences has rows but /runs is empty?
│ → the calls aren't inside run.scope / run.start. See "Observe a pipeline".
│
├─ 4. /runs has the run but a step or a cost is missing?
│ → that call isn't on a ModelRig lane (a direct SDK call, a stream, a schema on a
│ fail-closed provider). See "Not captured".
│
└─ 5. A doc describes something your install doesn't have?
npm ls modelrig vs the "as of vX.Y.Z" line at the top of modelrig.dev/llms.txt.
Older than that → upgrade. A feature marked "unreleased" → it isn't on npm yet.
1. Is your code exporting at all?
Run npx modelrig doctor in the environment your app runs in: a shell on the hosted worker, the container, the CI job. Running it on your laptop checks your laptop's key, which may not be the one your app reads.
AUTH FAILED (401)orAUTH FAILED (403): the server doesn't accept the key. It was mistyped, revoked, rotated, or minted on a different deployment. Mint a new key, setMODELRIG_API_KEY, redeploy, open a new shell, and rundoctoragain. Your app's logs show the same failure as[modelrig] AUTH FAILED — telemetry is being DROPPED.malformed key:MODELRIG_API_KEYstarts like arig_sk_key but is truncated, wrapped in quotes or padded with spaces, so doctor sends nothing. Paste the whole secret again, exactly as the console showed it once.whoami unreachable at …: doctor could not reach the ingest host at all (a firewall, an egress proxy, or a wrongMODELRIG_INGEST_URL). It says nothing about the key. Fix the network path and rundoctoragain; until then nothing exports.no export sink configured: this process has noMODELRIG_API_KEYat all. On a hosted platform, check both the shared environment group and the service's own variables, and make sure the deploy that added the key has finished. See Deploying.→ org «X» ✓: the key is valid and exporting to org «X». Go to 2.
Don't read much into the last used time on the API keys page. It moves on any request the server accepts with that key (an export, a read, or doctor's own /v1/whoami call), and it's only updated every few minutes. A recent time doesn't prove exports are landing, and a key that's rejected with 401 never moves it at all.
2. Is «X» the org you are looking at?
Compare the org doctor printed with the org badge in the console header. If you belong to several organizations, the picker in the header decides which one every page shows.
If they differ, your data is fine: it's in «X». Either switch the console to «X», or, if «X» is the wrong home for it, mint a key in the right org and replace MODELRIG_API_KEY everywhere it's set. Then add expectOrg to createRig (or doctor --expect-org <slug> to your deploy checks) so the next mix-up is loud. Details: Orgs and keys.
3. /inferences has rows but /runs is empty
Your calls are recorded, but they aren't part of a run. A run exists only when your code opens one: wrap each pipeline execution in rig.artifacts.run.scope(...) (or run.start / run.end), and every rig.run / rig.runRaw call inside becomes a step. See Observe a pipeline.
4. The run is there, but a step or a cost is missing
The missing call didn't go through ModelRig. The usual causes: a direct provider SDK call, a stream read from a provider client, or a fallback after the raw lane refused a schema it can't enforce on that provider. A step that shows — for its cost (shown as cost n/a with Developer details on) has artifacts but no recorded call. See Not captured.
5. The docs describe something your install doesn't have
The docs track the published package. The top of llms.txt says which version they describe (as of modelrig vX.Y.Z). Compare it with npm ls modelrig in your project. If yours is older, upgrade. A surface marked "unreleased" in the docs isn't on npm yet.
Still empty?
- If the page shows "Choose an organization", "Your session expired — sign in", "We couldn't load your organizations — retry", or the "You're viewing the demo" callout, it isn't showing your data at all yet. Each of those states is explained in Orgs and keys.
- Check what the key's org actually holds, without the console:
curl -H "Authorization: Bearer $MODELRIG_API_KEY" https://api.modelrig.ai/v1/read/runs. Runs listed there but not in the console mean the console is showing another org (step 2). - Search your app's logs for
[modelrig]. The SDK prints a warning, with the HTTP status, when an export batch is rejected or rows are dropped. A batch the server rejects deterministically (422) is retried a few times and then skipped with aPOISON-SKIPline. (Needsmodelrig0.12.0 or newer.) That line, and the error the sink throws (SinkSendError.reasonCode), name the database's error code from the 422 body'sreason_code(for examplePGRST102or23514). Quote it when you report the drop. - Check the capture setting in Account settings. With posture
off, the server deliberately records nothing for your organization.
If you're still stuck, keep the doctor output (it shows only the key's last four characters) and what the console badge shows — they are the first two things anyone helping you will ask for.
Related: Orgs and keys · Deploying · Not captured · Quickstart