
    Xj	                     n    d dl Z d dlmZmZ d dlmZ  ee          Z G d d          Z e            ZdS )    N)datetime	timedelta)
get_loggerc            
           e Zd Zd ZdefdZdedededdfdZ	 dded	edz  dee	eef                  fd
Z
dedefdZdefdZdefdZdedefdZdS )ConversationManagerc                 "    i | _         d| _        d S )N   )conversationsexpiration_hoursselfs    O/lsinfo/ai/hellotax_ai/base_platform/app/services/agent/conversation_manager.py__init__zConversationManager.__init__   s    .0 "    returnc                    t          t          j                              }g t          j                    t          j                    d| j        |<   t                              |                              d           |S )Nmessages
created_at
updated_atconversation_idzconversation created)	struuiduuid4r   utcnowr
   loggerbindinfor   r   s     r   create_conversationz'ConversationManager.create_conversation   sm    djll++"/++"/++/
 /
?+
 	O4499:PQQQr   r   rolecontentNc                    || j         vr0g t          j                    t          j                    d| j         |<   | j         |         d                             ||d           t          j                    | j         |         d<   d S )Nr   r   )r"   r#   r   )r
   r   r   append)r   r   r"   r#   s       r   add_messagezConversationManager.add_message   s    $"444&o//&o//3 3D/
 	?+J7>>Y`?a?abbb<DO<M<M?+L999r   max_messagesc                 \    || j         vrg S | j         |         d         }|r|| d          S |S )Nr   r
   )r   r   r'   r   s       r   get_messagesz ConversationManager.get_messages#   sG     $"444I%o6zB 	,\MNN++r   c                     || j         v r8| j         |= t                              |                              d           dS dS )Nr   zconversation clearedTF)r
   r   r   r   r    s     r   clear_conversationz&ConversationManager.clear_conversation-   sH    d000"?3KKK88==>TUUU4ur   c                    t          j                    }g }| j                                        D ]>\  }}|d         }||z
  t	          | j                  k    r|                    |           ?|D ]
}| j        |= t          |          S )Nr   )hours)r   r   r
   itemsr   r   r%   len)r   nowexpired_idsconv_id	conv_datar   s         r   cleanup_expired_conversationsz1ConversationManager.cleanup_expired_conversations4   s    o"&"4":":"<"< 	, 	,GY"<0JZ)$2G"H"H"HHH""7+++" 	, 	,G"7++;r   c                 *    t          | j                  S N)r0   r
   r   s    r   get_conversation_countz*ConversationManager.get_conversation_count?   s    4%&&&r   c                     || j         v S r7   r)   r    s     r   conversation_existsz'ConversationManager.conversation_existsB   s    $"444r   r7   )__name__
__module____qualname__r   r   r!   r&   intlistdictr*   boolr,   r5   r8   r:    r   r   r   r   	   s9       # # #S    N3 Nc NC ND N N N N @D "25*	d38n	   # $    	 s 	  	  	  	 ' ' ' ' '53 54 5 5 5 5 5 5r   r   )	r   r   r   common_loggingr   r;   r   r   conversation_managerrB   r   r   <module>rE      s     ( ( ( ( ( ( ( ( % % % % % %	H		:5 :5 :5 :5 :5 :5 :5 :5z +*,,   r   