
    NgM                        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
mZmZmZ d dlZd dlmZ d dlmZ d dlmZ erd dlZdZ G d d	e          ZdS )
    )annotationsN)TYPE_CHECKINGAnyDictIterableListOptionalTupleType)Document)
Embeddings)VectorStore   c                  2   e Zd ZdZdZdZdeeefd<dZed=d            Ze	deeefd>d            Z
e	ddeeefd?d            Zd d!d
d"d#d
d"gfd@d'Z	 dAdBd(Z	 dCdDd*ZdEd+Ze	deeefdFd,            ZefdGd/ZefdHd1ZefdId3Z	 dJdId5Z	 dCdKd9Z	 dCdLd;ZdS )MVearchlangchain_vearchcluster_client_db   Nembedding_functionr   path_or_urlOptional[str]
table_namestrdb_nameflagintkwargsr   returnNonec                   	 |rddl }nddl}n# t          $ r t          d          w xY w|r|t          d          |sH| j        }|dz  }|t          t          j                                                  d          d         z  }|| _	        || _
        |                    |          | _        n|(t          j                                        dd	          }	n|}	t          j                            |	          st          j        |	           t          j                            |	d
          }
t          j                            |
          st          j        |
            |j        |	|
          | _        |	| _        |sH| j        }|dz  }|t          t          j                                                  d          d         z  }|| _        || _        || _        dS )zSInitialize vearch vector store
        flag 1 for cluster,0 for standalone
        r   NzhCould not import suitable python package. Please install it with `pip install vearch or vearch_cluster`.zPlease input url of cluster_-\/log)vearch_clustervearchImportError
ValueError_DEFAULT_CLUSTER_DB_NAMEr   uuiduuid4splitusing_db_nameurlVearchClusterosgetcwdreplacepathisdirmakedirsjoinEngineusing_metapath_DEFAULT_TABLE_NAMEusing_table_nameembedding_funcr   )selfr   r   r   r   r   r   r'   r(   metadata_pathlog_paths              c/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/vectorstores/vearch.py__init__zVearch.__init__   s   		 %%%%% 	 	 	Q  	  	0" !>??? <733tz||,,22377;;!(D"DH(66{CCDKK " "	 3 3D# > > +7==// +M***w||M599H7==** &H%%%'&-x@@DK"/D 	;1J#J#djll++11#66r::J *0			s    (Optional[Embeddings]c                    | j         S N)r=   r>   s    rA   
embeddingszVearch.embeddingsN   s    ""    clsType[Vearch]	documentsList[Document]	embeddingc                \    d |D             }d |D             }	 | j         d|||	||||d|S )Return Vearch VectorStorec                    g | ]	}|j         
S  )page_content.0ds     rA   
<listcomp>z)Vearch.from_documents.<locals>.<listcomp>_   s    333A333rH   c                    g | ]	}|j         
S rQ   )metadatarS   s     rA   rV   z)Vearch.from_documents.<locals>.<listcomp>`   s    333AQZ333rH   )textsrM   	metadatasr   r   r   r   rQ   )
from_texts)
rI   rK   rM   r   r   r   r   r   rY   rZ   s
             rA   from_documentszVearch.from_documentsR   si     4333333333	s~ 	
#!	
 	
 	
 	
 		
rH   rY   	List[str]rZ   Optional[List[dict]]c                V     | ||||||          }	|	                     ||           |	S )rO   )r   rM   r   r   r   r   )rY   rZ   )	add_texts)
rI   rY   rM   rZ   r   r   r   r   r   	vearch_dbs
             rA   r[   zVearch.from_textsm   sM     C(#!
 
 
	 	%9===rH      textfieldtyperX   dim
field_list
List[dict]c           
        t           j        j        t           j        j        ddddddd}fd|D             }t          j        d	t           j        j        d
|ddddid          }| j                             || j        ||          }|S )z
        Create VectorStore Table
        Args:
            dim:dimension of vector
            fields_list: the field you want to store
        Return:
            code,0 for success,1 for failed
        )r   r   i'  IVFPQi       )
ncentroids
nsubvector)
index_sizeretrieval_typeretrieval_paramc                ^    g | ])}t          j        |d          |d                            *S rd   )r(   GammaFieldInfo)rT   fi	type_dicts     rA   rV   z(Vearch._create_table.<locals>.<listcomp>   sC     
 
 
 !"W+yF/DEE
 
 
rH   text_embeddingT 
MemoryOnly
cache_sizeF)namerf   is_index	dimensionmodel_id
store_typestore_param
has_source)rz   fieldsvector_field)r(   dataTypeINTSTRINGGammaVectorInfoVECTORcreate_tabler<   )r>   rg   rh   engine_infor   r   response_coderu   s          @rA   _create_tablezVearch._create_table   s    " #O/8NOO	%.2"EE
 


 
 
 
 
 
 
 -!'#%u-	
 	
 	
 00&%	 1 
 
 rH   c                    | j         dddddddidddiddid	d
|dddd}| j                            | j        |          }|S )z
        Create VectorStore space
        Args:
            dim:dimension of vector
        Return:
            code,0 failed for ,1 for success
        r   gammaFLATmetric_typeL2)rz   ro   rp   rq   rf   stringvectorTrx   )rf   indexr|   r~   )rc   rX   rv   )rz   partition_numreplica_numengine
properties)r<   r(   create_spacer/   )r>   rg   space_configr   s       rA   _create_spacezVearch._create_space   s     )"(!4$	  H H %!!$".	# # 
 
6 001C\RRrH   Iterable[str]c                V   d}| j         '| j                             t          |                    }|t          d          | j        r| j                                        }| j        |vr0| j                            | j                  }|st          d          | j        	                    | j                  }| j
        |vr9|                     t          |d                             }|st          d          g }	|	|t          |||          D ]\  }
}}i }|
|d<   |d         |d<   t          j        |          }d	|t          j                            |          z                                  i|d
<   | j                            | j        | j
        |          }|d         dk    r|	                    |d                    | j                            | j        | j
        |          }|	                    |d                    nt*          j                            | j        | j
        dz             }t*          j                            |          s;t          |d                   }|                     |          }|rt          d          ||g }t          |||          D ]f\  }
}}i }|
|d<   |d         |d<   t          j        |          }|t          j                            |          z  |d
<   |                    |           g| j                            |          }	d}t          |	          t          |          k    r@t9          j        d           |dk    rn%|dz  }t          |	          t          |          k    @| j                                         |	S )z^
        Returns:
            List of ids from adding the texts into the vectorstore.
        Nzembeddings is Nonezcreate db failed!!!r   zcreate space failed!!!rc   sourcerX   featurerv   status   _id.schemazcreate table failed!!!g      ?   r   )r=   embed_documentslistr*   r   r(   list_dbsr/   	create_dblist_spacesr<   r   lenzipnparraylinalgnormtolist
insert_oneappendr2   r5   r8   r:   existsr   addtimesleepdump)r>   rY   rZ   r   rG   dbs_listcreate_db_code
space_listcreate_space_codedocidrc   rX   embedprofilesembed_np
insert_resretry_insert
table_pathrg   r   	doc_items
profiles_vt_times                          rA   r`   zVearch.add_texts   s    
*,<<T%[[IIJ12229 ;	#{++--H!11!%!6!6t7I!J!J% <$%:;;;001CDDJ$J66$($6$6s:a=7I7I$J$J!( ?$%=>>>E%)*?-0	:-N-N ! !)D(E/1H'+HV$+3H+=HZ(!xH!Hry~~h/G/G$G#O#O#Q#Q2H-. "&!7!7*D,A8" "J "(+s22Z%6777 '+{'='= .0Ex( ( \%%8999 #T%:Y%F J 7>>*-- ?*Q-(( $ 2 23 7 7  ?$%=>>>%)*?	-0	:-N-N 1 1)D(E13J)-Jv&-5h-?Jz*!xH3;binnX>V>V3VJ/0$$Z0000	22%jjC
OO33JsOOOzzaKF	 %jjC
OO33
   """rH   c                8    | j                                          dS )z:
        load vearch engine for standalone vearch
        N)r(   loadrF   s    rA   _loadzVearch._load*  s     	rH   c                4   |st          d          |st          d          t          j                            ||dz             }t          j                            |          st          d           | |||||          }|                                 |S )zLoad the local specified table of standalone vearch.
        Returns:
            Success or failure of loading the local specified table
        zNo metadata path!!!zNo table name!!!r   z$vearch vectorbase table not exist!!!)r   r   r   r   r   )r*   r2   r5   r8   r   r   )	rI   rM   r   r   r   r   r   r   ra   s	            rA   
load_localzVearch.load_local0  s      	42333 	1/000W\\+zI/EFF
w~~j)) 	ECDDDC(#!
 
 
	 	rH   querykc                    | j         t          d          | j                             |          }|                     ||          }|S )z5
        Return docs most similar to query.

        Nembedding_func is None!!!)r=   r*   embed_querysimilarity_search_by_vector)r>   r   r   r   rG   docss         rA   similarity_searchzVearch.similarity_searchP  sL     &8999(44U;;
//
A>>rH   List[float]c                   t          j        |          }| j        rudd|t           j                            |          z                                  dgi|ddgd}| j                            | j        | j	        |          }|d         d         }nWd|t           j                            |          z  dgg dd	d
d|d}| j                            |          }|d         d         }g }|D ]_}	d}
i }| j        r|	d         }	|	D ]#}|dk    r	|	|         }
|dk    r|	|         |d<   #$|
                    t          |
|                     `|S )  The most k similar documents and scores of the specified query.
        Args:
            embeddings: embedding vector of the query.
            k: The k most similar documents to the text query.
            min_score: the score of similar documents to the text query
        Returns:
            The k most similar documents to the specified text query.
            0 is dissimilar, 1 is the most similar.
        sumrv   re   r   rc   rX   r   sizer   hitsr   InnerProduct   r   nprober   r   is_brute_searchrq   topnr   result_itemsrw   _sourcer   rR   rX   )r   r   r   r   r   r   r(   searchr/   r<   r   r   )r>   rM   r   r   r   
query_dataquery_resultresr   itemcontent	meta_dataitem_keys                rA   r   z"Vearch.similarity_search_by_vector`  s    ##9 	2 %5(-	u0E0E(E'M'M'O'O  !:. J  ;--"D$9: L v&v.CC
 "2#(29>>%+@+@#@  #$3AR#P#P J  ;--j99Lq/.1C 	L 	LDGIy 'I   v%%"8nGz))*.x.Ih' * KKg	JJJKKKKrH   List[Tuple[Document, float]]c                H   | j         t          d          | j                             |          }t          j        |          }| j        rudd|t          j                            |          z                                  dgi|g dd}| j	        
                    | j        | j        |          }|d         d         }nWd|t          j                            |          z  dgg d	d
dd|d}| j	        
                    |          }|d         d         }g }	|D ]}
d}i }| j        r|
d         }|
d         }
|
D ]=}|dk    r	|
|         }|dk    r|
|         |d<   #| j        d	k    r|dk    r	|
|         }=>t          ||          |f}|	                    |           |	S )r   Nr   r   rv   r   )rv   rc   rX   r   r   r   r   r   r   r   r   r   rw   _scorer   rc   rX   r   scorer   )r=   r*   r   r   r   r   r   r   r   r(   r   r/   r<   r   r   )r>   r   r   r   rG   r   r   r   r   resultsr   r   r   r   r   tmp_ress                   rA   similarity_search_with_scorez#Vearch.similarity_search_with_score  s    &8999(44U;;
$$9 	2 %5(-	u0E0E(E'M'M'O'O  @@@ J  ;--"D$9: L v&v.CC
 "2#(29>>%+@+@#@  #$3AR#P#P J  ;--j99Lq/.1C02 	$ 	$DGIy 'XI  	 	v%%"8nGz))*.x.Ih'9>>h'&9&9 NEWyIII5QGNN7####rH   r   c                      | j         ||fi |S rE   )r   )r>   r   r   r   s       rA   (_similarity_search_with_relevance_scoresz/Vearch._similarity_search_with_relevance_scores  s!     1t0DDVDDDrH   idsOptional[List[str]]Optional[bool]c                <   d}g }||                                 dk    r|S |D ]_}| j        r'| j                            | j        | j        |          }n| j                            |          }|                    |           `t          d |D                       }|S )aI  Delete the documents which have the specified ids.

        Args:
            ids: The ids of the embedding vectors.
            **kwargs: Other keyword arguments that subclasses might use.
        Returns:
            Optional[bool]: True if deletion is successful.
            False otherwise, None if not implemented.
        Nr   c              3  "   K   | ]
}|d k    V  dS )r   NrQ   )rT   is     rA   	<genexpr>z Vearch.delete.<locals>.<genexpr>	  s&      **Q!q&******rH   )	__len__r   r(   deleter/   r<   del_docr   all)r>   r   r   retr   r   s         rA   r   zVearch.delete  s     #;#++--1,,J 	  	 Cy /k(();T=RTWXXk))#..NN3**'*****
rH   Dict[str, Document]c                J   i }||                                 dk    r|S | j        rdd|ii}| j                            | j        | j        |          }|D ]c}|d         du rd}i }|d         D ]/}	|	d	k    r|d         |	         }|	d
k    r|d         |	         |d<   /0t          ||          ||d         <   dnj|D ]g}
| j                            |
          }|i k    r#d}i }|D ]#}	|	d	k    r	||	         }|	d
k    r||	         |d<   #$t          ||          ||d         <   h|S )zReturn docs according ids.

        Args:
            ids: The ids of the embedding vectors.
        Returns:
            Documents which satisfy the input conditions.
        Nr   r   r   foundFrw   r   rc   rX   r   r   r   )r   r   r(   mget_by_idsr/   r<   r   get_doc_by_id)r>   r   r   r   r   docs_detailrecordr   	meta_infore   ids              rA   getz
Vearch.get  s    (*;#++--1,,N9 $	!E3<0J+11"D$9: K &  '?e++	#I. ! !E"("3E": *,,.4Y.?.F	(+  - *2!(9* * *u&&    "k77;;"$$	( ! !E"-e"4 *,,.9%.@	(+  - /7!(9/ / /E*++ rH   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   rC   )rI   rJ   rK   rL   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   )rI   rJ   rY   r]   rM   r   rZ   r^   r   r   r   r   r   r   r   r   r   r   r   r   )rg   r   rh   ri   r   r   )rb   )rg   r   r   r   rE   )rY   r   rZ   r^   r   r   r   r]   )r   r   )rM   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   rL   )rM   r   r   r   r   r   r   rL   )r   r   r   r   r   r   r   r   )r   )r   r   r   r   r   r   )r   r   r   r   r   r  )__name__
__module____qualname__r;   r+   _DEFAULT_VERSIONrB   propertyrG   classmethodr\   r[   r   r   r`   r   r   DEFAULT_TOPNr   r   r   r   r   r
  rQ   rH   rA   r   r      s\       ,2
 &*-/$4 4 4 4 4l # # # X# 
 &*-/$
 
 
 
 [
4 
 +/%)-/$    [4 e,, %00"
+ + + + +^ ( ( ( ( (Z +/K K K K KZ     &*-/$    [D     & > > > > >F F F F F FV E E E E E $(    < $(5 5 5 5 5 5 5rH   r   )
__future__r   r2   r   r,   typingr   r   r   r   r   r	   r
   r   numpyr   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.vectorstoresr   r(   r  r   rQ   rH   rA   <module>r     s   " " " " " " 				   R R R R R R R R R R R R R R R R R R R R     - - - - - - 0 0 0 0 0 0 3 3 3 3 3 3 MMMn n n n n[ n n n n nrH   