Repository navigation
feat(cli): sieval run --dry-run reports what the run would do - #217
Merged
Merged
Conversation
This was referenced Oct 23, 2026
ethan-scitix
force-pushed
the
feat/lazy-engine-launch
branch
from
October 23, 2026 09:23
e566460 to
f14f987
Compare
The dry-run resolved the managed batch but returned only checks and counts, so a platform could not learn the plans, the launch commands or whether the run needs inference before allocating a GPU. `sieval run --dry-run [--resume [DIR]] -o json` now adds, beside the unchanged checks: - models: per served model, the plan as infer_plans.yaml would record it, each process its launch starts (argv, env, cwd), and needs_inference, whether this run starts it; gpu, what the plans were resolved for; - tasks: per task, start (fresh, resume or reuse), resume_plan, the counts runs[].resume will record (null for a fresh start), new, to_infer and to_grade; - needs_inference: whether the run starts any engine. A task inferring through an api_base model counts in its to_infer but starts none. The plans come from the same call sieval run makes to decide what to launch, so the two cannot disagree. A resume that would be refused, or planning that raises, fails the new resume_plan check. The four keys are always present; when the dry-run stops before planning, tasks and needs_inference are null, meaning unknown rather than false. No engine is launched and no result directory is written; --resume directories are read in place, and with SIEVAL_TARGET_GPU it runs on a node without GPUs. Planning sets the session up as the run does: it loads the datasets and starts each vendored service a task declares, which the --dry-run help, the guide and the CHANGELOG now say. The text output gains a short summary. Closes #214. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ethan-scitix
force-pushed
the
feat/dry-run-resume-plan
branch
from
October 23, 2026 09:54
7fe846d to
fe63374
Compare
This was referenced Oct 23, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Type
Summary
Rebased onto
mainafter #215, #216 and #211 landed; one commit.sieval run --dry-run [--resume [DIR]] -o jsonreports what the run would do. The existing checks are unchanged. Aresume_plancheck is added, and so are these keys:{ "gpu": "NVIDIA H100 80GB HBM3:8:81559", "models": { "subject": { "plan": {"checkpoint": "…", "backend": "sglang", "assignments": ["…"], "deterministic": false, "seed": 0}, "launch": [{"role": "full", "argv": ["sglang", "serve", "--model-path", "…", "--port", "30000", "…"]}], "needs_inference": true } }, "tasks": { "echo": { "model": "subject", "start": "resume", "recorded": "…/results/echo", "samples": 3, "resume_plan": {"kept": 2, "rereported": 0, "regraded": 0, "repostprocessed": 0, "restarted": 0, "dropped": 0}, "new": 1, "to_infer": 1, "to_grade": 1 } }, "needs_inference": true }models.<m>.planis the plan asinfer_plans.yamlrecords it.launchlists each process the launch starts (argv, plusenvandcwdwhen set).needs_inferencesays whether this run starts that engine.tasks.<t>.startisfresh,resumeorreuse.resume_planis theRunPlan.outcomesfrom feat(core)!: split the grader identity along postprocess, feedback and report #211, the countsruns[].resumewill record. It isnullfor a fresh start.newcounts samples with no record.needs_inferencesays whether any engine starts. A task that infers through anapi_basemodel counts in itsto_inferbut starts no engine.gpu,models,tasksandneeds_inferenceare always present. When the checks fail or planning raises,tasksand everyneeds_inferencearenull, meaning unknown rather than false.error. That task, or a planning error, failsresume_plan, so the dry-run exits 1._plan_tasks, and the per-model flags come from_models_to_launch. These are the callssieval runlaunches by. A test checks that the plan the dry-run reports is the one the run then records.--resumedirectories are read in place. Planning sets the session up as the run does: it loads every dataset, downloading any that are not yet cached, and starts each vendored service a task declares. The--dry-runhelp text, the guide and the CHANGELOG now say this.needs inference: yes|no.Identity impact. None. The dry-run computes and writes nothing a run records.
Related Issues
Closes #214. Builds on #215, #216 and #211.
Test Plan
Automated
ruff check && ruff format --check)ty check)pdm run pytest)pytest tests/unit tests/integration -n 8: 9557 passed, 1 skipped (Linux).ty check(repo-wide),scripts/sync_package_stubs.py --check,scripts/check_preflight.pyand the pre-commit hooks are clean.tests/integration/test_lazy_launch.py::TestDryRunReportsWhatARunWouldDoruns the real CLI withSIEVAL_TARGET_GPUset and detection reporting no GPU:nvidia-smiis never asked, no engine starts, and the result directory is byte-identical afterwards. The run that follows records the reported plan.needs_inference: false,resume_plan= 2repostprocessed.start: reuse,resume_plan= 3kept.--resume DIRfrom another session: readsDIRin place, copies nothing, creates no result directory.error, and onlyresume_planfails.resume_plan: null, with every sample to infer and nothing written.Unit (
tests/unit/cli/test_run.py,test_output.py):needs_inferenceis false when only anapi_basetask has samples to infer. A fresh run starts every served engine.nullwhere unknown.needs_inferencefix, or thenullguard in the renderer, fails these tests.Manual
nvidia-smi, withSIEVAL_TARGET_GPU='NVIDIA H100 80GB HBM3:8:81559',sieval run eval.yaml --dry-run --resumeover a finished stub run printedmodel subject: engine not started,task echo: reuse (3 kept), 0 to infer, 0 to gradeandneeds inference: no, and passed. This was run before the rebase.🤖 Generated with Claude Code