Skip to content

Draft: add native ASI-Bench seed31415 adapter - #1191

Draft
panjose wants to merge 21 commits into
benchflow-ai:mainfrom
panjose:feat/asi-bench-draft
Draft

panjose wants to merge 21 commits into
benchflow-ai:mainfrom
panjose:feat/asi-bench-draft

Conversation

@panjose

@panjose panjose commented Oct 17, 2026

Copy link
Copy Markdown

Summary

Adds native ASI-Bench seed31415 support to BenchFlow. The adapter converts pinned public ASI-Bench instances into BenchFlow task packages, runs the ASI scorer in the verifier, persists scored prediction artifacts, and provides ASI-style offline summarization.

This is a draft for collaborative validation. It is not ready to claim benchmark-wide scoring parity or complete coverage.

What is included

  • benchmarks/asi-bench/ converter, pinned source/evaluator manifests, verifier template, task descriptor, CLI entrypoint, and summarizer.
  • Fail-closed verifier handling for unsafe/missing evaluator inputs and scorer-internal failures.
  • Immutable instance data staging and prediction artifact SHA-256 records.
  • Seed31415 local, non-official scoring metadata.
  • Coverage/parity gate support and focused regression tests.
  • Pi ACP package pins required by the adapter's tested runtime.

Current validation

  • Four ASI-Bench adapter test files: 67 passed.
  • Converter and verifier implementation are present.
  • The current parity record is intentionally still insufficient-evidence.

Remaining before ready for review

  • Implement and run the reusable side-by-side parity entrypoints.
  • Rebuild non-empty same-artifact evidence in a fresh environment.
  • Complete the declared task/level/harness coverage matrix.
  • Run Docker and model-backed smoke tests and resolve formatting/upstream drift.
  • Review whether the shared parity and Pi registry changes should be split into separate PRs.

Scope is seed31415 local scoring only; seed42 and unsupported scorer/task classes remain excluded as documented.

Eric Liu added 21 commits October 8, 2026 17:10
The verifier crashed on every task with
"ModuleNotFoundError: No module named 'scoring'". It looked for
_evaluate_gates_and_scores on ai4sci_bench.core.task, which does not
define it, then fell back to a bare `import scoring` — a leftover from the
old adapter's vendored module that the native converter does not ship.

Fixing the import alone was not enough: the whole calling convention was
wrong, and each error would have surfaced only after the previous one was
fixed.

  1. import from ai4sci_bench.core.scoring (the new shared core)
  2. prompt_level is keyword-only, not the 5th positional argument
  3. the function returns a 5-tuple, not a dict, so every result.get(...)
     would have raised AttributeError
  4. max_score is not part of that tuple; take it from scoring_max_score()
     and normalize_task_score(), exactly as ai4sci_bench.benchflow does
  5. prompt_level values are lowercase ("b1"); drop the .upper()

Reward normalization no longer applies score_divisor a second time.
normalize_task_score() already divides score AND maximum by it, so the
ratio is divisor-invariant; the previous code under-reported every task
with a divisor != 1.0 (ising, at 1.05) by that factor. The divisor is
still recorded in reward.json for provenance.

Fail-closed, per the repo's evaluator-failure policy: an evaluator fault
must never be recorded as a 0 score. scorer_internal_error lives in each
ScoreDetail.details, not at the top level, so it is now detected there and
reported with the offending scorer names. Exceptions escaping the scoring
call are treated as evaluator faults rather than being converted to a
0-score submission failure, and a non-positive max_score is an evaluator
config fault too. A genuine submission failure (missing or malformed
outputs) still scores low and exits 0.

evaluator_files.json ships core/scoring.py and pins the bundle to
apexin-ai/ASI-Bench f13175a (#33), the squash-merged commit that
introduces it; four other files' hashes move with it. All 11 copy entries
were hashed against that revision to confirm the manifest matches.

Verified on the host by materializing the bundle from the manifest and
driving score_entry.main() through a synthetic /verifier layout:
complete outputs -> 1.0; one output missing -> 0.6 (exit 0); divisor 1.05
-> unchanged 1.0; unregistered scorer, seed 42, and zero total weight ->
exit 1 with no reward and an asi_error.json; failed hard gate -> 0.0 with
exit 0. The old file reproduces the reported crash on the same input.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant