evaris
v0.3.0
Published
Evaris CLI and TypeScript SDK — publish Inspect AI eval runs to Evaris.
Readme
evaris
Evaris CLI and TypeScript SDK — publish Inspect AI eval runs to a Evaris deployment and read the results back.
Install
npm install evaris # local dependency
npm install -g evaris # or as a global CLICLI
evaris publish <log-dir> --project <project-id>Publishes the newest .eval log in <log-dir>: creates a run, uploads the
artifact, and completes the run so Evaris ingests it. By default the command
waits until ingest finishes.
--project <id> Evaris project public id (env EVARIS_PROJECT_ID) — required
--api-token <token> Personal access token (env EVARIS_API_TOKEN) — required
--api-url <url> API origin (env EVARIS_API_URL, default: the Evaris cloud API)
--name <name> Run name (default: derived from the log file name)
--timeout <seconds> How long to wait for ingest to finish (default 180)
--no-wait Return as soon as the run is queued for ingestCreate a personal access token in the Evaris web app under
Settings → API Tokens; it is shown exactly once. The same page shows your
project id for --project.
CI example
- run: npx evaris publish logs/ --project "$EVARIS_PROJECT_ID"
env:
EVARIS_API_TOKEN: ${{ secrets.EVARIS_API_TOKEN }}
EVARIS_PROJECT_ID: ${{ vars.EVARIS_PROJECT_ID }}
# Optional, for self-hosted: EVARIS_API_URL: ${{ vars.EVARIS_API_URL }}Querying runs and samples
Every read command accepts --json — that is the shape scripts and coding
agents should consume. All of them authenticate with --api-token /
EVARIS_API_TOKEN exactly like publish.
evaris projects list --json # discover project ids
evaris runs list --project proj_x --all --json
evaris runs show <run-id> --json # eval header, scores, metrics, warnings
evaris runs samples <run-id> --score fail --all --json
evaris runs sample <run-id> <sample-id> --epoch 1 # full sample incl. transcript + eventsruns list can omit --project when the token can see exactly one project;
otherwise the command prints the visible projects and asks for an explicit
--project. Human-readable tables are printed by default; --all follows
pagination (capped at 5000 rows), and runs sample always prints the full
sample JSON — transcripts and event traces are rich documents, not table rows.
Programmatic use
import { publishInspectLogs } from "evaris";
const result = await publishInspectLogs({
apiUrl: "https://evaris-api-prod.evaris-backend.workers.dev", // or your self-hosted origin
apiToken: process.env.EVARIS_API_TOKEN!,
projectId: "proj_...",
logDir: "./logs",
runName: "nightly-evals",
});