
    Ng                     ~    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e          ZdS )    N)AnyDictIterableListOptionalTypeDocument)
Embeddings)VSTVectorStorefilestextslinks)ftlc                      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	Zedefd
            Zedefd            Z	 ddee         de
ee                  dedee         fdZdde
ee                  dede
e	         fdZ	 ddedededee         fdZe	 ddee         dee         dede
ee                  dedefd            ZdS )NucliaDBzNucliaDB vector store._configNknowledge_boxlocalapi_keybackendreturnc                    	 ddl m} n# t          $ r t          d          w xY w|| j        d<   t          j                            dd          }|| _        |r_|sd}| d| j        d	<   d
| j        d<    |                                |            |            	                    | j
        d           d
S d| d| j        d	<   || j        d<    |            	                    | j
        | j        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`.LOCAL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_kbnucliadbkbkb_url)selfr   r   r   r   r   zones          e/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/vectorstores/nucliadb.py__init__zNucliaDB.__init__   sM    	------- 	 	 	?  	
 !&Wz~~mZ88  	 21)0&9&9&9DL#$(DL!JLL!!g!...JLLOOO?????&K&K&K&KDL#$+DL!JLLOOKt|G'<%      s   	 #c                     | j         d         S )Nr   )r   r.   s    r0   is_localzNucliaDB.is_local<   s    |G$$    c                 0    | j         d          d| j         S )Nr    z/kb/)r   r*   r3   s    r0   r-   zNucliaDB.kb_url@   s    ,y)99tx999r5   r   	metadataskwargsc                     g }ddl m}  |            }t          |          D ]W\  }}ddi}	|r
d||         i}	|                    dd|ii|	| j        | j        d                   }
|                    |
           X|S )	zUpload texts to NucliaDBr   NucliaResourcemetadata textbodyr!   )r   extrar"   r   )r%   r;   	enumeratecreater-   r   append)r.   r   r7   r8   idsr;   factoryir>   r@   ids              r0   	add_textszNucliaDB.add_textsD   s     ------ ."" '' 
	 
	GAt%/$4E 3#Yq\2~.KW-	    B JJrNNNN
r5   rD   c                    |sd S ddl m}  |            }g }|D ]e}	 |                    || j        | j        d                    |                    d           A# t          $ r |                    d           Y bw xY wt          |          S )Nr   r:   r!   )ridr"   r   TF)r%   r;   deleter-   r   rC   
ValueErrorall)r.   rD   r8   r;   rE   resultsrG   s          r0   rK   zNucliaDB.delete\   s     	4------ .""  	& 	&B&24;W@UVVVt$$$$ & & &u%%%%%&7||s   =AA<;A<   querykc                    ddl m} ddlm}m}  ||||j        |j        g          } |            }|                    || j        | j	        d                   }	g }
|	j
                                        D ]}|j                                        D ]}|j                                        D ]\  }}|                    d          }t                               |d         d           }|d	         }|sFt%          |j        |i                               |d           }|
                    |j        t%          t%          |d
i           dd           |d|j        d           ьt/          |
d           }d |D             S )Nr   )NucliaSearch)FindRequestResourceProperties)rP   	page_sizeshowr!   )rP   r"   r   /      r@   r<   )r@   value)r>   r<   orderc                     | d         S )Nr\    )xs    r0   <lambda>z,NucliaDB.similarity_search.<locals>.<lambda>   s
    QwZ r5   )keyc                 H    g | ]}t          |d          |d                    S )r>   r<   )page_contentr<   r	   ).0	paragraphs     r0   
<listcomp>z.NucliaDB.similarity_search.<locals>.<listcomp>   s?     
 
 
 )F"3i
>STTT
 
 
r5   )r%   rS   nucliadb_models.searchrT   rU   VALUESEXTRAfindr-   r   	resourcesvaluesfields
paragraphsitemssplitFIELD_TYPESr)   getattrdatarC   r>   r\   sorted)r.   rP   rQ   r8   rS   rT   rU   requestsearchrN   rn   resourcefieldparagraph_idre   info
field_typefield_idr[   sorted_paragraphss                       r0   similarity_searchzNucliaDB.similarity_searchk   s    	,+++++JJJJJJJJ+$+-?-EF
 
 

 ++t{DL4I  
 
 
)0022 	 	H!//11  /4/?/E/E/G/G  +L)'--c22D!,a$!?!?J#AwH% ! #HM:rBBFFxQUVVE%%$-N)0$+Hgr$B$BJPT*" *" */	) ) &/_	 	   ( #:3G3GHHH
 
.
 
 
 	
r5   cls	embeddingc                     t           )z9Return VectorStore initialized from texts and embeddings.)NotImplementedError)r   r   r   r7   r8   s        r0   
from_textszNucliaDB.from_texts   s
     "!r5   )NN)N)rO   )__name__
__module____qualname____doc__r   r   strr   __annotations__boolr   r1   propertyr4   r-   r   r   dictrH   rK   intr
   r~   classmethodr   r   r   r   r^   r5   r0   r   r      s#           GT#s(^    "&!%& && & #	&
 #& 
& & & &P %# % % % X% : : : : X: +/ } DJ' 	
 
c   0 (49-  QU      $%)
 )
)
 )
03)
	h)
 )
 )
 )
V 
 +/	" "#Y"Cy" " DJ'	"
 " 
" " " [" " "r5   r   )r'   typingr   r   r   r   r   r   langchain_core.documentsr
   langchain_core.embeddingsr   langchain_core.vectorstoresr   r   rq   r   r^   r5   r0   <module>r      s    				 < < < < < < < < < < < < < < < < - - - - - - 0 0 0 0 0 0 8 8 8 8 8 8 8 8 
		 P" P" P" P" P"{ P" P" P" P" P"r5   