Web Viewer¶
Hawk includes a web UI for browsing and analyzing evaluation results, served at viewer.hawk.<domain>.
Opening the Viewer¶
hawk web # open current eval set in browser
hawk web EVAL_SET_ID # open a specific eval set
hawk view-sample UUID # open a specific sample
Features¶
The web viewer supports:
- Browsing eval sets and scan runs — see all submitted evaluations
- Filtering samples — by score range, completion-time range, and full-text search
- Comparing results — across eval sets and models
- Exporting to CSV — download filtered results
- Shareable URLs — filter state is encoded in query params for easy sharing
- My Jobs — your launched jobs with live status, counts, a status filter, and owner-only stop/delete actions
- Rate limits & token usage — live per-user rate-limit status and historic token-usage views
- Execution timelines — per-sample timeline pages with tool-call deep links and duration histograms (requires tracing to be enabled)
Live eval-set status¶
The Status view gives an at-a-glance, drill-down picture of an entire eval
set while it is still running — useful for spotting stuck pods, missing images
(ImagePullBackOff), rate-limit storms, and slow sandbox calls.
Open it by clicking the status badge of an in-flight eval set in the jobs
list (badges are clickable while a run is active), or navigate to
/eval-set/<EVAL_SET_ID>/status. It updates live (polling every few seconds)
and shows:
- Overall status, runner pod health (CPU/memory, sandbox pod/GPU counts), and a segmented progress bar (completed / running / errored / limit / waiting).
- Per-task progress bars with trouble badges (e.g.
image pull failing). - Per-sample phase (waiting / init / running / scoring / completed / errored / limit), retries, limit hit, latest score, token usage, and the last event with both relative and UTC time plus how long it took.
- A "Waiting for Kubernetes" list of samples whose sandbox pod has not been
scheduled yet, with the reason (e.g.
Unschedulable) and the scheduler message.
If you created the eval set, the view also offers Stop (graceful — score partial work) and Delete (tear down resources) actions; these are owner-only.
Access is scoped: you only see eval sets whose model groups you have access to (same as the rest of the viewer), and only the creator can stop or delete a run.
Live data is read directly from Kubernetes (pod status/metrics) and from
inspect_ai's shared sample buffer in S3, so it is available before the eval set
has been imported into the warehouse. It is served by
GET /monitoring/jobs/{eval_set_id}/eval-set-status.
In-transcript search¶
When viewing a sample transcript, the viewer's search panel lets you search within that transcript's messages and events.
Two modes are available:
- Grep (always available): searches the warehouse
message_poolandeventtables directly — no S3 read. Supports literal, regex, and word-boundary matching. Results include anchored references back to matching messages or events. - LLM (subject to model access): runs an Inspect Scout
LLM scanner against the transcript. You choose the model to search with (a
model is required). The LLM call goes through Hawk's middleman proxy,
authenticated with your own credentials — if you don't have access to the
chosen model you will receive a 403.
The search scope follows the tab you search from: from the messages tab the
judge model sees the conversation messages; from the transcript tab it also
sees the in-scope events (scores, errors, limits, …) rendered inline as
citable
[E#]entries. Transcripts of any size can be searched — the scan streams the transcript in bounded memory, splitting it into model-context-sized segments whose results are synthesized into one answer.
Both modes require the same model-group read access as viewing the transcript itself.
Development¶
To run the viewer locally for development: