freeqaz/decomp-synth-lifter-v14-evalformat-qwen3.5-9b-lora
decomp-synth lifter v14-evalformat — Qwen3.5-9B LoRA
A LoRA adapter that tunes Qwen3.5-9B for multi-turn, feedback-driven byte-exact decompilation matching: the model proposes C++ source, the real original compiler + objdiff grade the result, and the model reads the structured feedback pane (fuzzy %, diff regions, compiler diagnostics) to fix its own near-misses over successive turns. This is the project's strongest 9B on that agentic instrument.
The project
This adapter comes out of a campaign teaching fleets of AI coding agents to reconstruct shipped game binaries byte-for-byte — matching decompilation, the console-preservation community's gold standard: rewrite C++ until the original vintage compiler, at the original flags, reproduces the retail machine code exactly. In that campaign, agent swarms byte-matched over 44,000 functions of a stripped retail Xbox 360 binary in about ten weeks — with every proposal judged by the real compiler and objdiff, never by a model.
decomp-synth is the search-and-ML side of that system: an engine that searches behavior-preserving C++ rewrites against the real build, and mines its own verified attempts into training data. Where the single-turn siblings in this family propose blind, this adapter closes the loop: it is trained on the eval-format conversation shape, so the compiler's structured verdict on turn N is the prompt for turn N+1. The design rule stays the same throughout: models propose, deterministic oracles dispose — a fuzzy match score is a search gradient and an adversary, and byte-exact recompilation is the only terminal judge.
Background reading, in order:
- How agent swarms decompile games byte-for-byte — the campaign, and what byte-exact matching actually demands
- LLM-assisted decompilation: tools, not prompts — why the model is never allowed to judge its own work
- Forking the decompilation toolchain — the compiler, splitter, and diff stack underneath
- Infrastructure for running agent swarms — what running the fleet takes
Model facts
Evaluation
Cell B conversation instrument: 4-turn compile-in-the-loop trajectories on 118 held-out start states (GameCube mwcc clone substrate), paired against a derangement-scrambled-feedback control, byte-exact witness as the endpoint. K=2 replicas, T=0.6.
- vs the previous-generation v13 adapter: witnesses 10 vs 3 in both replicas (sign p=.039 / p=.016), pooled 20 vs 6 over 102 paired symbols (p=.022)
- real-vs-scrambled feedback contrast resolves within one replica (+8 with zero reversals, p=.0078) — the gain is specifically in reading the feedback, not just solve count
- caveats that travel with these numbers: unpreregistered capability A/B; the effect concentrates in start states already ≥97 fuzzy (near-done repairs); below ~90 the binding constraint for all 9B-class arms is compile success, not feedback reading
A follow-up rank ladder (r32/r64/r128 on a successor corpus) measured FLAT — adapter capacity is not the ceiling at 9B; data is.
How to use it
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-9B", dtype="bfloat16", device_map="auto")
tok = AutoTokenizer.from_pretrained("Qwen/Qwen3.5-9B")
model = PeftModel.from_pretrained(base, "freeqaz/decomp-synth-lifter-v14-evalformat-qwen3.5-9b-lora")This adapter wants a loop, not a prompt. Unlike the RAW single-turn siblings, it is trained to converse with the compiler:
- Turn 1: chat prompt carrying the target listing and the current C++ source (the project's eval-format layout).
- Compile the model's proposal with the target project's real toolchain and score it with objdiff.
- Turn 2+: append a structured feedback pane — fuzzy %, mismatching diff regions, compiler diagnostics — and let the model revise. The measured gain over v13 comes specifically from reading real feedback; scrambled feedback erases it.
- Stop on a byte-exact witness, or after ~4 turns (the evaluated depth).
The feedback must be real: this model's edge is reading a true verdict, so wiring it to anything but an actual compile-and-score seam discards what it was trained for. It is strongest finishing near-matches (≥97 fuzzy) — pair it with a wide single-turn sampler (the v13/27B siblings) that gets functions close, then let this one land them. At 9B it fits a single 24 GB GPU in bf16; for serving, vLLM with --enable-lora works well.
The adapter family
Integrity
PUBLISHED.json (shipped) carries per-file sha256 written by the training job at publish time. Two internal metadata files it pins (train_summary.json, artifact-manifest.json) are retained in the project's artifact store but not shipped here — they carry training-box paths. adapter_config.json was rewritten post-training to the HF base id; original bytes at provenance/adapter_config.orig.json.
Training data & license
Adapter weights: Apache-2.0. Training rows derive from public CC0-1.0-dedicated decompilation projects: Xbox 360 Rock Band 3 / Dance Central 3 community decompilations (MSVC PPC) and the zeldaret Wind Waker / Twilight Princess decompilations (mwcc GameCube). CC0 covers the decomp contributors' authorship, not the game publishers' rights in the underlying works; see the v10 card for the full discussion. Corpora are not published; PUBLISHED.json names the corpus file and sha256 as provenance.
