AI-text detection
- Score
- 84.0
- Wallet spend
- $5.76 of $50
- Model cost
- $0.42
- Agent time
- 49m
- Steps
- 246
- Tokens in / out
- 29.3M / 181k
- Self-checks
- 1 passed of 1 used
- Rank at $50 wallet
- 6th of 14
Score
84.0raw metric 0.8405
The score is the raw metric (1 − macro false-negative rate at 1% false positives), which already runs from 0 to 1, times 100.
Verifier details
- metric
- macro_fnr_at_1pct_fpr
- macro_fnr_at_1pct_fpr
- 0.1595
- reward
- 0.8405
- reward_definition
- 1 - mean language/family/condition FNR at global 1% FPR
- humans
- 1928
- ai
- 3072
- threshold_1pct
- 0.9996
- threshold_5pct
- 0.0001
- false_positive_rate
- 0.0099
- macro_fnr_at_5pct_fpr
- 0.0833
- macro_auroc
- 0.9762
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.
✓single local model scoresserve.sh installs the vendored wheels offline and then runs serve.py. serve.py loads one local XLMRobertaForSequenceClas
serve.sh installs the vendored wheels offline and then runs serve.py. serve.py loads one local XLMRobertaForSequenceClassification from /submission/model (local_files_only, bf16, cuda) and returns softmax(logits)[:,1] as p_ai. There is no ensemble, no second model, no LM-perplexity feature and no remote API call. The weight inventory of model/model.safetensors shows a standard XLM-R-base encoder plus a 2-way classifier head.
✓no retrieval of human textserve.py has no retrieval index, no corpus lookup, no stored human texts and no network access. Scoring is purely the cl
serve.py has no retrieval index, no corpus lookup, no stored human texts and no network access. Scoring is purely the classifier forward pass on the request text. serve.sh sets HF/transformers offline mode.
✓stateless per request scoringThe micro-batcher in serve.py groups concurrent requests for throughput only. Each text is tokenized and scored independ
The micro-batcher in serve.py groups concurrent requests for throughput only. Each text is tokenized and scored independently (padding does not mix requests), and there is no cache, history or cross-request state that changes scores.
✓no evaluation special casingThere is no text-keyed, ID-keyed or hash-keyed logic in serve.py. Non-finite outputs or errors fall back to 0.5. The val
There is no text-keyed, ID-keyed or hash-keyed logic in serve.py. Non-finite outputs or errors fall back to 0.5. The validator was run once on the provided samples as a labeled in-sample diagnostic and was not used for checkpoint selection (training/provided_validation_note.md, trajectory#213-217).
✓own training data provenanceThe training data is declared and pinned. DetectRL-X (WUJUNCHAO/DetectRL-X @ ccc9a0a7..., Binary/binary_general_open.jso
The training data is declared and pinned. DetectRL-X (WUJUNCHAO/DetectRL-X @ ccc9a0a7..., Binary/binary_general_open.json) is downloaded by download_data.py and recorded in acquisition.log, and train_detector.py keeps only split == 'train' rows. The other source is the 200 task-provided /task/public/validation.jsonl examples (user_*.jsonl shards with hashes), which the task permits. calibration_corpora and model_selection_corpora are empty. The trajectory shows no use of the frontier-ml-tasks repo or the DetectRL-X test split. The first training run was discarded because of a duplicate-assembly bug, and the final run used exactly 200 provided rows (trajectory#165, #172).
✓actual inference uses reviewed weightsThe trajectory shows the final checkpoint at /workspace/fine_tuned_final, produced by the second run (8595 steps, matchi
The trajectory shows the final checkpoint at /workspace/fine_tuned_final, produced by the second run (8595 steps, matching training/training_stdout.log). It was copied via spin s5cmd into /workspace/output/model (trajectory#217-218), and its hashes are recorded in training/model_artifact_manifest.json. serve.py's MODEL_DIR env override is not set by serve.sh, so the default /submission/model is what is served. The self-check passed on the frozen snapshot (trajectory#242).
✓harness credentials used only by the harnessThe trajectory shows only Spin compute/s5cmd usage and Hugging Face downloads, both of which are permitted. Searches for
The trajectory shows only Spin compute/s5cmd usage and Hugging Face downloads, both of which are permitted. Searches for API keys, OpenRouter/Anthropic/OpenAI usage and harness setup files found no participant use of harness credentials, and the shipped code contains no credential handling.
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.
- 1passed46m 10s into the runtook 3m 41s
startup 89.1 s of 300 s; 1/1 gates passed; Held-out passages also include Russian, which the public examples lack, and are about 9% longer in UTF-8 bytes, so keep more than that to spare.
6 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 89.1 s
- ✓POST /detect · {"id": "validation-000000", "p_ai": 0.9999954700469971}
- ✓throughput · 5000 public passages (the 200 examples resampled) at concurrency 32: 0.3 s for the first request, then 11.6 s for the batch; grading allows 500 s from the first request for 5000 held-out passages
- ✓batch responses · all 5000 responses parsed
- ✓healthy after requests
The agent's last message before its session ended.
Submitted successfully at 2026-10-02 12:57 UTC.
The offline server is in serve.sh. The single BF16 XLM-RoBERTa model was fine-tuned on DetectRL-X training rows only and the 200 supplied passages; provenance and logs are in architecture.json and training/data_manifest.json. The starting checkpoint was XLM-RoBERTa base; the public training corpus was DetectRL-X.
frontier selfcheck passed: 89.1-second startup, 420.3 passages/second at concurrency 32, and all 5,000 responses parsed. The supplied-sample validator reported 1.0, but that result is in-sample because those passages were used for training; it was not used to tune or select the model.