a
    bg                     @   sp   d dl Z d dlmZmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZmZ dddd	ZG d
d deZdS )    N)AnyDictIterableListOptionalTypeDocument)
Embeddings)VSTVectorStorefilestextslinks)ftlc                	   @   s   e Zd ZU dZi Zeeef ed< dee	e
e e
e ddddZeeddd	Zeedd
dZdee e
ee  eee dddZde
ee  ee
e	 dddZdeeeee dddZedee ee ee
ee  eedddZdS )NucliaDBzNucliaDB vector store._configN)knowledge_boxlocalapi_keybackendreturnc                 C   s   zddl m} W n ty*   tdY n0 || jd< tjdd}|| _|r|sVd}| d| jd	< d
| jd< | j|d | j	| j
dd n6d| d| jd	< || jd< | j	| j
| jd dd d
S )au  Initialize the NucliaDB client.

        Args:
            knowledge_box: the Knowledge Box id.
            local: Whether to use a local NucliaDB instance or Nuclia Cloud
            api_key: A contributor API key for the kb (needed when local is False)
            backend: The backend url to use when local is True, defaults to
            http://localhost:8080
        r   )
NucliaAuthzMnuclia python package not found. Please install it with `pip install nuclia`.LOCALZNUCLIA_ZONEzeurope-1zhttp://localhost:8080z/api/v1BACKENDNTOKEN)urlF)r   interactivezhttps://z.nuclia.cloud/api/v1)r   tokenr   )
nuclia.sdkr   ImportErrorr   osenvironget_kbZnucliadbkbkb_url)selfr   r   r   r   r   zone r+   w/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/vectorstores/nucliadb.py__init__   s*    



zNucliaDB.__init__)r   c                 C   s
   | j d S )Nr   )r   r)   r+   r+   r,   is_local<   s    zNucliaDB.is_localc                 C   s   | j d  d| j S )Nr   z/kb/)r   r&   r.   r+   r+   r,   r(   @   s    zNucliaDB.kb_url)r   	metadataskwargsr   c                 K   sp   g }ddl m} | }t|D ]L\}}ddi}	|r>d|| i}	|jdd|ii|	| j| jd d}
||
 q|S )	zUpload texts to NucliaDBr   NucliaResourcemetadata textbodyr   )r   extrar   r   )r!   r3   	enumeratecreater(   r   append)r)   r   r0   r1   idsr3   factoryir6   r8   idr+   r+   r,   	add_textsD   s    
zNucliaDB.add_texts)r<   r1   r   c              	   K   st   |sd S ddl m} | }g }|D ]H}z&|j|| j| jd d |d W q" tyh   |d Y q"0 q"t|S )Nr   r2   r   )Zridr   r   TF)r!   r3   deleter(   r   r;   
ValueErrorall)r)   r<   r1   r3   r=   resultsr?   r+   r+   r,   rA   \   s    zNucliaDB.delete   )querykr1   r   c                 K   s  ddl m} ddlm}m} ||||j|jgd}| }|j|| j| j	d d}	g }
|	j
 D ]}|j D ]}|j D ]r\}}|d}t|d d }|d	 }|sqzt|j|i |d }|
|jtt|d
i dd |d|jd qzqlq^t|
dd d}dd |D S )Nr   )NucliaSearch)FindRequestResourceProperties)rF   Z	page_sizeshowr   )rF   r   r   /      r8   r4   )r8   value)r6   r4   orderc                 S   s   | d S )NrP   r+   )xr+   r+   r,   <lambda>       z,NucliaDB.similarity_search.<locals>.<lambda>)keyc                 S   s    g | ]}t |d  |d dqS )r6   r4   )Zpage_contentr4   r   ).0	paragraphr+   r+   r,   
<listcomp>   s   z.NucliaDB.similarity_search.<locals>.<listcomp>)r!   rH   Znucliadb_models.searchrI   rJ   ZVALUESEXTRAfindr(   r   	resourcesvaluesfields
paragraphsitemssplitFIELD_TYPESr%   getattrdatar;   r6   rP   sorted)r)   rF   rG   r1   rH   rI   rJ   requestsearchrD   r]   resourcefieldZparagraph_idrV   infoZ
field_typeZfield_idrO   Zsorted_paragraphsr+   r+   r,   similarity_searchk   sF    


zNucliaDB.similarity_search)clsr   	embeddingr0   r1   r   c                 K   s   t dS )z9Return VectorStore initialized from texts and embeddings.N)NotImplementedError)rj   r   rk   r0   r1   r+   r+   r,   
from_texts   s    	zNucliaDB.from_texts)NN)N)N)rE   )N)__name__
__module____qualname____doc__r   r   strr   __annotations__boolr   r-   propertyr/   r(   r   r   dictr@   rA   intr	   ri   classmethodr   r   r
   rm   r+   r+   r+   r,   r      sL   
  ( 
  + 
r   )r#   typingr   r   r   r   r   r   Zlangchain_core.documentsr	   Zlangchain_core.embeddingsr
   Zlangchain_core.vectorstoresr   r   r`   r   r+   r+   r+   r,   <module>   s    