
    dh<                        S SK Jr  S SKrS SKrS SKJrJrJrJr  S SK	r
S SK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
\5      r " S S\5      rg)    )annotationsN)AnyListOptionalTuple)Document)
Embeddings)VectorStore)Self)maximal_marginal_relevancec                  F    \ rS rSrSr     S           SS jjrSrg)VikingDBConfig   a  vikingdb connection config

See the following documentation for details:
https://www.volcengine.com/docs/6459/1167770

Attribute:
    host(str):The access address of the vector database server
        that the client needs to connect to.
    region(str):"cn-shanghai" or "cn-beijing"
    ak(str):Access Key ID, security credentials for accessing
        Volcano Engine services.
    sk(str):Secret Access Key, security credentials for accessing
        Volcano Engine services.
    scheme(str):http or https, defaulting to http.
c                @    Xl         X l        X0l        X@l        XPl        g N)hostregionakskscheme)selfr   r   r   r   r   s         a/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/vikingdb.py__init__VikingDBConfig.__init__#   s     	    )r   r   r   r   r   N)r   r   r   r   http)r   strr   r   r   r   r   r   r   r   returnNone)__name__
__module____qualname____firstlineno____doc__r   __static_attributes__ r   r   r   r      s\    $   	
   
 r   r   c                     \ rS rSrSr    S           SS jjr\SS j5       r S     SS jjrSS jr	  S         SS jjr
 S       SS	 jjr S       SS
 jjr S       SS jjr S       SS jj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rg)$VikingDB2   zvikingdb as a vector store

In order to use this you need to have a database instance.
See the following documentation for details:
https://www.volcengine.com/docs/6459/1167774
Nc                @    SSK JnJn  Xl        X l        SU l        X0l        X@l        XPl	        U" UR                  UR                  UR                  UR                  UR                  5      U l         U R                  R!                  U5      n	Xl        S U l        U R$                  b5  U R                  R)                  U R
                  U R                  5      U l        U(       a  [+        U R$                  U5      (       as  U R                  R-                  U5      n
U
 H(  nU R                  R/                  X+R                  5        M*     U R                  R1                  U5        S U l        S U l        g g g ! [         a    [        S5      ef = f! ["         a    S n	 GNf = f)Nr   )
CollectionVikingDBServicefCould not import volcengine python package. Please install it with `pip install --upgrade volcengine`.LangChainIndex)volcengine.viking_dbr+   r,   ImportErrorembedding_funccollection_name
index_nameconnection_argsindex_paramsdrop_oldr   r   r   r   r   serviceget_collection	Exception
collectionindex	get_index
isinstancelist_indexes
drop_indexdrop_collection)r   embedding_functionr2   r4   r5   r6   kwargsr+   r,   colindexesr;   s               r   r   VikingDB.__init__:   sf   	H 1.*.( &  """"
	,,--o>C 
??&//0D0DdooVDJ
4??J??ll//@G ''9I9IJ !LL((9"DODJ @89  	M 	*  	C	s   E4 3F 4F
FFc                    U R                   $ r   )r1   )r   s    r   
embeddingsVikingDB.embeddingsi   s    """r   c                    SSK JnJn  [	        US   5      n/ nU(       Ga  US   R                  5        GH  u  px[        U[        5      (       a#  UR                  U" XtR                  5      5        M>  [        U[        5      (       a#  UR                  U" XtR                  5      5        Mv  [        U[        5      (       a#  UR                  U" XtR                  5      5        M  [        U[        5      (       a:  [        S U 5       5      (       a#  UR                  U" XtR                   5      5        M  [        U[        5      (       a;  [        S U 5       5      (       a$  UR                  U" XtR"                  5      5        GMM  [        U[$        5      (       a$  UR                  U" XtR&                  5      5        GM  [)        S5      e   UR                  U" SUR&                  5      5        UR                  U" SUR                  S	S
95        UR                  U" SUR*                  US95        U R,                  R/                  U R0                  U5      U l        g ! [         a    [        S5      ef = f)Nr   )Field	FieldTyper-   c              3  @   #    U H  n[        U[        5      v   M     g 7fr   )r=   r   .0items     r   	<genexpr>.VikingDB._create_collection.<locals>.<genexpr>         56;dJtS))e   c              3  @   #    U H  n[        U[        5      v   M     g 7fr   )r=   intrM   s     r   rP   rQ      rR   rS   z>metadatas value is invalidplease change the type of metadatas.textprimary_keyT)is_primary_keyvector)dim)r/   rJ   rK   r0   lenitemsr=   r   appendStringrU   Int64boolBoollistallList_String
List_Int64bytesText
ValueErrorVectorr7   create_collectionr2   r:   )	r   rG   	metadatasrJ   rK   rZ   fieldskeyvalues	            r   _create_collectionVikingDB._create_collectionm   s   	= *Q- 'l002
eS))MM%-=-=">?s++MM%__"=>t,,MM%^^"<=t,, 56;5 2 2 MM%-B-B"CDt,, 56;5 2 2 MM%-A-A"BCu--MM%^^"<=$X ' 3. 	eFINN34eM9+;+;DQReHi&6&6C@A,,889M9MvVK  	M 	s   I I.c           	     >    SSK Jn  SnU" 5       nSnS nU R                  b  U R                  R	                  S5      b  U R                  S   nU R                  R	                  S5      b  U R                  S   nU R                  R	                  S5      b  U R                  S   nU R                  R	                  S	5      b  U R                  S	   nU R
                  R                  U R                  U R                  UUUUS
9U l	        g ! [         a    [        S5      ef = f)Nr   )VectorIndexParamsr-       	cpu_quotavector_indexpartition_byscalar_index)rv   ru   rw   rx   )
r/   rr   r0   r5   getr7   create_indexr2   r3   r;   )r   rr   ru   rv   rw   rx   s         r   _create_indexVikingDB._create_index   s&   	> 	(*(  $$[1= --k:	  $$^4@#00@  $$^4@#00@  $$^4@#00@\\..  OO%%% / 

'  	M 	s   D Dc                    SSK Jn  [        U5      n U R                  R                  U5      n[        U5      S:X  a  [        R                  S5        / $ U R                  c!  U R                  Xb5        U R                  5         / n/ n	[        [        U5      5       H  n
[        [         R"                  " 5       5      nU	R%                  U5        X   UXj   S.nUbH  U
[        U5      :  a9  [        X*   R'                  5       5      nU H  nX*   R)                  U5      X'   M     UR%                  U" U5      5        M     [        U5      n[        SX5       H2  n[+        UU-   U5      nUUU nU R                  R-                  U5        M4     U	$ ! [         a    [        S5      ef = f! [         a3    U Vs/ sH  opR                  R                  U5      PM     Os  snf nn GNf = f)zInsert text data into VikingDB.r   )Datar-   zNothing to insert, skipping.)rV   rW   rY   )r/   r~   r0   rb   r1   embed_documentsNotImplementedErrorembed_queryr[   loggerdebugr:   ro   r{   ranger   uuiduuid4r]   keysry   minupsert_data)r   textsrk   
batch_sizerB   r~   rG   xdatapksr;   rW   fieldnamesnametotal_countiendinsert_datas                      r   	add_textsVikingDB.add_texts   s   	1 U	M,,<<UCJ z?aLL78I??"##J:  3z?+Edjjl+KJJ{#*$+E
 $Y)?Y-2245!D"+"2"6"6t"<EK "KKU$ , $iq+2Aa*nk2Cq+KOO''4	 3
 
Q  	M 	 # 	MFKLe--99!<eLJLJ	Ms(   F F% F"%G"3#GG"!G"c                b    U R                   " SXS.UD6nU VVs/ sH  u  pVUPM	     snn$ s  snnf )5Perform a similarity search against the query string.)queryparamsr&   )similarity_search_with_score)r   r   r   rB   resdoc_s          r   similarity_searchVikingDB.similarity_search   s6     //UeUfU"%&##&&&   +c                d    U R                   R                  U5      nU R                  " SXBS.UD6nU$ )APerform a search on a query string and return results with score.	embeddingr   r&   )r1   r   &similarity_search_with_score_by_vector)r   r   r   rB   r   r   s         r   r   %VikingDB.similarity_search_with_score   sA     ''33E:	99 

28
 
r   c                b    U R                   " SXS.UD6nU VVs/ sH  u  pVUPM	     snn$ s  snnf )r   r   r&   )r   )r   r   r   rB   r   r   r   s          r   similarity_search_by_vector$VikingDB.similarity_search_by_vector  s@     99 

28
 #&&##&&&r   c                   U R                   c  [        R                  S5        / $ SnSnSnSnUb\  UR                  S5      b  US   nUR                  S5      b  US   nUR                  S5      b  US   nUR                  S5      b  US   nU R                  R                  UUUUUS	9n/ n	U H  n
S
U
R                  ;   a  U
R                  R                  S
5        SU
R                  ;   a  U
R                  R                  S5        SnSU
R                  ;   a  U
R                  R                  S5      n[        XR                  S9nXR                  4nU	R                  U5        M     U	$ )r   N!No existing collection to search.
   defaultfilterlimitoutput_fields	partitionr   r   r   r   rW   rY   rt   rV   page_contentmetadata)r:   r   r   ry   r;   search_by_vectorrl   popr   scorer]   )r   r   r   rB   r   r   r   r   r   retrO   r   r   pairs                 r   r   /VikingDB.similarity_search_with_score_by_vector  s^    ??"LL<=I	zz(#/)zz'".wzz/*6 & 7zz+&2";/	jj))' * 
 D+.4;;&)L$#{{v6{{KC$DJJt  
r   c                f    U R                   R                  U5      nU R                  " SUUUUS.UD6$ )>Perform a search and return results that are reordered by MMR.)r   klambda_multr   r&   )r1   r   'max_marginal_relevance_search_by_vector)r   r   r   r   r   rB   r   s          r   max_marginal_relevance_search&VikingDB.max_marginal_relevance_search?  sH     ''33E:	;; 
#	

 
 	
r   c                j   U R                   c  [        R                  S5        / $ SnSnSnSn	Ub\  UR                  S5      b  US   nUR                  S5      b  US   nUR                  S5      b  US   nUR                  S5      b  US   n	U R                  R                  UUUUU	S	9n
/ n/ nU
 H  nS
UR                  ;  d   SUR                  ;  d  SUR                  ;  a  M5  UR                  UR                  R                  S
5      5        UR                  R                  S5        UR                  R                  S5      n[        XR                  S9nUR                  U5        M     [        [        R                  " U5      XUS9n/ nU H   nUS:X  a    U$ UR                  UU   5        M"     U$ )r   Nr   r   r   r   r   r   r   r   rY   rW   rV   r   )r   r   )r:   r   r   ry   r;   r   rl   r]   r   r   r   nparray)r   r   r   r   r   rB   r   r   r   r   r   	documentsordered_result_embeddingsrO   r   r   new_orderingr   r   s                      r   r   0VikingDB.max_marginal_relevance_search_by_vectorQ  s    ??"LL<=I	zz(#/)zz'".wzz/*6 & 7zz+&2";/	jj))' * 
 	$&!D+ 3,%,,T[[__X-FGKKOOM*;;??62L{{KCS!  2HHY!:[
 ABw 
 

9Q<(  
r   c                ~    U R                   c  [        R                  S5        U R                   R                  U5        g )Nr   )r:   r   r   delete_data)r   idsrB   s      r   deleteVikingDB.delete  s-    
 ??"LL<=##C(r   c           	     \    Uc  [        S5      eU " SUUUUUS.UD6n	U	R                  XS9  U	$ )z0Create a collection, indexes it and insert data.zVikingDBConfig does not exists)rA   r2   r4   r5   r6   )r   rk   r&   )r9   r   )
clsr   r   r4   rk   r2   r5   r6   rB   	vector_dbs
             r   
from_textsVikingDB.from_texts  sW     "<== 
(++%
 
	 	%=r   )	r:   r2   r4   r6   r1   r;   r3   r5   r7   )LangChainCollectionNNF)rA   r	   r2   r   r4   Optional[VikingDBConfig]r5   Optional[dict]r6   zOptional[bool]rB   r   )r   r	   r   )rG   r   rk   Optional[List[dict]]r   r   )r   r   )Ni  )
r   	List[str]rk   r   r   rU   rB   r   r   r   )r   r   r   r   rB   r   r   List[Document])r   r   r   r   rB   r   r   List[Tuple[Document, float]])r   List[float]r   r   rB   r   r   r   )r   r   r   r   rB   r   r   r   )   g      ?N)r   r   r   rU   r   floatr   r   rB   r   r   r   )r   r   r   rU   r   r   r   r   rB   r   r   r   )r   zOptional[List[str]]rB   r   r   r   )NNr   NF)r   r   r   r	   r4   r   rk   r   r2   r   r5   r   r6   r`   rB   r   r   r   )r    r!   r"   r#   r$   r   propertyrG   ro   r{   r   r   r   r   r   r   r   r   classmethodr   r%   r&   r   r   r(   r(   2   s     548'+#(-&- - 2	-
 %- !- -^ # # CG*W*W+?*W	*WX
D +/	22 (2 	2
 2 
2n "&'' ' 	'
 
' "&  	
 
&" "&
'
' 
' 	
'
 

' "&-- - 	-
 
&-d  !%

 
 	

 
 
 

*  !%;; ; 	;
 ; ; 
;~ $() ) ) 
	) 
 59*.4'+  2	
 (  %   
 r   r(   )
__future__r   loggingr   typingr   r   r   r   numpyr   langchain_core.documentsr   langchain_core.embeddingsr	   langchain_core.vectorstoresr
   typing_extensionsr   &langchain_community.vectorstores.utilsr   	getLoggerr    r   objectr   r(   r&   r   r   <module>r      sQ    "   - -  - 0 3 " M			8	$V @}{ }r   