@@ -111,27 +111,6 @@ def mock_tracer():
111111 return tracer
112112
113113
114- @pytest .mark .parametrize (
115- ("kwargs" , "exp_state" ),
116- [
117- (
118- {"request_state" : {"key1" : "value1" }},
119- {"key1" : "value1" },
120- ),
121- (
122- {},
123- {},
124- ),
125- ],
126- )
127- def test_initialize_state (kwargs , exp_state ):
128- kwargs = strands .event_loop .event_loop .initialize_state (** kwargs )
129-
130- tru_state = kwargs ["request_state" ]
131-
132- assert tru_state == exp_state
133-
134-
135114def test_event_loop_cycle_text_response (
136115 model ,
137116 model_id ,
@@ -465,19 +444,6 @@ def test_event_loop_cycle_stop(
465444 assert tru_stop_reason == exp_stop_reason and tru_message == exp_message and tru_request_state == exp_request_state
466445
467446
468- def test_prepare_next_cycle ():
469- kwargs = {"event_loop_cycle_id" : "c1" }
470- event_loop_metrics = strands .telemetry .metrics .EventLoopMetrics ()
471- tru_result = strands .event_loop .event_loop .prepare_next_cycle (kwargs , event_loop_metrics )
472- exp_result = {
473- "event_loop_cycle_id" : "c1" ,
474- "event_loop_parent_cycle_id" : "c1" ,
475- "event_loop_metrics" : event_loop_metrics ,
476- }
477-
478- assert tru_result == exp_result
479-
480-
481447def test_cycle_exception (
482448 model ,
483449 system_prompt ,
@@ -733,3 +699,76 @@ def test_event_loop_cycle_with_parent_span(
733699 mock_tracer .start_event_loop_cycle_span .assert_called_once_with (
734700 event_loop_kwargs = unittest .mock .ANY , parent_span = parent_span , messages = messages
735701 )
702+
703+
704+ def test_request_state_initialization ():
705+ # Call without providing request_state
706+ tru_stop_reason , tru_message , _ , tru_request_state = strands .event_loop .event_loop .event_loop_cycle (
707+ model = MagicMock (),
708+ model_id = MagicMock (),
709+ system_prompt = MagicMock (),
710+ messages = MagicMock (),
711+ tool_config = MagicMock (),
712+ callback_handler = MagicMock (),
713+ tool_handler = MagicMock (),
714+ tool_execution_handler = MagicMock (),
715+ )
716+
717+ # Verify request_state was initialized to empty dict
718+ assert tru_request_state == {}
719+
720+ # Call with pre-existing request_state
721+ initial_request_state = {"key" : "value" }
722+ tru_stop_reason , tru_message , _ , tru_request_state = strands .event_loop .event_loop .event_loop_cycle (
723+ model = MagicMock (),
724+ model_id = MagicMock (),
725+ system_prompt = MagicMock (),
726+ messages = MagicMock (),
727+ tool_config = MagicMock (),
728+ callback_handler = MagicMock (),
729+ tool_handler = MagicMock (),
730+ request_state = initial_request_state ,
731+ )
732+
733+ # Verify existing request_state was preserved
734+ assert tru_request_state == initial_request_state
735+
736+
737+ def test_prepare_next_cycle_in_tool_execution (model , tool_stream ):
738+ """Test that cycle ID and metrics are properly updated during tool execution."""
739+ model .converse .side_effect = [
740+ tool_stream ,
741+ [
742+ {"contentBlockStop" : {}},
743+ ],
744+ ]
745+
746+ # Create a mock for recurse_event_loop to capture the kwargs passed to it
747+ with unittest .mock .patch .object (strands .event_loop .event_loop , "recurse_event_loop" ) as mock_recurse :
748+ # Set up mock to return a valid response
749+ mock_recurse .return_value = (
750+ "end_turn" ,
751+ {"role" : "assistant" , "content" : [{"text" : "test text" }]},
752+ strands .telemetry .metrics .EventLoopMetrics (),
753+ {},
754+ )
755+
756+ # Call event_loop_cycle which should execute a tool and then call recurse_event_loop
757+ strands .event_loop .event_loop .event_loop_cycle (
758+ model = model ,
759+ model_id = MagicMock (),
760+ system_prompt = MagicMock (),
761+ messages = MagicMock (),
762+ tool_config = MagicMock (),
763+ callback_handler = MagicMock (),
764+ tool_handler = MagicMock (),
765+ tool_execution_handler = MagicMock (),
766+ )
767+
768+ assert mock_recurse .called
769+
770+ # Verify required properties are present
771+ recursive_kwargs = mock_recurse .call_args [1 ]
772+ assert "event_loop_metrics" in recursive_kwargs
773+ assert "event_loop_parent_cycle_id" in recursive_kwargs
774+ assert recursive_kwargs ["event_loop_parent_cycle_id" ] == recursive_kwargs ["event_loop_cycle_id" ]
0 commit comments