Under the hood
Thinking-block stripping can now preserve earlier thinking blocks up to a given occurrence.
The function that strips thinking and redacted_thinking blocks from assistant messages now accepts an index n, so only thinking blocks after the nth occurrence are removed. Earlier thinking blocks, and any empty text following them, are now kept instead of always stripping everything.