diff --git a/crates/goose/src/providers/formats/openai.rs b/crates/goose/src/providers/formats/openai.rs index 567ce0cf7d2..cfbbb80c223 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));