@@ -438,6 +438,9 @@ async def run(
438
438
current_agent = starting_agent
439
439
should_run_agent_start_hooks = True
440
440
441
+ # save the original input to the session if enabled
442
+ await self ._save_result_to_session (session , original_input , [])
443
+
441
444
try :
442
445
while True :
443
446
all_tools = await AgentRunner ._get_all_tools (current_agent , context_wrapper )
@@ -537,9 +540,7 @@ async def run(
537
540
output_guardrail_results = output_guardrail_results ,
538
541
context_wrapper = context_wrapper ,
539
542
)
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 )
543
544
544
545
return result
545
546
elif isinstance (turn_result .next_step , NextStepHandoff ):
@@ -548,7 +549,7 @@ async def run(
548
549
current_span = None
549
550
should_run_agent_start_hooks = True
550
551
elif isinstance (turn_result .next_step , NextStepRunAgain ):
551
- pass
552
+ await self . _save_result_to_session ( session , [], turn_result . new_step_items )
552
553
else :
553
554
raise AgentsException (
554
555
f"Unknown next step type: { type (turn_result .next_step )} "
@@ -784,6 +785,8 @@ async def _start_streaming(
784
785
# Update the streamed result with the prepared input
785
786
streamed_result .input = prepared_input
786
787
788
+ await AgentRunner ._save_result_to_session (session , starting_input , [])
789
+
787
790
while True :
788
791
if streamed_result .is_complete :
789
792
break
@@ -887,24 +890,15 @@ async def _start_streaming(
887
890
streamed_result .is_complete = True
888
891
889
892
# 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
- )
901
893
await AgentRunner ._save_result_to_session (
902
- session , starting_input , temp_result
894
+ session , [], turn_result . new_step_items
903
895
)
904
896
905
897
streamed_result ._event_queue .put_nowait (QueueCompleteSentinel ())
906
898
elif isinstance (turn_result .next_step , NextStepRunAgain ):
907
- pass
899
+ await AgentRunner ._save_result_to_session (
900
+ session , [], turn_result .new_step_items
901
+ )
908
902
except AgentsException as exc :
909
903
streamed_result .is_complete = True
910
904
streamed_result ._event_queue .put_nowait (QueueCompleteSentinel ())
@@ -1510,7 +1504,7 @@ async def _save_result_to_session(
1510
1504
cls ,
1511
1505
session : Session | None ,
1512
1506
original_input : str | list [TResponseInputItem ],
1513
- result : RunResult ,
1507
+ new_items : list [ RunItem ] ,
1514
1508
) -> None :
1515
1509
"""Save the conversation turn to session."""
1516
1510
if session is None :
@@ -1520,7 +1514,7 @@ async def _save_result_to_session(
1520
1514
input_list = ItemHelpers .input_to_new_input_list (original_input )
1521
1515
1522
1516
# 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 ]
1524
1518
1525
1519
# Save all items from this turn
1526
1520
items_to_save = input_list + new_items_as_input
0 commit comments