Inspiration
Data leakage has been found in 294 published papers across 17 scientific fields (Kapoor & Narayanan, Patterns, 2023). A model can score well on test data it has quietly already seen: the same person in training and testing, or a preprocessing step fit on all the data before the split. The person who wrote the evaluation usually can't see it. I wanted a tool that checks an evaluation the way a careful reviewer would, shows the evidence, and lets an AI help fix it without ever letting the AI decide whether the fix worked.
What it does
You give ATLAS a small scikit-learn classification project and the claim it makes (for example, "the activity classifier works on people absent from training").
- Deterministic checks decide. ATLAS runs the project's own evaluation in an isolated Docker container (no network, non-root, read-only filesystem), records which rows each preprocessing and model step learned from, and runs fixed checks: group overlap between training and testing, out-of-fold fitting, prediction alignment, and recomputed metrics. Outcomes are only
VIOLATION_FOUND,NO_VIOLATION_FOUND,INCONCLUSIVEorNOT_SUPPORTED, never "valid". A clean result means the listed checks passed within the coverage shown, not that the science is true. - The AI proposes, untrusted. If a check fails, NVIDIA Nemotron 3 Super (via Nebius Token Factory) reads the project and proposes a revised evaluation.
- A human approves the exact code by typing the start of its code hash. The revision runs sealed in Docker and the same checks judge it again.
- You don't have to trust the screen. Every recorded hash is recomputed before display; the demo lets you change one byte of a copy and watch ATLAS withhold the result. Each verified case downloads as an audit report.
How I built it
- Python 3.11, scikit-learn, Pydantic, Docker, Streamlit, with a Neon Postgres budget ledger for the hosted demo.
- Nemotron through Token Factory's OpenAI-compatible API, inside hard bounds: at most 6 requests per run, each reserved against a budget cap before it is sent; exact JSON validation of every reply (one action, no extra fields, no repair); a free pre-run
GET /modelscheck that the model, prices and context length match configuration. - Agentic engineering workflow: I designed the architecture, invariants and task cards and directed AI coding agents to implement them: Claude Code built, Codex ran independent adversarial reviews at every gate (including fault injection on the hosted spend controls), and Gemini reviewed every public claim against the records. 2,100+ automated tests, and every release passed review before publishing.
Results
- Live run 6: the original evaluation was
VIOLATION_FOUND; Nemotron proposed a fix; I approved it; it ran in Docker; the trusted evaluator judged itNO_VIOLATION_FOUND, with four checks moving FAIL → PASS. 5 requests, 0 schema failures, about $0.019 (estimate, not billing). - Real data (UCI HAR smartphone sensors): a deliberately flawed evaluation is caught (21 people on both sides of the split in all 5 folds); a clean control passes.
- ATLAS vs. the model alone (predeclared, 4 development projects, not held-out): ATLAS found all 8 assessable violations with no false alarms. Nemotron alone made 19 of 20 detections on the same 8 (19 of 23 overall), with 2 false alarms and 3 of 12 replies unusable. The flawed projects' files describe their flaws in text the model could read, so this is a small, favourable test for the model. What ATLAS adds is evidence you can re-run and fixes verified by execution.
Challenges
I ran the live agent eight times and recorded every failure as measured. Schema failures were the main obstacle: they occurred in 5 of the 8 runs and ended 4. Each fix was small and reviewed: storing raw replies so failures could be diagnosed, corrective turns built only from the schema, showing the model its own sanitized errors. I never loosened the evaluator to get a pass. On the real-data case, Nemotron proposed the correct repair four times across runs 7 and 8, but returned the code double-escaped every time. ATLAS doesn't repair model output, so it rejected all four, and I stopped there rather than tune prompts until a run happened to succeed.
What I learned
- Let the model propose and let deterministic code decide.
- A rising metric is not success: in run 6 the honest score went down (0.681 → 0.675) after the leaks were removed.
- Show the model its own errors; two candidates failed identically until the traceback reached it.
- Independent review catches real defects: Codex found reporting and gating bugs that tests alone missed.
What's next
Held-out cases written outside the builder's view, an evaluator-only holdout label store, native tool calling for the model, and testing beyond one Windows machine. The hosted demo stays up through judging (until Dec 15, 2026).
Built With
- claude-code
- codex
- docker
- nebius-token-factory
- neon
- nvidia-nemotron
- openai-sdk
- playwright
- postgresql
- pydantic
- pytest
- python
- scikit-learn
- streamlit
Log in or sign up for Devpost to join the conversation.