CoolFace
Modelpublic

freeqaz/decomp-synth-lifter-v14-evalformat-qwen3.5-9b-lora

sourceHugging Faceapache-2.0updated 27d agoView on Hugging Face
0likes74downloads
Model Card

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:

Model facts

baseQwen/Qwen3.5-9B (apache-2.0)
methodLoRA r=64, α=128, dropout 0.05, bf16
corpus3,946 chat-rendered rows: byte-exact repair chains (PowerPC X360 MSVC + GameCube/Wii mwcc), eval-format feedback panes
trained2026-08-27
formatchat (Qwen chat template), single- and few-turn

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

python
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:

  1. 1.Turn 1: chat prompt carrying the target listing and the current C++ source (the project's eval-format layout).
  2. 2.Compile the model's proposal with the target project's real toolchain and score it with objdiff.
  3. 3.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.
  4. 4.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

adapterbaseformatrole
v10Qwen3.6-27BRAWsingle-turn matcher, reference 27B
gtp0cQwen3.8-27BRAWv10 recipe verbatim on the newer base (matched pair)
v13-chain r32Qwen3.5-9BRAWheadline single-turn 9B
v13-chain r64Qwen3.5-9BRAWrank-capacity null twin of the r32
v14-evalformat (this repo)Qwen3.5-9Bchatmulti-turn feedback-driven, strongest agentic 9B
v16-v5chatQwen3.5-9Bchatbroadest corpus, research artifact with stated negatives
v17-fullQwen3.5-9Bchat+toolsfirst tool-trajectory generation, unevaluated
v17-matchedQwen3.5-9Bchat+toolsbyte-exact-only trajectory filter of v17-full (contrast arm), unevaluated
v17-full r64Qwen3.5-9Bchat+toolsrank-capacity twin of v17-full r32 (r64/α128), unevaluated
v17-mixQwen3.5-9Bchat+toolsv17 trajectories + single-turn supply mix (broadest v17 corpus), unevaluated

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.