InferTags uses a heuristic to infer the tags that surround thinking traces:
We look for a range node that iterates over "Messages" and then look for a
reference to "Thinking" like `{{.Thinking}}`. We then go up to the nearest
ListNode and take the first and last TextNodes as the opening and closing
tags.
AddContent returns the thinking content and the non-thinking content that
should be immediately sent to the user. It will internally buffer if it needs
to see more raw content to disambiguate