Skip to content

The viewer: parsbench view

Every evaluate() and score_traces() call records its run, full traces included, into a project-local .parsbench/ store. The store is self-gitignored plain files (run.json + events.jsonl per run), and the viewer is a local web UI over it:

parsbench view

parsbench view

By default it serves 127.0.0.1:1404 (walking upward if the port is busy) and opens your browser. Options:

parsbench view path/to/project     # a .parsbench store, or a directory containing one
parsbench view --port 8080
parsbench view --host 0.0.0.0      # e.g. to view from another machine
parsbench view --no-open

What you get

  • Live runs. Runs stream into the UI while they execute; finished runs stay as the archive.
  • A checks matrix: goldens × checks, failure-first, with the judge's Persian reasons one click away.
  • Trace detail: messages, tool calls (arguments, results, errors), latency and steps, plus per-run tabs when n_runs > 1.
  • Simulation replay: the conversation as an RTL chat, with the goal and traps in play.
  • Compare: pick a baseline run and see which goldens regressed and how each check's mean moved.
  • Export: any run as JSON (full traces), CSV (one row per check, Excel-safe UTF-8), or a paste-ready Markdown report.
  • Optional charts: score per check, and the app's score history across runs.
  • Dark and light themes, toggled in the top bar.

The viewer has zero extra dependencies and no build step. It ships inside the parsbench package.

Recording

Recording is on by default. Turn it off per call or globally:

evaluator.evaluate(bot, record=False)
export PARSBENCH_NO_RECORD=1     # e.g. in CI

Delete .parsbench/ whenever you like. It is only the viewer's data; nothing else reads it.