Playing Contra with decision models A fine-tuned Laya Multilingual model (322 million parameters) cleared the first level of NES Contra, boss included, in 69.40 game seconds, according to a write-up by Nishaanth Reddy, falling just short of the 68.40-second run by hosted Jev that he was trying to beat. Reddy trained Laya and Qwen3.5-4B on two DGX Spark machines using decisions from Jev, and the frozen Laya checkpoint cleared 3 of 5 final runs on 8 October 2026, with two ending in game over. A separate GPT-6 Luna attempt through Codex produced only partial runs, with a median decision call of 5.26 seconds to choose an action lasting about 0.10 game seconds. Playing Contra with decision models By Nishaanth Reddy https://morethanamachine.com/authors/nishaanth-reddy/ · · updated After trying decision models in Doom https://morethanamachine.com/posts/jev-style-decisions-dgx-spark/ doom , I wanted one to finish the original NES Contra’s first level, boss included. Fine-tuned Laya got through in 69.40 game seconds . My saved Jev run took 68.40 . Close, but I haven’t beaten it. The four panels show Jev, Qwen and Laya’s best development run, plus Laya’s first failed final test. Settings differ across controllers. Playback follows game time, with decision pauses removed. Laya’s 69-second clear took 6 minutes 18 seconds to run. The sidebars show the last reply’s top three action scores. These aren’t calibrated odds of success. Call times include network latency. 00 Controls Jev https://typesafe.ai/blog/introducing-system-one-models-and-jev scores a set of possible answers. I gave the controller 12 actions, including running, jumping and firing. Each choice lasts six frames. The models read player, terrain and enemy data from game memory. They also get emulator previews of each move, which is a lot of help. Shooting actions pulse the fire button at 10 Hz. The verified clears use no cheats, continues or human takeover. I checked each clear by replaying the saved button inputs and confirming boss defeat followed by entry into Stage 2. 01 Training I fine-tuned Qwen3.5-4B https://huggingface.co/Qwen/Qwen3.5-4B on one DGX Spark and Laya Multilingual https://huggingface.co/convaiinnovations/laya-multilingual , with 322 million parameters, on the other. Qwen continued an existing low-rank adapter LoRA . All training and local-model inference ran on the Sparks. Hosted Jev supplied training decisions, including its 68.40-second run and labels for states where the local models got into trouble. I kept development and final test episodes out of the training updates. Jev itself was unchanged. One mistake was in the loss function. It punished a move for a death predicted 39 frames later, even though the model could choose again after six. I shortened that penalty to the six frames the action would actually run. 02 Results These are selected successful runs from different development settings, so they aren’t a matched benchmark. Elapsed time includes decision waits and emulator work. Local recordings, 7–8 October 2026. Individual recordings A later Qwen checkpoint kept retreating at the boss and lost both development games. The video uses the earlier checkpoint that finished. Laya then cleared 3 of 5 final runs with the checkpoint frozen. Each used a different starting delay on the same stage. Two ended in game over. The 69.40-second development run isn’t in this set. Five final attempts, 8 October 2026. I’d work on keeping it alive across more runs before trying to shave off another second. 03 The Luna runs I also tried GPT-6 Luna through Codex using my ChatGPT Pro subscription on 7 October. I built a separate Decisions API adapter, but never made a live call through it. The saved gameplay came through Codex. | Attempt | Decisions | Game time | Outcome | |---|---|---|---| | Integration check | 10 | 1.00 s | Stopped at the test limit | | First longer attempt | 8 | 0.80 s | Request timed out | | Second longer attempt | 54 | 5.39 s | Paused at my request | The longest attempt saved 324 frames. Its median decision call took 5.26 seconds , including Codex overhead, to choose an action lasting about 0.10 game seconds. The saved replies contain a chosen move without action scores. These are partial runs with no verified stage clear or full video. They aren’t included in the clear-time charts or the four-panel recording.