
    3fi)                     N    d dl Z d dlmZ d dlmZ d dlmZmZmZ  G d de      Z	y)    N)List)BaseChatMessageHistory)BaseMessagemessage_to_dictmessages_from_dictc                   x    e Zd ZdZ	 	 	 ddededededededd	fd
ZddZdedd	fdZ	e
dee   fd       ZddZy	)XataChatMessageHistoryz/Chat message history stored in a Xata database.
session_iddb_urlapi_keybranch_name
table_namecreate_tablereturnNc                     	 ddl m}  ||||      | _        || _        || _        |r| j                          yy# t        $ r t        d      w xY w)zInitialize with Xata client.r   )
XataClientzPCould not import xata python package. Please install it with `pip install xata`.)r   r   r   N)xata.clientr   ImportError_client_table_name_session_id_create_table_if_not_exists)selfr
   r   r   r   r   r   r   s           m/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/chat_message_histories/xata.py__init__zXataChatMessageHistory.__init__   sh    	. "F
 &%,,.   	= 	s	   : Ac                    | j                   j                         j                  | j                        }|j                  dk  ry |j                  dk7  rt        d|j                   d|       | j                   j                         j                  | j                        }|j                  dkD  rt        d|j                   d|       | j                   j                         j                  | j                  dddd	d
dd	ddd	ddd	ddd	ddd	gi      }|j                  dkD  rt        d|j                   d|       y )N+  i  z(Error checking if table exists in Xata:  zError creating table in Xata: columns	sessionIdstring)nametyper#   rolecontenttextr"   additionalKwargsjsonpayloadz$Error setting table schema in Xata: )r   table
get_schemar   status_code	Exceptioncreate
set_schema)r   rs     r   r   z2XataChatMessageHistory._create_table_if_not_exists)   sJ   LL ++D,<,<===C==C:1==/1#N  LL ''(8(89==3<Q]]O1QCPQQLL ++((;#X6#X6&7#X6/@	 , 
 ==3B1==/QRSTRUVWW     messagec                    t        |      }| j                  j                         j                  | j                  | j
                  |d   |j                  t        j                  |j                        |d   j                  d      |d   j                  d      d      }|j                  dkD  rt        d|j                   d|       y	)
z$Append the message to the Xata tabler#   datar$   r"   )r    r#   r%   r'   r$   r"   r   zError adding message to Xata: r   N)r   r   recordsinsertr   r   r%   r(   dumpsadditional_kwargsgetr-   r.   )r   r3   msgr1   s       r   add_messagez"XataChatMessageHistory.add_messageD   s    g&LL  "))!--F"??$(JJw/H/H$IF/F/

 ==3<Q]]O1QCPQQ r2   c                    | j                   j                         j                  | j                  d| j                  iddid      }|j
                  dk7  rt        d|j
                   d|       t        |d	   D cg c]F  }|d
   |d   |j                  d      |j                  d      t        j                  |d         ddH c}      }|S c c}w )Nr    zxata.createdAtasc)filtersortr)      Error running query: r   r6   r#   r%   r$   r"   r'   )r%   r$   r"   r9   )r#   r5   )r   r5   queryr   r   r-   r.   r   r:   r(   loads)r   r1   mmsgss       r   messageszXataChatMessageHistory.messagesU   s    LL%%  !1!1 *51	 & 
 ==C3AMM?!A3GHH! 9  fI#$Y< !f !f-1ZZ:L8M-N	
 s   =ACc                    	 | j                   j                         j                  | j                  dgd| j                  id      }|j
                  dk7  rt        d|j
                   d|       |d   D cg c]  }|d   	 }}t        |      d	k(  ry|D cg c]  }d
| j                  |di }}| j                   j                         j                  d|i       c c}w c c}w )zDelete session from Xata table.idr    )r   r?   r)   rA   rB   r   r6   r   delete)r+   rI   
operationsN)
r   r5   rC   r   r   r-   r.   lenr6   transaction)r   r1   recidsrI   rK   s         r   clearzXataChatMessageHistory.clearr   s    !!#))   $v#T%5%5 * A }}#"7as KLL())53t95C53x1}LOFHT%5%5R@AJ  LL  "..j7Q.R%  6s   8C C%)mainrG   T)r   N)__name__
__module____qualname____doc__strboolr   r   r   r<   propertyr   rG   rP    r2   r   r	   r	      s    9 "$!// / 	/
 / / / 
/4X6R; R4 R" ${+  8Sr2   r	   )
r(   typingr   langchain_core.chat_historyr   langchain_core.messagesr   r   r   r	   rY   r2   r   <module>r]      s)      > zS3 zSr2   