
    hW%                        d dl mZ d dlZd dlZd dlZd dl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 d dlmZ  ej&                  e      ZddZ G d	 d
e      Zy)    )annotationsN)AnyIterableListOptionalType)Document)
Embeddings)get_from_dict_or_env)VectorStorec                 >    t        j                         j                  S N)uuiduuid4hex     c/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/vectorstores/tair.py	_uuid_keyr      s    ::<r   c                  h   e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZedd       Z	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZ	e
	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Ze
	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	       Ze	 d	 	 	 	 	 dd
       Ze
	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd       Zy)Tairz`Tair` vector store.Nc                    || _         || _        	 ddlm} 	  |j
                  |fi |}	|	| _        || _        || _	        || _
        y # t        $ r t	        d      w xY w# t        $ r}
t        d|
       d }
~
ww xY w)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__zTair.__init__   s     #5$	/	=(Z((77F &(*  	= 	  	=7s;<<	=s"   A A A	A;(A66A;c                    | j                   S r   )r   )r%   s    r   
embeddingszTair.embeddings5   s    &&&r   c                    | j                   j                  | j                        }|t        j	                  d       y | j                   j
                  | j                  ||||fi | y)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_existzTair.create_index_if_not_exist9   sh     ))$//:KK./$$$OO	
 	
 r   c                
   g }|j                  dd      }d}| j                  j                  | j                        }||j                  d      dk(  rd}| j                  j	                  d      }| j
                  j                  t        |            }	t        |      D ]  \  }
}|r||
   n	t               }|r||
   ni }|rQ |j                  | j                  ||	|
   dfi d|| j                  || j                  t        j                  |      i nN |j                  | j                  ||	|
   dfi | j                  || j                  t        j                  |      i |j                  |        |j!                          |S )	z$Add texts data to an existing index.keysNFlexical_algorithmbm25TtransactionTEXT)getr!   r.   r   pipeliner   embed_documentslist	enumerater   tvs_hsetr"   r#   jsondumpsappendexecute)r%   texts	metadatasr'   idsr9   use_hybrid_searchr6   r@   r,   itextkeymetadatas                 r   	add_textszTair.add_textsO   s    zz&$'!))$//:+>!?6!I $;;''E':,,<<T%[I
 ' 	GAt!$q'y{C'0y|bH !!!OOqM	
 (($))4::h+?
 "!!OOqM		 (($))4::h+?	 JJsO9	: 	
r   c           
        | j                   j                  |      } | j                  j                  | j                  ||ddfi |}| j                  j                  d      }|D ]7  \  }}|j                  | j                  || j                  | j                         9 |j                         }	|	D 
cg c](  }
t        |
d   t        j                  |
d               * c}
S c c}
w )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_contentrP   )r   embed_queryr!   tvs_knnsearchr   r@   	tvs_hmgetr#   r"   rH   r	   rE   loads)r%   querykr'   	embeddingkeys_and_scoresr@   rO   _docsds              r   similarity_searchzTair.similarity_search   s     ++77>	3$++33OOQ	5$
:@
 ;;''E':% 	FCd&7&79I9I	 ! 

 	 qTAaD)
 	
 
s   3-C#c                    	 ddl m} t        |dd      }	d|v r|j	                  d       |j
                  j                  }
d|v r|j	                  d      }
|j                  j                  }d|v r|j	                  d      }|j                  j                  }d|v r|j	                  d      }i }d	|v r|j	                  d	      }i }d
|v r|j	                  d
      }d }d|v r|j	                  d      }	  | ||	|f|||d|}|j                  |      } |j                  t        |d         |
||fi | |j                  |||       |S # t        $ r t        d      w xY w# t        $ r}t        d|       d }~ww xY w)Nr   )
tairvectorr   tair_urlTAIR_URLr3   r4   r5   index_paramsr$   r9   r"   r#   r$   ztair failed to connect: )r9   )r   rb   r   r   popDistanceMetricInnerProduct	IndexTypeHNSWDataTypeFloat32r    rA   r7   lenrQ   )clsrI   r[   rJ   r   r"   r#   r'   rb   r&   r3   r4   r5   re   r$   r9   tair_vector_storer)   r,   s                      r   
from_textsz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3
1		

 	
 	##E94#@  k  	= 	L  	=7s;<<	=s#   E	 1E! 	E!	E=*E88E=c                    |D cg c]  }|j                    }	}|D cg c]  }|j                   }} | j                  |	|||||fi |S c c}w c c}w r   )rT   rP   rq   )
ro   	documentsr[   rJ   r   r"   r#   r'   r_   rI   s
             r   from_documentszTair.from_documents   sb     *33A33)23AQZZ3	3s~~9i[,
RX
 	
 43s
   AAc                F   	 ddl m} t        |dd      }	 d|v r|j	                  d        |j
                  dd|i|}|j                  |       }|dk(  rt        j                  d	       y
y# t        $ r t        d      w xY w# t        $ r}t        d|       d}~ww xY w)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   rc   rd   r&   zTair connection error: NzIndex does not existFTr   )
r   r   r   r   rg   r   r    tvs_del_indexr/   r0   )r   r'   r(   r&   r!   r)   rets          r   
drop_indexzTair.drop_index   s    	/ #6:zB	<V#

:&(Z((;S;F;F "":.!8KK./'  	= 	  	<6qc:;;	<s"   A, )B ,B	B BB c                h    t        |dd      }i }d|v r|j                  d      } | |||f|||d|S )z"Connect to an existing Tair index.rc   rd   r$   rf   )r   rg   )ro   r[   r   r"   r#   r'   r&   r$   s           r   from_existing_indexzTair.from_existing_index  s]     #6:zBf$"JJ7M
 $%'
 
 	
r   )contentrP   N)r   r
   r&   strr   r|   r"   r|   r#   r|   r$   zOptional[dict]r'   r   )returnr
   )r2   intr3   r|   r4   r|   r5   r|   r'   r   r}   boolr   )rI   zIterable[str]rJ   Optional[List[dict]]r'   r   r}   	List[str])   )rY   r|   rZ   r~   r'   r   r}   List[Document])N	langchainr{   rP   )ro   z
Type[Tair]rI   r   r[   r
   rJ   r   r   r|   r"   r|   r#   r|   r'   r   r}   r   )rs   r   r[   r
   rJ   r   r   r|   r"   r|   r#   r|   r'   r   r}   r   )r   )r   r|   r'   r   r}   r   )r   r{   rP   )r[   r
   r   r|   r"   r|   r#   r|   r'   r   r}   r   )__name__
__module____qualname____doc__r*   propertyr,   r7   rQ   r`   classmethodrq   rt   staticmethodrx   rz   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   rE   loggingr   typingr   r   r   r   r   langchain_core.documentsr	   langchain_core.embeddingsr
   langchain_core.utilsr   langchain_core.vectorstoresr   	getLoggerr   r/   r   r   r   r   r   <module>r      sH    "    6 6 - 0 5 3			8	$a
; a
r   