diff --git a/riddle/src/oracle.rs b/riddle/src/oracle.rs index 12ae27e..a69726c 100644 --- a/riddle/src/oracle.rs +++ b/riddle/src/oracle.rs @@ -420,7 +420,14 @@ impl HttpOracle { // Sent as "reasoning_effort" only when set: reasoning models accept it // ("low" ≈ faster first ink), but some providers reject the field on // non-reasoning models, so it must stay out of the default request. - let reasoning = std::env::var("RIDDLE_OPENAI_REASONING").ok(); + // Set-but-EMPTY also means unset: config UIs writing env files (e.g. + // remagic's settings form, whose select includes a "" option) produce + // RIDDLE_OPENAI_REASONING= — and sending "reasoning_effort":"" is a + // 400 on OpenAI, silently killing every turn. + let reasoning = std::env::var("RIDDLE_OPENAI_REASONING") + .ok() + .map(|s| s.trim().to_string()) + .filter(|s| !s.is_empty()); eprintln!( "riddle: http oracle base={base} model={model} max_tokens={max_tokens} reasoning={}", reasoning.as_deref().unwrap_or("-")