Coding correctness with LiveCodeBench
Generate one greedy Python solution per problem through Eole's
OpenAI-compatible API, then grade saved solutions with the official
LiveCodeBench executable tests.
This measures model code generation, not repository editing or agent tool use.
The initial recipe uses release_v6, February–April 2025. This is a fixed
historical window, not a contamination-free claim for newer models. Select and
report a window after the model's training cutoff when one is available.
Install the evaluator separately
Keep evaluator dependencies out of the Eole serving environment. Python 3.11 or 3.12 is suitable. The upstream revision is checked by the runner; do not use an unpinned checkout or modify it.
export LCB_DIR=/tmp/LiveCodeBench
git clone https://github.com/LiveCodeBench/LiveCodeBench.git "$LCB_DIR"
git -C "$LCB_DIR" checkout 28fef95ea8c9f7a547c8329f2cd3d32b92c1fa24
python -m venv /tmp/eole-lcb-venv
/tmp/eole-lcb-venv/bin/pip install 'datasets>=3.2,<4' numpy tqdm PyYAML
The pinned upstream dataset loader requires trust_remote_code=True; datasets
4 removed support for that loader. We import upstream code directly without
installing its optional vLLM/cloud-provider backends. Dataset preparation may
execute Hugging Face dataset loader code and deserialize private test data;
prepare only with trusted upstream sources in an isolated environment. The first
download can require several GB even for a small selected subset.
Configure and prepare
Run from the Eole repository root. Copy benchmark.yaml locally to select
output directory, server/model ID, release, date window, output budget, and CPU
checker concurrency. Paths resolve against the invocation directory. Start with
limit: 5 for a smoke run; a subset score is not a full benchmark score.
Preparation downloads the dataset, uses upstream's generic chat prompt, and
saves prompts and test cases in tasks.json. It does not load a model.
/tmp/eole-lcb-venv/bin/python recipes/livecodebench/run.py prepare \
-c recipes/livecodebench/benchmark.yaml
Generate with Eole
Start a converted model using an Eole server YAML, for example
Qwen3.8 serve.yaml. Its configured context must fit the
prompt plus output budget; the benchmark requests up to 8192 output tokens.
Configure greedy decoding (beam_size: 1, top_k: 1, n_best: 1) in the server.
For Qwen3.8, use the recommended converted RedHatAI/Qwen3.8-27B-INT4
checkpoint from the linked recipe. For compiled inference:
export EOLE_MODEL_DIR=/path/to/models
export QWEN38_MODEL="$EOLE_MODEL_DIR/Qwen3.8-27B-INT4"
EOLE_TORCH_COMPILE=1 EOLE_COMPILE_MODE=0 \
eole serve -c recipes/qwen38/serve.yaml --host 127.0.0.1 --port 5010
In another terminal, from the repository root:
/tmp/eole-lcb-venv/bin/python recipes/livecodebench/run.py generate \
-c recipes/livecodebench/benchmark.yaml
Requests contain only the official prompt, never hidden test cases. One request is sent at a time with temperature zero; raw text, request wall time, API usage, and finish reason are saved after every successful request. A request failure stops generation and preserves the partial artifact. This first version does not resume partial runs; use a new run directory. Existing artifacts are not overwritten during preparation/generation; grading can be rerun. Record server YAML, model provenance, Eole commit, compilation, MTP, chat-template/thinking settings, GPU and software versions alongside runs.
Eole's current OpenAI endpoint estimates token usage and reports stop even
when a token limit may have been reached. Saved API metadata therefore cannot
establish exact tokens/s or truncation. Inspect outputs and server logs; retain
incomplete solutions as failures rather than excluding them. Wall times include
API/prefill overhead and first-request warmup; they are not steady-state decode
benchmarks.
Grade saved solutions
The upstream checker executes generated Python and is not a security sandbox. Run grading inside a disposable container/VM with no network, credentials, host home mounts, or GPU access, and with CPU/memory/process limits. Copy the prepared artifacts, recipe, pinned upstream checkout, and evaluator dependencies into that environment. Then run there (adjust YAML paths to those copies):
python recipes/livecodebench/run.py evaluate \
-c recipes/livecodebench/benchmark.yaml --allow-code-execution
Grading does not call the server or require a GPU. It verifies dataset hashes
and task ordering, extracts the last fenced code block using upstream's
extractor, and executes public and private tests using upstream's checker.
Missing/malformed code is evaluated as a failed solution. It writes
evaluation.json with pass@1, difficulty breakdown, per-task test results,
extracted code, and total request wall time. With one completion per task,
pass@1 is the fraction of problems solved. The initial greedy protocol differs
from upstream's default multi-sample protocol; compare only matching release,
window, prompt, decoding, thinking and token-budget settings.
For eager/compiled or MTP comparisons, prepare the same selection in separate run directories, change the server configuration between runs, and evaluate all selected tasks. Compare correctness and latency together; greedy text can differ across backends. There are no published Eole scores yet.
Validation status
Tested dataset preparation on two real release_v6 problems in the configured
window. A local HTTP fixture exercised generation and grading end to end with
the pinned upstream checker: a known correct solution passed, an incorrect
solution failed, difficulty aggregation matched, and a changed dataset artifact
was rejected. Unit tests cover partial-result preservation and execution opt-in;
recipe YAML validation passes. A live Eole GPU benchmark has not yet been run.