8849d18d79
When a model's parser (Ollama qwen3.5, DeepSeek-R1, etc.) splits thinking out of content and into a separate reasoning_content field, final_response is empty AND contains no <think> tag. The existing inline-thinking check _has_inline_thinking was False, so the post-tool empty nudge fired erroneously — causing a wasted retry round-trip after every tool call. Compute _has_separate_reasoning from the structured API fields (reasoning_content / reasoning / reasoning_details) and gate the nudge on it alongside _has_inline_thinking. When either flag is set, the empty response routes to the existing prefill branch instead. Fixes #21811. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>