@@ -60,10 +60,8 @@ class DurableAgent(AgenticWorkflow, AgentBase):
6060        default = None ,
6161        description = "The current workflow instance ID for this agent." ,
6262    )
63-     memory : ConversationDaprStateMemory  =  Field (
64-         default_factory = lambda : ConversationDaprStateMemory (
65-             store_name = "workflowstatestore" , session_id = "durable_agent_session" 
66-         ),
63+     memory : Optional [ConversationDaprStateMemory ] =  Field (
64+         default = None ,
6765        description = "Persistent memory with session-based state hydration." ,
6866    )
6967
@@ -93,19 +91,31 @@ def model_post_init(self, __context: Any) -> None:
9391        if  not  self .state :
9492            self .state  =  {"instances" : {}}
9593
94+         if  self .memory  is  not   None :
95+             self .memory  =  ConversationDaprStateMemory (
96+                 store_name = self .memory .store_name ,
97+                 session_id = f"{ self .name  or  'agent' }  _session" ,
98+             )
99+             logger .info (f"Initialized memory with store name: { self .memory .store_name }  " )
100+ 
96101        # Load the current workflow instance ID from state using session_id 
97102        logger .debug (f"State after loading: { self .state }  " )
98103        if  self .state  and  self .state .get ("instances" ):
99104            logger .debug (f"Found { len (self .state ['instances' ])}   instances in state" )
105+             current_session_id  =  (
106+                 self .memory .session_id 
107+                 if  self .memory 
108+                 else  f"{ self .name }  _default_session" 
109+             )
100110            for  instance_id , instance_data  in  self .state ["instances" ].items ():
101111                stored_workflow_name  =  instance_data .get ("workflow_name" )
102112                stored_session_id  =  instance_data .get ("session_id" )
103113                logger .debug (
104-                     f"Instance { instance_id }  : workflow_name={ stored_workflow_name }  , session_id={ stored_session_id }  , current_workflow_name={ self ._workflow_name }  , current_session_id={ self . memory . session_id }  " 
114+                     f"Instance { instance_id }  : workflow_name={ stored_workflow_name }  , session_id={ stored_session_id }  , current_workflow_name={ self ._workflow_name }  , current_session_id={ current_session_id }  " 
105115                )
106116                if  (
107117                    stored_workflow_name  ==  self ._workflow_name 
108-                     and  stored_session_id  ==  self . memory . session_id 
118+                     and  stored_session_id  ==  current_session_id 
109119                ):
110120                    self .workflow_instance_id  =  instance_id 
111121                    logger .debug (
@@ -401,7 +411,9 @@ def record_initial_entry(
401411            "workflow_instance_id" : instance_id ,
402412            "triggering_workflow_instance_id" : triggering_workflow_instance_id ,
403413            "workflow_name" : self ._workflow_name ,
404-             "session_id" : self .memory .session_id ,
414+             "session_id" : self .memory .session_id 
415+             if  self .memory 
416+             else  f"{ self .name }  _default_session" ,
405417            "start_time" : start_time_str ,
406418            "trace_context" : trace_context ,
407419            "status" : DaprWorkflowStatus .RUNNING .value ,
@@ -443,7 +455,9 @@ def _ensure_instance_exists(
443455                "workflow_instance_id" : instance_id ,
444456                "triggering_workflow_instance_id" : triggering_workflow_instance_id ,
445457                "workflow_name" : self ._workflow_name ,
446-                 "session_id" : self .memory .session_id ,
458+                 "session_id" : self .memory .session_id 
459+                 if  self .memory 
460+                 else  f"{ self .name }  _default_session" ,
447461                "messages" : [],
448462                "tool_history" : [],
449463                "status" : DaprWorkflowStatus .RUNNING .value ,
@@ -462,7 +476,8 @@ def _process_user_message(
462476            return 
463477
464478        user_msg  =  UserMessage (content = user_message_copy .get ("content" , "" ))
465-         self .memory .add_message (user_msg )
479+         if  self .memory :
480+             self .memory .add_message (user_msg )
466481
467482        msg_object  =  DurableAgentMessage (** user_message_copy )
468483        inst  =  self .state ["instances" ][instance_id ]
@@ -502,7 +517,8 @@ def _save_assistant_message(
502517        if  not  message_exists :
503518            messages_list .append (agent_msg .model_dump (mode = "json" ))
504519            inst ["last_message" ] =  agent_msg .model_dump (mode = "json" )
505-             self .memory .add_message (AssistantMessage (** assistant_message ))
520+             if  self .memory :
521+                 self .memory .add_message (AssistantMessage (** assistant_message ))
506522            self .save_state ()
507523
508524    def  _print_llm_interaction_messages (
@@ -649,8 +665,9 @@ def _update_agent_memory_and_history(
649665        # Update tool history and memory of agent (only if new) 
650666        # Note: Memory updates are handled at workflow level to avoid replay issues 
651667        self .tool_history .append (tool_history_entry )
652-         # Add the tool message to the agent's memory 
653-         self .memory .add_message (tool_message )
668+         # Add the tool message to the agent's memory if enabled 
669+         if  self .memory :
670+             self .memory .add_message (tool_message )
654671
655672    def  _get_last_message_from_state (
656673        self , instance_id : str 
@@ -850,8 +867,9 @@ async def process_broadcast_message(self, message: BroadcastMessage):
850867            logger .debug (
851868                f"{ self .name }   processing broadcast message from '{ source }  '. Content: { message_content }  " 
852869            )
853-             # Store the message in local memory 
854-             self .memory .add_message (message )
870+             # Store the message in local memory if enabled 
871+             if  self .memory :
872+                 self .memory .add_message (message )
855873
856874            # Define DurableAgentMessage object for state persistence 
857875            agent_msg  =  DurableAgentMessage (** message .model_dump ())
@@ -920,15 +938,18 @@ def _construct_messages_with_instance_history(
920938        else :
921939            instance_messages  =  []
922940
923-         # Get messages from persistent memory (session-based, cross-workflow) 
941+         # Get messages from persistent memory (session-based, cross-workflow) if memory is enabled  
924942        persistent_memory_messages  =  []
925-         try :
926-             persistent_memory_messages  =  self .memory .get_messages ()
927-             logger .info (
928-                 f"Retrieved { len (persistent_memory_messages )}   messages for session { self .memory .session_id }  " 
929-             )
930-         except  Exception  as  e :
931-             logger .warning (f"Failed to retrieve persistent memory: { e }  " )
943+         if  self .memory :
944+             try :
945+                 persistent_memory_messages  =  self .memory .get_messages ()
946+                 logger .info (
947+                     f"Retrieved { len (persistent_memory_messages )}   messages for session { self .memory .session_id }  " 
948+                 )
949+             except  Exception  as  e :
950+                 logger .warning (f"Failed to retrieve persistent memory: { e }  " )
951+         else :
952+             logger .debug ("Memory is disabled, skipping persistent memory retrieval" )
932953
933954        # Get long-term memory from workflow state (for broadcast messages and persistent context) 
934955        long_term_memory_data  =  self .state .get ("chat_history" , [])
0 commit comments