[docs]classXataChatMessageHistory(BaseChatMessageHistory):"""Chat message history stored in a Xata database."""
[docs]def__init__(self,session_id:str,db_url:str,api_key:str,branch_name:str="main",table_name:str="messages",create_table:bool=True,)->None:"""Initialize with Xata client."""try:fromxata.clientimportXataClientexceptImportError:raiseImportError("Could not import xata python package. ""Please install it with `pip install xata`.")self._client=XataClient(api_key=api_key,db_url=db_url,branch_name=branch_name)self._table_name=table_nameself._session_id=session_idifcreate_table:self._create_table_if_not_exists()
def_create_table_if_not_exists(self)->None:r=self._client.table().get_schema(self._table_name)ifr.status_code<=299:returnifr.status_code!=404:raiseException(f"Error checking if table exists in Xata: {r.status_code}{r}")r=self._client.table().create(self._table_name)ifr.status_code>299:raiseException(f"Error creating table in Xata: {r.status_code}{r}")r=self._client.table().set_schema(self._table_name,payload={"columns":[{"name":"sessionId","type":"string"},{"name":"type","type":"string"},{"name":"role","type":"string"},{"name":"content","type":"text"},{"name":"name","type":"string"},{"name":"additionalKwargs","type":"json"},]},)ifr.status_code>299:raiseException(f"Error setting table schema in Xata: {r.status_code}{r}")
[docs]defadd_message(self,message:BaseMessage)->None:"""Append the message to the Xata table"""msg=message_to_dict(message)r=self._client.records().insert(self._table_name,{"sessionId":self._session_id,"type":msg["type"],"content":message.content,"additionalKwargs":json.dumps(message.additional_kwargs),"role":msg["data"].get("role"),"name":msg["data"].get("name"),},)ifr.status_code>299:raiseException(f"Error adding message to Xata: {r.status_code}{r}")