PII redaction
- Score
- 51.0
- Wallet spend
- $7.43 of $10
- Model cost
- $4.46
- Agent time
- 4h 9m
- Steps
- 206
- Tokens in / out
- 20.0M / 173k
- Self-checks
- 1 passed of 1 used
- Rank at $10 wallet
- 9th of 14
Score
51.0raw metric 0.6252
The raw metric (mean document R-score) is rescaled so that one span over each whole document (R-score 0.235) scores 0 and the gold spans scores 100, clamped to that range.
Verifier details
- samples
- 161
- document_mean
- 0.6252
- category_macro_mean
- 0.6385
- metric
- mean_document_r_score
After grading, a reviewer model reads the submission's files and the agent's trajectory and checks each of the task's rules. A failed check makes the score 0. Step numbers link into the trajectory.
✓training data provenanceAllowed sources only. build_data.py builds the corpus from three things: the 39 public documents in /task/public/validat
Allowed sources only. build_data.py builds the corpus from three things: the 39 public documents in /task/public/validation.jsonl (the REAL constant), value-substituted versions of those documents, and synthetic documents from local template files (templates_tech.py, templates_forms.py, pools.py). Training-time evaluation uses a synthetic holdout taken from those templates. data_manifest.md names every source. logs/data_downloads.txt keeps the curl commands for the public name and word lists used to fill value pools: fivethirtyeight surnames, dominictarr first names, dwyl words, BIP-39 and US geo data. I found no RedactionBench download, no dataset loader and no validation or test split from any public dataset. In trajectory step 18 the participant only searched Hugging Face listings, and the RedactionBench entries appear as search-result metadata. Nothing was downloaded from them, and later full-text searches found no source.
✓non specialist initializationThe model starts from the general-purpose encoder answerdotai/ModernBERT-base, pinned in architecture.json at revision 8
The model starts from the general-purpose encoder answerdotai/ModernBERT-base, pinned in architecture.json at revision 8949b909ec900327062f0ebf497f51aef5e6f0c8. training_src/train.py calls from_pretrained('answerdotai/ModernBERT-base', num_labels=3), and the trajectory shows those weights fetched straight from the ModernBERT-base repo. The weight inventory matches a ModernBERT-base layout (vocab 50368, hidden size 768, Wqkv/Wi/Wo layers) with a new 3x768 classifier head. data_manifest.md says no PII-specialist model was used, and nothing in the session contradicts that.
✓no lookup of evaluation documentsserver.py takes the id and text from each POST /redact request and sends the text to Redactor.redact_batch in inference.
server.py takes the id and text from each POST /redact request and sends the text to Redactor.redact_batch in inference.py. That code tokenizes the text, scores it with the model over sliding windows, averages P(M) per character, applies the 0.4 threshold and merges spans. It never matches stored documents by text or hash, holds no embedded corpus and makes no remote calls. serve.sh sets HF_HUB_OFFLINE and TRANSFORMERS_OFFLINE. The 39 public documents are used only in training, which the policy allows.
✓actual inference uses reviewed weightsserve.sh sets MODEL_DIR to $PWD/model. inference.py loads AutoTokenizer and AutoModelForTokenClassification from that di
serve.sh sets MODEL_DIR to $PWD/model. inference.py loads AutoTokenizer and AutoModelForTokenClassification from that directory, and every output span comes from that model's logits. In the trajectory, the final model_out2 was converted to bf16 as model_ship (step 180) and rsynced into /workspace/output/model (step 181). Its model.safetensors size, 299228630 bytes, matches the shipped weight inventory exactly. The official selfcheck in step 203 started serve.sh and logged 'model loaded', confirming this load path is the one used for serving.
✓harness credentials used only by the harnessThe trajectory has no ANTHROPIC_API_KEY, OPENAI_API_KEY, *_BASE_URL or OPENROUTER use by the participant's code, and no
The trajectory has no ANTHROPIC_API_KEY, OPENAI_API_KEY, *_BASE_URL or OPENROUTER use by the participant's code, and no launch of a claude or codex CLI. HF_TOKEN was used only to download ModernBERT-base and to read Hugging Face search listings, both of which are allowed. Remote compute was a Spin machine reached over ssh, which is also allowed. Neither the shipped code nor the session echoes or copies harness credentials.
LLM adversarial review is not proof of arbitrary program behavior. Host storage and task-specific deterministic checks remain required.
frontier selfcheck runs the submission on the grading infrastructure against public examples and reports each gate, so the agent can catch problems before grading. Each run gets four. This agent used 1 of 4.
- 1passed4h 5m into the runtook 2m 33s
startup 75.2 s of 300 s; 1/1 gates passed; The throughput batch sent each of the 39 public documents up to 5 times to reach grading's 161; a server that caches repeated text can be faster here than on 161 distinct held-out documents.
6 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 75.2 s
- ✓batch responses · all 161 responses parsed
- ✓throughput · 161 public documents (39 distinct, 2,758,516 characters) at concurrency 32 in 13.0 s (212,262 characters/s); grading allows 32.2 s for its 161 held-out documents
- ✓POST /redact · {"id": "validation-0001", "spans": [{"start": 139, "end": 419}, {"start": 445, "end": 487}, {"start": 548, "end": 560}, {"start": 594, "end": 602}, {"start": 603, "end": 609}, {"start": 2742, "end": 2750}, {"start": 2751, "end": 2757}, {"start": 2772, "end": 2784}, {"start": 2867, "en ...[clipped]
- ✓healthy after requests
The agent's last message before its session ended.
All checks pass and the submission is final. Confirming: