fix(eval): re-run infra-retryable verifier-errored tasks on resume - #1063
Conversation
There was a problem hiding this comment.
Devin Review found 1 potential issue.
1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)
| if r.get("rewards") is None and ( | ||
| self._config.retry.should_retry_verifier_error(r["verifier_error"]) | ||
| ): | ||
| logger.info( | ||
| f"Re-running verifier-errored task on resume: {task} " | ||
| f"({truncate_end(r['verifier_error'], 80)})" | ||
| ) | ||
| continue |
There was a problem hiding this comment.
🔴 Resumed learning tasks run out of order
In sequential-shared resumes, _get_completed_tasks reruns an earlier errored task after later tasks advanced the persisted learner state. The reordered task consumes future skills and corrupts the learning curve.
Prompt for agents
The new resume filtering in src/benchflow/evaluation.py::_get_completed_tasks is safe for parallel-independent jobs but breaks sequential-shared ordering. A sequential run can continue after task B has a retryable verifier error, then complete task C and persist C's learner generation. On resume, B is the only remaining task and runs against C's later learner state. Preserve sequence semantics by either rewinding the learner store and invalidating/rerunning the errored task plus every later task, or by keeping retryable verifier failures terminal for sequential-shared mode. Add a regression test with completed A, retryable-error B, completed C, and a persisted learner snapshot.
Was this helpful? React with 👍 or 👎 to provide feedback.
There was a problem hiding this comment.
Good catch, fixed: re-run is gated to parallel-independent; sequential-shared keeps the reuse semantics. Regression test added.
|
The boundary is drawn where it should be, and the tests prove it: I verified
One layout check for the record: matrix trials each get their own job dir ( On ordering vs my #1046 (feat/ablate-cli): a trial merge in both directions is clean — my |
|
Thanks for verifying. Also addressed the sequential-shared concern from the automated review: the re-run is now gated to parallel-independent mode, with a regression test. |
bingran-you
left a comment
There was a problem hiding this comment.
Validated at exact head d4f72b5. Resume now shares the canonical retry taxonomy, covers the historical Daytona session-exec and bounded-command timeout strings, preserves sequential-shared ordering, and ranks durable scored artifacts above later scoreless retries. Exact-head focused tests are 127/127 and every GitHub check is green. A real-key gemini-3.1-pro-preview Docker job was converted to the historical scoreless infra artifact; the public eval run resumed it, performed a new rollout, restored reward 1.0, and the replacement trajectory validated healthy/training-ready. Ready to squash merge.
Description
On resume, re-run scoreless verifier failures that the existing retry taxonomy classifies as infrastructure, while preserving valid scored artifacts and keeping sequential-shared learning jobs on their original ordering contract.
Motivation and Context
A finished agent rollout can lose its score when Daytona verifier setup/transport fails. Reusing that scoreless artifact forever defeats resume. The resume path now shares the same canonical verifier-error taxonomy as within-run retries. Historical
Failed to execute session commandand boundedCommand timed out after ...artifacts classify as verifier infra, while contract failures such as a missing reward remain terminal.When multiple retry artifacts exist, any scored artifact outranks a newer scoreless verifier error; within the same tier, recency and path provide deterministic selection.
Closes #1058.
Types of changes
Implemented Tasks
Validation
tests/: 5936 passed, 48 skipped, 7 deselectedty check src/gemini-3.1-pro-previewDocker resume E2E: seeded historical scoreless infra result was detected, a second real rollout ran, and reward 1.0 was restored