o
    Zh                     @   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 dede	de
e de
e ddf
d	d
ZedefddZedefddZ	d!dee de
ee  dedee fddZd!de
ee  dede
e	 fddZ	d"dedededee fddZe	d!dee dee dede
ee  dedef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w || jd< tjdd}|| _|rH|s)d}| d| jd	< d
| jd< | j|d | j	| j
dd d
S d| 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+   `/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/vectorstores/nucliadb.py__init__   s,   



zNucliaDB.__init__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_urlr   	metadataskwargsc                 K   sp   g }ddl m} | }t|D ]&\}}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_textsr<   c              	   K   sr   |sd S ddl m} | }g }|D ]#}z|j|| j| jd d |d W q ty4   |d Y qw 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kc                 K   s  ddl m} ddlm}m} ||||j|jgd}| }|j|| j| j	d d}	g }
|	j
 D ]I}|j D ]A}|j D ]9\}}|d}t|d d }|d	 }|sUq=t|j|i |d }|
|jtt|d
i dd |d|jd q=q6q/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>   s    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_idrU   infoZ
field_typeZfield_idrO   Zsorted_paragraphsr+   r+   r,   similarity_searchk   sJ   

zNucliaDB.similarity_searchcls	embeddingc                 K   s   t )z9Return VectorStore initialized from texts and embeddings.)NotImplementedError)ri   r   rj   r0   r1   r+   r+   r,   
from_texts   s   	zNucliaDB.from_texts)NN)N)rE   )__name__
__module____qualname____doc__r   r   strr   __annotations__boolr   r-   propertyr/   r(   r   r   dictr@   rA   intr	   rh   classmethodr   r   r
   rl   r+   r+   r+   r,   r      sp   
 
(

$
+
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     