@@ -400,6 +400,9 @@ async def run(
400
400
current_agent = starting_agent
401
401
should_run_agent_start_hooks = True
402
402
403
+ # save the original input to the session if enabled
404
+ await self ._save_result_to_session (session , original_input , [])
405
+
403
406
try :
404
407
while True :
405
408
all_tools = await AgentRunner ._get_all_tools (current_agent , context_wrapper )
@@ -497,9 +500,7 @@ async def run(
497
500
output_guardrail_results = output_guardrail_results ,
498
501
context_wrapper = context_wrapper ,
499
502
)
500
-
501
- # Save the conversation to session if enabled
502
- await self ._save_result_to_session (session , input , result )
503
+ await self ._save_result_to_session (session , [], turn_result .new_step_items )
503
504
504
505
return result
505
506
elif isinstance (turn_result .next_step , NextStepHandoff ):
@@ -508,7 +509,7 @@ async def run(
508
509
current_span = None
509
510
should_run_agent_start_hooks = True
510
511
elif isinstance (turn_result .next_step , NextStepRunAgain ):
511
- pass
512
+ await self . _save_result_to_session ( session , [], turn_result . new_step_items )
512
513
else :
513
514
raise AgentsException (
514
515
f"Unknown next step type: { type (turn_result .next_step )} "
@@ -739,6 +740,8 @@ async def _start_streaming(
739
740
# Update the streamed result with the prepared input
740
741
streamed_result .input = prepared_input
741
742
743
+ await AgentRunner ._save_result_to_session (session , starting_input , [])
744
+
742
745
while True :
743
746
if streamed_result .is_complete :
744
747
break
@@ -841,24 +844,11 @@ async def _start_streaming(
841
844
streamed_result .is_complete = True
842
845
843
846
# Save the conversation to session if enabled
844
- # Create a temporary RunResult for session saving
845
- temp_result = RunResult (
846
- input = streamed_result .input ,
847
- new_items = streamed_result .new_items ,
848
- raw_responses = streamed_result .raw_responses ,
849
- final_output = streamed_result .final_output ,
850
- _last_agent = current_agent ,
851
- input_guardrail_results = streamed_result .input_guardrail_results ,
852
- output_guardrail_results = streamed_result .output_guardrail_results ,
853
- context_wrapper = context_wrapper ,
854
- )
855
- await AgentRunner ._save_result_to_session (
856
- session , starting_input , temp_result
857
- )
847
+ await AgentRunner ._save_result_to_session (session , [], turn_result .new_step_items )
858
848
859
849
streamed_result ._event_queue .put_nowait (QueueCompleteSentinel ())
860
850
elif isinstance (turn_result .next_step , NextStepRunAgain ):
861
- pass
851
+ await AgentRunner . _save_result_to_session ( session , [], turn_result . new_step_items )
862
852
except AgentsException as exc :
863
853
streamed_result .is_complete = True
864
854
streamed_result ._event_queue .put_nowait (QueueCompleteSentinel ())
@@ -1379,7 +1369,7 @@ async def _save_result_to_session(
1379
1369
cls ,
1380
1370
session : Session | None ,
1381
1371
original_input : str | list [TResponseInputItem ],
1382
- result : RunResult ,
1372
+ new_items : list [ RunItem ] ,
1383
1373
) -> None :
1384
1374
"""Save the conversation turn to session."""
1385
1375
if session is None :
@@ -1389,7 +1379,7 @@ async def _save_result_to_session(
1389
1379
input_list = ItemHelpers .input_to_new_input_list (original_input )
1390
1380
1391
1381
# Convert new items to input format
1392
- new_items_as_input = [item .to_input_item () for item in result . new_items ]
1382
+ new_items_as_input = [item .to_input_item () for item in new_items ]
1393
1383
1394
1384
# Save all items from this turn
1395
1385
items_to_save = input_list + new_items_as_input
0 commit comments