CoolFace
Apppublic

holistic-ai/persival-observability

sourceHugging Faceupdated 18d agoView on Hugging Face
0likes
App README

Persival Observability — Hugging Face Space

This Space is the static build of the Persival observability viewer. It renders one captured run at a time as a Component Graph (the run's cast), an Action Graph (its timeline of model calls), and a details rail that decomposes the selected call — with a MINJA/HarmBench attack overlay where the run was attacked.

Two model sweeps (gpt-oss-120b, gemma-4-31b), five memory arms each (builtin, mem0, mem0-legacy, memgpt, memos). Pick a sweep and an arm from the dropdowns in the top chrome.

How this Space is built

The original app is a Next.js server that reads data/ through two API routes. Static Spaces have no server, so src/scripts/build-static-data.mjs pre-generates every JSON document those routes used to serve (data/index.json, per-arm attack files, sweep stats) and the app is exported with output: "export". The viewer logic is otherwise unchanged.

Rebuild from src/:

bash
cd src && npm install
PERSIVAL_RESULTS_ROOT=/path/to/data npm run build   # writes ./out

then upload out/ plus this README to the Space.

Sensitivity — read before using the data

This Space carries the attack overlay unmodified: HarmBench behaviour text, the judge's harm demonstrations, and the models' own completions (including successful jailbreaks). The material is research data from Holistic AI's memory-attack study and is published for inspection of the traces; it may contain harmful content and should be handled accordingly.

VIEWER.md documents what each panel shows and the provenance of the design.


What is in the box

.
├── app/                  the Next.js application (App Router)
├── public/
├── data/                 the bundled sweeps — this is all the viewer reads
│   ├── gpt-oss-120b/
│   │   ├── traces/            one directory per memory arm, each with trace.json
│   │   └── frontend_node_results.json      the attack overlay
│   └── gemma-4-31b/           the same shape
├── .env                  points the app at ./data
└── VIEWER.md             what the viewer shows, and its provenance

Two model sweeps, five memory arms each: builtin, mem0, mem0-legacy, memgpt, memos. Pick a sweep and an arm from the dropdowns in the top chrome. The none control arm is not included — it is excluded from the Experiment 2 corpus entirely, since it carries no memory architecture and was never attacked.

data/ is about 63 MB, most of it the traces: they carry every model-facing call verbatim, which is the point of the schema and the reason the details rail can show a real request and response rather than a summary.

No redaction

This package carries the attack overlay unmodified: HarmBench behaviour text, the judge's harm demonstrations, and the models' own completions (including successful jailbreaks) are all present, exactly as in the research repository. This distribution is prepared for Holistic AI as a co-holder of the underlying research IP, not for open release. Please treat it accordingly and do not redistribute it further.

Pointing it at other data

PERSIVAL_RESULTS_ROOT is the only setting that matters. It is resolved from the app directory, and an absolute path works too:

bash
PERSIVAL_RESULTS_ROOT=/path/to/sweeps npm run dev

Under that root the app expects one directory per sweep, each containing a traces/ directory of <arm>/trace.json files and a frontend_node_results.json. A sweep appears in the viewer only when it has both: a sweep with traces but no attack results would render as a graph on which every node is silent, which reads as attacked and clean rather than not attacked. Traces alone, with no overlay, are served fine — the alarms simply do not appear.

The trace format is the project's own schema; VIEWER.md describes what it must carry.

Provenance

This viewer is Persival's own frontend, written against the project's trace schema. What it owes to AgentSeer by Holistic AI (<https://huggingface.co/spaces/holistic-ai/AgentSeer>, baseline commit 34d513e, used with permission) is a layout idea, not code: the division of the canvas into a Component Graph above an Action Graph with a details rail alongside. Credit for that base visualisation pattern belongs to AgentSeer's authors, and LICENSE in this directory is carried over from that lineage.

VIEWER.md states the inherited/original boundary in full. Please keep both intact.

A note on what this is

The viewer is a demo and inspection surface, not a measuring instrument. The trace schema is the scientific contribution; any figure rendered here is only as good as the trace behind it, and the overlay's numbers are the research corpus's, not a live measurement.