Voice endpointing
- Score
- 0.0
- Wallet spend
- $47.61 of $200
- Model cost
- $50.87
- Agent time
- 9h 31m
- Steps
- 529
- Tokens in / out
- 151.4M / 273k
- Self-checks
- 2 passed of 2 used
- Rank at $200 wallet
- 8th of 14
Score
0.0raw metric 0.6185
The raw metric (end-of-turn recall at 5% false positives) is rescaled so that the shipped silence heuristic (recall 0.655 at 5% false positives) scores 0 and perfect recall scores 100, clamped to that range.
Verifier details
- metric
- eot_recall_at_5pct_fpr
- fpr_target
- 0.0500
- threshold
- 0.5243
- recall
- 0.6185
- fpr
- 0.0476
- positives
- 1523
- pauses
- 819
- tp
- 942
- fn
- 581
- fp
- 39
- tn
- 780
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 causal modelThe model is a learned network. training/train.py starts from HF HubertModel.from_pretrained('facebook/hubert-large-ll60
The model is a learned network. training/train.py starts from HF HubertModel.from_pretrained('facebook/hubert-large-ll60k'), maps those weights into model.CausalSSL, adds rank-16 LoRA plus a 4-layer causal transformer head, and trains with BCE plus an auxiliary activity loss. The session shows the run that produced the weights: the large_lora_v2 command at trajectory#187. Its step-3150 checkpoint had LoRA merged and was saved as large_e1_merged.ckpt (trajectory#331). That file was copied to /workspace/output/model.ckpt (trajectory#333) and its md5 was checked before submission (trajectory#526). At serving time, serve.sh sets MODEL_PATH=model.ckpt, and server.py calls predict.load_checkpoint, which rebuilds EOTModel from model_args and loads the state_dict. The forward pass in predict_streams then produces the probabilities. No weight inventory was supplied for the .ckpt pickle, but the code path and the session record are consistent.
✓causal frame probabilitiesEvery operation in the model only looks at past audio: - The conv feature extractor uses valid convolutions. Their fixed
Every operation in the model only looks at past audio: - The conv feature extractor uses valid convolutions. Their fixed 5 ms (80-sample) right edge is absorbed by a 1-frame reporting delay. - The positional conv is left-padded. Encoder and head attention use is_causal=True. LayerNorm is applied per frame. - causal_norm uses an expanding cumsum RMS. hand_features uses trailing windows and cummax. - Block inference in predict_streams uses only left context. - Post-processing is a trailing 5-frame mean plus a 21-frame delay filled with zeros. The only full-signal operation is the soxr HQ resample in server.py. That is a standard polyphase resampler, which the 5 ms tolerance allows.
✓no lookup of evaluation audioserver.py decodes the request audio, resamples it, and runs the network through predict_streams and streams_to_response.
server.py decodes the request audio, resamples it, and runs the network through predict_streams and streams_to_response. On an exception it falls back to zeros. There is no hashing, fingerprinting, label table or stored per-conversation output. The only thing loaded at runtime is model.ckpt, and it is loaded as model weights.
✓training provenanceThe training corpus is declared in data_manifest.md and architecture.json as otoearth/otoSpeech-full-duplex-turn-104h, a
The training corpus is declared in data_manifest.md and architecture.json as otoearth/otoSpeech-full-duplex-turn-104h, and training/download.py contains the download command. The session confirms the download: snapshot_download of that repo (trajectory#37, trajectory#40, trajectory#41). The TurnBench paper describes this repo as its separate training release (trajectory#19). The dev30 selection split was drawn from the same corpus. The 8 conversations used for selection and LOO experiments are the shipped validation samples, which the policy allows. They are listed in training/make_folds.py as VAL8 = 20, 21, 22, 94, 95, 122, 124, 125. The shipped model is the train-only large_lora_v2 step-3150 checkpoint, not the all8 fine-tune. No session step downloads or uses mundo-ai/turn-benchmark-* or the JSALT no-backchannel set. The only mentions are a README fetch and the manifest text. The cloned turnbench GitHub repo is code. Numeric directory ids in otoSpeech are that corpus's own identifiers, not TurnBench conversation ids.
✓harness credentials used only by the harnessThe trajectory has no use, read or copy of the agent harness's model API credentials: no OPENROUTER, ANTHROPIC or OPENAI
The trajectory has no use, read or copy of the agent harness's model API credentials: no OPENROUTER, ANTHROPIC or OPENAI key, and no BASE_URL apart from Spin setup text in the task prompt. The participant used only Spin compute and HF_TOKEN, which the policy allows. HF_TOKEN was passed to its own Spin VM for the dataset download (trajectory#39).
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 2 of 4.
- 1passed4h 39m into the runtook 2m 17s
startup 30.3 s of 300 s; 1/1 gates passed; The 3x real-time gate is projected from 2 of 30 requests at concurrency 1: public conversations 122 (the cold first request) and 124 (its pace). Each gets half its audio's duration to answer, the first 300 s more for warm-up; grading bounds only the
6 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 30.3 s
- ✓POST /predict (conversation 122) · {"conversation": "122", "speaker_1": {"hop_seconds": 0.02, "frames": 34203, "peak": 0.8365545868873596}, "speaker_2": {"hop_seconds": 0.02, "frames": 34203, "peak": 0.929440438747406}}
- ✓POST /predict (conversation 124) · {"conversation": "124", "speaker_1": {"hop_seconds": 0.02, "frames": 30840, "peak": 0.8300437331199646}, "speaker_2": {"hop_seconds": 0.02, "frames": 30840, "peak": 0.8918110132217407}}
- ✓real-time factor · Held-out pass projected from 2 of 30 requests at concurrency 1 at 86 s of server time for 20455 s of audio, 6818 s allowed: the cold first request (conversation 122, 684 s of audio in 2.8 s) plus the other 19771 s at conversation 124's pace (617 s in 2.6 s, 236.9x real time). The two conversations alone: 239.1x real time. Clock: trusted HTTP client inside the serving sandbox; provider transfer/exec latency excluded.
- ✓healthy after requests
- 2passed7h 37m into the runtook 2m 54s
startup 52.4 s of 300 s; 1/1 gates passed; The 3x real-time gate is projected from 2 of 30 requests at concurrency 1: public conversations 122 (the cold first request) and 124 (its pace). Each gets half its audio's duration to answer, the first 300 s more for warm-up; grading bounds only the
6 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 52.4 s
- ✓POST /predict (conversation 122) · {"conversation": "122", "speaker_1": {"hop_seconds": 0.02, "frames": 34203, "peak": 0.8302246332168579}, "speaker_2": {"hop_seconds": 0.02, "frames": 34203, "peak": 0.92559814453125}}
- ✓POST /predict (conversation 124) · {"conversation": "124", "speaker_1": {"hop_seconds": 0.02, "frames": 30840, "peak": 0.803662121295929}, "speaker_2": {"hop_seconds": 0.02, "frames": 30840, "peak": 0.8800933957099915}}
- ✓real-time factor · Held-out pass projected from 2 of 30 requests at concurrency 1 at 235 s of server time for 20455 s of audio, 6818 s allowed: the cold first request (conversation 122, 684 s of audio in 7.9 s) plus the other 19771 s at conversation 124's pace (617 s in 7.1 s, 86.9x real time). The two conversations alone: 86.7x real time. Clock: trusted HTTP client inside the serving sandbox; provider transfer/exec latency excluded.
- ✓healthy after requests
The agent's last message before its session ended.
The submission is complete and validated. Confirming.