--reasoning-effort: control thinking intensity (verified honored)

The adapter dropped reasoning_effort/thinking from the payload, so the
middle rung of the ladder (es reference: full 98.3 / effort_low 94 /
no-think 82.3 on humaneval) was unreachable. Both keys now pass
through; --reasoning-effort {minimal,low,medium,high,max} overrides
the YAML, and config/effort_low.yaml mirrors default.yaml with
reasoning_effort: low for one-command low-thinking runs.

Probe on the endpoint: same question, default = 319 chars reasoning /
262 tok, low = 47 chars / 117 tok -- the server honors it.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
sora 2026-09-16 03:36:03 +00:00
parent 5e98f6b701
commit 80194e845e
3 changed files with 94 additions and 1 deletions

View File

@ -800,6 +800,9 @@ def _cmd_eval_run(args) -> int:
_shared_reporter.owned_externally = True
progress_reporter = _shared_reporter
if getattr(args, 'reasoning_effort', ''):
args._gen_override = {**(getattr(args, '_gen_override', {}) or {}),
'reasoning_effort': args.reasoning_effort}
if model_spec: # generate + score in one go
from evalharness.model import run_eval
@ -1207,6 +1210,11 @@ def build_parser() -> argparse.ArgumentParser:
"profile.default < profile['<bench>'] < explicit kwargs")
p.add_argument('--disable-thinking', action='store_true',
help='send enable_thinking=false to the OpenAI-compatible model')
p.add_argument('--reasoning-effort', default='',
choices=('', 'minimal', 'low', 'medium', 'high', 'max'),
help="thinking intensity (GLM/Anthropic-style; verified "
"working on the sglang endpoint: low shrinks reasoning "
"~85%%). Overrides the YAML config")
p.add_argument('--perf', action='store_true',
help='collect streaming TTFT and ITL metrics')
p.add_argument('--textools', action='store_true',

View File

@ -0,0 +1,84 @@
# 低思考档:全库参数同 default.yaml仅追加 reasoning_effort: low
# 用法: evalharness eval run ... --config effort_low
default:
temperature: 0.0
top_p: 1.0
stream: true
max_tokens: 32768
reasoning_effort: low
aime24:
temperature: 1.0
repeats: 12
max_tokens: 8192
reasoning_effort: low
aime25:
temperature: 1.0
repeats: 12
max_tokens: 8192
reasoning_effort: low
aime26:
temperature: 1.0
repeats: 12
max_tokens: 8192
reasoning_effort: low
hmmt26:
temperature: 1.0
repeats: 12
max_tokens: 8192
reasoning_effort: low
imo_answerbench:
temperature: 1.0
reasoning_effort: low
gpqa_diamond:
temperature: 1.0
repeats: 3
max_tokens: 8192
reasoning_effort: low
mmlu:
max_tokens: 8192
reasoning_effort: low
mmlu_pro:
max_tokens: 8192
reasoning_effort: low
cmmlu:
max_tokens: 8192
reasoning_effort: low
arc:
max_tokens: 8192
reasoning_effort: low
hellaswag:
max_tokens: 8192
reasoning_effort: low
winogrande:
max_tokens: 8192
reasoning_effort: low
simple_qa:
max_tokens: 8192
reasoning_effort: low
trivia_qa:
max_tokens: 8192
reasoning_effort: low
humaneval:
temperature: 1.0
repeats: 3
reasoning_effort: low
live_code_bench:
temperature: 1.0
reasoning_effort: low
longbench_v2:
max_tokens: 8192
max_input_tokens: 128000
reasoning_effort: low
openai_mrcr:
max_tokens: 8192
max_input_tokens: 128000
reasoning_effort: low
bfcl_v3:
max_tokens: 4096
reasoning_effort: low
general_fc:
max_tokens: 4096
reasoning_effort: low
tau2_bench:
max_tokens: 16384
reasoning_effort: low

View File

@ -380,7 +380,8 @@ class OpenAICompatible(ModelAdapter):
]
payload.pop('chat_template_kwargs', None)
for k in ('temperature', 'max_tokens', 'top_p', 'stop', 'seed',
'response_format', 'chat_template_kwargs'):
'response_format', 'chat_template_kwargs',
'thinking', 'reasoning_effort'):
if kw.get(k) is not None:
payload[k] = kw[k]
payload.setdefault('max_tokens', self.extra.get('max_tokens', 4096)) # CoT room