{
  "claim": "60 decisions per second appears exactly once in the laya-coreml repository: as the paced-sweep row that fails, at 100% deadline misses. The rate the Core ML runtime actually sustains on an M3 Max is 49.1-50.0 fresh decisions per second, and each of those decisions is three sequential model questions, not one.",
  "method": "Core ML ANE FP16 bundle at B1/L96/K32, compact prompt, 24x16 board, twenty warmup decisions discarded. A tick includes planner feature construction, three sequential predict calls, Rich composition, truecolor ANSI serialization into memory and the game update; it excludes model loading, warmup and the terminal emulator's own painting. Paced rows add real sleep calls and pass only if at most 1% of active ticks exceed the requested budget. Uncapped rows wait for a fresh prediction on every move and have no deadline. 'API P50' is the three-question predict call; 'tick P50' is the whole active tick.",
  "source": "https://github.com/mizorewww/laya-coreml/blob/main/benchmarks/results/coreml-snake.json",
  "captured": "2026-09-20",
  "note": "The paced and uncapped rows are not the same experiment run at different speeds. The repository notes that the three-question API measured about 26.3 ms P50 while paced against 16.3 ms while uncapped, on the same machine and the same board, and declines to explain why — scheduling and device power-state transitions are named as candidates, not as findings. That is why the fastest passing paced setting (20/s) sits so far below the sustained uncapped rate (49.7/s).",
  "columns": [
    { "key": "mode", "label": "mode", "align": "left" },
    { "key": "requested", "label": "requested /s", "align": "right", "mono": true },
    { "key": "observed", "label": "observed /s", "align": "right", "mono": true },
    { "key": "api", "label": "3-question API P50 ms", "align": "right", "mono": true },
    { "key": "tick", "label": "tick P50 ms", "align": "right", "mono": true },
    { "key": "misses", "label": "deadline misses", "align": "right", "mono": true },
    { "key": "result", "label": "result", "align": "left" }
  ],
  "rows": [
    { "mode": "paced sweep, seed 7, 120 moves", "requested": 20, "observed": 18.55, "api": 28.54, "tick": 31.64, "misses": "0.83%", "result": "pass" },
    { "mode": "paced sweep, seed 7, 120 moves", "requested": 30, "observed": 28.67, "api": 24.57, "tick": 27.9, "misses": "10.83%", "result": "fail" },
    { "mode": "paced sweep, seed 7, 120 moves", "requested": 40, "observed": 37.22, "api": 20.19, "tick": 23.59, "misses": "37.50%", "result": "fail" },
    { "mode": "paced sweep, seed 7, 120 moves", "requested": 50, "observed": 44.21, "api": 17.29, "tick": 20.45, "misses": "53.33%", "result": "fail" },
    { "mode": "paced sweep, seed 7, 120 moves", "requested": 60, "observed": 50.68, "api": 16.79, "tick": 19.5, "misses": "100.00%", "result": "fail" },
    { "mode": "uncapped soak, seed 101, 600 moves", "requested": "—", "observed": 49.1, "api": 16.53, "tick": 19.34, "misses": "0", "result": "pass" },
    { "mode": "uncapped soak, seed 102, 600 moves", "requested": "—", "observed": 49.89, "api": 16.05, "tick": 18.76, "misses": "0", "result": "pass" },
    { "mode": "uncapped soak, seed 103, 600 moves", "requested": "—", "observed": 49.99, "api": 16.33, "tick": 19.08, "misses": "0", "result": "pass" }
  ]
}
