Summary
When streaming via the OpenAI Chat Completions endpoint, reasoning content is
silently dropped. Providers that return chain-of-thought in the streaming delta as
choices[].delta.reasoning_content (e.g. DeepSeek and OpenAI-compatible gateways)
produce no StreamFrame.ReasoningDelta / StreamFrame.ReasoningComplete, so the
reasoning is lost both during streaming and in the final toMessageResponse().
The non-streaming path works correctly — AbstractOpenAILLMClient reads
reasoning_content and produces a MessagePart.Reasoning — so switching a model
from execute() to executeStreaming() causes reasoning to disappear.
Summary
When streaming via the OpenAI Chat Completions endpoint, reasoning content is
silently dropped. Providers that return chain-of-thought in the streaming delta as
choices[].delta.reasoning_content(e.g. DeepSeek and OpenAI-compatible gateways)produce no
StreamFrame.ReasoningDelta/StreamFrame.ReasoningComplete, so thereasoning is lost both during streaming and in the final
toMessageResponse().The non-streaming path works correctly —
AbstractOpenAILLMClientreadsreasoning_contentand produces aMessagePart.Reasoning— so switching a modelfrom
execute()toexecuteStreaming()causes reasoning to disappear.