GPT-OSS-120B deterministic-eval control¶
Historical protocol warning: this finding correctly identified the broken comparison protocol, and its reported cross-model scores remain invalid for ranking or promotion. The replacement contract is now ADR-0022 and
anvil-serving eval benchmark quality; this point-in-time record is intentionally unchanged.
Point-in-time record, 2026-07-12. This run restored the production
openai/gpt-oss-120b Heavy serve on Primary Node, repeated the same preflight
and conventional benchmark shape used for the Qwen3.5-122B MXFP4 and Nemotron
Puzzle rechecks, and ran the exact same externally-authored deterministic
planning suite. A second, explicitly non-comparable diagnostic raised only the
suite response cap to show whether GPT-OSS hidden reasoning was exhausting the
original budget.
Configuration¶
| Field | Tested value |
|---|---|
| Served model | gpt-oss-120b |
| Checkpoint | openai/gpt-oss-120b revision b5c939de8f754692c1647ca79fbf85e8c1e70f8a |
| Host | Primary Node, Windows 11, Docker Desktop/WSL2 |
| GPU | RTX PRO 6000 Blackwell Max-Q, 96 GB, sm_120 |
| Engine | vLLM 0.23.1rc1.dev531+ga65f93fb2 |
| Image | sha256:907377dddef3...5319ff3e |
| Quantization | GPT-OSS MXFP4, Marlin MoE backend |
| KV cache | FP8 |
| Context | 131,072 |
| Endpoint | loopback 127.0.0.1:30002 |
| Managed serve | heavy / vllm-gptoss120 |
The managed start loaded 15 shards in 149.70 seconds and reported 66.17 GiB
of model memory after 232.74 seconds. The healthy steady-state GPU reading was
87,034 MiB. The --no-thinking / thinking=disabled option sends
enable_thinking=false; GPT-OSS ignores that Qwen-style template option and
continues to use its native reasoning channel.
Correctness gate¶
anvil-serving eval preflight --base-url http://127.0.0.1:30002/v1 `
--model gpt-oss-120b --needle-ctx 128000 --tool-batch 20 `
--no-thinking --confirm
All checks passed: short coding in 1.5 seconds, structured JSON, the 128K needle in 28.9 seconds, and 20/20 shared-prefix tool calls.
Conventional benchmark¶
The normal benchmark used 10 sequential requests, 8,192 context tokens, and a 256-token cap. Raw artifact: standard-throughput.json.
| Metric | Result |
|---|---|
| Completion | 10/10 |
| Aggregate output throughput | 29.87 tok/s |
| TTFT p50 / p95 | 655.67 / 1257.35 ms |
| E2E p50 / p95 | 806.72 / 1377.04 ms |
| Output tokens | 258 |
As with the other short mixed-prompt runs, this aggregate value is not the controlled long-generation decode rate. The established production-baseline decode result remains 183.2 tok/s.
Exact deterministic-suite result¶
The exact suite used for Qwen and Nemotron retained its original per-case 256–384 token caps. Raw artifact: deterministic-planning-eval.json.
Overall: 0/5 passed. Four of five cases had an empty visible-content
excerpt and therefore failed every literal check. A direct diagnostic of the
first request showed why: the response contained content: null, placed all
384 completion tokens in message.reasoning, and stopped with
finish_reason: length. See the bounded
probe summary.
The harness correctly evaluated visible answer content; there simply was no
visible answer inside the configured cap.
This is an eval-configuration failure for GPT-OSS, not valid evidence that its planning quality is zero.
Raised-cap diagnostic¶
To isolate the confounder, a diagnostic copy preserved every prompt and text
check while raising only max_tokens to 2,048:
suite
and result.
All five cases then produced visible answer content and 1/5 passed. The local/remote-main reconciliation case passed; the other four still missed one or more exact operational-contract phrases. This diagnostic is not an apples-to-apples score against the original Qwen/Nemotron runs because its response budget is larger. It establishes that hidden-reasoning headroom materially changes the score, while also confirming that the suite's literal contracts remain demanding after content appears.
Original built-in eval rerun¶
The pre---suite-file bakeoff was also rerun unchanged with its original
chat,context,tool,session,intelligence selection and 131,072-token context
target. Clean raw artifact:
original-bakeoff-clean.json.
| Original built-in section | Result |
|---|---|
| 131K context probe | pass |
| OpenAI tool-call smoke | pass |
| Multi-turn session recall | pass |
| Unified-diff intelligence check | pass |
| Parallel timeout-triage intelligence check | fail: empty visible content |
The same original recipe passed both intelligence checks on 2026-07-11. In
this clean rerun, a direct probe of the failed case showed content: null, all
256 completion tokens in the reasoning channel, and finish_reason: length.
See the bounded
probe summary.
The context timing was prefix-cache-warm and is not a comparable performance
measurement.
This means the newer external suite did not introduce the entire problem. The older built-in intelligence eval also hard-codes a 256-token response budget without a GPT-OSS reasoning-effort control, so its quality result can change from pass to empty-answer failure as native reasoning consumes that budget.
Operator conclusion¶
Operator assessment: the current cross-model --suite-file eval protocol is
broken and its Qwen, Nemotron, and GPT-OSS scores must not be used to rank or
promote models. The deterministic text-check engine still evaluates the
visible text it receives, but the surrounding protocol does not provide
comparable reasoning controls or answer budgets across model families.
There is extra eval behavior to account for. The new suite path needs a
model-aware reasoning budget or explicit reasoning_effort control before its
scores can compare GPT-OSS fairly with models whose thinking can be disabled.
Evidence should also retain finish reason and reasoning-token/channel metadata
so an empty visible answer can be classified as budget exhaustion rather than
ordinary deterministic-check failure. The current artifacts also record
thinking.unsupported: false even though GPT-OSS ignores
enable_thinking=false; that metadata is misleading and must not be treated as
proof that thinking was disabled. No routing or quality-profile decision
changed from this run.