44from pydantic import BaseModel
55
66from agno .agent .agent import Agent
7+ from agno .db .base import SessionType
78from agno .models .openai .chat import OpenAIChat
89from agno .run .response import RunEvent
910from agno .tools .decorator import tool
@@ -63,12 +64,12 @@ def test_basic_intermediate_steps_events():
6364 assert events .keys () == {RunEvent .run_started , RunEvent .run_response_content , RunEvent .run_completed }
6465
6566 assert len (events [RunEvent .run_started ]) == 1
66- assert events [RunEvent .run_started ][0 ].model == "gpt-4o-mini"
67- assert events [RunEvent .run_started ][0 ].model_provider == "OpenAI"
68- assert events [RunEvent .run_started ][0 ].session_id is not None
69- assert events [RunEvent .run_started ][0 ].agent_id is not None
70- assert events [RunEvent .run_started ][0 ].run_id is not None
71- assert events [RunEvent .run_started ][0 ].created_at is not None
67+ assert events [RunEvent .run_started ][0 ].model == "gpt-4o-mini" # type: ignore
68+ assert events [RunEvent .run_started ][0 ].model_provider == "OpenAI" # type: ignore
69+ assert events [RunEvent .run_started ][0 ].session_id is not None # type: ignore
70+ assert events [RunEvent .run_started ][0 ].agent_id is not None # type: ignore
71+ assert events [RunEvent .run_started ][0 ].run_id is not None # type: ignore
72+ assert events [RunEvent .run_started ][0 ].created_at is not None # type: ignore
7273 assert len (events [RunEvent .run_response_content ]) > 1
7374 assert len (events [RunEvent .run_completed ]) == 1
7475
@@ -92,12 +93,12 @@ def test_basic_intermediate_steps_events_persisted(agent_db):
9293
9394 assert events .keys () == {RunEvent .run_started , RunEvent .run_response_content , RunEvent .run_completed }
9495
95- run_response_from_storage = agent_db .get_all_sessions ( )[0 ].memory [ " runs" ] [0 ]
96+ run_response_from_storage = agent_db .get_sessions ( session_type = SessionType . AGENT )[0 ].runs [0 ] # type: ignore
9697
97- assert run_response_from_storage [ " events" ] is not None
98- assert len (run_response_from_storage [ " events" ] ) == 2 , "We should only have the run started and run completed events"
99- assert run_response_from_storage [ " events" ] [0 ][ " event" ] == RunEvent .run_started
100- assert run_response_from_storage [ " events" ] [1 ][ " event" ] == RunEvent .run_completed
98+ assert run_response_from_storage . events is not None
99+ assert len (run_response_from_storage . events ) == 2 , "We should only have the run started and run completed events"
100+ assert run_response_from_storage . events [0 ]. event == RunEvent .run_started
101+ assert run_response_from_storage . events [1 ]. event == RunEvent .run_completed
101102
102103
103104def test_intermediate_steps_with_tools ():
@@ -128,10 +129,10 @@ def test_intermediate_steps_with_tools():
128129 assert len (events [RunEvent .run_response_content ]) > 1
129130 assert len (events [RunEvent .run_completed ]) == 1
130131 assert len (events [RunEvent .tool_call_started ]) == 1
131- assert events [RunEvent .tool_call_started ][0 ].tool .tool_name == "get_current_stock_price"
132+ assert events [RunEvent .tool_call_started ][0 ].tool .tool_name == "get_current_stock_price" # type: ignore
132133 assert len (events [RunEvent .tool_call_completed ]) == 1
133- assert events [RunEvent .tool_call_completed ][0 ].content is not None
134- assert events [RunEvent .tool_call_completed ][0 ].tool .result is not None
134+ assert events [RunEvent .tool_call_completed ][0 ].content is not None # type: ignore
135+ assert events [RunEvent .tool_call_completed ][0 ].tool .result is not None # type: ignore
135136
136137
137138def test_intermediate_steps_with_tools_events_persisted (agent_db ):
@@ -160,14 +161,14 @@ def test_intermediate_steps_with_tools_events_persisted(agent_db):
160161 RunEvent .run_completed ,
161162 }
162163
163- run_response_from_storage = agent_db .get_all_sessions ( )[0 ].memory [ " runs" ] [0 ]
164+ run_response_from_storage = agent_db .get_sessions ( session_type = SessionType . AGENT )[0 ].runs [0 ] # type: ignore
164165
165- assert run_response_from_storage [ " events" ] is not None
166- assert len (run_response_from_storage [ " events" ] ) == 4
167- assert run_response_from_storage [ " events" ] [0 ][ " event" ] == RunEvent .run_started
168- assert run_response_from_storage [ " events" ] [1 ][ " event" ] == RunEvent .tool_call_started
169- assert run_response_from_storage [ " events" ] [2 ][ " event" ] == RunEvent .tool_call_completed
170- assert run_response_from_storage [ " events" ] [3 ][ " event" ] == RunEvent .run_completed
166+ assert run_response_from_storage . events is not None
167+ assert len (run_response_from_storage . events ) == 4
168+ assert run_response_from_storage . events [0 ]. event == RunEvent .run_started
169+ assert run_response_from_storage . events [1 ]. event == RunEvent .tool_call_started
170+ assert run_response_from_storage . events [2 ]. event == RunEvent .tool_call_completed
171+ assert run_response_from_storage . events [3 ]. event == RunEvent .run_completed
171172
172173
173174def test_intermediate_steps_with_reasoning ():
@@ -211,12 +212,12 @@ def test_intermediate_steps_with_reasoning():
211212 assert len (events [RunEvent .tool_call_completed ]) > 1
212213 assert len (events [RunEvent .reasoning_started ]) == 1
213214 assert len (events [RunEvent .reasoning_completed ]) == 1
214- assert events [RunEvent .reasoning_completed ][0 ].content is not None
215- assert events [RunEvent .reasoning_completed ][0 ].content_type == "ReasoningSteps"
215+ assert events [RunEvent .reasoning_completed ][0 ].content is not None # type: ignore
216+ assert events [RunEvent .reasoning_completed ][0 ].content_type == "ReasoningSteps" # type: ignore
216217 assert len (events [RunEvent .reasoning_step ]) > 1
217- assert events [RunEvent .reasoning_step ][0 ].content is not None
218- assert events [RunEvent .reasoning_step ][0 ].content_type == "ReasoningStep"
219- assert events [RunEvent .reasoning_step ][0 ].reasoning_content is not None
218+ assert events [RunEvent .reasoning_step ][0 ].content is not None # type: ignore
219+ assert events [RunEvent .reasoning_step ][0 ].content_type == "ReasoningStep" # type: ignore
220+ assert events [RunEvent .reasoning_step ][0 ].reasoning_content is not None # type: ignore
220221
221222
222223def test_intermediate_steps_with_user_confirmation (agent_db ):
@@ -232,7 +233,7 @@ def get_the_weather(city: str):
232233 db = agent_db ,
233234 store_events = True ,
234235 add_history_to_context = True ,
235- num_history_responses = 2 ,
236+ num_history_runs = 2 ,
236237 telemetry = False ,
237238 )
238239
@@ -246,26 +247,25 @@ def get_the_weather(city: str):
246247 events [run_response_delta .event ].append (run_response_delta )
247248
248249 assert events .keys () == {RunEvent .run_started , RunEvent .run_paused }
249-
250250 assert len (events [RunEvent .run_started ]) == 1
251251 assert len (events [RunEvent .run_paused ]) == 1
252- assert events [RunEvent .run_paused ][0 ].tools [0 ].requires_confirmation is True
252+ assert events [RunEvent .run_paused ][0 ].tools [0 ].requires_confirmation is True # type: ignore
253253
254254 assert agent .is_paused
255255
256- assert agent .run_response .tools [0 ].requires_confirmation
256+ assert agent .run_response .tools [0 ].requires_confirmation # type: ignore
257257
258258 # Mark the tool as confirmed
259- updated_tools = agent .run_response .tools
260- run_id = agent .run_response .run_id
261- updated_tools [0 ].confirmed = True
259+ updated_tools = agent .run_response .tools # type: ignore
260+ run_id = agent .run_response .run_id # type: ignore
261+ updated_tools [0 ].confirmed = True # type: ignore
262262
263- # Check stored events
264- stored_session = agent_db . get_all_sessions ()[ 0 ]
265- assert stored_session .memory [ "runs" ][ 0 ][ " events" ] is not None
266- assert len (stored_session .memory [ "runs" ][ 0 ][ " events" ] ) == 2
267- assert stored_session .memory [ "runs" ][ 0 ][ " events" ] [0 ][ " event" ] == RunEvent .run_started
268- assert stored_session .memory [ "runs" ][ 0 ][ " events" ] [1 ][ " event" ] == RunEvent .run_paused
263+ stored_session = agent . db . get_sessions ( session_type = SessionType . AGENT )[ 0 ]. runs [ 0 ] # type: ignore
264+
265+ assert stored_session .events is not None
266+ assert len (stored_session .events ) == 2
267+ assert stored_session .events [0 ]. event == RunEvent .run_started
268+ assert stored_session .events [1 ]. event == RunEvent .run_paused
269269
270270 # Then we continue the run
271271 response_generator = agent .continue_run (
@@ -278,7 +278,7 @@ def get_the_weather(city: str):
278278 events [run_response_delta .event ] = []
279279 events [run_response_delta .event ].append (run_response_delta )
280280
281- assert agent .run_response .tools [0 ].result == "It is currently 70 degrees and cloudy in Tokyo"
281+ assert agent .run_response .tools [0 ].result == "It is currently 70 degrees and cloudy in Tokyo" # type: ignore
282282
283283 assert events .keys () == {
284284 RunEvent .run_continued ,
@@ -290,32 +290,32 @@ def get_the_weather(city: str):
290290
291291 assert len (events [RunEvent .run_continued ]) == 1
292292 assert len (events [RunEvent .tool_call_started ]) == 1
293- assert events [RunEvent .tool_call_started ][0 ].tool .tool_name == "get_the_weather"
293+ assert events [RunEvent .tool_call_started ][0 ].tool .tool_name == "get_the_weather" # type: ignore
294294 assert len (events [RunEvent .tool_call_completed ]) == 1
295- assert events [RunEvent .tool_call_completed ][0 ].content is not None
296- assert events [RunEvent .tool_call_completed ][0 ].tool .result is not None
295+ assert events [RunEvent .tool_call_completed ][0 ].content is not None # type: ignore
296+ assert events [RunEvent .tool_call_completed ][0 ].tool .result is not None # type: ignore
297297 assert len (events [RunEvent .run_response_content ]) > 1
298298 assert len (events [RunEvent .run_completed ]) == 1
299299
300+ assert agent .run_response is not None
300301 assert agent .run_response .is_paused is False
301302
302303 # Check stored events
303- stored_session = agent_db .get_all_sessions ( )[0 ]
304- assert stored_session .memory [ "runs" ][ 0 ][ " events" ] is not None
305- assert len (stored_session .memory [ "runs" ][ 0 ][ " events" ] ) == 6
306- assert stored_session .memory [ "runs" ][ 0 ][ " events" ] [0 ][ " event" ] == RunEvent .run_started
304+ stored_session = agent_db .get_sessions ( session_type = SessionType . AGENT )[0 ]. runs [ 0 ] # type: ignore
305+ assert stored_session .events is not None
306+ assert len (stored_session .events ) == 6
307+ assert stored_session .events [0 ]. event == RunEvent .run_started
307308 assert stored_session .memory ["runs" ][0 ]["events" ][1 ]["event" ] == RunEvent .run_paused
308309 assert stored_session .memory ["runs" ][0 ]["events" ][2 ]["event" ] == RunEvent .run_continued
309310 assert stored_session .memory ["runs" ][0 ]["events" ][3 ]["event" ] == RunEvent .tool_call_started
310311 assert stored_session .memory ["runs" ][0 ]["events" ][4 ]["event" ] == RunEvent .tool_call_completed
311312 assert stored_session .memory ["runs" ][0 ]["events" ][5 ]["event" ] == RunEvent .run_completed
312313
313314
314- def test_intermediate_steps_with_memory (agent_db , memory ):
315+ def test_intermediate_steps_with_memory (agent_db ):
315316 """Test that the agent streams events."""
316317 agent = Agent (
317318 model = OpenAIChat (id = "gpt-4o-mini" ),
318- memory = memory ,
319319 db = agent_db ,
320320 enable_user_memories = True ,
321321 telemetry = False ,
@@ -377,19 +377,20 @@ class Person(BaseModel):
377377 assert len (events [RunEvent .run_response_content ]) == 1
378378 assert len (events [RunEvent .run_completed ]) == 1
379379
380- assert events [RunEvent .run_response_content ][0 ].content is not None
381- assert events [RunEvent .run_response_content ][0 ].content_type == "Person"
382- assert events [RunEvent .run_response_content ][0 ].content .name == "Elon Musk"
383- assert len (events [RunEvent .run_response_content ][0 ].content .description ) > 1
380+ assert events [RunEvent .run_response_content ][0 ].content is not None # type: ignore
381+ assert events [RunEvent .run_response_content ][0 ].content_type == "Person" # type: ignore
382+ assert events [RunEvent .run_response_content ][0 ].content .name == "Elon Musk" # type: ignore
383+ assert len (events [RunEvent .run_response_content ][0 ].content .description ) > 1 # type: ignore
384384
385- assert events [RunEvent .run_completed ][0 ].content is not None
386- assert events [RunEvent .run_completed ][0 ].content_type == "Person"
387- assert events [RunEvent .run_completed ][0 ].content .name == "Elon Musk"
388- assert len (events [RunEvent .run_completed ][0 ].content .description ) > 1
385+ assert events [RunEvent .run_completed ][0 ].content is not None # type: ignore
386+ assert events [RunEvent .run_completed ][0 ].content_type == "Person" # type: ignore
387+ assert events [RunEvent .run_completed ][0 ].content .name == "Elon Musk" # type: ignore
388+ assert len (events [RunEvent .run_completed ][0 ].content .description ) > 1 # type: ignore
389389
390- assert agent .run_response .content is not None
391- assert agent .run_response .content_type == "Person"
392- assert agent .run_response .content .name == "Elon Musk"
390+ assert agent .run_response is not None
391+ assert agent .run_response .content is not None # type: ignore
392+ assert agent .run_response .content_type == "Person" # type: ignore
393+ assert agent .run_response .content .name == "Elon Musk" # type: ignore
393394
394395
395396def test_intermediate_steps_with_parser_model (agent_db ):
@@ -432,16 +433,17 @@ class Person(BaseModel):
432433 ) # The first model streams, then the parser model has a single content event
433434 assert len (events [RunEvent .run_completed ]) == 1
434435
435- assert events [RunEvent .run_response_content ][- 1 ].content is not None
436- assert events [RunEvent .run_response_content ][- 1 ].content_type == "Person"
437- assert events [RunEvent .run_response_content ][- 1 ].content .name == "Elon Musk"
438- assert len (events [RunEvent .run_response_content ][- 1 ].content .description ) > 1
436+ assert events [RunEvent .run_response_content ][- 1 ].content is not None # type: ignore
437+ assert events [RunEvent .run_response_content ][- 1 ].content_type == "Person" # type: ignore
438+ assert events [RunEvent .run_response_content ][- 1 ].content .name == "Elon Musk" # type: ignore
439+ assert len (events [RunEvent .run_response_content ][- 1 ].content .description ) > 1 # type: ignore
439440
440- assert events [RunEvent .run_completed ][0 ].content is not None
441- assert events [RunEvent .run_completed ][0 ].content_type == "Person"
442- assert events [RunEvent .run_completed ][0 ].content .name == "Elon Musk"
443- assert len (events [RunEvent .run_completed ][0 ].content .description ) > 1
441+ assert events [RunEvent .run_completed ][0 ].content is not None # type: ignore
442+ assert events [RunEvent .run_completed ][0 ].content_type == "Person" # type: ignore
443+ assert events [RunEvent .run_completed ][0 ].content .name == "Elon Musk" # type: ignore
444+ assert len (events [RunEvent .run_completed ][0 ].content .description ) > 1 # type: ignore
444445
446+ assert agent .run_response is not None
445447 assert agent .run_response .content is not None
446448 assert agent .run_response .content_type == "Person"
447449 assert agent .run_response .content .name == "Elon Musk"
0 commit comments