
    dhW%                        S SK Jr  S SKrS SKrS SKrS SK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KJr  \R&                  " \5      rSS jr " S	 S
\5      rg)    )annotationsN)AnyIterableListOptionalType)Document)
Embeddings)get_from_dict_or_env)VectorStorec                 @    [         R                  " 5       R                  $ N)uuiduuid4hex     ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/tair.py	_uuid_keyr      s    ::<r   c                     \ rS rSrSr   S             SS jjr\SS j5       r            SS 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5       r\   S           SS jj5       rSrg)Tair   z`Tair` vector store.Nc                    Xl         X0l         SSKJn   UR
                  " U40 UD6n	Xl        X@l        XPl	        X`l
        g ! [         a    [	        S5      ef = f! [         a  n
[        SU
 35      eS n
A
ff = f)Nr   r   PCould not import tair python package. Please install it with `pip install tair`.zTair failed to connect: )embedding_function
index_nametairr   ImportErrorfrom_url
ValueErrorclientcontent_keymetadata_keysearch_params)selfr   urlr   r#   r$   r%   kwargs
TairClientr"   es              r   __init__Tair.__init__   s     #5$	/	=((77F &(*  	= 	  	=7s;<<	=s"   A A A
A7$A22A7c                    U R                   $ r   )r   )r&   s    r   
embeddingsTair.embeddings5   s    &&&r   c                    U R                   R                  U R                  5      nUb  [        R	                  S5        gU R                   R
                  " U R                  UUUU40 UD6  g)NzIndex already existsFT)r"   tvs_get_indexr   loggerinfotvs_create_index)r&   dimdistance_type
index_type	data_typer(   indexs          r   create_index_if_not_existTair.create_index_if_not_exist9   sf     ))$//:KK./$$OO	
 	
 r   c                $   / nUR                  SS5      nSnU R                  R                  U R                  5      nUb  UR                  S5      S:X  a  SnU R                  R	                  SS9nU R
                  R                  [        U5      5      n	[        U5       H  u  pU(       a  XZ   O	[        5       nU(       a  X*   O0 nU(       aQ  UR                  " U R                  UX   S40 SUU R                  UU R                  [        R                  " U5      0D6  ONUR                  " U R                  UX   S40 U R                  UU R                  [        R                  " U5      0D6  UR                  U5        M     UR!                  5         U$ )	z$Add texts data to an existing index.keysNFlexical_algorithmbm25TtransactionTEXT)getr"   r1   r   pipeliner   embed_documentslist	enumerater   tvs_hsetr#   r$   jsondumpsappendexecute)r&   texts	metadatasr(   idsr=   use_hybrid_searchr9   rD   r.   itextkeymetadatas                 r   	add_textsTair.add_textsO   sn    zz&$'!))$//:+>!?6!I $;;''E':,,<<T%[I
 'GA!$'y{C'0y|bH !!OOM	
 (($))4::h+?
 !!OOM		 (($))4::h+?	 JJsO9 (: 	
r   c           
        U R                   R                  U5      nU R                  R                  " U R                  X$SS40 UD6nU R                  R                  SS9nU H6  u  pxUR                  U R                  XpR                  U R                  5        M8     UR                  5       n	U	 V
s/ sH'  n
[        U
S   [        R                  " U
S   5      S9PM)     sn
$ s  sn
f )a$  
Returns the most similar indexed documents to the query text.

Args:
    query (str): The query text for which to find similar documents.
    k (int): The number of documents to return. Default is 4.

Returns:
    List[Document]: A list of documents that are most similar to the query text.
FNr@      r   )page_contentrT   )r   embed_queryr"   tvs_knnsearchr   rD   	tvs_hmgetr$   r#   rL   r	   rI   loads)r&   querykr(   	embeddingkeys_and_scoresrD   rS   _docsds              r   similarity_searchTair.similarity_search   s     ++77>	++33OOQ5$
:@
 ;;''E':%FC&7&79I9I & ! 

 	 qTAaD) 
 	
 
s   /-Cc                    SSK Jn  [        USS5      n	SU;   a  UR	                  S5        UR
                  R                  n
SU;   a  UR	                  S5      n
UR                  R                  nSU;   a  UR	                  S5      nUR                  R                  nSU;   a  UR	                  S5      n0 nS	U;   a  UR	                  S	5      n0 nS
U;   a  UR	                  S
5      nS nSU;   a  UR	                  S5      n U " UU	U4UUUS.UD6nUR                  U5      nUR                  " [        US   5      U
UU40 UD6  UR                  XUS9  U$ ! [         a    [        S5      ef = f! [         a  n[        SU 35      eS nAff = f)Nr   )
tairvectorr   tair_urlTAIR_URLr6   r7   r8   index_paramsr%   r=   r#   r$   r%   ztair failed to connect: )r=   )r   rh   r   r   popDistanceMetricInnerProduct	IndexTypeHNSWDataTypeFloat32r!   rE   r:   lenrU   )clsrM   r`   rN   r   r#   r$   r(   rh   r'   r6   r7   r8   rk   r%   r=   tair_vector_storer*   r.   s                      r   
from_textsTair.from_texts   s   	' #6:zBJJz""11>>f$"JJ7M))..
6!L1J''//	& 

;/IV#!::n5Lf$"JJ7MV::f%D	= #! ()+! ! ..u5
33
1		

 	
 	##E4#@  k  	= 	L  	=7s;<<	=s#   E ?E, E),
F	6FF	c                    U Vs/ sH  oR                   PM     n	nU Vs/ sH  oR                  PM     nnU R                  " XX4XV40 UD6$ s  snf s  snf r   )rY   rT   rw   )
ru   	documentsr`   rN   r   r#   r$   r(   rd   rM   s
             r   from_documentsTair.from_documents   sX     *33A3)23AZZ	3~~i[
RX
 	
 43s
   A
Ac                P    SSK Jn  [        USS5      n SU;   a  UR	                  S5        UR
                  " SSU0UD6nUR                  U 5      nUS:X  a  [        R                  S	5        g
g! [         a    [        S5      ef = f! [         a  n[        SU 35      eSnAff = f)z
Drop an existing index.

Args:
    index_name (str): Name of the index to drop.

Returns:
    bool: True if the index is dropped successfully.
r   r   r   ri   rj   r'   zTair connection error: NzIndex does not existFTr   )
r   r   r   r   rm   r    r!   tvs_del_indexr2   r3   )r   r(   r)   r'   r"   r*   rets          r   
drop_indexTair.drop_index   s    	/ #6:zB	<V#

:&((;S;F;F "":.!8KK./'  	= 	  	<6qc:;;	<s"   A/ +B /B
B%B  B%c                l    [        USS5      n0 nSU;   a  UR                  S5      nU " UUU4UUUS.UD6$ )z"Connect to an existing Tair index.ri   rj   r%   rl   )r   rm   )ru   r`   r   r#   r$   r(   r'   r%   s           r   from_existing_indexTair.from_existing_index  s]     #6:zBf$"JJ7M
 $%'
 
 	
r   )r"   r#   r   r   r$   r%   )contentrT   N)r   r
   r'   strr   r   r#   r   r$   r   r%   zOptional[dict]r(   r   )returnr
   )r5   intr6   r   r7   r   r8   r   r(   r   r   boolr   )rM   zIterable[str]rN   Optional[List[dict]]r(   r   r   	List[str])   )r^   r   r_   r   r(   r   r   List[Document])N	langchainr   rT   )ru   z
Type[Tair]rM   r   r`   r
   rN   r   r   r   r#   r   r$   r   r(   r   r   r   )rz   r   r`   r
   rN   r   r   r   r#   r   r$   r   r(   r   r   r   )r   )r   r   r(   r   r   r   )r   r   rT   )r`   r
   r   r   r#   r   r$   r   r(   r   r   r   )__name__
__module____qualname____firstlineno____doc__r+   propertyr.   r:   rU   re   classmethodrw   r{   staticmethodr   r   __static_attributes__r   r   r   r   r      s    %&(,+&+ + 	+
 + + &+ +< ' '  	
   
2 +/.. (. 	.
 
.b $%!
!
 !
03!
	!
F 
 +/%$&A!A!A! A! (	A!
 A! A! A! A! 
A! A!F 
 +/%$&
!
 
 (	

 
 
 
 
 

 
" %""" 
" "H  &$&

 
 	

 
 
 

 
r   r   )r   r   )
__future__r   rI   loggingr   typingr   r   r   r   r   langchain_core.documentsr	   langchain_core.embeddingsr
   langchain_core.utilsr   langchain_core.vectorstoresr   	getLoggerr   r2   r   r   r   r   r   <module>r      sF    "    6 6 - 0 5 3			8	$a
; a
r   