@@ -330,7 +330,7 @@ def _handle_text_delta_simple(
330330 ignore_leading_whitespace = ignore_leading_whitespace ,
331331 )
332332
333- def _handle_text_delta_with_thinking_tags (
333+ def _handle_text_delta_with_thinking_tags ( # noqa: C901
334334 self ,
335335 * ,
336336 vendor_part_id : VendorId ,
@@ -390,20 +390,33 @@ def _handle_text_delta_with_thinking_tags(
390390
391391 for i , (segment_type , segment_content ) in enumerate (segments ):
392392 if segment_type == 'text' :
393- # Skip whitespace-only text before a thinking tag when ignore_leading_whitespace=True
394- skip_whitespace_before_tag = (
395- ignore_leading_whitespace
396- and segment_content .isspace ()
397- and i + 1 < len (segments )
398- and segments [i + 1 ][0 ] == 'start_tag'
393+ yield from self ._emit_text_part (
394+ vendor_part_id = vendor_part_id ,
395+ content = segment_content ,
396+ id = id ,
397+ ignore_leading_whitespace = ignore_leading_whitespace ,
399398 )
400- if not skip_whitespace_before_tag : # praga: no cover - line was always true (this is probably dead code, will remove after double checking)
401- yield from self ._emit_text_part (
402- vendor_part_id = vendor_part_id ,
403- content = segment_content ,
404- id = id ,
405- ignore_leading_whitespace = ignore_leading_whitespace ,
406- )
399+ # After emitting TextPart, reconstruct remaining segments as literal text
400+ remaining_segments = segments [i + 1 :]
401+ if remaining_segments :
402+ reconstructed = ''
403+ for seg_type , seg_content in remaining_segments :
404+ if seg_type == 'text' : # pragma: no cover - line was always true
405+ reconstructed += seg_content
406+ elif seg_type == 'start_tag' :
407+ reconstructed += start_tag
408+ elif seg_type == 'thinking' :
409+ reconstructed += seg_content
410+ elif seg_type == 'end_tag' : # pragma: no cover - partial, line was always true
411+ reconstructed += end_tag
412+ if reconstructed : # pragma: no cover - partial, line was always true
413+ yield from self ._emit_text_part (
414+ vendor_part_id = vendor_part_id ,
415+ content = reconstructed ,
416+ id = id ,
417+ ignore_leading_whitespace = False ,
418+ )
419+ break
407420 elif segment_type == 'start_tag' :
408421 self ._vendor_id_to_part_index .pop (vendor_part_id , None )
409422 new_part_index = len (self ._parts )
0 commit comments