§
    šŠtjW%  ã                  óº   — 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dS )é    )ÚannotationsN)ÚAnyÚIterableÚListÚOptionalÚType)ÚDocument)Ú
Embeddings)Úget_from_dict_or_env)ÚVectorStoreÚreturnÚstrc                 ó2   — t          j        ¦   «         j        S ©N)ÚuuidÚuuid4Úhex© ó    úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/tair.pyÚ	_uuid_keyr      s   € ÝŒ:‰<Œ<ÔÐr   c                  óÚ   — e Zd ZdZ	 	 	 d.d/d„Zed0d„¦   «         Zd1d„Z	 d2d3d„Z	 d4d5d$„Z	e
	 	 	 	 d6d7d)„¦   «         Ze
	 	 	 	 d6d8d+„¦   «         Ze	 d9d:d,„¦   «         Ze
	 	 	 d;d<d-„¦   «         ZdS )=ÚTairz`Tair` vector store.ÚcontentÚmetadataNÚembedding_functionr
   Úurlr   Ú
index_nameÚcontent_keyÚmetadata_keyÚsearch_paramsúOptional[dict]Úkwargsr   c                ó  — || _         || _        	 ddlm} n# t          $ r t	          d¦  «        ‚w xY w	  |j        |fi |¤Ž}	n$# t          $ r}
t          d|
› �¦  «        ‚d }
~
ww xY w|	| _        || _        || _	        || _
        d S )Nr   ©r   úPCould not import tair python package. Please install it with `pip install tair`.zTair failed to connect: )r   r   Útairr   ÚImportErrorÚfrom_urlÚ
ValueErrorÚclientr   r    r!   )Úselfr   r   r   r   r    r!   r#   Ú
TairClientr+   Úes              r   Ú__init__zTair.__init__   sÝ   € ð #5ˆÔØ$ˆŒð	Ø/Ð/Ð/Ð/Ð/Ð/Ð/øÝð 	ð 	ð 	Ýð=ñô ð ð	øøøð
	=à(�ZÔ(¨Ð7Ð7°Ð7Ð7ˆFˆFøÝð 	=ð 	=ð 	=ÝÐ;¸Ð;Ð;Ñ<Ô<Ð<øøøøð	=øøøð ˆŒØ&ˆÔØ(ˆÔØ*ˆÔÐÐs   � —1µA Á
A%ÁA Á A%r   c                ó   — | j         S r   )r   )r,   s    r   Ú
embeddingszTair.embeddings5   s   € àÔ&Ð&r   ÚdimÚintÚdistance_typeÚ
index_typeÚ	data_typeÚboolc                ó¸   — | j                              | j        ¦  «        }|�t                               d¦  «         dS  | j         j        | j        ||||fi |¤Ž dS )NzIndex already existsFT)r+   Útvs_get_indexr   ÚloggerÚinfoÚtvs_create_index)r,   r2   r4   r5   r6   r#   Úindexs          r   Úcreate_index_if_not_existzTair.create_index_if_not_exist9   sy   € ð ”×)Ò)¨$¬/Ñ:Ô:ˆØÐÝ�KŠKÐ.Ñ/Ô/Ð/Ø�5Ø$ˆŒÔ$ØŒOØØØØð	
ð 	
ð ð	
ð 	
ð 	
ð ˆtr   ÚtextsúIterable[str]Ú	metadatasúOptional[List[dict]]ú	List[str]c                óô  — g }|                      dd¦  «        }d}| j                             | j        ¦  «        }|�|                      d¦  «        dk    rd}| j                             d¬¦  «        }| j                             t          |¦  «        ¦  «        }	t          |¦  «        D ]»\  }
}|r||
         nt          ¦   «         }|r||
         ni }|r? |j
        | j        ||	|
         dfi d|| j        || j        t          j        |¦  «        i¤Ž n< |j
        | j        ||	|
         dfi | j        || j        t          j        |¦  «        i¤Ž |                     |¦  «         Œ¼|                     ¦   «          |S )	z$Add texts data to an existing index.ÚkeysNFÚlexical_algorithmÚbm25T©ÚtransactionÚTEXT)Úgetr+   r9   r   Úpipeliner   Úembed_documentsÚlistÚ	enumerater   Útvs_hsetr   r    ÚjsonÚdumpsÚappendÚexecute)r,   r?   rA   r#   ÚidsrE   Úuse_hybrid_searchr=   rL   r1   ÚiÚtextÚkeyr   s                 r   Ú	add_textszTair.add_textsO   s¹  € ð ˆØ�zŠz˜& $Ñ'Ô'ˆØ!ÐØ”×)Ò)¨$¬/Ñ:Ô:ˆØÐ §¢Ð+>Ñ!?Ô!?À6Ò!IÐ!IØ $Ðà”;×'Ò'°EÐ'Ñ:Ô:ˆØÔ,×<Ò<½TÀ%¹[¼[ÑIÔIˆ
Ý  Ñ'Ô'ð 	ð 	‰GˆAˆtà!Ð2�$�q”'�'¥y¡{¤{ˆCØ'0Ð8�y ”|�|°bˆHØ ð à!�Ô!Ø”OØØ˜q”MØð	
ð 
ð  ØÔ(¨$ØÔ)­4¬:°hÑ+?Ô+?ðð
ð 
ð 
ð 
ð "�Ô!Ø”OØØ˜q”MØð		ð 	ð Ô(¨$ØÔ)­4¬:°hÑ+?Ô+?ðð	ð 	ð 	ð �JŠJ�s‰OŒOˆOˆOØ×ÒÑÔÐØˆ
r   é   ÚqueryÚkúList[Document]c                óB  — | j                              |¦  «        } | j        j        | j        ||ddfi |¤Ž}| j                             d¬¦  «        }|D ],\  }}|                     | j        || j        | j        ¦  «         Œ-| 	                    ¦   «         }	d„ |	D ¦   «         S )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.
        FNrH   c           	     ól   — g | ]1}t          |d          t          j        |d         ¦  «        ¬¦  «        ‘Œ2S )é   r   )Úpage_contentr   )r	   rQ   Úloads©Ú.0Úds     r   ú
<listcomp>z*Tair.similarity_search.<locals>.<listcomp>š   sQ   € ð 
ð 
ð 
ð
 õ	 Ø˜qœTÝœ A a¤DÑ)Ô)ðñ ô ð
ð 
ð 
r   )
r   Úembed_queryr+   Útvs_knnsearchr   rL   Ú	tvs_hmgetr    r   rT   )
r,   r\   r]   r#   Ú	embeddingÚkeys_and_scoresrL   rY   Ú_Údocss
             r   Úsimilarity_searchzTair.similarity_search   sÛ   € ð Ô+×7Ò7¸Ñ>Ô>ˆ	à3˜$œ+Ô3ØŒO˜Q 	¨5°$ð
ð 
Ø:@ð
ð 
ˆð ”;×'Ò'°EÐ'Ñ:Ô:ˆØ%ð 	ð 	‰FˆC�Ø×ÒØ”  dÔ&7¸Ô9Iñô ð ð ð ×ÒÑ!Ô!ˆð
ð 
ð
 ð
ñ 
ô 
ð 	
r   Ú	langchainÚclsú
Type[Tair]rk   c                ó0  — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY wt          |dd¦  «        }	d|v r|                     d¦  «         |j        j        }
d|v r|                     d¦  «        }
|j        j        }d|v r|                     d¦  «        }|j	        j
        }d|v r|                     d¦  «        }i }d	|v r|                     d	¦  «        }i }d
|v r|                     d
¦  «        }d }d|v r|                     d¦  «        }	  | ||	|f|||dœ|¤Ž}n$# t          $ r}t          d|› �¦  «        ‚d }~ww xY w|                     |¦  «        } |j        t          |d         ¦  «        |
||fi |¤Ž |                     |||¬¦  «         |S )Nr   )Ú
tairvectorr&   Útair_urlÚTAIR_URLr4   r5   r6   Úindex_paramsr!   rE   ©r   r    r!   ztair failed to connect: )rE   )r'   rt   r(   r   ÚpopÚDistanceMetricÚInnerProductÚ	IndexTypeÚHNSWÚDataTypeÚFloat32r*   rM   r>   ÚlenrZ   )rq   r?   rk   rA   r   r   r    r#   rt   r   r4   r5   r6   rw   r!   rE   Útair_vector_storer.   r1   s                      r   Ú
from_textszTair.from_texts¢   sG  € ð	Ø'Ð'Ð'Ð'Ð'Ð'Ð'øÝð 	ð 	ð 	Ýð=ñô ð ð	øøøõ
 # 6¨:°zÑBÔBˆØ˜ÐÐØ�JŠJ�zÑ"Ô"Ð"à"Ô1Ô>ˆØ˜fÐ$Ð$Ø"ŸJšJ Ñ7Ô7ˆMØÔ)Ô.ˆ
Ø˜6Ð!Ð!ØŸš LÑ1Ô1ˆJØÔ'Ô/ˆ	Ø˜&Ð Ð ØŸ
š
 ;Ñ/Ô/ˆIØˆØ˜VÐ#Ð#Ø!Ÿ:š: nÑ5Ô5ˆLØˆØ˜fÐ$Ð$Ø"ŸJšJ Ñ7Ô7ˆMàˆØ�VÐÐØ—:’:˜fÑ%Ô%ˆDð	=Ø # ØØØð!ð (Ø)Ø+ð!ð !ð ð!ð !ÐÐøõ ð 	=ð 	=ð 	=ÝÐ;¸Ð;Ð;Ñ<Ô<Ð<øøøøð	=øøøð ×.Ò.¨uÑ5Ô5ˆ
à3ÐÔ3Ý�
˜1”ÑÔØØØð		
ð 	
ð
 ð	
ð 	
ð 	
ð 	×#Ò# E¨9¸4Ð#Ñ@Ô@Ð@Ø Ð s    ‚	 ‰#ÄD! Ä!
EÄ+D=Ä=EÚ	documentsc                óX   — d„ |D ¦   «         }d„ |D ¦   «         } | j         ||||||fi |¤ŽS )Nc                ó   — g | ]	}|j         ‘Œ
S r   )rb   rd   s     r   rg   z'Tair.from_documents.<locals>.<listcomp>ñ   s   € Ð3Ð3Ð3 A�”Ð3Ð3Ð3r   c                ó   — g | ]	}|j         ‘Œ
S r   )r   rd   s     r   rg   z'Tair.from_documents.<locals>.<listcomp>ò   s   € Ð3Ð3Ð3 A�Q”ZÐ3Ð3Ð3r   )r‚   )	rq   rƒ   rk   rA   r   r   r    r#   r?   s	            r   Úfrom_documentszTair.from_documentsæ   sZ   € ð 4Ð3¨Ð3Ñ3Ô3ˆØ3Ð3¨Ð3Ñ3Ô3ˆ	àˆsŒ~Ø�9˜i¨°[À,ð
ð 
ØRXð
ð 
ð 	
r   c                ó|  — 	 ddl m} n# t          $ r t          d¦  «        ‚w xY wt          |dd¦  «        }	 d|v r|                     d¦  «          |j        dd|i|¤Ž}n$# t          $ r}t          d|› �¦  «        ‚d}~ww xY w|                     | ¦  «        }|dk    rt           	                    d	¦  «         d
S dS )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&   ru   rv   r   zTair connection error: NzIndex does not existFTr   )
r'   r   r(   r   ry   r)   r*   Útvs_del_indexr:   r;   )r   r#   r-   r   r+   r.   Úrets          r   Ú
drop_indexzTair.drop_indexø   s  € ð	Ø/Ð/Ð/Ð/Ð/Ð/Ð/øÝð 	ð 	ð 	Ýð=ñô ð ð	øøøõ
 # 6¨:°zÑBÔBˆð	<Ø˜VÐ#Ð#Ø—
’
˜:Ñ&Ô&Ð&Ø(�ZÔ(Ð;Ð;¨SÐ;°FÐ;Ð;ˆFˆFøÝð 	<ð 	<ð 	<ÝÐ:°qÐ:Ð:Ñ;Ô;Ð;øøøøð	<øøøð ×"Ò" :Ñ.Ô.ˆØ�!Š8ˆ8å�KŠKÐ.Ñ/Ô/Ð/Ø�5Øˆts   ‚	 ‰#¸(A! Á!
BÁ+A=Á=Bc                óx   — t          |dd¦  «        }i }d|v r|                     d¦  «        } | |||f|||dœ|¤ŽS )z"Connect to an existing Tair index.ru   rv   r!   rx   )r   ry   )rq   rk   r   r   r    r#   r   r!   s           r   Úfrom_existing_indexzTair.from_existing_index  sr   € õ # 6¨:°zÑBÔBˆàˆØ˜fÐ$Ð$Ø"ŸJšJ Ñ7Ô7ˆMàˆsØØØð
ð $Ø%Ø'ð
ð 
ð ð
ð 
ð 	
r   )r   r   N)r   r
   r   r   r   r   r   r   r    r   r!   r"   r#   r   )r   r
   )r2   r3   r4   r   r5   r   r6   r   r#   r   r   r7   r   )r?   r@   rA   rB   r#   r   r   rC   )r[   )r\   r   r]   r3   r#   r   r   r^   )Nrp   r   r   )rq   rr   r?   rC   rk   r
   rA   rB   r   r   r   r   r    r   r#   r   r   r   )rƒ   r^   rk   r
   rA   rB   r   r   r   r   r    r   r#   r   r   r   )rp   )r   r   r#   r   r   r7   )rp   r   r   )rk   r
   r   r   r   r   r    r   r#   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   Úpropertyr1   r>   rZ   ro   Úclassmethodr‚   r‡   Ústaticmethodr‹   r�   r   r   r   r   r      su  € € € € € ØÐð %Ø&Ø(,ð+ð +ð +ð +ð +ð< ð'ð 'ð 'ñ „Xð'ðð ð ð ð2 +/ð.ð .ð .ð .ð .ðb $%ð!
ð !
ð !
ð !
ð !
ðF ð
 +/Ø%Ø$Ø&ðA!ð A!ð A!ð A!ñ „[ðA!ðF ð
 +/Ø%Ø$Ø&ð
ð 
ð 
ð 
ñ „[ð
ð" à%ð"ð "ð "ð "ñ „\ð"ðH ð &Ø$Ø&ð
ð 
ð 
ð 
ñ „[ð
ð 
ð 
r   r   )r   r   )Ú
__future__r   rQ   Ú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�      s  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ða
ð a
ð a
ð a
ð a
ˆ;ñ a
ô a
ð a
ð a
ð a
r   