vLLM Ling3 parity: reasoning ends where the executed call begins, so
downstream panels never render converted calls as thinking text. Only
complete blocks are removed; truncated fragments and narration survive.
Separate commit on top of the rescue so each reverts independently.
Thinking models of the Bailing family intermittently emit <tool_call>
arg_key/arg_value XML inside the thinking block. The PEG layer consumes
that region as reasoning_content before the tool stage, so the call is
lost: empty content, no structured calls. update_chat_msg now promotes
well-formed blocks to tool calls on final parses with empty content.
Strictly additive; ids flow through set_tool_call_ids. Verified with a
standalone harness against live-captured payloads.