Skip to content

Commit

Permalink
fix(streaming/messages): more robust event type construction (#576)
Browse files Browse the repository at this point in the history
previously, the helpers could crash if the API responded with a field
that wasn't in the types yet, or if the property types didn't match which
is not ideal
  • Loading branch information
RobertCraigie committed Jul 3, 2024
1 parent 73ed0cc commit 0e50b4a
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions src/anthropic/lib/streaming/_messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
)
from ...types import Message, ContentBlock, RawMessageStreamEvent
from ..._utils import consume_sync_iterator, consume_async_iterator
from ..._models import construct_type
from ..._models import construct_type, build
from ..._streaming import Stream, AsyncStream

if TYPE_CHECKING:
Expand Down Expand Up @@ -334,7 +334,7 @@ def build_events(
elif event.type == "message_delta":
events_to_fire.append(event)
elif event.type == "message_stop":
events_to_fire.append(MessageStopEvent(type="message_stop", message=message_snapshot))
events_to_fire.append(build(MessageStopEvent, type="message_stop", message=message_snapshot))
elif event.type == "content_block_start":
events_to_fire.append(event)
elif event.type == "content_block_delta":
Expand All @@ -343,15 +343,17 @@ def build_events(
content_block = message_snapshot.content[event.index]
if event.delta.type == "text_delta" and content_block.type == "text":
events_to_fire.append(
TextEvent(
build(
TextEvent,
type="text",
text=event.delta.text,
snapshot=content_block.text,
)
)
elif event.delta.type == "input_json_delta" and content_block.type == "tool_use":
events_to_fire.append(
InputJsonEvent(
build(
InputJsonEvent,
type="input_json",
partial_json=event.delta.partial_json,
snapshot=content_block.input,
Expand All @@ -361,7 +363,7 @@ def build_events(
content_block = message_snapshot.content[event.index]

events_to_fire.append(
ContentBlockStopEvent(type="content_block_stop", index=event.index, content_block=content_block),
build(ContentBlockStopEvent, type="content_block_stop", index=event.index, content_block=content_block),
)
else:
# we only want exhaustive checking for linters, not at runtime
Expand Down

0 comments on commit 0e50b4a

Please sign in to comment.