@@ -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