[skill] evaluation: align nel-next TB2.1/SWE-bench with golden toolchain - #2063
[skill] evaluation: align nel-next TB2.1/SWE-bench with golden toolchain#2063cjluo-nv wants to merge 2 commits into
Conversation
Terminal-Bench 2.1 configs generated from this skill drifted from the canonical eval-factory config (configs/benchmarks/terminal-bench-2.1/ bench.yaml). The scoring contract (playbook, repeats=8, timeout_strategy, run_timeout, concurrency) already matched; the toolchain and several proxy-level defaults did not. - nel-next.sh: install from the public upstream repo (github.com/NVIDIA-NeMo/Evaluator, default branch -> 0.4.0) instead of PyPI. PyPI nemo-evaluator tops out at 0.3.0 and cannot reach the 0.4.x toolchain golden runs on. NEL_NEXT_SPEC becomes the PyPI escape hatch and now takes precedence when explicitly set; NEL_NEXT_ORIGIN stays overridable from .env so internal mirrors stay out of this repo. - eval_image: document the golden pin 0.5.0.1-harbor (single source of truth: configs/shared/nel_next_containers.yaml) rather than 0.3.1.1-harbor as a floor. The TB2.1 task set is unchanged across those versions -- the vendored registry override has not moved since 2026-06-03 and both score 89 samples -- so this is a toolchain fix, not a benchmark change. - proxy.request_timeout 1800 -> 3600: it must be >= the solver's llm_kwargs.timeout (3600), otherwise the proxy truncates long agent turns the harness is still waiting on. - drop_params: add max_input_tokens_per_task and no_rebuild, which the 0.5.x harbor eval image sends and vLLM rejects unless stripped. - exclude_patterns: add model_traffic.jsonl so captured request bodies stay in the run dir and never reach MLflow. - add the http_pairs_dump interceptor (last in chain) for HTTP diagnostics. - document sharding: max_concurrent/sandbox.concurrency are per shard, so shards:N multiplies both serving capacity and live sandboxes. - .gitignore: broaden .env/.env-* to .env* so secret backups such as .env.bak-tb21 cannot be staged. Verified: nel-next.sh --version reports 0.4.0 built from Evaluator.git@9dcca2ae; both TB2.1 run configs pass `eval run --dry-run` on that CLI with 0.5.0.1-harbor in the generated sbatch. Signed-off-by: Chenjie Luo <chenjiel@nvidia.com>
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #2063 +/- ##
==========================================
- Coverage 67.00% 66.59% -0.42%
==========================================
Files 520 521 +1
Lines 59545 60621 +1076
==========================================
+ Hits 39900 40371 +471
- Misses 19645 20250 +605
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Same golden cross-check as the TB2.1 change, against the canonical configs/benchmarks/swe-bench-verified/bench.yaml and a reference oci-hsg run (Qwen3.6-35B-A3B, pass@1 0.7012 over 500 tasks x r5). - fix the stale source-of-truth path (configs/benchmarks/nel_next/ swebench_verified/ -> configs/benchmarks/swe-bench-verified/) and point at the shared eval-image pin. - correct the interceptor ORDER: SWE-bench differs from TB2.1 -- http_pairs_dump is FIRST, and drop_params comes BEFORE consolidate_system. - turn_counter gains position: system_message. - drop_params: add max_input_tokens_per_task and no_rebuild. - exclude_patterns: add model_traffic.jsonl; document proxy.model_traffic.capture_request_body. - document that the instruction_template CONTENT is scoring-relevant, and that the public built-in in nemo_evaluator/templates/ is a DIFFERENT prompt whose results are not comparable to the canonical one. - state plainly that omitting the system_message interceptor is a scoring change, not a simplification. - reasoning_replay.mode is per MODEL, not per benchmark: think_tags (Qwen), native (GLM), omitted (MiniMax). Taking it from another model's config is a silent output-parsing bug. - max_concurrent: bench.yaml sets 15, but per-model leaves override it. - document sharding: concurrency is per shard; the reference run uses shards:10 for 500 x r5 = 2500 trials. Signed-off-by: Chenjie Luo <chenjiel@nvidia.com>
69c56cf to
821ed92
Compare
What does this PR do?
Type of change: Documentation / tooling (agent skill)
Terminal-Bench 2.1 configs generated from the
evaluationskill had drifted from thecanonical eval-factory config (
configs/benchmarks/terminal-bench-2.1/bench.yaml). Thescoring contract already matched golden exactly — playbook,
repeats: 8,timeout_strategy: max,run_timeout: 7200,llm_kwargs.timeout: 3600, concurrency. Whathad drifted was the toolchain and a few proxy-level defaults.
The drift was in the skill, not in individual configs: a config generated fresh from the
skill reproduced every stale value, so patching configs alone would not have held.
nel-next.shinstalls from the public upstream repo(
github.com/NVIDIA-NeMo/Evaluator, default branch →0.4.0) instead of PyPI. PyPInemo-evaluatortops out at0.3.0and cannot reach the 0.4.x toolchain golden runs on.NEL_NEXT_SPECbecomes the PyPI escape hatch and now takes precedence when explicitly set;NEL_NEXT_ORIGINstays overridable from.envso internal mirrors stay out of this repo.eval_image: document the golden pin0.5.0.1-harbor(single source of truth:configs/shared/nel_next_containers.yaml) rather than0.3.1.1-harboras a floor.proxy.request_timeout1800 → 3600 — must be>=the solver'sllm_kwargs.timeout,else the proxy truncates long agent turns the harness is still awaiting.
drop_params: addmax_input_tokens_per_task,no_rebuild— sent by the 0.5.x harboreval image; vLLM returns 400 unless stripped.
exclude_patterns: addmodel_traffic.jsonlso captured request bodies stay in the rundir and never reach MLflow.
http_pairs_dumpinterceptor (last in chain) for HTTP diagnostics.max_concurrent/sandbox.concurrencyare per shard, soshards: Nmultiplies both serving capacity and live sandboxes (N x concurrency)..gitignore: broaden.env/.env-*to.env*so secret backups such as.env.bak-tb21cannot be staged.This does not move the benchmark. The TB2.1 task set is pinned by a vendored registry
override that has not changed since 2026-06-03, and both
0.3.1.1-harborand0.5.0.1-harborscore 89 samples — so the image bump is a toolchain fix and scores staycomparable across it.
Usage
Testing
nel-next.sh --version→0.4.0, built fromEvaluator.git@9dcca2ae(matches golden'stoolchain; golden
manifest.yamlevidence SHAs resolve in the public repo).eval run --dry-runon that CLI with no schema errors — theseschemas are
extra="forbid", sohttp_pairs_dumpand the newdrop_paramswould hard-failif unsupported.
0.5.0.1-harborconfirmed in the generatednel_eval.sbatchfor both.pre-commit run --files <changed>— all hooks pass, no file modifications.dl/JoC/competitive_evaluation/nvidia-eval-factory-benchmarking@
mainand a reference oci-hsg run (Qwen3.6-35B-A3B TB2.1,pass@10.4438 over 89x8).Not yet run: a live 2-problem canary on the new toolchain.
--dry-rundoes not exerciseenroot credentials for the new image, the harbor agent handshake, or request-shape acceptance.
Before your PR is "Ready for review"
NEL_NEXT_SPECrestores the previous PyPI install.CONTRIBUTING.md: N/A--dry-run+ pre-commit.Additional Information
Personal run configs under
.agents/skills/evaluation/runs/are deliberately not included:they carry internal cluster hostnames, lustre paths, account names and an AWS account id, which
do not belong in this public repo.