@@ -610,60 +610,62 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
610
610
chunk : ConverseStreamOutputTypeDef
611
611
tool_id : str | None = None
612
612
async for chunk in _AsyncIteratorWrapper (self ._event_stream ):
613
- # TODO(Marcelo): Switch this to `match` when we drop Python 3.9 support.
614
- if 'messageStart' in chunk :
615
- continue
616
- if 'messageStop' in chunk :
617
- continue
618
- if 'metadata' in chunk :
619
- if 'usage' in chunk ['metadata' ]: # pragma: no branch
620
- self ._usage += self ._map_usage (chunk ['metadata' ])
621
- continue
622
- if 'contentBlockStart' in chunk :
623
- index = chunk ['contentBlockStart' ]['contentBlockIndex' ]
624
- start = chunk ['contentBlockStart' ]['start' ]
625
- if 'toolUse' in start : # pragma: no branch
626
- tool_use_start = start ['toolUse' ]
627
- tool_id = tool_use_start ['toolUseId' ]
628
- tool_name = tool_use_start ['name' ]
629
- maybe_event = self ._parts_manager .handle_tool_call_delta (
630
- vendor_part_id = index ,
631
- tool_name = tool_name ,
632
- args = None ,
633
- tool_call_id = tool_id ,
634
- )
635
- if maybe_event : # pragma: no branch
636
- yield maybe_event
637
- if 'contentBlockDelta' in chunk :
638
- index = chunk ['contentBlockDelta' ]['contentBlockIndex' ]
639
- delta = chunk ['contentBlockDelta' ]['delta' ]
640
- if 'reasoningContent' in delta :
641
- if text := delta ['reasoningContent' ].get ('text' ):
642
- yield self ._parts_manager .handle_thinking_delta (
613
+ match chunk :
614
+ case {'messageStart' : _}:
615
+ continue
616
+ case {'messageStop' : _}:
617
+ continue
618
+ case {'metadata' : metadata }:
619
+ if 'usage' in metadata : # pragma: no branch
620
+ self ._usage += self ._map_usage (metadata )
621
+ continue
622
+ case {'contentBlockStart' : content_block_start }:
623
+ index = content_block_start ['contentBlockIndex' ]
624
+ start = content_block_start ['start' ]
625
+ if 'toolUse' in start : # pragma: no branch
626
+ tool_use_start = start ['toolUse' ]
627
+ tool_id = tool_use_start ['toolUseId' ]
628
+ tool_name = tool_use_start ['name' ]
629
+ maybe_event = self ._parts_manager .handle_tool_call_delta (
643
630
vendor_part_id = index ,
644
- content = text ,
645
- signature = delta ['reasoningContent' ].get ('signature' ),
631
+ tool_name = tool_name ,
632
+ args = None ,
633
+ tool_call_id = tool_id ,
646
634
)
647
- else : # pragma: no cover
648
- warnings .warn (
649
- f'Only text reasoning content is supported yet, but you got { delta ["reasoningContent" ]} . '
650
- 'Please report this to the maintainers.' ,
651
- UserWarning ,
635
+ if maybe_event : # pragma: no branch
636
+ yield maybe_event
637
+ case {'contentBlockDelta' : content_block_delta }:
638
+ index = content_block_delta ['contentBlockIndex' ]
639
+ delta = content_block_delta ['delta' ]
640
+ if 'reasoningContent' in delta :
641
+ if text := delta ['reasoningContent' ].get ('text' ):
642
+ yield self ._parts_manager .handle_thinking_delta (
643
+ vendor_part_id = index ,
644
+ content = text ,
645
+ signature = delta ['reasoningContent' ].get ('signature' ),
646
+ )
647
+ else : # pragma: no cover
648
+ warnings .warn (
649
+ f'Only text reasoning content is supported yet, but you got { delta ["reasoningContent" ]} . '
650
+ 'Please report this to the maintainers.' ,
651
+ UserWarning ,
652
+ )
653
+ if 'text' in delta :
654
+ maybe_event = self ._parts_manager .handle_text_delta (vendor_part_id = index , content = delta ['text' ])
655
+ if maybe_event is not None : # pragma: no branch
656
+ yield maybe_event
657
+ if 'toolUse' in delta :
658
+ tool_use = delta ['toolUse' ]
659
+ maybe_event = self ._parts_manager .handle_tool_call_delta (
660
+ vendor_part_id = index ,
661
+ tool_name = tool_use .get ('name' ),
662
+ args = tool_use .get ('input' ),
663
+ tool_call_id = tool_id ,
652
664
)
653
- if 'text' in delta :
654
- maybe_event = self ._parts_manager .handle_text_delta (vendor_part_id = index , content = delta ['text' ])
655
- if maybe_event is not None : # pragma: no branch
656
- yield maybe_event
657
- if 'toolUse' in delta :
658
- tool_use = delta ['toolUse' ]
659
- maybe_event = self ._parts_manager .handle_tool_call_delta (
660
- vendor_part_id = index ,
661
- tool_name = tool_use .get ('name' ),
662
- args = tool_use .get ('input' ),
663
- tool_call_id = tool_id ,
664
- )
665
- if maybe_event : # pragma: no branch
666
- yield maybe_event
665
+ if maybe_event : # pragma: no branch
666
+ yield maybe_event
667
+ case _:
668
+ pass # pyright wants match statements to be exhaustive
667
669
668
670
@property
669
671
def model_name (self ) -> str :
0 commit comments