
    dh]                     ~    S SK r S SK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r " S S	\5      rg)
    N)AnyDictIterableListOptionalTuple)Document)
Embeddings)VectorStore)maximal_marginal_relevance   c                   ~   \ rS rSrSrS\S\SS4S jrS*S jr\	S\
\   4S	 j5       r S+S
\\   S\
\\      S\S\\   4S jjr S+S
\\   S\
\\      S\S\\   4S jjr S+S\
\\      S\S\
\   4S jjr S+S\
\\      S\S\
\   4S jjr\4SS.S\\   S\S\
\\\4      S\S\\\\\4      4
S jjjr\4SS.S\S\S\
\\\4      S\S\\\\4      4
S jjjr\4SS.S\S\S\
\\\4      S\S\\\\4      4
S jjjr\4SS.S\S\S\
\\\4      S\S\\\\4      4
S jjjr\4SS.S\S\S\
\\\4      S\S\\\\4      4
S jjjr\4SS.S\\   S\S\
\\\4      S\S\\   4
S jjjr \4SS.S\\   S\S\
\\\4      S\S\\   4
S jjjr!\4SS.S\S\S\
\\\4      S\S\\   4
S jjjr"\4SS.S\S\S\
\\\4      S\S\\   4
S jjjr#\SS 4SS.S\\   S\S!\S"\S\
\\\4      S\S\\   4S# jjjr$\SS 4SS.S\\   S\S!\S"\S\
\\\4      S\S\\   4S$ jjjr%   S,SS.S\S\S!\S"\S\
\\\4      S\S\\   4S% jjjr&\SS 4SS.S\S\S!\S"\S\
\\\4      S\S\\   4S& jjjr'\( S+S
\\   S\S\
\\      S\SS 4
S' jj5       r)\( S+S
\\   S\S\
\\      S\SS 4
S( jj5       r*S)r+g)-SurrealDBStore   a  
SurrealDB as Vector Store.

To use, you should have the ``surrealdb`` python package installed.

Args:
    embedding_function: Embedding function to use.
    dburl: SurrealDB connection url
    ns: surrealdb namespace for the vector store. (default: "langchain")
    db: surrealdb database for the vector store. (default: "database")
    collection: surrealdb collection for the vector store.
        (default: "documents")

    (optional) db_user and db_pass: surrealdb credentials

Example:
    .. code-block:: python

        from langchain_community.vectorstores.surrealdb import SurrealDBStore
        from langchain_community.embeddings import HuggingFaceEmbeddings

        model_name = "sentence-transformers/all-mpnet-base-v2"
        embedding_function = HuggingFaceEmbeddings(model_name=model_name)
        dburl = "ws://localhost:8000/rpc"
        ns = "langchain"
        db = "docstore"
        collection = "documents"
        db_user = "root"
        db_pass = "root"

        sdb = SurrealDBStore.from_texts(
                texts=texts,
                embedding=embedding_function,
                dburl,
                ns, db, collection,
                db_user=db_user, db_pass=db_pass)
embedding_functionkwargsreturnNc                     SSK Jn  UR                  SS5      U l        U R                  SS S:X  a  U" U R                  5      U l        O[        S5      eUR                  S	S
5      U l        UR                  SS5      U l        UR                  SS5      U l	        Xl
        X l        g ! [         a  n[        S5      UeS nAff = f)Nr   )SurrealzZCannot import from surrealdb.
                please install with `pip install surrealdb`.dburlzws://localhost:8000/rpc   wsz6Only websocket connections are supported at this time.ns	langchaindbdatabase
collection	documents)	surrealdbr   ImportErrorpopr   sdb
ValueErrorr   r   r   r   r   )selfr   r   r   es        b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/surrealdb.py__init__SurrealDBStore.__init__5   s    
	) ZZ)BC
::a?d"tzz*DHUVV**T;/**T:. **\;?"4#  	@ 	s   B' '
C1B==Cc                   #    U R                   R                  5       I Sh  vN   SU R                  ;   ak  SU R                  ;   a[  U R                  R                  S5      nU R                  R                  S5      nU R                   R	                  XS.5      I Sh  vN   U R                   R                  U R                  U R                  5      I Sh  vN   g N N? N	7f)zZ
Initialize connection to surrealdb database
and authenticate if credentials are provided
Ndb_userdb_pass)userpass)r"   connectr   getsigninuser   r   )r$   r,   passwords      r&   
initializeSurrealDBStore.initializeO   s     
 hh   #	T[[(@;;??9-D{{y1H((//4"BCCChhll477DGG,,, 	! D,s4   CCA:CC7CCCCCc                 \    [        U R                  [        5      (       a  U R                  $ S $ N)
isinstancer   r
   )r$   s    r&   
embeddingsSurrealDBStore.embeddings[   s1     $11:>> ##	
 	
    texts	metadatasc                 \  #    U R                   R                  [        U5      5      n/ n[        U5       Hp  u  pgXtU   S.nUb  U[	        U5      :  a  X&   US'   O/ US'   U R
                  R                  U R                  U5      I Sh  vN n	UR                  U	S   S   5        Mr     U$  N!7f)zAdd list of text along with embeddings to the vector store asynchronously

Args:
    texts (Iterable[str]): collection of text to add to the database

Returns:
    List of ids for the newly inserted documents
)text	embeddingNmetadatar   id)	r   embed_documentslist	enumeratelenr"   creater   append)
r$   r;   r<   r   r8   idsidxr>   datarecords
             r&   
aadd_textsSurrealDBStore.aadd_textsc   s      ,,<<T%[I
"5)IC #?D$s9~)=#,>Z #%Z 88?? F JJvay' * 
s   BB,B*	"B,c           
         ^   SS[         [           S[        [        [              S[
        S[        [           4U 4S jjjn[        R                  " U" X40 UD65      $ )zAdd list of text along with embeddings to the vector store

Args:
    texts (Iterable[str]): collection of text to add to the database

Returns:
    List of ids for the newly inserted documents
r;   r<   r   r   c                 z   >#    TR                  5       I S h  vN   TR                  " X40 UD6I S h  vN $  N N7fr6   r3   rL   )r;   r<   r   r$   s      r&   
_add_texts,SurrealDBStore.add_texts.<locals>._add_texts   s7     
 //###DVDDD $Ds   ;7;9;;r6   )r   strr   r   dictr   asynciorun)r$   r;   r<   r   rQ   s   `    r&   	add_textsSurrealDBStore.add_texts   sh    " /3	EC=	ET
+	E 	E #Y		E 	E {{:eA&ABBr:   rH   c                   #    Uc.  U R                   R                  U R                  5      I Sh  vN   g[        U[        5      (       a$  U R                   R                  U5      I Sh  vN   g[        U[
        5      (       aA  [        U5      S:  a2  U Vs/ sH%  o0R                   R                  U5      I Sh  vN PM'     nngg N N^ Ns  snf 7f)zDelete by document ID asynchronously.

Args:
    ids: List of ids to delete.
    **kwargs: Other keyword arguments that subclasses might use.

Returns:
    Optional[bool]: True if deletion is successful,
    False otherwise.
NTr   F)r"   deleter   r7   rS   rC   rE   )r$   rH   r   rA   _s        r&   adeleteSurrealDBStore.adelete   s       ;((//$//222#s##hhooc***c4((SX\=@ASrxxr222SAA 3 + 3AsE   ,CC8C'C(-C"C
7C
8C
 CCC

Cc                    ^  S[         [        [              S[        S[         [           4U 4S jjn[
        R                  " U" U40 UD65      $ )zDelete by document ID.

Args:
    ids: List of ids to delete.
    **kwargs: Other keyword arguments that subclasses might use.

Returns:
    Optional[bool]: True if deletion is successful,
    False otherwise.
rH   r   r   c                 |   >#    TR                  5       I S h  vN   TR                  " SSU 0UD6I S h  vN $  N  N7f)NrH    )r3   r\   )rH   r   r$   s     r&   _delete&SurrealDBStore.delete.<locals>._delete   s8     //###8#8888 $8s   <8<:<<)r   r   rS   r   boolrU   rV   )r$   rH   r   ra   s   `   r&   rZ   SurrealDBStore.delete   sE     	9xS	2 	9c 	9htn 	9 {{731&122r:   )filterr?   kre   c          
      T  #    U R                   UUUR                  SS5      S.nSnU(       a>  U H8  n[        X7   5      [        [        4;   a	  SX7    S3nOX7    nUSU SU S3-  nM:     S	US
    SU S3n	U R
                  R                  X5      I Sh  vN n
[        U
5      S:X  a  / $ U
S   nUS   S:w  a   SSKJ	n  UR                  SS5      nU" U5      eUS    Vs/ sH8  n[        US   SUS   0UR                  S5      =(       d    0 ES9US   US   4PM:     sn$  Ns  snf 7f)aS  Run similarity search for query embedding asynchronously
and return documents and scores

Args:
    embedding (List[float]): Query embedding.
    k (int): Number of results to return. Defaults to 4.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents most similar along with scores
score_thresholdr   )r   r?   rf   rh    'zand metadata.z =  u   
        select
            id,
            text,
            metadata,
            embedding,
            vector::similarity::cosine(embedding, $embedding) as similarity
        from ⟨r   ub   ⟩
        where vector::similarity::cosine(embedding, $embedding) >= $score_threshold
          z4
        order by similarity desc LIMIT $k;
        NstatusOK)SurrealExceptionresultzUnknown Errorr>   rA   r@   )page_contentr@   
similarityr?   )r   r/   typerS   rc   r"   queryrE   surrealdb.wsrn   r	   )r$   r?   rf   re   r   argscustom_filterkeyfilter_valuers   resultsro   rn   errdocs                  r&   (_asimilarity_search_by_vector_with_score7SurrealDBStore._asimilarity_search_by_vector_with_score   s~    ( //"%zz*;Q?	
 $d3%&v{m1#5L&,k]L=Sa!HH  l#$ %/ 	 u33w<1I(t#5**X7C"3'' h'

 ( !$V"CIM#''*2E2KM L!K  (

 
	
 4

s%   BD(D!A
D( >D#D(#D(rs   c                   #    U R                   R                  U5      nU R                  " XR4SU0UD6I Sh  vN  VVVs/ sH	  u  pgnXg4PM     snnn$  Ns  snnnf 7f)a.  Run similarity search asynchronously and return relevance scores

Args:
    query (str): Query
    k (int): Number of results to return. Defaults to 4.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents most similar along with relevance scores
re   Nr   embed_queryr|   	r$   rs   rf   re   r   query_embeddingdocumentrq   r[   s	            r&   (asimilarity_search_with_relevance_scores7SurrealDBStore.asimilarity_search_with_relevance_scores       $ 11==eD CC#/59?  
 (a "
 	

    4AAAAAAc                   ^ ^^^^ S[         [        [        [        4      4UUUUU 4S jjn[        R
                  " U" 5       5      $ )a-  Run similarity search synchronously and return relevance scores

Args:
    query (str): Query
    k (int): Number of results to return. Defaults to 4.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents most similar along with relevance scores
r   c                     >#    TR                  5       I S h  vN   TR                  " TT4ST 0TD6I S h  vN $  N" N7fNre   )r3   r   re   rf   r   rs   r$   s   r&   (_similarity_search_with_relevance_scoreshSurrealDBStore.similarity_search_with_relevance_scores.<locals>._similarity_search_with_relevance_scoresF  sO      //###FFq!'+1   $   >:><>>r   r   r	   floatrU   rV   )r$   rs   rf   re   r   r   s   ````` r&   'similarity_search_with_relevance_scores6SurrealDBStore.similarity_search_with_relevance_scores3  s;    &	(E/"A
 	 	 {{CEFFr:   c                   #    U R                   R                  U5      nU R                  " XR4SU0UD6I Sh  vN  VVVs/ sH	  u  pgnXg4PM     snnn$  Ns  snnnf 7f)a6  Run similarity search asynchronously and return distance scores

Args:
    query (str): Query
    k (int): Number of results to return. Defaults to 4.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents most similar along with relevance distance scores
re   Nr   r   s	            r&   asimilarity_search_with_score,SurrealDBStore.asimilarity_search_with_scoreP  r   r   c                   ^ ^^^^ S[         [        [        [        4      4UUUUU 4S jjn[        R
                  " U" 5       5      $ )a5  Run similarity search synchronously and return distance scores

Args:
    query (str): Query
    k (int): Number of results to return. Defaults to 4.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents most similar along with relevance distance scores
r   c                     >#    TR                  5       I S h  vN   TR                  " TT4ST 0TD6I S h  vN $  N" N7fr   )r3   r   r   s   r&   _similarity_search_with_scoreRSurrealDBStore.similarity_search_with_score.<locals>._similarity_search_with_score  sM     //###;;q!'+1   $r   r   )r$   rs   rf   re   r   r   s   ````` r&   similarity_search_with_score+SurrealDBStore.similarity_search_with_scorel  s7    &	T%%:P5Q 	 	 {{8:;;r:   c                   #    U R                   " X4SU0UD6I Sh  vN  VVs/ sH	  u  n  nUPM     snn$  Ns  snnf 7f)a,  Run similarity search on query embedding asynchronously

Args:
    embedding (List[float]): Query embedding
    k (int): Number of results to return. Defaults to 4.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents most similar to the query
re   N)r|   )r$   r?   rf   re   r   r   r[   s          r&   asimilarity_search_by_vector+SurrealDBStore.asimilarity_search_by_vector  sc     ( )-(U(U)%+)/5) # #
#!Q #
 	
#
s   >6>8>>c                t   ^ ^^^^ S[         [           4UUUUU 4S jjn[        R                  " U" 5       5      $ )a  Run similarity search on query embedding

Args:
    embedding (List[float]): Query embedding
    k (int): Number of results to return. Defaults to 4.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents most similar to the query
r   c                     >#    TR                  5       I S h  vN   TR                  " T T4ST0TD6I S h  vN $  N" N7fr   )r3   r   )r?   re   rf   r   r$   s   r&   _similarity_search_by_vectorPSurrealDBStore.similarity_search_by_vector.<locals>._similarity_search_by_vector  sM     //###::1%+/5   $r   r   r	   rU   rV   )r$   r?   rf   re   r   r   s   ````` r&   similarity_search_by_vector*SurrealDBStore.similarity_search_by_vector  s-    &	DN 	 	 {{79::r:   c                ~   #    U R                   R                  U5      nU R                  " XR4SU0UD6I Sh  vN $  N7f)a  Run similarity search on query asynchronously

Args:
    query (str): Query
    k (int): Number of results to return. Defaults to 4.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents most similar to the query
re   N)r   r   r   )r$   rs   rf   re   r   r   s         r&   asimilarity_search!SurrealDBStore.asimilarity_search  sM     $ 11==eD66
'-
17
 
 	
 
s   4=;=c                t   ^ ^^^^ S[         [           4UUUUU 4S jjn[        R                  " U" 5       5      $ )zRun similarity search on query

Args:
    query (str): Query
    k (int): Number of results to return. Defaults to 4.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents most similar to the query
r   c                     >#    TR                  5       I S h  vN   TR                  " TT4ST 0TD6I S h  vN $  N" N7fr   )r3   r   r   s   r&   _similarity_search<SurrealDBStore.similarity_search.<locals>._similarity_search  s>     //###00S&SFSSS $Sr   r   )r$   rs   rf   re   r   r   s   ````` r&   similarity_search SurrealDBStore.similarity_search  s0    &	T$x. 	T 	T {{-/00r:            ?fetch_klambda_multc                4  #    U R                   " X4SU0UD6I Sh  vN nU Vs/ sH  oS   PM	     n	nU Vs/ sH  oS   PM	     n
n[        [        R                  " U[        R                  S9U
UUS9nU Vs/ sH  oU   PM	     sn$  Nks  snf s  snf s  snf 7f)a  Return docs selected using the maximal marginal relevance.
Maximal marginal relevance optimizes for similarity to query AND diversity
among selected documents.

Args:
    embedding: Embedding to look up documents similar to.
    k: Number of Documents to return. Defaults to 4.
    fetch_k: Number of Documents to fetch to pass to MMR algorithm.
    lambda_mult: Number between 0 and 1 that determines the degree
                of diversity among the results with 0 corresponding
                to maximum diversity and 1 to minimum diversity.
                Defaults to 0.5.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents selected by maximal marginal relevance.
re   Nr   )dtype)rf   r   )r|   r   nparrayfloat32)r$   r?   rf   r   r   re   r   ro   subdocsr8   mmr_selectedis                r&   (amax_marginal_relevance_search_by_vector7SurrealDBStore.amax_marginal_relevance_search_by_vector  s     8 DD
'-
17
 

 #))&3A&))/0#"g
01HHYbjj1#	
 "..AQ..!

 *0 /s6   BBBB	BB3B7BB	Bc                |   ^ ^^^^^^ S[         [           4UUUUUUU 4S jjn[        R                  " U" 5       5      $ )a  Return docs selected using the maximal marginal relevance.

Maximal marginal relevance optimizes for similarity to query AND diversity
among selected documents.

Args:
    embedding: Embedding to look up documents similar to.
    k: Number of Documents to return. Defaults to 4.
    fetch_k: Number of Documents to fetch to pass to MMR algorithm.
    lambda_mult: Number between 0 and 1 that determines the degree
                of diversity among the results with 0 corresponding
                to maximum diversity and 1 to minimum diversity.
                Defaults to 0.5.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents selected by maximal marginal relevance.
r   c                     >#    TR                  5       I S h  vN   TR                  " T TTT4ST0TD6I S h  vN $  N$ N7fr   )r3   r   )r?   r   re   rf   r   r   r$   s   r&   (_max_marginal_relevance_search_by_vectorhSurrealDBStore.max_marginal_relevance_search_by_vector.<locals>._max_marginal_relevance_search_by_vector6  sQ     //###FF1g{;AEK   $   A <A >A A r   )r$   r?   rf   r   r   re   r   r   s   ``````` r&   'max_marginal_relevance_search_by_vector6SurrealDBStore.max_marginal_relevance_search_by_vector  s-    :	X 	 	 {{CEFFr:   c                   #    U R                   R                  U5      nU R                  " XrX44SU0UD6I Sh  vN nU$  N7f)a  Return docs selected using the maximal marginal relevance.

Maximal marginal relevance optimizes for similarity to query AND diversity
among selected documents.

Args:
    query: Text to look up documents similar to.
    k: Number of Documents to return. Defaults to 4.
    fetch_k: Number of Documents to fetch to pass to MMR algorithm.
    lambda_mult: Number between 0 and 1 that determines the degree
                of diversity among the results with 0 corresponding
                to maximum diversity and 1 to minimum diversity.
                Defaults to 0.5.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents selected by maximal marginal relevance.
re   N)r   r   r   )	r$   rs   rf   r   r   re   r   r?   r   s	            r&   amax_marginal_relevance_search-SurrealDBStore.amax_marginal_relevance_search>  sS     : ++77>	BB'
7=
AG
 
 
s   5A >A c                |   ^ ^^^^^^ S[         [           4UUUUUUU 4S jjn[        R                  " U" 5       5      $ )a  Return docs selected using the maximal marginal relevance.
Maximal marginal relevance optimizes for similarity to query AND diversity
among selected documents.

Args:
    query: Text to look up documents similar to.
    k: Number of Documents to return. Defaults to 4.
    fetch_k: Number of Documents to fetch to pass to MMR algorithm.
    lambda_mult: Number between 0 and 1 that determines the degree
                of diversity among the results with 0 corresponding
                to maximum diversity and 1 to minimum diversity.
                Defaults to 0.5.
    filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

Returns:
    List of Documents selected by maximal marginal relevance.
r   c                     >#    TR                  5       I S h  vN   TR                  " TTT T4ST0TD6I S h  vN $  N$ N7fr   )r3   r   )r   re   rf   r   r   rs   r$   s   r&   _max_marginal_relevance_searchTSurrealDBStore.max_marginal_relevance_search.<locals>._max_marginal_relevance_search}  sQ     //###<<q';7=AG   $r   r   )r$   rs   rf   r   r   re   r   r   s   ``````` r&   max_marginal_relevance_search,SurrealDBStore.max_marginal_relevance_searcha  s-    8	d8n 	 	 {{9;<<r:   c                    #    U " U40 UD6nUR                  5       I Sh  vN   UR                  " X40 UD6I Sh  vN   U$  N! N7f)a  Create SurrealDBStore from list of text asynchronously

Args:
    texts (List[str]): list of text to vectorize and store
    embedding (Optional[Embeddings]): Embedding function.
    dburl (str): SurrealDB connection url
        (default: "ws://localhost:8000/rpc")
    ns (str): surrealdb namespace for the vector store.
        (default: "langchain")
    db (str): surrealdb database for the vector store.
        (default: "database")
    collection (str): surrealdb collection for the vector store.
        (default: "documents")

    (optional) db_user and db_pass: surrealdb credentials

Returns:
    SurrealDBStore object initialized and ready for use.NrP   clsr;   r?   r<   r   r"   s         r&   afrom_textsSurrealDBStore.afrom_texts  sJ     6 )&v&nnnnU8888
 	8s   AAAAAAc                 V    [         R                  " U R                  " XU40 UD65      nU$ )aW  Create SurrealDBStore from list of text

Args:
    texts (List[str]): list of text to vectorize and store
    embedding (Optional[Embeddings]): Embedding function.
    dburl (str): SurrealDB connection url
    ns (str): surrealdb namespace for the vector store.
        (default: "langchain")
    db (str): surrealdb database for the vector store.
        (default: "database")
    collection (str): surrealdb collection for the vector store.
        (default: "documents")

    (optional) db_user and db_pass: surrealdb credentials

Returns:
    SurrealDBStore object initialized and ready for use.)rU   rV   r   r   s         r&   
from_textsSurrealDBStore.from_texts  s'    2 kk#//%IPPQ
r:   )r   r   r   r   r   r   r"   )r   Nr6   )r   r   r   ),__name__
__module____qualname____firstlineno____doc__r
   r   r'   r3   propertyr   r8   r   rS   r   rT   rL   rW   rc   r\   rZ   	DEFAULT_Kr   intr   r   r	   r|   r   r   r   r   r   r   r   r   r   r   r   r   classmethodr   r   __static_attributes__r`   r:   r&   r   r      s   $L&  
	4
- 
HZ0 
 
 +/} DJ' 	
 
c@ +/C}C DJ'C 	C
 
cC6 $(d3i   
$	> $(3d3i 3 3 
$	32 I

 ,0I
;I
 I

 c3h(I
 I
 
eHeS()	*I
\ 

 ,0

 

 c3h(
 
 
eHeO$	%
> G
 ,0GG G
 c3h(G G 
eHeO$	%G@ 

 ,0

 

 c3h(
 
 
eHeO$	%
> <
 ,0<< <
 c3h(< < 
eHeO$	%<< 

 ,0
;
 

 c3h(
 
 
h
8 ;
 ,0;;; ;
 c3h(; ; 
h;< 

 ,0

 

 c3h(
 
 
h
4 1
 ,011 1
 c3h(1 1 
h18  ,/ ,0,/;,/ ,/ 	,/
 ,/ c3h(,/ ,/ 
h,/b  #G ,0#G;#G #G 	#G
 #G c3h(#G #G 
h#GP  ! ,0!! ! 	!
 ! c3h(! ! 
h!L  "= ,0"="= "= 	"=
 "= c3h("= "= 
h"=H 
 +/	Cy  DJ'	
  
 > 
 +/	Cy  DJ'	
  
 r:   r   )rU   typingr   r   r   r   r   r   numpyr   langchain_core.documentsr	   langchain_core.embeddingsr
   langchain_core.vectorstoresr   &langchain_community.vectorstores.utilsr   r   r   r`   r:   r&   <module>r      s0     = =  - 0 3 M	q
[ q
r:   