|
| 1 | +\documentclass[11pt]{article} |
| 2 | + |
| 3 | +\usepackage[margin=1in]{geometry} |
| 4 | +\usepackage{amsmath} |
| 5 | +\usepackage{booktabs} |
| 6 | +\usepackage{float} |
| 7 | +\usepackage{graphicx} |
| 8 | +\usepackage{microtype} |
| 9 | +\usepackage[numbers,sort&compress]{natbib} |
| 10 | +\usepackage[colorlinks=true,linkcolor=black,citecolor=black,urlcolor=blue]{hyperref} |
| 11 | +\usepackage{tikz} |
| 12 | +\usetikzlibrary{arrows.meta,positioning,fit} |
| 13 | + |
| 14 | +\title{L20-CodeForge: Auditable Test-Time Scaling for Code Generation on a Single GPU} |
| 15 | +\author{Anonymous Authors} |
| 16 | +\date{May 2026} |
| 17 | + |
| 18 | +\begin{document} |
| 19 | +\maketitle |
| 20 | + |
| 21 | +\begin{abstract} |
| 22 | +Large code models are often evaluated in settings that assume substantial |
| 23 | +serving budgets, broad sampling, and opaque benchmark pipelines. This paper |
| 24 | +studies a narrower question: how much reliable coding performance can be |
| 25 | +extracted from a 7B-class open model when the compute budget is a single NVIDIA |
| 26 | +L20 GPU and hidden tests are reserved for measurement. We describe |
| 27 | +L20-CodeForge, an auditable post-training and inference stack for code |
| 28 | +generation. The system separates public-side candidate generation, public-test |
| 29 | +selection, repair, and verifier experiments from private hidden-test replay. On |
| 30 | +the full 1,055-task LiveCodeBench \texttt{release\_v6} code-generation suite, |
| 31 | +Qwen2.5-Coder-7B-Instruct improves from 297 solved tasks under greedy decoding |
| 32 | +to 403 solved tasks with eight-sample public-test selection, a gain of 10.05 |
| 33 | +percentage points. On EvalPlus, the clean public-signal system improves |
| 34 | +HumanEval+ from 84.8\% to 92.7\% and MBPP+ from 72.2\% to 81.7\%. We also |
| 35 | +report negative results: repeated public-feedback repair can overfit visible |
| 36 | +tests, input-only differential tests do little without multiple |
| 37 | +public-passing candidates, and an uncalibrated expected-output verifier can |
| 38 | +regress hidden replay. The main claim is not that a new model checkpoint |
| 39 | +outperforms the base model; rather, the result is a reproducible case study in |
| 40 | +benchmark hygiene, test-time scaling, and failure-aware post-training |
| 41 | +infrastructure under a small-GPU constraint. |
| 42 | +\end{abstract} |
| 43 | + |
| 44 | +\section{Introduction} |
| 45 | + |
| 46 | +Execution is both the advantage and the trap of code generation. It gives a |
| 47 | +cheap verifier for many tasks, but it also creates easy ways to overstate |
| 48 | +progress: select on visible examples, tune against stale hidden tests, or report |
| 49 | +small optimistic subsets. This tension is sharper for resource-constrained |
| 50 | +post-training. A single accelerator cannot support the search budgets or |
| 51 | +training sweeps used by large labs, so every evaluation decision carries more |
| 52 | +weight. |
| 53 | + |
| 54 | +This paper reports a small-GPU study rather than a new frontier model. We use a |
| 55 | +single NVIDIA L20 as the target hardware and ask what can be gained by improving |
| 56 | +the surrounding system: candidate generation, public-test selection, repair, |
| 57 | +candidate health auditing, hidden replay, and cross-benchmark scorecards. The |
| 58 | +model in the main experiment is Qwen2.5-Coder-7B-Instruct. Hidden LiveCodeBench |
| 59 | +tests are used only for final replay and audit, not for candidate selection or |
| 60 | +repair. |
| 61 | + |
| 62 | +The study makes four contributions. |
| 63 | + |
| 64 | +\begin{enumerate} |
| 65 | + \item We define an auditable single-GPU evaluation protocol for code |
| 66 | + generation with a strict public/private boundary. |
| 67 | + \item We report full-suite LiveCodeBench \texttt{release\_v6} and EvalPlus |
| 68 | + results with committed artifacts, hashes, and re-run commands. |
| 69 | + \item We analyze several verifier and repair variants, including negative |
| 70 | + results that would be hidden by a headline-only report. |
| 71 | + \item We release the supporting repository as a reproducibility artifact |
| 72 | + with CI, scorecards, benchmark summaries, and exact hash checks. |
| 73 | +\end{enumerate} |
| 74 | + |
| 75 | +\section{Related Work} |
| 76 | + |
| 77 | +\paragraph{Code-generation benchmarks.} |
| 78 | +LiveCodeBench was introduced to reduce contamination and broaden code-model |
| 79 | +evaluation beyond static HumanEval-style tasks, including code generation, |
| 80 | +self-repair, code execution, and test-output prediction |
| 81 | +\citep{jain2024livecodebench}. EvalPlus showed that common code benchmarks can |
| 82 | +miss incorrect programs because their tests are insufficient; it augments |
| 83 | +HumanEval and MBPP with many additional tests and can change model rankings |
| 84 | +\citep{liu2023evalplus}. These benchmarks motivate the two evaluation choices |
| 85 | +used here: full-suite replay on LiveCodeBench and cross-checking with EvalPlus. |
| 86 | + |
| 87 | +\paragraph{Test-time scaling and execution-guided selection.} |
| 88 | +AlphaCode demonstrated that large-scale sampling followed by program-behavior |
| 89 | +filtering is central to competitive-programming performance |
| 90 | +\citep{li2022alphacode}. CodeT generates tests and uses execution agreement to |
| 91 | +select among samples \citep{chen2022codet}. LEVER trains an execution-aware |
| 92 | +verifier to rerank generated programs \citep{ni2023lever}. S* studies |
| 93 | +test-time scaling for code and reports large gains from hybrid search and |
| 94 | +selection on LiveCodeBench \citep{wang2025sstar}. L20-CodeForge follows the |
| 95 | +same broad line of work but restricts the compute budget and emphasizes |
| 96 | +auditable artifacts over maximum score. |
| 97 | + |
| 98 | +\paragraph{Verified data and code RL.} |
| 99 | +Recent code-post-training work shows that verified competitive-programming data |
| 100 | +and high-quality tests can substantially improve small models. rStar-Coder |
| 101 | +constructs verified reasoning data and reports large LiveCodeBench gains for |
| 102 | +Qwen2.5 models \citep{guan2025rstarcoder}. HardTests studies high-quality test |
| 103 | +synthesis for difficult coding problems and finds that stronger tests improve |
| 104 | +both evaluation and training signal \citep{he2025hardtests}. X-Coder reports a |
| 105 | +Qwen2.5-derived RLVR model trained with verified code-reasoning data |
| 106 | +\citep{xcode2026xcoder}. These results suggest that durable model-weight gains |
| 107 | +need verified data and calibrated rewards, not only prompt changes. |
| 108 | + |
| 109 | +\section{Protocol} |
| 110 | + |
| 111 | +\subsection{Public and Private Signals} |
| 112 | + |
| 113 | +Each benchmark problem is treated as two objects. The public object contains the |
| 114 | +prompt, starter code when available, visible examples, and public tests. It may |
| 115 | +be used for candidate generation, public-test selection, and repair. The private |
| 116 | +object contains hidden tests. It is used only for final replay and audit. |
| 117 | + |
| 118 | +The protocol intentionally permits public-test selection because public tests |
| 119 | +are available to any solver. It does not permit hidden-test selection, hidden |
| 120 | +failure feedback, or retuning against hidden outcomes. Negative outcomes are |
| 121 | +kept in the artifact record because they identify where public-side methods fail |
| 122 | +to generalize. |
| 123 | + |
| 124 | +\subsection{Hardware and Model} |
| 125 | + |
| 126 | +The target hardware is a single NVIDIA L20 GPU. The main LiveCodeBench and |
| 127 | +EvalPlus experiments use Qwen2.5-Coder-7B-Instruct without an adapter. The |
| 128 | +reported LiveCodeBench system result uses temperature 0.8, top-p 0.95, eight |
| 129 | +samples per task, public-test selection, and hidden-test replay. |
| 130 | + |
| 131 | +\section{System} |
| 132 | + |
| 133 | +Figure~\ref{fig:system} summarizes the implementation. Candidate generation and |
| 134 | +repair are public-side operations. Hidden replay is outside the selection loop. |
| 135 | +The scorecard combines LiveCodeBench and EvalPlus to catch benchmark-specific |
| 136 | +overfitting. |
| 137 | + |
| 138 | +\begin{figure}[H] |
| 139 | +\centering |
| 140 | +\begin{tikzpicture}[ |
| 141 | + node distance=7mm and 10mm, |
| 142 | + box/.style={draw, rounded corners, align=center, minimum height=9mm, minimum width=24mm, font=\small}, |
| 143 | + public/.style={box, fill=blue!6, draw=blue!55!black}, |
| 144 | + verify/.style={box, fill=green!7, draw=green!45!black}, |
| 145 | + audit/.style={box, fill=orange!10, draw=orange!70!black}, |
| 146 | + train/.style={box, fill=violet!7, draw=violet!60!black}, |
| 147 | + arrow/.style={-Latex, thick} |
| 148 | +] |
| 149 | +\node[public] (task) {Benchmark\\task}; |
| 150 | +\node[public, right=of task] (context) {Context\\builder}; |
| 151 | +\node[public, right=of context] (gen) {Candidate\\generation}; |
| 152 | +\node[verify, right=of gen] (publictest) {Public tests\\and health}; |
| 153 | +\node[verify, below=of publictest] (repair) {Repair\\feedback}; |
| 154 | +\node[verify, left=of repair] (selector) {Selector or\\verifier}; |
| 155 | +\node[audit, below=of selector] (hidden) {Hidden-test\\replay}; |
| 156 | +\node[audit, right=of hidden] (score) {Scorecard\\and hashes}; |
| 157 | +\node[audit, right=of score] (audit) {Failure\\audit}; |
| 158 | +\node[train, below=of hidden] (store) {Trajectory\\store}; |
| 159 | +\node[train, right=of store] (data) {SFT, DPO,\\RLVR data}; |
| 160 | +\node[train, right=of data] (adapter) {Small adapter\\or verifier}; |
| 161 | + |
| 162 | +\draw[arrow] (task) -- (context); |
| 163 | +\draw[arrow] (context) -- (gen); |
| 164 | +\draw[arrow] (gen) -- (publictest); |
| 165 | +\draw[arrow] (publictest) -- (repair); |
| 166 | +\draw[arrow] (repair) -- (selector); |
| 167 | +\draw[arrow] (selector) -- (hidden); |
| 168 | +\draw[arrow] (hidden) -- (score); |
| 169 | +\draw[arrow] (score) -- (audit); |
| 170 | +\draw[arrow] (audit) -- (adapter); |
| 171 | +\draw[arrow] (adapter) -- (data); |
| 172 | +\draw[arrow] (data) -- (store); |
| 173 | +\draw[arrow, dashed] (store) -- (context); |
| 174 | +\end{tikzpicture} |
| 175 | +\caption{L20-CodeForge evaluation loop. Public signals drive generation, |
| 176 | +selection, and repair. Private tests are reserved for final replay and audits.} |
| 177 | +\label{fig:system} |
| 178 | +\end{figure} |
| 179 | + |
| 180 | +\section{Experiments} |
| 181 | + |
| 182 | +\subsection{LiveCodeBench} |
| 183 | + |
| 184 | +Table~\ref{tab:lcb-main} reports the main full-suite LiveCodeBench result. The |
| 185 | +greedy baseline solves 297 of 1,055 tasks. Four-sample public-test selection |
| 186 | +solves 378 tasks. Eight-sample selection solves 403 tasks, an absolute gain of |
| 187 | +106 tasks over greedy decoding. |
| 188 | + |
| 189 | +\begin{table}[H] |
| 190 | +\centering |
| 191 | +\begin{tabular}{llrrrr} |
| 192 | +\toprule |
| 193 | +Model & Protocol & Samples & Solved & Total & Pass@1 \\ |
| 194 | +\midrule |
| 195 | +Qwen2.5-Coder-7B-Instruct & greedy & 1 & 297 & 1055 & 28.15 \\ |
| 196 | +Qwen2.5-Coder-7B-Instruct & public selection & 4 & 378 & 1055 & 35.83 \\ |
| 197 | +Qwen2.5-Coder-7B-Instruct & public selection & 8 & 403 & 1055 & 38.20 \\ |
| 198 | +\bottomrule |
| 199 | +\end{tabular} |
| 200 | +\caption{LiveCodeBench \texttt{release\_v6} full-suite results. Public |
| 201 | +selection uses only visible public tests; hidden tests are used for final replay.} |
| 202 | +\label{tab:lcb-main} |
| 203 | +\end{table} |
| 204 | + |
| 205 | +The gain is not uniform across difficulty levels. Easy tasks improve from 206 |
| 206 | +to 260 solved tasks, medium tasks from 82 to 124, and hard tasks from 9 to 19. |
| 207 | +The hard-task result remains weak in absolute terms, which is consistent with |
| 208 | +the need for stronger algorithmic candidates rather than only better selection. |
| 209 | + |
| 210 | +\begin{table}[H] |
| 211 | +\centering |
| 212 | +\begin{tabular}{lrrrrr} |
| 213 | +\toprule |
| 214 | +Slice & Greedy solved & System solved & Total & Greedy & System \\ |
| 215 | +\midrule |
| 216 | +Easy & 206 & 260 & 322 & 63.98 & 80.75 \\ |
| 217 | +Medium & 82 & 124 & 383 & 21.41 & 32.38 \\ |
| 218 | +Hard & 9 & 19 & 350 & 2.57 & 5.43 \\ |
| 219 | +\bottomrule |
| 220 | +\end{tabular} |
| 221 | +\caption{LiveCodeBench difficulty breakdown. Values in the last two columns are |
| 222 | +percentages.} |
| 223 | +\label{tab:lcb-breakdown} |
| 224 | +\end{table} |
| 225 | + |
| 226 | +\subsection{EvalPlus} |
| 227 | + |
| 228 | +Table~\ref{tab:evalplus} reports the EvalPlus guardrail. The clean system rows |
| 229 | +use public prompt and base-test signals, but not EvalPlus extra tests, for |
| 230 | +selection. Both HumanEval+ and MBPP+ improve over greedy decoding. |
| 231 | + |
| 232 | +\begin{table}[H] |
| 233 | +\centering |
| 234 | +\begin{tabular}{lrrrr} |
| 235 | +\toprule |
| 236 | +Dataset & Greedy base & System base & Greedy plus & System plus \\ |
| 237 | +\midrule |
| 238 | +HumanEval & 89.0 & 98.2 & 84.8 & 92.7 \\ |
| 239 | +MBPP & 82.8 & 96.0 & 72.2 & 81.7 \\ |
| 240 | +\bottomrule |
| 241 | +\end{tabular} |
| 242 | +\caption{EvalPlus results. Values are pass@1 percentages. The plus columns use |
| 243 | +the stricter EvalPlus tests for scoring, not for candidate selection.} |
| 244 | +\label{tab:evalplus} |
| 245 | +\end{table} |
| 246 | + |
| 247 | +\subsection{X-Coder Control Slice} |
| 248 | + |
| 249 | +We also probed IIGroup/X-Coder-RL-Qwen2.5-7B on a medium-difficulty control |
| 250 | +slice. Automatic and strict starter-prefix checks both scored 0/12. Public-only |
| 251 | +second-pass repair reached 2/12. A single public-feedback repair round reached |
| 252 | +4/12. A second public-feedback round produced visible-test signal but no hidden |
| 253 | +passes. We therefore treat the first feedback round as useful but not sufficient |
| 254 | +for broad claims. |
| 255 | + |
| 256 | +\section{Failure Analysis} |
| 257 | + |
| 258 | +The main failure class on the eight-sample LiveCodeBench run is wrong answer, |
| 259 | +not syntax or missing entrypoints. This suggests that future work should |
| 260 | +prioritize better algorithmic candidates and stronger verifier calibration over |
| 261 | +format-only prompting. |
| 262 | + |
| 263 | +Several attempted improvements did not hold up under hidden replay. Repeated |
| 264 | +public-feedback repair overfit visible tests on the second round. Input-only |
| 265 | +differential fuzzing improved candidate-pair coverage on some targets but did |
| 266 | +not change selection when the pool contained too few public-passing alternatives. An |
| 267 | +expected-output verifier over generated inputs regressed the targeted replay, |
| 268 | +indicating that verifier confidence needs calibration before it can safely alter |
| 269 | +headline selections. |
| 270 | + |
| 271 | +\section{Reproducibility} |
| 272 | + |
| 273 | +The repository includes committed benchmark summaries, saved generations, |
| 274 | +reports, hash manifests, and CI checks. The full hidden-test LiveCodeBench JSONL |
| 275 | +is not committed. Instead, the repository records materialization commands, |
| 276 | +source hashes, generation hashes, evaluator outputs, and compact summaries. |
| 277 | + |
| 278 | +For the main LiveCodeBench result, the committed summary hash is: |
| 279 | + |
| 280 | +\begin{center} |
| 281 | +\small |
| 282 | +\texttt{2a0ff919aa15eb9ecdf74824f7bf790a23f6d0197ef74970b6190c60e0e00772} |
| 283 | +\end{center} |
| 284 | + |
| 285 | +The generalization scorecard hash is: |
| 286 | + |
| 287 | +\begin{center} |
| 288 | +\small |
| 289 | +\texttt{1eb0402378ea25732225b29d7ba367b6111ab3351e54cc7c01fa7646a7a12712} |
| 290 | +\end{center} |
| 291 | + |
| 292 | +The repository also includes a separate reproducibility document with expected |
| 293 | +command outputs and artifact-hash checks. |
| 294 | + |
| 295 | +\section{Limitations} |
| 296 | + |
| 297 | +The strongest limitation is that the main gain is a system-level gain, not a |
| 298 | +model-weight gain. The eight-sample selector is useful in practice but should |
| 299 | +not be confused with a greedy checkpoint improvement. The experiments also use |
| 300 | +one main base model and one main GPU type. Public tests are legitimate solver |
| 301 | +signals, but repeated repair on public failures can overfit them. Finally, |
| 302 | +private benchmark tests cannot be committed directly, so full hidden replay |
| 303 | +requires local materialization of the benchmark payload. |
| 304 | + |
| 305 | +\section{Conclusion} |
| 306 | + |
| 307 | +L20-CodeForge shows that a careful single-GPU system can extract a meaningful |
| 308 | +amount of additional coding performance from a 7B open model while preserving a |
| 309 | +clean benchmark boundary. The useful parts are not only the positive results, |
| 310 | +but also the audit trail: public selection helps, first-round repair can help, |
| 311 | +and several plausible verifier variants fail without calibration. The next step |
| 312 | +is to convert this infrastructure into a verified-data and RLVR pipeline that |
| 313 | +improves single-sample model behavior on held-out tasks. |
| 314 | + |
| 315 | +\bibliographystyle{plainnat} |
| 316 | +\bibliography{references} |
| 317 | + |
| 318 | +\end{document} |
0 commit comments