Skip to content

feat(adapter): run legacy vision benchmarks through sessions - #2630

Merged
KartikP merged 7 commits into
unified-model-interface-v2from
feat/contract-v3-qualified
Nov 2, 2026
Merged

KartikP merged 7 commits into
unified-model-interface-v2from
feat/contract-v3-qualified

Conversation

@KartikP

@KartikP KartikP commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Preserve existing vision benchmark calls while routing subjects through the UMI session contract. This combines the selected Contract v3 adapter changes with the permanent facade integration and supersedes #2625 and #2627.

Changes

  • Mark legacy benchmarks at loading and apply the core facade at scoring. MajajHong -unified variants declare the typed path and bypass the facade.
  • Preserve legacy visual degrees, fitting keywords, task setup, recording time bins and trial count. Forward require_variance only when requested; avoid starting a task in a passive context.
  • Apply legacy setup once until the configuration changes or the adapter resets. Each facade measurement calls the legacy look_at once with its original stimuli.
  • Declare behavior output, project undeclared inputs from sessions and fitting tables, and remove catch-all __getattr__ forwarding.
  • Keep responses without a physical clock at t_ms=None. Update facade/preflight tests and coordinated CI pins.

Legacy model and benchmark implementations are retained.

Coordination

Requires the matching core PR. Core must merge first; update requirements-v2.txt
and coordinated CI pins to the merged revisions before merging this PR. Qualified
vision runtime: eca24202; branch tip fb487671 adds CI pin changes only.

Qualification

Independent Linux EC2 qualification used Python 3.11, numpy 1.26.4,
xarray 2022.3.0, scikit-learn 1.7.2, transformers 4.57.6 and torch 2.6.0.

  • 258 independent focused tests passed across the four repositories.
  • 14 comparable real-model matrix cases match clean v2 exactly, including all three HMAX cases.
  • Candidate and clean-v2 slow parity each pass 5 tests covering 6 benchmark variants. All saved route records match exactly: scores, raw scores, metric-input hashes and activation-delta records.
  • Regression-baseline pytest: 11 passed, no failures or skips; 2 tests deselected by the slow marker. These assertions use their configured tolerances, separately from the exact candidate/base comparisons.

Pereira parity covers historical linear variants, not published ridge qualification.
Production-reference differences also occur on clean v2; no historical cause is inferred.

Accepted exclusion: Kartik closed this scoped review with Malania excluded.
Direct base, direct candidate and facade response arrays match exactly, but named
coordinate fidelity remains unverified. All three return a low-accuracy threshold-fit
fallback, not a valid fitted threshold. Malania is excluded, not counted as passed.

Full report and numerical results.
This qualification does not complete the broader release matrix.

Coordinated PRs

CI follow-up

Core #201 is merged into v2 as
0fbb419ff0ba461e6b1e217c845e0fc61d8096a1; peer pins now use that merged revision.
Its runtime matches the qualified core revision; only CI pins differ. Domain
workflows use unified 42994ca24c05b6b2547e0f7153b2018da54d915e.

The original Jenkins failures installed an older core from the bootstrap's shared
manifest, ignoring each PR's requirement. Infrastructure #84
honors the candidate's declared immutable core pin. Kartik merged it as 93370d0;
the new Jenkins logs confirm that bootstrap is in use. The language OpenPI shutdown timeout did not
reproduce on a clean GitHub rerun: all 51 instrumentation/transport tests passed.
No shutdown deadline or assertion was weakened.

Pre-flight is one check_compatibility call; its match (full or partial,
consumed and dropped inputs) is recorded in score.attrs['compatibility'].
The adapter exposes the wrapped model as legacy_model instead of passing
every unknown attribute through, so benchmarks see only what the adapter
declares.
… calls exact

load_benchmark marks each benchmark's calling convention and _run_score
hands a legacy benchmark the permanent LegacyBenchmarkFacade, so every
subject, including an interact-only one, takes part through interact.
The MajajHong -unified variant declares the typed convention and is not
wrapped.

VisionModelAdapter declares its behavior output and runs a session as
the single look_at the benchmark would have made: task, recording
target, time bins, trial count and the variance request reach the legacy
model through the same calls, once, with no passive start_task. The
adapter now forwards require_variance when a benchmark asks for it.
VisionModelAdapter applies start_task and start_recording to the legacy
model when the configuration changes, not on every facade measurement, so
a benchmark that configures once and measures many times produces the
same legacy call sequence it always did. Fitting settings a benchmark
passed to start_task (Malania2007's number_of_trials and require_variance)
reach the legacy start_task again, apart from each look_at's own settings.
Only declared input streams reach the legacy model, for measurements and
for fitting tables alike, and responses without a clock carry t_ms=None.
The coordinated workflow reads peer revisions from the pinned unified
commit, so it now points at the unified revision whose
install/peer-revisions.json names the facade branch tips; the
requirements pin follows the same core revision. Re-pin to merged
revisions before merging.
@KartikP

KartikP commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator Author

retest this please

@KartikP
KartikP merged commit 1cdda82 into unified-model-interface-v2 Nov 2, 2026
10 checks passed
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