
    dh:#                        S SK Jr  S SKrS SKJr  S SKJrJrJrJ	r	J
r
JrJr  S SKJr  S SKJr  S SKJr   " S S	\5      rg)
    )annotationsN)repeat)AnyDictIterableListOptionalTupleType)Document)
Embeddings)VectorStorec                     \ rS rSrSr          SS jr\SS j5       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                   SS
 jj5       r S         SS jjr S         SS jjrSS jr  S       SS jjrS S jrS!S"S jjrSrg)#XataVectorStore   z`Xata` vector store.

It assumes you have a Xata database
created with the right schema. See the guide at:
https://integrations.langchain.com/vectorstores?integration_name=XataVectorStore

c                     SSK Jn  U" XS9U l        X0l        U=(       d    SU l        g! [         a    [        S5      ef = f)zInitialize with Xata client.r   )
XataClientzPCould not import xata python package. Please install it with `pip install xata`.)api_keydb_urlvectorsN)xata.clientr   ImportError_client
_embedding_table_name)selfr   r   	embedding
table_namer   s         ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/xata.py__init__XataVectorStore.__init__   sM    	. "'A&/%2  	= 	s	   * A c                    U R                   $ N)r   )r   s    r   
embeddingsXataVectorStore.embeddings(   s        Nc                &    U R                  XU5      $ r#   )_add_vectors)r   r   	documentsidss       r   add_vectorsXataVectorStore.add_vectors,   s       S99r&   c                    UnU R                  X5      nU R                  R                  [        U5      5      nU R	                  XeU5      $ r#   )_texts_to_documentsr   embed_documentslistr+   )r   texts	metadatasr*   kwargsdocsr   s          r   	add_textsXataVectorStore.add_texts4   sD     ''9//11$u+>s33r&   c                ,   / n[        U5       Hf  u  pVX%   R                  US.nU(       a  X5   US'   X%   R                  R                  5        H  u  pUS;  d  M  XU'   M     UR	                  U5        Mh     Sn
/ n[        S[        U5      U
5       H~  nXLX-    nU R                  R                  5       R                  U R                  SU05      nUR                  S:w  a  [        SUR                   S	U 35      eUR                  US
   5        M     U$ )z!Add vectors to the Xata database.)contentr   id)r9   r8   r   i  r   records   zError adding vectors to Xata:  	recordIDs)	enumeratepage_contentmetadataitemsappendrangelenr   r:   bulk_insertr   status_code	Exceptionextend)r   r   r)   r*   rowsidxr   rowkeyval
chunk_sizeid_listichunkrs                  r   r(   XataVectorStore._add_vectorsA   s    &('0NC$>66&C HD	%N3399;<<"H < KK 1 
q#d)Z0AQ^,E$$&2243C3CiQVEWXA}}#"@qQRPS TUUNN1[>* 1 r&   c           	     x    Uc  [        0 5      n[        X5       VVs/ sH  u  p#[        X#S9PM     nnnU$ s  snnf )z:Return list of Documents from list of texts and metadatas.r?   r@   )r   zipr   )r1   r2   textr@   r4   s        r   r.   #XataVectorStore._texts_to_documentsc   sM     r
I #&e"7
"7 $:"7 	 

 
s   6c                    U(       a  U(       d  [        S5      eUR                  U5      n	SnU R                  X5      n
U " UUUUS9nUR                  XU5        U$ )z9Return VectorStore initialized from texts and embeddings.z$Xata api_key and db_url must be set.N)r   r   r   r   )
ValueErrorr/   r.   r(   )clsr1   r   r2   r   r   r   r*   r3   r$   r4   	vector_dbs               r   
from_textsXataVectorStore.from_textss   sh     fCDD..u5
&&u8!	
	 	z5r&   c                V    U R                  XUS9nU Vs/ sH  ofS   PM	     nnU$ s  snf )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.
)filterr   )similarity_search_with_score)r   querykr`   r3   docs_and_scoresdr)   s           r   similarity_search!XataVectorStore.similarity_search   s:     ;;EV;T#23?aqT?	3 4s   &c           	        U R                   R                  U5      nUSUS.nU(       a  X6S'   U R                  R                  5       R	                  U R
                  US9nUR                  S:w  a  [        SUR                   SU 35      eUS   nU V	s/ sH'  n	[        U	S	   U R                  U	5      S
9U	S   S   4PM)     n
n	U
$ s  sn	f )a\  Run similarity search with Chroma with distance.

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

Returns:
    List[Tuple[Document, float]]: List of documents most similar to the query
        text with distance in float.
r   )queryVectorcolumnsizer`   payloadr;   z!Error running similarity search: r<   r:   r8   rU   xatascore)
r   embed_queryr   datavector_searchr   rF   rG   r   _extractMetadata)r   rb   rc   r`   r3   r   rm   rR   hitshitrd   s              r   ra   ,XataVectorStore.similarity_search_with_score   s     OO//6	$!

  &HLL--d.>.>-P==C?aPQsSTT| 	
  !$Y!2237 FG$  	 	
 	
s   -Cc                T    0 nUR                  5        H  u  p4US;  d  M  XBU'   M     U$ )z:Extract metadata from a record. Filters out known columns.)r9   r8   r   rn   )rA   )r   recordr@   rL   rM   s        r   rs    XataVectorStore._extractMetadata   s0    HC@@ # ' r&   c                T   U(       a   U R                  5         U R                  SS9  gUbo  Sn[        S[        U5      U5       HR  nXXT-    nU Vs/ sH  nSU R                  US.0PM     nnU R
                  R                  5       R                  SU0S9  MT     g[        S	5      es  snf )
znDelete by vector IDs.

Args:
    ids: List of ids to delete.
    delete_all: Delete all records in the table.
r   )ndocsNi  deletetabler9   
operationsrl   z%Either ids or delete_all must be set.)	_delete_allwait_for_indexingrC   rD   r   r   r:   transactionrZ   )	r   r*   
delete_allr3   rN   rP   rQ   r9   r   s	            r   r|   XataVectorStore.delete   s     """+_J1c#h
3/PUPU"X)9)9DEPU   $$&22L*;U2V 4 DEEs   B%c                    U R                   R                  5       R                  U R                  SS/0S9nUR                  S:w  a  [        SUR                   SU 35      eUS    Vs/ sH  o"S   PM	     nn[        U5      S:X  a  gU Vs/ sH  nS	U R                  US
.0PM     nnU R                   R                  5       R                  SU0S9  M  s  snf s  snf )z Delete all records in the table.columnsr9   rl   r;   zError running query: r<   r:   r   r|   r}   r   N)	r   rq   rb   r   rF   rG   rD   r:   r   )r   rR   recr*   r9   r   s         r   r   XataVectorStore._delete_all   s    !!#))$*:*:YQUPVDW)XA}}#"7as KLL())5t9C53x1}LOLObT%5%5R@AC   LL  "..j7Q.R  6s   )CCc                   [         R                   " 5       n U R                  R                  5       R                  U R                  SSS0S.S9nUR
                  S:w  a  [        SUR
                   SU 35      eUS	   U:X  a  g[         R                   " 5       U-
  U:  a  [        S
5      e[         R                  " S5        M  )zUWait for the search index to contain a certain number of
documents. Useful in tests.
 rk   r   )rb   pagerl   r;   zError running search: r<   
totalCountz+Timed out waiting for indexing to complete.g      ?N)timer   rq   search_tabler   rF   rG   sleep)r   timeoutr{   startrR   s        r   r   !XataVectorStore.wait_for_indexing   s     		!!#00  B*L 1 A }}#"8q LMM%'yy{U"W, MNNJJsO r&   )r   r   r   )
r   strr   r   r   r   r   r   returnNone)r   r   r#   )r   zList[List[float]]r)   List[Document]r*   Optional[List[str]]r   	List[str])NN)
r1   Iterable[str]r2   zOptional[List[Dict[Any, Any]]]r*   r   r3   r   r   r   )r1   r   r2   z"Optional[Iterable[Dict[Any, Any]]]r   r   )NNNr   N)r[   zType['XataVectorStore']r1   r   r   r   r2   zOptional[List[dict]]r   Optional[str]r   r   r   r   r*   r   r3   r   r   z'XataVectorStore')   N)
rb   r   rc   intr`   Optional[dict]r3   r   r   r   )
rb   r   rc   r   r`   r   r3   r   r   zList[Tuple[Document, float]])rx   dictr   r   )r*   r   r   zOptional[bool]r3   r   r   r   )r   r   )      )r   floatr{   r   r   r   )__name__
__module____qualname____firstlineno____doc__r    propertyr$   r+   r5   r(   staticmethodr.   classmethodr]   rf   ra   rs   r|   r   r   __static_attributes__ r&   r   r   r      s\   33 3 	3
 3 
3&   $(	:": ": !	:
 
: 59#'	44 24 !	4
 4 
4" $(	 "  "  !	 
 
 D  9=5 
  
 +/!% $##'$  (	
    !  
 > @D .<OR	" @D$$ $.<$OR$	%$L $(%)F F #F 	F
 
F4S r&   r   )
__future__r   r   	itertoolsr   typingr   r   r   r   r	   r
   r   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.vectorstoresr   r   r   r&   r   <module>r      s.    "   C C C - 0 3{k {r&   