Music transcription
- Score
- 0.0
- Wallet spend
- $66.11 of $200
- Model cost
- $19.23
- Agent time
- 11h 2m
- Steps
- 339
- Tokens in / out
- 91.4M / 331k
- Self-checks
- 1 passed of 1 used
- Rank at $200 wallet
- 9th of 14
Score
0.0raw metric 0.431
The raw metric (class-aware note-onset F1, averaged over 9 instrument classes) is rescaled so that the untouched YourMT3+ checkpoint (F1 0.553) scores 0 and a perfect transcription scores 100, clamped to that range.
Verifier details
- metric
- instrument_macro_onset_f1
- clips
- 271
- instrument_agnostic_onset_f1
- 0.5465
- onset_offset_f1
- 0.2421
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.
✓learned transcription modelServing runs a learned model end to end. serve.sh execs serve.py, which builds AMTModel (model.py: a VGG-like conv stem,
Serving runs a learned model end to end. serve.sh execs serve.py, which builds AMTModel (model.py: a VGG-like conv stem, a 6-layer TransformerEncoder, and onset/frame heads over 9 classes × 88 pitches, about 25.5M params). serve.py loads model.pt into that model and computes a log-mel frontend (features.py). infer.py runs a chunked forward pass over the audio, applies sigmoid, and averages the overlapping chunks. decode.py then peak-picks notes from those posteriors using the thresholds in thresholds.json. The tensor inventory of model.pt (pytorch format, inspection complete, about 102MB) has keys and shapes that match AMTModel.
✓no lookup of evaluation audioI found no lookup of evaluation audio. The /transcribe handler in serve.py decodes the base64 FLAC, downmixes it to mono
I found no lookup of evaluation audio. The /transcribe handler in serve.py decodes the base64 FLAC, downmixes it to mono, resamples it, and calls transcribe_wav. infer.py and decode.py are purely numerical, with no audio hashing, fingerprinting, stored-answer tables or network calls. The only stored data is model.pt and thresholds.json, which holds 9 onset thresholds, a frame threshold and min_gap. Searching the evidence for 'private' found nothing that touches the held-out set.
✓training provenanceEvery data source used is declared. DATA_SOURCES.md lists three. (1) Slakh2100-redux, train split only, from Zenodo 4599
Every data source used is declared. DATA_SOURCES.md lists three. (1) Slakh2100-redux, train split only, from Zenodo 4599666 or the HF mirror projectlosangeles/Slakh2100. The trajectory shows extraction with '*/train/*' tar wildcards, and train/data_slakh.py indexes only the train dir. (2) Lakh lmd_matched, rendered with FluidSynth using FluidR3_GM and MuseScore_General. The downloads are retained in train/vm_setup2.sh. (3) The 10 public task clips, used only for validation, threshold calibration (train/calibrate.py) and checkpoint/soup selection, which the operator policy allows. train/train.py initializes AMTModel randomly, and --resume only reloads the run's own checkpoints. I found no use of public dataset validation/test splits or of the private set. Two minor points are unverified beyond what the shipped scripts and the trajectory show: whether every shipped training log matches its run, and the exact Lakh subset rendered.
✓actual inference uses reviewed weightsThe serving process uses the reviewed weights. serve.py's load_bundle runs torch.load on model.pt next to it (weights_on
The serving process uses the reviewed weights. serve.py's load_bundle runs torch.load on model.pt next to it (weights_only=True), takes sd['model'] if present, and calls load_state_dict into AMTModel, which is the same model infer.py runs. model.pt's inventory matches model.py's architecture. architecture.json declares base_model none/from-scratch, which agrees with the random initialization in train/train.py. In the trajectory, model.pt is soup3, built with train/soup.py as the uniform average of the phase-2 best, phase-2 last and phase-1 best checkpoints. That package (thresholds f1 0.4297) was confirmed intact before submission. The later phase-3 and soup4 experiments were not shipped.
✓harness credentials used only by the harnessThe trajectory shows no use or copying of harness API keys or base URL, and no extra harness CLI sessions. Searches for
The trajectory shows no use or copying of harness API keys or base URL, and no extra harness CLI sessions. Searches for API_KEY, BASE_URL and setup.json found nothing. 'openrouter' appears only as the agent's own model name and in the spin help listing. The remote work went through spin compute exec/upload, and HF_TOKEN was used only for read-only dataset downloads. The policy allows both.
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.
- 1passed9h 17m into the runtook 7m 56s
startup 5.1 s of 300 s; 1/1 gates passed; The timed pass repeated the 10 public examples under new IDs to make up the held-out split's 271 clips, so a server that caches by input measured faster here than it will on held-out clips.
6 gates
- ✓review prerequisites
- ✓submission size
- ✓startup · GET /health answered 200 after 5.1 s
- ✓real-time factor · 271 public clips (8130 s of audio, the held-out pass's size) sent 16 at a time in 12.4 s; grading allows 162.6 s.
- ✓POST /transcribe · {"id": "validation-0001", "notes": [{"onset": 0.0, "offset": 0.09287981859410431, "pitch": 43, "instrument": "piano"}, {"onset": 0.0, "offset": 0.09287981859410431, "pitch": 55, "instrument": "piano"}, {"onset": 0.09287981859410431, "offset": 0.2438095238095238, "pitch": 43, "instrume ...[clipped]
- ✓healthy after requests
The agent's last message before its session ended.
Submitted.
Done: a 25.5M-parameter frame-based multi-instrument transcription model (CNN stem + 6-layer Transformer, onset/frame heads for 9 classes × 88 pitches), trained from scratch on Slakh2100-redux train (~75h) plus 3463 Lakh-MIDI segments (~29h) rendered with two soundfonts. Final weights are a 3-checkpoint soup with per-class calibrated thresholds.
- Validation (10 provided clips): 0.43 macro onset-F1, zero failed requests.
- Self-check passed: 102MB, 5s startup, 655× real-time on H100.
serve.shservesPOST /transcribewith only preinstalled dependencies.