From ed187db2a1b2f4459c97407b8ad10f2d337e28a8 Mon Sep 17 00:00:00 2001 From: Rabi Mishra Date: Wed, 18 Feb 2026 20:27:00 +0530 Subject: [PATCH] fix(openai): support "reasoning" field alias in streaming deltas (#7294) Signed-off-by: rabi --- crates/goose/src/providers/formats/openai.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/goose/src/providers/formats/openai.rs b/crates/goose/src/providers/formats/openai.rs index 567ce0cf7d..cfbbb80c22 100644 --- a/crates/goose/src/providers/formats/openai.rs +++ b/crates/goose/src/providers/formats/openai.rs @@ -53,6 +53,7 @@ struct Delta { role: Option, tool_calls: Option>, reasoning_details: Option>, + #[serde(alias = "reasoning")] reasoning_content: Option, } @@ -338,8 +339,11 @@ pub fn response_to_message(response: &Value) -> anyhow::Result { let mut content = Vec::new(); - // Capture reasoning_content if present (for DeepSeek reasoning models) - if let Some(reasoning_content) = original.get("reasoning_content") { + // Capture reasoning content if present (DeepSeek uses "reasoning_content", vLLM uses "reasoning") + let reasoning_value = original + .get("reasoning_content") + .or_else(|| original.get("reasoning")); + if let Some(reasoning_content) = reasoning_value { if let Some(reasoning_str) = reasoning_content.as_str() { if !reasoning_str.is_empty() { content.push(MessageContent::reasoning(reasoning_str));