
    hh)                     V    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	dS )    N)List)BaseChatMessageHistory)BaseMessagemessage_to_dictmessages_from_dictc                       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dS )XataChatMessageHistoryz/Chat message history stored in a Xata database.mainmessagesT
session_iddb_urlapi_keybranch_name
table_namecreate_tablereturnNc                     	 ddl m} n# t          $ r t          d          w xY w ||||          | _        || _        || _        |r|                                  dS dS )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           l/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/langchain_community/chat_message_histories/xata.py__init__zXataChatMessageHistory.__init__   s    	....... 	 	 	=  	
 "zF
 
 
 &% 	/,,.....	/ 	/s   	 #c                 \   | j                                                             | j                  }|j        dk    rd S |j        dk    rt          d|j         d|           | j                                                             | j                  }|j        dk    rt          d|j         d|           | 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k    rt          d|j         d|           d S )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)   sv   L  ++D,<===CF=CN1=NN1NN   L  ''(899=3PQ]PPQPPQQQL  ++((;;#X66#X66&77#X66/@@	 , 
 
 =3V1=VVSTVVWWW     messagec                    t          |          }| j                                                            | j        | j        |d         |j        t          j        |j	                  |d         
                    d          |d         
                    d          d          }|j        dk    rt          d|j         d|           d	S )
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/   r0   )r   r5   msgr3   s       r   add_messagez"XataChatMessageHistory.add_messageD   s    g&&L  ""))!-F"?$(Jw/H$I$IF//F// 

 

 =3PQ]PPQPPQQQ r4   c                    | j                                                             | j        d| j        iddid          }|j        dk    rt          d|j         d|           t          d	 |d
         D                       }|S )Nr"   zxata.createdAtasc)filtersortr+      Error running query: r    c           
          g | ]V}|d          |d         |                     d          |                     d          t          j        |d                   ddWS )r%   r'   r&   r$   r)   )r'   r&   r$   r;   )r%   r7   )r<   r*   loads).0ms     r   
<listcomp>z3XataChatMessageHistory.messages.<locals>.<listcomp>c   sv         fI#$Y< !f !f-1Z:L8M-N-N	    r4   r8   )r   r7   queryr   r   r/   r0   r   )r   r3   msgss      r   r   zXataChatMessageHistory.messagesU   s    L%%  !1 *51	  & 
 
 =CGAMGGAGGHHH!  9  
 
 r4   c                     	  j                                                              j        dgd j        id          }|j        dk    rt          d|j         d|           d	 |d
         D             }t          |          dk    rdS  fd|D             } j                                         	                    d|i           )zDelete session from Xata table.Tidr"   )r!   rA   r+   rC   rD   r    c                     g | ]
}|d          S )rM    )rG   recs     r   rI   z0XataChatMessageHistory.clear.<locals>.<listcomp>   s    5553t9555r4   r8   r   c                 (    g | ]}d j         |diS )delete)r-   rM   )r   )rG   rM   r   s     r   rI   z0XataChatMessageHistory.clear.<locals>.<listcomp>   s6       FHT%5R@@A  r4   
operationsN)
r   r7   rJ   r   r   r/   r0   lenr8   transaction)r   r3   idsrS   s   `   r   clearzXataChatMessageHistory.clearr   s   	S!!##))  $v#T%5  *  A }## K K K K KLLL55)555C3xx1}}   LO  J L  ""..j7Q.RRR%	Sr4   )r
   r   T)r   N)__name__
__module____qualname____doc__strboolr   r   r   r>   propertyr   r   rW   rO   r4   r   r	   r	      s       99 "$!/ // / 	/
 / / / 
/ / / /4X X X X6R; R4 R R R R" ${+    X8S S S S S Sr4   r	   )
r*   typingr   langchain_core.chat_historyr   langchain_core.messagesr   r   r   r	   rO   r4   r   <module>rb      s           > > > > > >         zS zS zS zS zS3 zS zS zS zS zSr4   