Skip to content

Commit e071fbc

Browse files
fix(bedrock): return string content in ChatBedrockConverse streaming
1 parent 09842d6 commit e071fbc

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

libs/aws/langchain_aws/chat_models/bedrock_converse.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,9 +1170,9 @@ def _parse_stream_event(event: Dict[str, Any]) -> Optional[BaseMessageChunk]:
11701170
if "messageStart" in event:
11711171
# TODO: needed?
11721172
return (
1173-
AIMessageChunk(content=[])
1173+
AIMessageChunk(content="")
11741174
if event["messageStart"]["role"] == "assistant"
1175-
else HumanMessageChunk(content=[])
1175+
else HumanMessageChunk(content="")
11761176
)
11771177
elif "contentBlockStart" in event:
11781178
block = {
@@ -1189,7 +1189,9 @@ def _parse_stream_event(event: Dict[str, Any]) -> Optional[BaseMessageChunk]:
11891189
index=event["contentBlockStart"]["contentBlockIndex"],
11901190
)
11911191
)
1192-
return AIMessageChunk(content=[block], tool_call_chunks=tool_call_chunks)
1192+
# Keep content as list during streaming to preserve merging compatibility
1193+
content = [block]
1194+
return AIMessageChunk(content=content, tool_call_chunks=tool_call_chunks)
11931195
elif "contentBlockDelta" in event:
11941196
block = {
11951197
**_bedrock_to_lc([event["contentBlockDelta"]["delta"]])[0],
@@ -1205,19 +1207,19 @@ def _parse_stream_event(event: Dict[str, Any]) -> Optional[BaseMessageChunk]:
12051207
index=event["contentBlockDelta"]["contentBlockIndex"],
12061208
)
12071209
)
1208-
return AIMessageChunk(content=[block], tool_call_chunks=tool_call_chunks)
1210+
# Keep content as list during streaming to preserve merging compatibility
1211+
content = [block]
1212+
return AIMessageChunk(content=content, tool_call_chunks=tool_call_chunks)
12091213
elif "contentBlockStop" in event:
12101214
# TODO: needed?
1211-
return AIMessageChunk(
1212-
content=[{"index": event["contentBlockStop"]["contentBlockIndex"]}]
1213-
)
1215+
return AIMessageChunk(content="")
12141216
elif "messageStop" in event:
12151217
# TODO: snake case response metadata?
1216-
return AIMessageChunk(content=[], response_metadata=event["messageStop"])
1218+
return AIMessageChunk(content="", response_metadata=event["messageStop"])
12171219
elif "metadata" in event:
12181220
usage = _extract_usage_metadata(event["metadata"])
12191221
return AIMessageChunk(
1220-
content=[], response_metadata=event["metadata"], usage_metadata=usage
1222+
content="", response_metadata=event["metadata"], usage_metadata=usage
12211223
)
12221224
elif "Exception" in list(event.keys())[0]:
12231225
name, info = list(event.items())[0]

0 commit comments

Comments
 (0)