@@ -438,6 +438,9 @@ async def run(
438438 current_agent = starting_agent
439439 should_run_agent_start_hooks = True
440440
441+ # save the original input to the session if enabled
442+ await self ._save_result_to_session (session , original_input , [])
443+
441444 try :
442445 while True :
443446 all_tools = await AgentRunner ._get_all_tools (current_agent , context_wrapper )
@@ -537,9 +540,7 @@ async def run(
537540 output_guardrail_results = output_guardrail_results ,
538541 context_wrapper = context_wrapper ,
539542 )
540-
541- # Save the conversation to session if enabled
542- await self ._save_result_to_session (session , input , result )
543+ await self ._save_result_to_session (session , [], turn_result .new_step_items )
543544
544545 return result
545546 elif isinstance (turn_result .next_step , NextStepHandoff ):
@@ -548,7 +549,7 @@ async def run(
548549 current_span = None
549550 should_run_agent_start_hooks = True
550551 elif isinstance (turn_result .next_step , NextStepRunAgain ):
551- pass
552+ await self . _save_result_to_session ( session , [], turn_result . new_step_items )
552553 else :
553554 raise AgentsException (
554555 f"Unknown next step type: { type (turn_result .next_step )} "
@@ -784,6 +785,8 @@ async def _start_streaming(
784785 # Update the streamed result with the prepared input
785786 streamed_result .input = prepared_input
786787
788+ await AgentRunner ._save_result_to_session (session , starting_input , [])
789+
787790 while True :
788791 if streamed_result .is_complete :
789792 break
@@ -887,24 +890,15 @@ async def _start_streaming(
887890 streamed_result .is_complete = True
888891
889892 # Save the conversation to session if enabled
890- # Create a temporary RunResult for session saving
891- temp_result = RunResult (
892- input = streamed_result .input ,
893- new_items = streamed_result .new_items ,
894- raw_responses = streamed_result .raw_responses ,
895- final_output = streamed_result .final_output ,
896- _last_agent = current_agent ,
897- input_guardrail_results = streamed_result .input_guardrail_results ,
898- output_guardrail_results = streamed_result .output_guardrail_results ,
899- context_wrapper = context_wrapper ,
900- )
901893 await AgentRunner ._save_result_to_session (
902- session , starting_input , temp_result
894+ session , [], turn_result . new_step_items
903895 )
904896
905897 streamed_result ._event_queue .put_nowait (QueueCompleteSentinel ())
906898 elif isinstance (turn_result .next_step , NextStepRunAgain ):
907- pass
899+ await AgentRunner ._save_result_to_session (
900+ session , [], turn_result .new_step_items
901+ )
908902 except AgentsException as exc :
909903 streamed_result .is_complete = True
910904 streamed_result ._event_queue .put_nowait (QueueCompleteSentinel ())
@@ -1510,7 +1504,7 @@ async def _save_result_to_session(
15101504 cls ,
15111505 session : Session | None ,
15121506 original_input : str | list [TResponseInputItem ],
1513- result : RunResult ,
1507+ new_items : list [ RunItem ] ,
15141508 ) -> None :
15151509 """Save the conversation turn to session."""
15161510 if session is None :
@@ -1520,7 +1514,7 @@ async def _save_result_to_session(
15201514 input_list = ItemHelpers .input_to_new_input_list (original_input )
15211515
15221516 # Convert new items to input format
1523- new_items_as_input = [item .to_input_item () for item in result . new_items ]
1517+ new_items_as_input = [item .to_input_item () for item in new_items ]
15241518
15251519 # Save all items from this turn
15261520 items_to_save = input_list + new_items_as_input
0 commit comments