o
    Zh                     @   sf   d dl Z d dlZd dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZ eeZG dd deZdS )    N)AnyDictListOptional)Document)
BaseLoaderc                   @   s\   e Zd ZdZ	ddee deddfddZddd	Zde	e
 fd
dZde	e
 fddZdS )SurrealDBLoaderzLoad SurrealDB documents.Nfilter_criteriakwargsreturnc              
   K   s   zddl m} W n ty } ztd|d }~ww |dd| _| jdd dkr1|| j| _ntd|p8i | _d	| jv rCtd
|dd| _|dd| _	|d	d| _
|| j| _|| _d S )Nr   )SurrealzZCannot import from surrealdb.
                please install with `pip install surrealdb`.dburlzws://localhost:8000/rpc   wsz6Only websocket connections are supported at this time.tablezCkey `table` is not a valid criteria for `filter_criteria` argument.nsZ	langchaindbZdatabaseZ	documents)Z	surrealdbr   ImportErrorpopr   sdb
ValueErrorr	   r   r   r   r
   )selfr	   r
   r   e r   e/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/document_loaders/surrealdb.py__init__   s0   


zSurrealDBLoader.__init__c                    sr   | j  I dH  d| jv r+d| jv r+| jd}| jd}| j ||dI dH  | j | j| jI dH  dS )zr
        Initialize connection to surrealdb database
        and authenticate if credentials are provided
        NZdb_userZdb_pass)userpass)r   connectr
   getZsigninZuser   r   )r   r   passwordr   r   r   
initialize1   s   zSurrealDBLoader.initializec                    s"   dt t f fdd}t| S )Nr   c                      s      I d H    I d H S N)r!   aloadr   r   r   r   _load?   s   z#SurrealDBLoader.load.<locals>._load)r   r   asynciorun)r   r%   r   r$   r   load>   s   zSurrealDBLoader.loadc                    s   d}| j dur0t| j dkr0|d7 }t| j D ]\}}|d|dkr$dnd d| d| 7 }q| j| j| jd	 | j|d
| ji| j I dH } fdd|d d D S )z Load data into Document objects.z!SELECT * FROM type::table($table)Nr   z WHERE  AND z = $)r   r   r   r   c                    s2   g | ]}t t|d |d  i|d  dqS )idmetadata)Zpage_contentr-   )r   jsondumps).0resultr-   r   r   
<listcomp>W   s    z)SurrealDBLoader.aload.<locals>.<listcomp>r1   )r	   len	enumerater   r   r   r   query)r   r6   idxkeyresultsr   r2   r   r#   E   s    (


zSurrealDBLoader.aloadr"   )r   N)__name__
__module____qualname____doc__r   r   r   r   r!   r   r   r(   r#   r   r   r   r   r      s    

!r   )r&   r.   loggingtypingr   r   r   r   Zlangchain_core.documentsr   Z)langchain_community.document_loaders.baser   	getLoggerr:   loggerr   r   r   r   r   <module>   s    
