fix: [no-ticket] harbor - floored rewards name their cause (candidate crash vs infra outage)#37
Open
shehabyasser-scale wants to merge 2 commits into
Open
fix: [no-ticket] harbor - floored rewards name their cause (candidate crash vs infra outage)#37shehabyasser-scale wants to merge 2 commits into
shehabyasser-scale wants to merge 2 commits into
Conversation
…e crash vs infra outage)
Measured live in the transfer matrix: three champions scored 0/72 on an
off-model executor because their optimizers hardcoded temperature=0,
which that provider rejects. The harness handled it safely (rewards
floored, finalize shipped) but the durable record could not say WHY, and
"why" decides opposite actions: a deterministic candidate crash is a
real, reportable portability failure; an infra outage means invalidate
and re-run. Two changes:
- Collation's no-verifier-rewards error string now names the dead
attempts' exception types ("attempts died: UnsupportedParamsError
x6"). The error string is the one field that flows to the DB, the
per-sample files, and the verifier.
- _admin_eval_score returns (score, failure_cause); a floored target's
target_errors entry carries the dominant per-sample causes (frequency
summary, top 3). Diagnostics are fail-safe: any surprise result shape
degrades to a fixed string, never fails finalize.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ask crashes cluster Greptile follow-up on #37: _dominant_sample_errors keyed on the raw error string, which embeds the task name, so identical exceptions across a multi-task slice landed in 1x singletons instead of one dominant cause. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Stacked on #36. Motivated by a live wave-1 incident: in the E5 transfer matrix, three of five champions scored 0/72 on claude-opus-4-8 because their optimizers had hardcoded
temperature=0(a variance trick on their home model) and litellm rejects it for opus. Separately, a budget-exhausted key produced dead attempts that nearly got booked as a champion property. In both cases the harness behaved safely but the record could not distinguish the two floored cases, and they demand opposite actions (report the portability failure vs invalidate and re-run).Changes
1. Collation names the crash (
runner.py). The no-verifier-rewards error string now carries the dead attempts' exception types:No verifier rewards for task 't'. (attempts died: UnsupportedParamsError x6). The error string is the one field that flows everywhere (DB, per-sample files, verifier), so the cause survives to every consumer.2. Floored targets carry their cause (
verifier.py)._admin_eval_scorenow returns(score, failure_cause); when a target is floored after retries,target_errors[key]includes a frequency summary of the dominant per-sample errors (top 3). One identical cause across every sample is the signature of a deterministic candidate crash; a mixed bag points at infra. The cause extraction is fail-safe (any surprise result shape degrades to a fixed string) so diagnostics can never fail finalize.Tests
UnsupportedParamsError x2for attempts dead of the same cause.target_errorsnaming the dominant cause and its sample count; existing floor/retry/recover tests unchanged.🤖 Generated with Claude Code
Greptile Summary
This PR improves observability for floored (0-scored) evaluation results by embedding the failure cause into the error strings that flow to every durable record. Two previously indistinguishable floored outcomes — a deterministic candidate crash vs an infrastructure outage — now produce distinct, actionable messages.
runner.py: When a trial produces no verifier rewards, the error string now tallies each dead attempt's exception type (e.g.attempts died: UnsupportedParamsError x6), giving downstreams a signal without needing to re-examine attempt-level data.verifier.py:_admin_eval_scoreis promoted to return(score, failure_cause); when a target is floored after retries,target_errorsincludes a frequency summary built by_dominant_sample_errors, which normalises task names via regex before grouping so a deterministic crash across a multi-task slice still reads as one dominant cause rather than N singletons.Confidence Score: 5/5
Safe to merge — the diagnostic additions are all additive, the tuple return change is applied at every call site, and the failure-cause extraction is wrapped in a broad except so it can never break finalize.
All three callers of the refactored _admin_eval_score unpack the new tuple correctly. The _dominant_sample_errors helper degrades gracefully on any unexpected result shape. Runner-side cause building uses defensive .get() guards throughout. Two new tests (including one that directly covers the previous review concern about multi-task clustering) pass alongside the unchanged floor/retry/recover suite.
No files require special attention.
Important Files Changed
or {}guards throughoutReviews (2): Last reviewed commit: "fix(harbor): dominant-cause grouping nor..." | Re-trigger Greptile