Skip to content

Commit 7b55b8b

Browse files
authored
Use match statement now that we're dropping 3.9 (#2732)
1 parent 4e28eb7 commit 7b55b8b

File tree

1 file changed

+53
-51
lines changed

1 file changed

+53
-51
lines changed

pydantic_ai_slim/pydantic_ai/models/bedrock.py

Lines changed: 53 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -610,60 +610,62 @@ async def _get_event_iterator(self) -> AsyncIterator[ModelResponseStreamEvent]:
610610
chunk: ConverseStreamOutputTypeDef
611611
tool_id: str | None = None
612612
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(
643630
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,
646634
)
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,
652664
)
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
667669

668670
@property
669671
def model_name(self) -> str:

0 commit comments

Comments
 (0)