@@ -590,7 +590,7 @@ def test_record_initial_entry(self, basic_durable_agent):
590590 assert entry .status .lower () == "running"
591591
592592 def test_ensure_instance_exists (self , basic_durable_agent ):
593- """Test _ensure_instance_exists helper method."""
593+ """Test ensure_instance_exists helper method."""
594594 instance_id = "test-instance-123"
595595 triggering_workflow_instance_id = "parent-instance-123"
596596 time = "2024-01-01T00:00:00Z"
@@ -599,33 +599,33 @@ def test_ensure_instance_exists(self, basic_durable_agent):
599599 from datetime import datetime
600600
601601 test_time = datetime .fromisoformat (time .replace ("Z" , "+00:00" ))
602- basic_durable_agent ._ensure_instance_exists (
603- instance_id , "Test input" , triggering_workflow_instance_id , test_time
602+ basic_durable_agent .ensure_instance_exists (
603+ instance_id = instance_id ,
604+ input_value = "Test input" ,
605+ triggering_workflow_instance_id = triggering_workflow_instance_id ,
606+ time = test_time
604607 )
605608
606- assert instance_id in basic_durable_agent .state ["instances" ]
607- instance_data = basic_durable_agent .state ["instances" ][instance_id ]
608- assert (
609- instance_data ["triggering_workflow_instance_id" ]
610- == triggering_workflow_instance_id
611- )
612- # start_time is stored as string in dict format
613- assert instance_data ["start_time" ] == "2024-01-01T00:00:00+00:00"
614- assert instance_data ["workflow_name" ] == "AgenticWorkflow"
609+ assert instance_id in basic_durable_agent ._state_model .instances
610+ entry = basic_durable_agent ._state_model .instances [instance_id ]
611+ assert entry .triggering_workflow_instance_id == triggering_workflow_instance_id
612+ assert entry .start_time == test_time
613+ assert entry .workflow_name is None # Default entry doesn't set workflow_name
615614
616615 # Test that existing instance is not overwritten
617616 original_input = "Original input"
618- basic_durable_agent . state [ "instances" ][ instance_id ][ "input" ] = original_input
617+ entry . input_value = original_input
619618
620- basic_durable_agent ._ensure_instance_exists (
621- instance_id , "different-parent" , "2024-01-02T00:00:00Z"
619+ basic_durable_agent .ensure_instance_exists (
620+ instance_id = instance_id ,
621+ input_value = "New input" ,
622+ triggering_workflow_instance_id = "different-parent" ,
623+ time = datetime .fromisoformat ("2024-01-02T00:00:00Z" .replace ("Z" , "+00:00" ))
622624 )
623625
624- # Input should remain unchanged
625- assert (
626- basic_durable_agent .state ["instances" ][instance_id ]["input" ]
627- == original_input
628- )
626+ # Input should remain unchanged (ensure_instance_exists doesn't overwrite)
627+ entry = basic_durable_agent ._state_model .instances [instance_id ]
628+ assert entry .input_value == original_input
629629
630630 def test_process_user_message (self , basic_durable_agent ):
631631 """Test _process_user_message helper method."""
@@ -817,45 +817,42 @@ def test_update_agent_memory_and_history(self, basic_durable_agent):
817817
818818 def test_construct_messages_with_instance_history (self , basic_durable_agent ):
819819 """Test _construct_messages_with_instance_history helper method."""
820+ from datetime import datetime , timezone
821+
820822 instance_id = "test-instance-123"
821- input_data = "Test input"
822823
823- # Set up instance with messages
824- basic_durable_agent .state ["instances" ][instance_id ] = {
825- "input" : "Test task" ,
826- "source" : "test_source" ,
827- "triggering_workflow_instance_id" : None ,
828- "workflow_instance_id" : instance_id ,
829- "workflow_name" : "AgenticWorkflow" ,
830- "status" : "RUNNING" ,
831- "messages" : [
832- AgentWorkflowMessage (role = "user" , content = "Hello" ).model_dump (
833- mode = "json"
834- ),
835- AgentWorkflowMessage (role = "assistant" , content = "Hi there!" ).model_dump (
836- mode = "json"
837- ),
824+ # Set up instance with messages using AgentWorkflowEntry
825+ if not hasattr (basic_durable_agent ._state_model , 'instances' ):
826+ basic_durable_agent ._state_model .instances = {}
827+
828+ basic_durable_agent ._state_model .instances [instance_id ] = AgentWorkflowEntry (
829+ input_value = "Test task" ,
830+ source = "test_source" ,
831+ triggering_workflow_instance_id = None ,
832+ workflow_instance_id = instance_id ,
833+ workflow_name = "AgenticWorkflow" ,
834+ status = "RUNNING" ,
835+ messages = [
836+ AgentWorkflowMessage (role = "user" , content = "Hello" ),
837+ AgentWorkflowMessage (role = "assistant" , content = "Hi there!" ),
838838 ],
839- "tool_history" : [],
840- "end_time" : None ,
841- "trace_context" : None ,
842- }
843-
844- # Mock prompt template
845- basic_durable_agent .prompt_template = Mock ()
846- basic_durable_agent .prompt_template .format_prompt .return_value = [
847- {"role" : "system" , "content" : "System prompt" }
848- ]
839+ tool_history = [],
840+ end_time = None ,
841+ start_time = datetime .now (timezone .utc ),
842+ )
849843
850844 messages = basic_durable_agent ._construct_messages_with_instance_history (
851- instance_id , input_data
845+ instance_id
852846 )
853847
854- # Should include system message + user input
855- assert len (messages ) == 2 # system + user input
856- assert messages [0 ]["role" ] == "system"
857- assert messages [1 ]["role" ] == "user"
858- assert messages [1 ]["content" ] == "Test input"
848+ # Should include messages from instance history (system messages excluded from instance timeline)
849+ # Plus any messages from memory
850+ assert len (messages ) >= 2 # At least the 2 instance messages
851+ # Find the user and assistant messages
852+ user_messages = [m for m in messages if m .get ("role" ) == "user" ]
853+ assistant_messages = [m for m in messages if m .get ("role" ) == "assistant" ]
854+ assert len (user_messages ) >= 1
855+ assert len (assistant_messages ) >= 1
859856
860857 @pytest .mark .asyncio
861858 async def test_broadcast_message (self , basic_durable_agent ):
0 commit comments