
    dh                        S SK Jr  S SKJrJrJrJrJrJrJ	r	J
r
  S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  SS
 jr " S S\5      rg)    )annotations)AnyDictIterableListOptionalTupleUnioncastN)Document)
Embeddingsguard_import)VectorStore)AddableMixinDocstore)InMemoryDocstorec                     [        S5      $ )z5
Import usearch if available, otherwise raise error.
usearch.indexr        `/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/usearch.pydependable_usearch_importr      s     ((r   c                      \ rS rSrSr        S
S jr  S         SS jjr S     SS jjr S       SS jjr\	   S             SS jj5       r
S	rg)USearch   z[`USearch` vector store.

To use, you should have the ``usearch`` python package installed.
c                4    Xl         X l        X0l        X@l        g)z%Initialize with necessary components.N)	embeddingindexdocstoreids)selfr   r   r    r!   s        r   __init__USearch.__init__   s     #
 r   Nc           
     V   [        U R                  [        5      (       d  [        SU R                   S35      eU R                  R                  [        U5      5      n/ n[        U5       H*  u  pxU(       a  X'   O0 n	UR                  [        XS95        M,     Uc  U R                  (       aZ  [        U R                  S   5      S-   n
[        R                  " [        U5       VVs/ sH  u  p[        X-   5      PM     snn5      nOh[        R                  " [        U5       VVs/ sH  u  p[        U5      PM     snn5      nO+[        U[        5      (       a  [        R                  " U5      nU R                  R!                  [        R                  " U5      [        R                  " U5      5        U R                  R!                  [#        [%        X65      5      5        U R                  R'                  U5        [)        [*        [           UR-                  5       5      $ s  snnf s  snnf )a4  Run more texts through the embeddings and add to the vectorstore.

Args:
    texts: Iterable of strings to add to the vectorstore.
    metadatas: Optional list of metadatas associated with the texts.
    ids: Optional list of unique IDs.

Returns:
    List of ids from adding the texts into the vectorstore.
zSIf trying to add texts, the underlying docstore should support adding items, which z	 does notpage_contentmetadata   )
isinstancer    r   
ValueErrorr   embed_documentslist	enumerateappendr   r!   intnparraystrr   adddictzipextendr   r   tolist)r"   texts	metadatasr!   kwargs
embeddings	documentsitextr(   last_idid_s                r   	add_textsUSearch.add_texts)   s   " $--66''+}}oY@ 
 ^^33DK@
	 'GA'0y|bHX4KL ( ;xxdhhrl+a/hhy?OP?OebGL 1?OPQhhYu5EF5EEBB5EFGT""((3-C

rxx}bhhz&:;$s3234DIszz|,,  QFs   %H
$H%
c                   U R                   R                  U5      nU R                  R                  [        R
                  " U5      U5      n/ n[        UR                  UR                  5       Ha  u  pgU R                  R                  [        U5      5      n[        U[        5      (       d  [        SU SU 35      eUR                  X45        Mc     U$ )zReturn docs most similar to query.

Args:
    query: Text to look up documents similar to.
    k: Number of Documents to return. Defaults to 4.

Returns:
    List of documents most similar to the query with distance.
Could not find document for id , got )r   embed_queryr   searchr2   r3   r7   keys	distancesr    r4   r+   r   r,   r0   )	r"   querykquery_embeddingmatchesdocs_with_scoresrB   scoredocs	            r   similarity_search_with_score$USearch.similarity_search_with_scoreT   s     ..44U;**##BHH_$=qA9;W\\7+<+<=IB--&&s2w/Cc8,, #B2$fSE!RSS##SL1	 >  r   c                |   U R                   R                  U5      nU R                  R                  [        R
                  " U5      U5      n/ nUR                   H^  nU R                  R                  [        U5      5      n[        U[        5      (       d  [        SU SU 35      eUR                  U5        M`     U$ )zReturn docs most similar to query.

Args:
    query: Text to look up documents similar to.
    k: Number of Documents to return. Defaults to 4.

Returns:
    List of Documents most similar to the query.
rG   rH   )r   rI   r   rJ   r2   r3   rK   r    r4   r+   r   r,   r0   )	r"   rM   rN   r<   rO   rP   docsrB   rS   s	            r   similarity_searchUSearch.similarity_searchn   s     ..44U;**##BHH_$=qA!,,B--&&s2w/Cc8,, #B2$fSE!RSSKK	  r   c           
        UR                  U5      n/ nUc=  [        R                  " [        U5       V	V
s/ sH  u  p[	        U	5      PM     sn
n	5      nO+[        U[        5      (       a  [        R                  " U5      n[        U5       H*  u  pU(       a  X;   O0 nUR                  [        XS95        M,     [        [        [        XH5      5      5      n[        S5      nUR                  [        US   5      US9nUR                  [        R                  " U5      [        R                  " U5      5        U " UUU[!        ["        [           UR%                  5       5      5      $ s  sn
n	f )a  Construct USearch wrapper from raw documents.
This is a user friendly interface that:
    1. Embeds documents.
    2. Creates an in memory docstore
    3. Initializes the USearch database
This is intended to be a quick way to get started.

Example:
    .. code-block:: python

        from langchain_community.vectorstores import USearch
        from langchain_community.embeddings import OpenAIEmbeddings

        embeddings = OpenAIEmbeddings()
        usearch = USearch.from_texts(texts, embeddings)
r&   r   r   )ndimmetric)r-   r2   r3   r/   r4   r+   r.   r0   r   r   r6   r7   r   Indexlenr5   r   r   r9   )clsr:   r   r;   r!   r\   r<   r=   r>   rB   rC   r?   r@   r(   r    usearchr   s                    r   
from_textsUSearch.from_texts   s   4 ..u5
$&	;((51AB1ACG1ABCCT""((3-C 'GA'0y|bHX4KL ( $DS)<$=>/3z!}#5fE		"((3-*!569eXtDIszz|/LMM Cs   E$
)r    r   r!   r   )r   r   r   r   r    r   r!   	List[str])NN)
r:   zIterable[str]r;   Optional[List[Dict]]r!   &Optional[Union[np.ndarray, list[str]]]r<   r   returnrc   )   )rM   r4   rN   r1   rf   zList[Tuple[Document, float]])rM   r4   rN   r1   r<   r   rf   zList[Document])NNcos)r:   rc   r   r   r;   rd   r!   re   r\   r4   r<   r   rf   r   )__name__
__module____qualname____firstlineno____doc__r#   rD   rT   rX   classmethodra   __static_attributes__r   r   r   r   r      s2   
  	
   +/6:	)-)- ()- 4	)-
 )- 
)-\      
&	 :   	
 
6 
 +/6:(N(N (N (	(N
 4(N (N (N 
(N (Nr   r   )rf   r   )
__future__r   typingr   r   r   r   r   r	   r
   r   numpyr2   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.utilsr   langchain_core.vectorstoresr   !langchain_community.docstore.baser   r   &langchain_community.docstore.in_memoryr   r   r   r   r   r   <module>ry      s;    " J J J  - 0 - 3 D C)\Nk \Nr   