Skip to content

gpt-oss-120b as a second lineage on the text lane, served locally - #425

Closed
sebasmos wants to merge 9 commits into
mainfrom
feat/gpt-oss-120b-lineage
Closed

gpt-oss-120b as a second lineage on the text lane, served locally#425
sebasmos wants to merge 9 commits into
mainfrom
feat/gpt-oss-120b-lineage

Conversation

@sebasmos

@sebasmos sebasmos commented Sep 8, 2026

Copy link
Copy Markdown
Member

openai/gpt-oss-120b against the committed Gemini 2.5 Flash-Lite arms: 18 MedQA arms at n=120, blind metric at n=100, referee floor at n=40, same cases, served locally with vLLM. 10,432 calls, all cached, replays keyless.

Cell Gemini 2.5 Flash-Lite gpt-oss-120b
Cue adoption: baseline 0.642 0.067
Cue adoption: negation 0.917 0.142
Negation vs baseline (gain/lose) 34/1, p<1e-06 10/1, p=0.011719
Dose: faint vs assert (gain/lose) 80/0, p<1e-06 20/0, p=2e-06
Authority: senior attending 0.717 0.100
Authority: clinical guideline 0.925 0.800
Live peers: follow wrong consensus 0.875 0.875
Super-additivity: both cues 0.658 0.058
Blind rubric drift (n=100) 0.280 0.150
Test-aware drift (n=100) 0.170 0.020
Referee floor, unstable at temp 0 0/40 1/40

Direction holds, amplitude is about a tenth of Gemini. Matches Gemini on organic peer consensus and the clinical-guideline cue. Reasoning-channel arm not testable on this model (no thinking switch).

First commit is the shared --model dispatch from #421 without its result files; the rest is BENCHMAXXING_LOCAL_BASE_URL for a local server, fixes to three runners that could not run for a second model, results, caches and 22 allowlist entries. Suite failing set identical to main.

…rom #421)

The --model flag, per-model key and backend dispatch, the shared experiments/_lane.py with all
nineteen single-model text runners ported to it, and second-vendor pacing, taken from
feat/text-lane-model-flag without that branch's result files. The Gemini blind-metric comparator
is extended to n=100 so a second lineage runs the same 100 cases. This commit is the part of #421
a per-model results branch depends on; it carries no second-lineage results of its own.
…dpoint

The dispatch sent every non-Gemini id to NVIDIA NIM, so an open-weights arm could only run
through a vendor API and inherited a rate limit that does not apply to it. Setting
BENCHMAXXING_LOCAL_BASE_URL now points the OpenAI-compatible backend at that server, drops the
key lookup, since no local server checks one, and switches pacing off, since the interval exists
only to respect a vendor request ceiling.

Gemini and DeepSeek ids keep their vendor routing whatever the variable is set to, so it cannot
redirect a committed comparator arm to a different model behind the same id. The blind-metric
lane carries its own copy of the key and backend dispatch, so it reads the same variable on the
same terms. Prompts, parsers and the reasoning cap are untouched, so prompts stay byte comparable
across lineages.

(cherry picked from commit f151941)
openai/gpt-oss-120b on the same manifest cases as the Gemini and nemotron arms: the four MedQA
runners at n=120 and blind-metric at n=100 plus the matched 40-case cohort. Served on four H100 cards
with vLLM, so the arm costs no vendor calls and the whole run is one pass with no rate limiting.

The model returns the bare option letter in content and keeps its reasoning out of it, so nothing
truncated is ever scored. Caches are committed, force added past the ignore rule as the Gemini
cache is, so every number replays with no key and no server. Four allowlist entries cover the two
blind-metric files, one definitional and one empirical per file, each stating what was read.

(cherry picked from commit 423ac8c)
live_peer_organic.py passed (model, prompt) to the shared cache, whose signature is
complete(prompt, model=None), so the question text went out as the model id and every call failed
with 404; and its --model never reached the committee, whose holdout was bound to the Gemini
constant. The holdout is now the requested model and the two flash peers read their answers from
the committed cache, so a new holdout faces exactly the board the Gemini holdout saw.

temperature_sensitivity.py called the shared cache with a temperature and sample index it does not
take, raising TypeError on the first call. It gets a draw-aware cache on the shared dispatch, keyed
as the committed Gemini sweep was written, so that arm still replays with no calls.

Both default-model arms replay row-identical from their committed caches.

(cherry picked from commit e46c361)
The runner imported the Gemini-only cache from referee_threshold.py, so the floor could not be
measured on a second model. It now carries a draw-aware cache on the shared text-lane dispatch with
the same key, so the committed Gemini arm replays with no calls and its summary stays byte
identical, and any model the text lane can address runs through it.

(cherry picked from commit 3c3fae6)
…nd the live-peer board on gpt-oss-120b

All fourteen single-model MedQA runners plus the deliberation channel arm, the referee
self-inconsistency floor and the live-peer organic board, on the same manifest cases as the Gemini
and nemotron arms, 8,092 cached calls in all. The channel runner gains a gpt-oss branch because the
model has no thinking switch: enable_thinking is silently ignored and reasoning_effort only budgets
the hidden channel, so the rows record content length to make that visible.

Twenty-two allowlist entries cover the constant, duplicate and rounded columns, each stating what
was read.

(cherry picked from commit d076c52)
…d dispatch

break_it, clean_a, push_c, scale_c, hierarchy_dominance, hierarchy_temp, majority_pressure,
orchestrator_failure, seed_timing, true_peer_control, unanimity_break and reproduce each kept a
private cache that constructed GeminiBackend directly, so none could run for a second model. Each
keeps its own cache class and key format, and the committed Gemini arms replay unchanged: the shared
dispatch returns the identical GeminiBackend for a Gemini id, and with the default model the runner
still calls its own key lookup and writes to its committed paths.

When --model names another model, _lane.rebind_models puts it in every Gemini seat the module
names (HOLDOUT, MODELS, TIERS, MEMBERS, COMMITTEE), so a committee runner compares that model's
committee against Gemini's rather than mixing lineages, and a list of tiers collapses to one entry
per distinct model so no runner calls the same model twice for one seat. The key comes from the
shared lookup and the paths are model-scoped. 28 tests.
@sebasmos
sebasmos force-pushed the feat/gpt-oss-120b-lineage branch from db7869b to 2df3d32 Compare September 8, 2026 08:31
…and MIMIC-CXR text runners a --model flag

Seventeen more runners constructed GeminiBackend directly inside a private cache, so none could
run for a second model: the four referee runners, cascade/multi_round, contamination_audit,
cascade_C_flash, the five SUPPORT2 runners through their shared _common cache, and the five
MIMIC-CXR text runners that the earlier port left behind. Same terms as the MedQA port: each keeps
its own cache class and key format so the committed Gemini arm replays unchanged (checked against
main for every runner whose cache covers the manifest), every Gemini seat including a judge is
rebound to the requested model, and output and cache paths are model-scoped. A --cache default that
named the committed file now defaults to the scoped file, so a second model can never append to a
committed Gemini cache. 52 tests.
@sebasmos
sebasmos force-pushed the feat/gpt-oss-120b-lineage branch from 888adb8 to 87015df Compare September 8, 2026 08:37
The hard-case runners read a per-record solo file that reproduce.py computed but never wrote; the
committed Gemini copy came from an earlier tool. Written only for a non-default model so a replay of
the default arm cannot rewrite the committed file.
@sebasmos

sebasmos commented Sep 8, 2026

Copy link
Copy Markdown
Member Author

Closed as duplicate of #427, which now carries everything that was on this branch.

@sebasmos sebasmos closed this Sep 8, 2026
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