Skip to content

Commit 7dd7767

Browse files
authored
hotfix: Support Agno reasoning content is None (#294)
1 parent 754c1d4 commit 7dd7767

5 files changed

Lines changed: 39 additions & 31 deletions

File tree

src/agentscope_runtime/adapters/agno/stream.py

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# -*- coding: utf-8 -*-
2+
# pylint:disable=too-many-branches,too-many-statements
23
import json
34

45
from typing import AsyncIterator, Union
@@ -9,9 +10,9 @@
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

tests/integrated/test_runner_stream_agentscope.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ async def test_runner_sample1():
193193
print(res)
194194

195195
print("\n")
196-
assert "杭州" in final_text
196+
assert "杭州" in final_text or "hangzhou" in final_text.lower()
197197

198198

199199
@pytest.mark.asyncio

tests/integrated/test_runner_stream_agentscope_thinking.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ async def test_runner_sample1():
194194
print(res)
195195

196196
print("\n")
197-
assert "杭州" in final_text
197+
assert "杭州" in final_text or "hangzhou" in final_text.lower()
198198

199199

200200
@pytest.mark.asyncio

tests/integrated/test_runner_stream_agno.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ async def test_runner_sample1():
164164
print("res", res)
165165

166166
print("\n")
167-
assert "杭州" in final_text
167+
assert "杭州" in final_text or "hangzhou" in final_text.lower()
168168

169169

170170
@pytest.mark.asyncio

tests/integrated/test_runner_stream_agno_thinking.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ async def test_runner_sample1():
165165
print(res)
166166

167167
print("\n")
168-
assert "杭州" in final_text
168+
assert "杭州" in final_text or "hangzhou" in final_text.lower()
169169

170170

171171
@pytest.mark.asyncio

0 commit comments

Comments
 (0)