11# -*- coding: utf-8 -*-
2+ # pylint:disable=too-many-branches,too-many-statements
23import json
34
45from typing import AsyncIterator , Union
910 RunCompletedEvent ,
1011 RunContentCompletedEvent ,
1112 RunStartedEvent ,
12- ReasoningStartedEvent ,
13- ReasoningStepEvent ,
14- ReasoningCompletedEvent ,
13+ # ReasoningStartedEvent, # Not support now
14+ # ReasoningStepEvent,
15+ # ReasoningCompletedEvent,
1516 ToolCallStartedEvent ,
1617 ToolCallCompletedEvent ,
1718)
@@ -33,49 +34,52 @@ async def adapt_agno_message_stream(
3334) -> AsyncIterator [Union [Message , Content ]]:
3435 rb = ResponseBuilder ()
3536 mb = None
36- rmb = None
37+ cb = None
38+ mb_type = None
39+
40+ should_start_new_message = True
3741
3842 async for event in source_stream :
3943 if isinstance (event , RunStartedEvent ):
40- # Placeholder
41- pass
44+ should_start_new_message = True
4245 elif isinstance (event , RunCompletedEvent ):
4346 # Placeholder
4447 return
4548 elif isinstance (event , RunContentEvent ):
46- if mb is None :
49+ if event .reasoning_content :
50+ message_type = MessageType .REASONING
51+ content = event .reasoning_content
52+ else :
53+ message_type = MessageType .MESSAGE
54+ content = event .content
55+
56+ if message_type != mb_type :
57+ # Complete previous message
58+ should_start_new_message = True
59+ mb_type = message_type
60+ if cb is not None :
61+ yield cb .complete ()
62+ if mb is not None :
63+ yield mb .complete ()
64+
65+ if should_start_new_message :
66+ should_start_new_message = False
4767 mb = rb .create_message_builder (
48- message_type = MessageType . MESSAGE ,
68+ message_type = message_type ,
4969 role = "assistant" ,
5070 )
5171 yield mb .get_message_data ()
5272
5373 cb = mb .create_content_builder (
5474 content_type = "text" ,
5575 )
56- yield cb .add_text_delta (event . content )
76+ yield cb .add_text_delta (content )
5777 elif isinstance (event , RunContentCompletedEvent ):
5878 yield cb .complete ()
5979 yield mb .complete ()
6080 mb = None
61- elif isinstance (event , ReasoningStartedEvent ):
62- pass
63- elif isinstance (event , ReasoningStepEvent ):
64- if rmb is None :
65- rmb = rb .create_message_builder (
66- message_type = MessageType .REASONING ,
67- role = "assistant" ,
68- )
69- yield rmb .get_message_data ()
70-
71- rcb = rmb .create_content_builder (
72- content_type = "text" ,
73- )
74- yield rcb .add_text_delta (event .content )
75- elif isinstance (event , ReasoningCompletedEvent ):
76- yield rcb .complete ()
77- yield rmb .complete ()
78- rmb = None
81+ cb = None
82+ should_start_new_message = True
7983 elif isinstance (event , ToolCallStartedEvent ):
8084 json_str = json .dumps (event .tool .tool_args , ensure_ascii = False )
8185 data = DataContent (
@@ -93,6 +97,8 @@ async def adapt_agno_message_stream(
9397 )
9498 # No stream tool call
9599 yield message .completed ()
100+
101+ should_start_new_message = True
96102 elif isinstance (event , ToolCallCompletedEvent ):
97103 try :
98104 json_str = json .dumps (event .tool .result , ensure_ascii = False )
@@ -112,3 +118,5 @@ async def adapt_agno_message_stream(
112118 content = [data ],
113119 )
114120 yield message .completed ()
121+
122+ should_start_new_message = True
0 commit comments