Figure to TikZ
- Score
- 60.4
- Wallet spend
- $195.44 of $200
- Model cost
- $10.79
- Agent time
- 6h 19m
- Steps
- 317
- Tokens in / out
- 33.9M / 414k
- Self-checks
- 2 passed of 3 used
- Rank at $200 wallet
- 2nd of 14
Score
60.4raw metric 0.6038
The score is the raw metric (compilation rate × geometric mean of seven figure and code similarity metrics), which already runs from 0 to 1, times 100.
Verifier details
- metric
- compilation_times_geomean_paper_metrics
- samples
- 611
- compiled
- 605
- compilation_rate
- 0.9902
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.
✓declared trainingarchitecture.json pins the base model as Qwen/Qwen3-VL-8B-Instruct at revision 0c351dd01ed87e9c1b53cbc748cba10e6187ff3b.
architecture.json pins the base model as Qwen/Qwen3-VL-8B-Instruct at revision 0c351dd01ed87e9c1b53cbc748cba10e6187ff3b. It also declares the data: SciTikZ-230K at pinned revision 3061cc33… with a parquet sha256, plus the 50 task-provided public/validation.jsonl examples. The training code is shipped. training/train.py adds a rank-64 LoRA to the language-model layers only and freezes the vision tower. training/stage3.sh resumes the earlier run, and training/merge.py merges the adapter into the base weights. Training logs, metrics and merge logs are retained. evidence/model_audit.json shows the vision tensors match the base exactly and the language-layer tensors were changed. All of this is consistent with the declared LoRA fine-tune.
✓non specialist initializationtraining/download.py downloads the general Qwen3-VL-8B-Instruct model with snapshot_download at the pinned revision (tra
training/download.py downloads the general Qwen3-VL-8B-Instruct model with snapshot_download at the pinned revision (trajectory step 164). train.py and merge.py both load that downloaded base. The vision tensors match the base in the audit. The adapter safetensors contains only LoRA A/B tensors on the language layers. I found no specialist TikZ checkpoint (DeTikZify, SciTikZer or similar) downloaded or loaded anywhere in the code or the trajectory.
✓no benchmark developmentThe corpus comes only from SciTikZ-230K at a pinned revision (training/download.py, training/download_dataset.py, traini
The corpus comes only from SciTikZ-230K at a pinned revision (training/download.py, training/download_dataset.py, training/prepare.py) plus the permitted task-provided validation examples. Diagnostics (training/diagnose.py, trajectory#292) use public/validation.jsonl and other samples from the same training pool. Every mention of SciTikZ-Bench in the trajectory is a policy statement; the benchmark data was never downloaded or used.
✓neural editable reconstructionserver.py runs vLLM image-conditioned generation from the fine-tuned model to produce TikZ source. The repair, compact a
server.py runs vLLM image-conditioned generation from the fine-tuned model to produce TikZ source. The repair, compact and fallback passes are also neural and conditioned on the image. Post-processing (document_from_answer/pdf_compatible) only wraps and sanitizes the text and strips includegraphics/input, so the output is editable TikZ code generated by the model, not retrieved or embedded images.
✓actual inference uses reviewed weightsserve.sh sets the HF libraries to offline mode, installs the bundled wheels and runs server.py. server.py builds AsyncEn
serve.sh sets the HF libraries to offline mode, installs the bundled wheels and runs server.py. server.py builds AsyncEngineArgs with model=ROOT/'model'. trajectory#291 rsyncs the merged uniform checkpoint-1000 weights into output/model, and trajectory#293 copies that adapter and its audit into evidence. The model/*.safetensors inventory has the standard Qwen3-VL tensor layout. The server makes no external API calls.
✓harness credentials used only by the harnessTrajectory searches found no participant use of harness API keys or endpoints. The only 'codex exec' occurrence is proce
Trajectory searches found no participant use of harness API keys or endpoints. The only 'codex exec' occurrence is process-listing output of the harness itself (trajectory#60). The only API_KEY reference is a default argument in task-provided validation code. server.py makes no external model calls.
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 3 of 4.
- 1failed33m 11s into the runtook 25m 35s
startup 155.6 s of 300 s; failed POST /v1/chat/completions: http_status: failed 3 attempts: RuntimeError: Submission returned HTTP 500: b'Internal Server Error' | RuntimeError: Submission returned HTTP 500: b'Internal Server Error' | RuntimeError: Submission returned HTTP 500: b'Internal Ser
4 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 155.6 s
- ✗POST /v1/chat/completions · http_status: failed 3 attempts: RuntimeError: Submission returned HTTP 500: b'Internal Server Error' | RuntimeError: Submission returned HTTP 500: b'Internal Server Error' | RuntimeError: Submission returned HTTP 500: b'Internal Server Error'; grading scores such a figure as the empty answer and fails the run above 5% failed figures
- ✗batch responses · VerificationFailure: 3 of 48 requests failed, timed out or returned malformed responses, more than 5%; the server is not serving reliably. First errors: ["dev-0004#4: failed 3 attempts: Submission returned HTTP 500: b'Internal Server Error' | Submission returned HTTP 500: b'Internal Server Error' | Submission returned HTTP 500: b'Internal Server Error'", "dev-0009#9: failed 3 attempts: Submission returned HTTP 500: b'Internal Server Error' | Submission returned HTTP 500: b'Internal Server Error' | Submission returned HTTP 500: b'Internal Server Error'", "dev-0010#10: failed 3 attempts: Submission returned HTTP 500: b'Internal Server Error' | Submission returned HTTP 500: b'Internal Server Error' | Submission returned HTTP 500: b'Internal Server Error'"]
- 2passed1h 34m into the runtook 9m 17s
startup 136.3 s of 300 s; 1/1 gates passed; The 611-figure deadline was projected from a sample: 48 public figures at concurrency 16 against their 565 s share of it.; Nothing was compiled: answers were checked for a closed ```latex fence within 64,000 characters, not for whether pdfLaTeX ren
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 136.3 s
- ✓POST /v1/chat/completions · {"id": "dev-0000", "answer": "```latex\n\\documentclass[border=2pt]{standalone}\n\\usepackage{tikz}\n\\usetikzlibrary{positioning}\n\n\\usetikzlibrary{calc,positioning,arrows.meta}\n\\providecolor{blue}{RGB}{0,0,255}\n\\providecolor{cyan}{RGB}{0,255,255}\n\\providecolor{gray}{RGB}{128 ...[clipped]
- ✓closed latex fence · the first closed ```latex fence holds 1,543 characters of LaTeX
- ✓611 figures in 7200 s · projected from 48 of 611 requests at concurrency 16: 48 public figures took 139.8 s (1,779.8 s scaled to 611), plus 4.5 s for the first figure; held-out figures differ and may need longer answers
- ✓batch responses · all 48 answers parsed; 48 have a closed ```latex fence within 64,000 characters
- ✓healthy after requests
- 3passed6h 10m into the runtook 9m 22s
startup 148.0 s of 300 s; 1/1 gates passed; The 611-figure deadline was projected from a sample: 48 public figures at concurrency 16 against their 565 s share of it.; Nothing was compiled: answers were checked for a closed ```latex fence within 64,000 characters, not for whether pdfLaTeX ren
7 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 148.0 s
- ✓POST /v1/chat/completions · {"id": "dev-0000", "answer": "```latex\n\\documentclass[border=3pt]{standalone}\n\\usepackage{tikz}\n\\usepackage{xstring,calc}\n\\usetikzlibrary{calc,positioning}\n\n\\newlength{\\NodeSize}\n\\tikzset{DNA Style/.style={minimum size=0.5cm, draw=gray, line width=1pt, inner sep=2pt}}\n\ ...[clipped]
- ✓closed latex fence · the first closed ```latex fence holds 1,465 characters of LaTeX
- ✓611 figures in 7200 s · projected from 48 of 611 requests at concurrency 16: 48 public figures took 129.0 s (1,641.4 s scaled to 611), plus 6.1 s for the first figure; held-out figures differ and may need longer answers
- ✓batch responses · all 48 answers parsed; 48 have a closed ```latex fence within 64,000 characters
- ✓healthy after requests
The agent's last message before its session ended.
Submitted /workspace/output/ with trained weights, offline dependencies, provenance, and serve.sh.
- Final offline H100 self-check passed.
- Startup: 148 seconds.
- Projected 611-figure runtime: 27.5 minutes, based on public samples—not the hidden test.
- Training-only diagnostics: 105/105 compile, objective 0.6901.
No SciTikZ-Bench data or specialist TikZ initialization was used.