
    h                     v    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y)    N)AnyDictIterableListOptionalType)Document)
Embeddings)VSTVectorStorefilestextslinks)ftlc                   H   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y)NucliaDBzNucliaDB vector store._configNknowledge_boxlocalapi_keybackendreturnc                    	 ddl m} || j                  d<   t        j
                  j                  dd      }|| _        |r_|sd}| d| j                  d	<   d
| j                  d<    |       j                  |        |       j                  | j                  d       y
d| d| j                  d	<   || j                  d<    |       j                  | j                  | j                  d   d       y
# t        $ r t        d      w xY w)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          g/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/vectorstores/nucliadb.py__init__zNucliaDB.__init__   s     	- !&Wzz~~mZ8 1)0	&9DLL#$(DLL!L!!g!.LOOO?(06J&KDLL#$+DLL!LOOKKt||G'<%  %  	? 	s   C2 2Dc                      | j                   d   S )Nr   )r   r-   s    r/   is_localzNucliaDB.is_local<   s    ||G$$    c                 >    | j                   d    d| j                   S )Nr   z/kb/)r   r)   r2   s    r/   r,   zNucliaDB.kb_url@   s!    ,,y)*$txxj99r4   r   	metadataskwargsc                     g }ddl m}  |       }t        |      D ]S  \  }}ddi}	|rd||   i}	|j                  dd|ii|	| j                  | j
                  d         }
|j                  |
       U |S )	zUpload texts to NucliaDBr   NucliaResourcemetadata textbodyr    )r   extrar!   r   )r$   r:   	enumeratecreater,   r   append)r-   r   r6   r7   idsr:   factoryir=   r?   ids              r/   	add_textszNucliaDB.add_textsD   s     - " ' 
	GAt%/$4E#Yq\2~.KKW-	   B JJrN
	 
r4   rC   c                    |sy ddl m}  |       }g }|D ]?  }	 |j                  || j                  | j                  d          |j                  d       A t        |      S # t        $ r |j                  d       Y iw xY w)Nr   r9   r    )ridr!   r   TF)r$   r:   deleter,   r   rB   
ValueErrorall)r-   rC   r7   r:   rD   resultsrF   s          r/   rJ   zNucliaDB.delete\   s    - "  	&B&24;;W@UVt$	& 7|  &u%&s   <A""A?>A?querykc                 &   ddl m} ddlm}m}  ||||j
                  |j                  g      } |       }|j                  || j                  | j                  d         }	g }
|	j                  j                         D ]  }|j                  j                         D ]  }|j                  j                         D ]  \  }}|j                  d      }t         j#                  |d   d       }|d	   }|s8t%        |j&                  |i       j#                  |d       }|
j)                  |j*                  t%        t%        |d
i       dd       |d|j,                  d          t/        |
d       }|D cg c]  }t1        |d   |d          c}S c c}w )Nr   )NucliaSearch)FindRequestResourceProperties)rN   	page_sizeshowr    )rN   r!   r   /      r?   r;   )r?   value)r=   r;   orderc                     | d   S )NrZ    )xs    r/   <lambda>z,NucliaDB.similarity_search.<locals>.<lambda>   s
    QwZ r4   )keyr=   )page_contentr;   )r$   rQ   nucliadb_models.searchrR   rS   VALUESEXTRAfindr,   r   	resourcesvaluesfields
paragraphsitemssplitFIELD_TYPESr(   getattrdatarB   r=   rZ   sortedr	   )r-   rN   rO   r7   rQ   rR   rS   requestsearchrM   rh   resourcefieldparagraph_id	paragraphinfo
field_typefield_idrY   sorted_paragraphss                       r/   similarity_searchzNucliaDB.similarity_searchk   s    	,J$++-?-E-EF

 ++t{{DLL4I  
 
))002 	H!//1 /4/?/?/E/E/G +L)'--c2D!,a$!?J#AwH% #HMM:rBFFxQUVE%%$-NN)0$+Hgr$BJPT*" */	) &/__		* #:3GH /
 )F"3i
>ST
 	
 
s   1Fcls	embeddingc                     t         )z9Return VectorStore initialized from texts and embeddings.)NotImplementedError)rz   r   r{   r6   r7   s        r/   
from_textszNucliaDB.from_texts   s
     "!r4   )NN)N)   )__name__
__module____qualname____doc__r   r   strr   __annotations__boolr   r0   propertyr3   r,   r   r   dictrG   rJ   intr	   ry   classmethodr   r   r
   r~   r\   r4   r/   r   r      s     GT#s(^  "&!%&& & #	&
 #& 
&P %# % % : : : +/} DJ' 	
 
c0(49-  QU   $%)
)
 )
03)
	h)
V 
 +/	"#Y"Cy" " DJ'	"
 " 
" "r4   r   )r&   typingr   r   r   r   r   r   langchain_core.documentsr	   langchain_core.embeddingsr
   langchain_core.vectorstoresr   r   rk   r   r\   r4   r/   <module>r      s7    	 < < - 0 8 
		P"{ P"r4   