Ë
    µŒj <  ã                  óÌ   — d dl mZ d dlZd dlZd dl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 d dlmZ d dlmZ  ej*                  e«      Z G d	„ d
e«      Z G d„ de«      Zy)é    )ÚannotationsN)ÚAnyÚListÚOptionalÚTuple)ÚDocument)Ú
Embeddings)ÚVectorStore)ÚSelf)Úmaximal_marginal_relevancec                  ó:   — e Zd ZdZ	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚVikingDBConfigaA  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                óJ   — || _         || _        || _        || _        || _        y ©N)ÚhostÚregionÚakÚskÚscheme)Úselfr   r   r   r   r   s         ús/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/vikingdb.pyÚ__init__zVikingDBConfig.__init__#   s'   € ð ˆŒ	ØˆŒØˆŒØˆŒØˆ�ó    N)r   r   r   r   Úhttp)r   Ústrr   r   r   r   r   r   r   r   ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r   r   r   r      sW   „ ñð$ ØØØØðàðð ðð ð	ð
 ðð ðð 
ôr   r   c                  ó’  — e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Z	 d	 	 	 	 	 dd„Zdd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Z		 d	 	 	 	 	 	 	 dd„Z
	 d	 	 	 	 	 	 	 dd	„Z	 d	 	 	 	 	 	 	 dd
„Z	 d	 	 	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 dd„Ze	 	 	 	 	 d 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!d„«       Zy)"ÚVikingDBzÁvikingdb 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                ó0  — 	 ddl m}m} || _        || _        d| _        || _        || _        || _	         ||j                  |j                  |j                  |j                  |j                  «      | _        	 | j                  j!                  |«      }	|	| _        d | _        | j$                  �5| j                  j)                  | j
                  | j                  «      | _        |r‰t+        | j$                  |«      rr| j                  j-                  |«      }
|
D ](  }| j                  j/                  ||j                  «       Œ* | j                  j1                  |«       d | _        d | _        y y y # t        $ r t        d«      ‚w xY w# t"        $ r d }	Y �Œw xY w)Nr   )Ú
CollectionÚVikingDBServiceúfCould 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_functionr-   r/   r0   r1   Úkwargsr&   r'   ÚcolÚindexesr6   s               r   r   zVikingDB.__init__:   sq  € ð	ßHð 1ˆÔØ.ˆÔØ*ˆŒØ.ˆÔØ(ˆÔØ ˆŒÙ&Ø× Ñ Ø×"Ñ"Ø×ÑØ×ÑØ×"Ñ"ó
ˆŒð	Ø—,‘,×-Ñ-¨oÓ>ˆCð ˆŒØˆŒ
Ø�?‰?Ð&ØŸ™×/Ñ/°×0DÑ0DÀdÇoÁoÓVˆDŒJáœ
 4§?¡?°JÔ?Ø—l‘l×/Ñ/°Ó@ˆGÛ �Ø—‘×'Ñ'¨¸×9IÑ9IÕJð !à�L‰L×(Ñ(¨Ô9Ø"ˆDŒOØˆD�Jð @ˆ8øô9 ò 	ÜðMóð ð	ûô* ò 	Ø‹Cð	ús   ‚E. Á8F Å.FÆFÆFc                ó   — | j                   S r   )r,   )r   s    r   Ú
embeddingszVikingDB.embeddingsi   s   € à×"Ñ"Ð"r   c                ó’  — 	 ddl m}m} t	        |d   «      }g }|�r~|d   j                  «       D �]g  \  }}t        |t        «      r#|j                   |||j                  «      «       Œ:t        |t        «      r#|j                   |||j                  «      «       Œmt        |t        «      r#|j                   |||j                  «      «       Œ t        |t        «      r5t        d„ |D «       «      r#|j                   |||j                   «      «       Œåt        |t        «      r6t        d„ |D «       «      r$|j                   |||j"                  «      «       �Œ+t        |t$        «      r$|j                   |||j&                  «      «       �Œ_t)        d«      ‚ |j                   |d|j&                  «      «       |j                   |d|j                  d	¬
«      «       |j                   |d|j*                  |¬«      «       | j,                  j/                  | j0                  |«      | _        y # t        $ r t        d«      ‚w xY w)Nr   )ÚFieldÚ	FieldTyper(   c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   )r8   r   ©Ú.0Úitems     r   Ú	<genexpr>z.VikingDB._create_collection.<locals>.<genexpr>‚   ó   è ø€ ð 5Ù6;¨d”J˜t¤S×)±eùó   ‚c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   )r8   ÚintrF   s     r   rI   z.VikingDB._create_collection.<locals>.<genexpr>†   rJ   rK   z>metadatas value is invalidplease change the type of metadatas.ÚtextÚprimary_keyT)Úis_primary_keyÚvector)Údim)r*   rC   rD   r+   ÚlenÚitemsr8   r   ÚappendÚStringrM   ÚInt64ÚboolÚBoolÚlistÚallÚList_StringÚ
List_Int64ÚbytesÚTextÚ
ValueErrorÚVectorr2   Úcreate_collectionr-   r5   )	r   rA   Ú	metadatasrC   rD   rR   ÚfieldsÚkeyÚvalues	            r   Ú_create_collectionzVikingDB._create_collectionm   s×  € ð	ß=ô �*˜Q‘-Ó ˆØˆÚØ'¨™l×0Ñ0×2‘
��Uä˜e¤SÔ)Ø—M‘M¡%¨¨Y×-=Ñ-=Ó">Õ?Ü ¤sÔ+Ø—M‘M¡%¨¨Y¯_©_Ó"=Õ>Ü ¤tÔ,Ø—M‘M¡%¨¨Y¯^©^Ó"<Õ=Ü ¤tÔ,´ñ 5Ù6;ó5ô 2ð —M‘M¡%¨¨Y×-BÑ-BÓ"CÕDÜ ¤tÔ,´ñ 5Ù6;ó5ô 2ð —M‘M¡%¨¨Y×-AÑ-AÓ"BÖCÜ ¤uÔ-Ø—M‘M¡%¨¨Y¯^©^Ó"<Ö=ä$ØXóð ð' 3ð. 	�‰‘e˜F I§N¡NÓ3Ô4à�‰‘e˜M¨9×+;Ñ+;ÈDÔQÔRà�‰‘e˜H i×&6Ñ&6¸CÔ@ÔAàŸ,™,×8Ñ8¸×9MÑ9MÈvÓVˆ�øôK ò 	ÜðMóð ð	ús   ‚H1 È1Ic                ó8  — 	 ddl m} d} |«       }d}d }| j                  �¨| j                  j	                  d«      �| j                  d   }| j                  j	                  d«      �| j                  d   }| j                  j	                  d«      �| j                  d   }| j                  j	                  d	«      �| j                  d	   }| j
                  j                  | j                  | j                  ||||¬
«      | _	        y # t        $ r t        d«      ‚w xY w)Nr   )ÚVectorIndexParamsr(   é   Ú Ú	cpu_quotaÚvector_indexÚpartition_byÚscalar_index)rm   rl   rn   ro   )
r*   ri   r+   r0   Úgetr2   Úcreate_indexr-   r.   r6   )r   ri   rl   rm   rn   ro   s         r   Ú_create_indexzVikingDB._create_index™   s&  € ð	Ý>ð ˆ	Ù(Ó*ˆØˆØˆØ×ÑÐ(Ø× Ñ ×$Ñ$ [Ó1Ð=Ø ×-Ñ-¨kÑ:�	Ø× Ñ ×$Ñ$ ^Ó4Ð@Ø#×0Ñ0°Ñ@�Ø× Ñ ×$Ñ$ ^Ó4Ð@Ø#×0Ñ0°Ñ@�Ø× Ñ ×$Ñ$ ^Ó4Ð@Ø#×0Ñ0°Ñ@�à—\‘\×.Ñ.Ø× Ñ Ø�O‰OØ%ØØ%Ø%ð /ó 
ˆ�
øô' ò 	ÜðMóð ð	ús   ‚D ÄDc                ó¼  — 	 ddl m} t        |«      }	 | j                  j                  |«      }t        |«      dk(  rt        j                  d«       g S | j                  €"| j                  ||«       | j                  «        g }g }	t        t        |«      «      D ]�  }
t        t!        j"                  «       «      }|	j%                  |«       ||
   |||
   dœ}|�H|
t        |«      k  r:t        ||
   j'                  «       «      }|D ]  }||
   j)                  |«      ||<   Œ |j%                   ||«      «       ŒŸ t        |«      }t        d||«      D ]1  }t+        ||z   |«      }||| }| j                  j-                  |«       Œ3 |	S # t        $ r t        d«      ‚w xY w# t        $ r2 |D �cg c]  }| j                  j                  |«      ‘Œ nc c}w }}Y �Œ«w xY w)zInsert text data into VikingDB.r   )ÚDatar(   zNothing to insert, skipping.)rN   rO   rQ   )r*   rt   r+   rZ   r,   Úembed_documentsÚNotImplementedErrorÚembed_queryrS   ÚloggerÚdebugr5   rg   rr   Úranger   ÚuuidÚuuid4rU   Úkeysrp   ÚminÚupsert_data)r   Útextsrc   Ú
batch_sizer=   rt   rA   ÚxÚdataÚpksr6   rO   ÚfieldÚnamesÚnameÚtotal_countÚiÚendÚinsert_datas                      r   Ú	add_textszVikingDB.add_texts¸   sÚ  € ð	Ý1ô �U“ˆð	MØ×,Ñ,×<Ñ<¸UÓCˆJô ˆz‹?˜aÒÜ�L‰LÐ7Ô8ØˆIØ�?‰?Ð"Ø×#Ñ# J°	Ô:Ø×ÑÔ ð ˆØˆÜœ3˜z›?Ö+ˆEÜœdŸj™j›lÓ+ˆKØ�J‰J�{Ô#à˜e™Ø*Ø$ UÑ+ñˆEð
 Ð$¨´°Y³Ò)?Ü˜Y uÑ-×2Ñ2Ó4Ó5�Û!�DØ"+¨EÑ"2×"6Ñ"6°tÓ"<�E˜$’Kð "à�K‰K™˜U›Õ$ð ,ô ˜$“iˆÜ�q˜+ zÖ2ˆAÜ�a˜*‘n kÓ2ˆCØ˜q ˜+ˆKà�O‰O×'Ñ'¨Õ4ð	 3ð
 ˆ
øôQ ò 	ÜðMóð ð	ûô #ò 	MÙFKÓLÁeÀ˜$×-Ñ-×9Ñ9¸!Õ<ÁeùÒLˆJÓLð	Mús(   ‚F ”F  ÆFÆ GÆ-"GÇGÇGc                ób   —  | j                   d||dœ|¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )ú5Perform a similarity search against the query string.)ÚqueryÚparamsr"   )Úsimilarity_search_with_score)r   r�   r�   r=   ÚresÚdocÚ_s          r   Úsimilarity_searchzVikingDB.similarity_searchì   s<   € ð 0ˆd×/Ñ/ÐU°eÀFÑUÈfÑUˆÙ"%Ô&¡#™˜˜Q’ #Ò&Ð&ùÓ&ó   ›+c                óf   — | j                   j                  |«      } | j                  d||dœ|¤Ž}|S )úAPerform a search on a query string and return results with score.©Ú	embeddingr�   r"   )r,   rw   Ú&similarity_search_with_score_by_vector)r   r�   r�   r=   rš   r’   s         r   r‘   z%VikingDB.similarity_search_with_scoreö   sE   € ð ×'Ñ'×3Ñ3°EÓ:ˆ	à9ˆd×9Ñ9ð 
Ø¨ñ
Ø28ñ
ˆð ˆ
r   c                ób   —  | j                   d||dœ|¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )rŽ   r™   r"   )r›   )r   rš   r�   r=   r’   r“   r”   s          r   Úsimilarity_search_by_vectorz$VikingDB.similarity_search_by_vector  sF   € ð :ˆd×9Ñ9ð 
Ø¨ñ
Ø28ñ
ˆñ #&Ô&¡#™˜˜Q’ #Ò&Ð&ùÓ&r–   c                óÈ  — | j                   €t        j                  d«       g S d}d}d}d}|�X|j                  d«      �|d   }|j                  d«      �|d   }|j                  d«      �|d   }|j                  d«      �|d   }| j                  j                  |||||¬	«      }g }	|D ]µ  }
d
|
j                  v r|
j                  j                  d
«       d|
j                  v r|
j                  j                  d«       d}d|
j                  v r|
j                  j                  d«      }t        ||
j                  ¬«      }||
j                  f}|	j                  |«       Œ· |	S )r˜   Nú!No existing collection to search.é
   ÚdefaultÚfilterÚlimitÚoutput_fieldsÚ	partition©r¢   r£   r¤   r¥   rO   rQ   rk   rN   ©Úpage_contentÚmetadata)r5   rx   ry   rp   r6   Úsearch_by_vectorrd   Úpopr   ÚscorerU   )r   rš   r�   r=   r¢   r£   r¤   r¥   r’   ÚretrH   r¨   r“   Úpairs                 r   r›   z/VikingDB.similarity_search_with_score_by_vector  sb  € ð �?‰?Ð"Ü�L‰LÐ<Ô=ØˆIàˆØˆØˆØˆ	ØÐØ�z‰z˜(Ó#Ð/Ø Ñ)�Ø�z‰z˜'Ó"Ð.Ø˜w™�Ø�z‰z˜/Ó*Ð6Ø & Ñ 7�Ø�z‰z˜+Ó&Ð2Ø" ;Ñ/�	à�j‰j×)Ñ)ØØØØ'Øð *ó 
ˆð ˆÛˆDØ §¡Ñ+Ø—‘—‘ Ô.Ø˜4Ÿ;™;Ñ&Ø—‘—‘ Ô)ØˆLØ˜Ÿ™Ñ$Ø#Ÿ{™{Ÿ™¨vÓ6�Ü¨¸t¿{¹{ÔKˆCØ˜Ÿ™Ð$ˆDØ�J‰J�tÕð ð ˆ
r   c                óf   — | j                   j                  |«      } | j                  d||||dœ|¤ŽS )ú>Perform a search and return results that are reordered by MMR.)rš   ÚkÚlambda_multr�   r"   )r,   rw   Ú'max_marginal_relevance_search_by_vector)r   r�   r±   r²   r�   r=   rš   s          r   Úmax_marginal_relevance_searchz&VikingDB.max_marginal_relevance_search?  sJ   € ð ×'Ñ'×3Ñ3°EÓ:ˆ	Ø;ˆt×;Ñ;ð 
ØØØ#Øñ	
ð
 ñ
ð 	
r   c                óZ  — | j                   €t        j                  d«       g S d}d}d}d}	|�X|j                  d«      �|d   }|j                  d«      �|d   }|j                  d«      �|d   }|j                  d«      �|d   }	| j                  j                  |||||	¬	«      }
g }g }|
D ]µ  }d
|j                  vsd|j                  vsd|j                  vrŒ.|j                  |j                  j                  d
«      «       |j                  j                  d«       |j                  j                  d«      }t        ||j                  ¬«      }|j                  |«       Œ· t        t        j                  |«      |||¬«      }g }|D ]  }|dk(  r |S |j                  ||   «       Œ  |S )r°   NrŸ   r    r¡   r¢   r£   r¤   r¥   r¦   rQ   rO   rN   r§   )r±   r²   éÿÿÿÿ)r5   rx   ry   rp   r6   rª   rd   rU   r«   r   r   ÚnpÚarray)r   rš   r±   r²   r�   r=   r¢   r£   r¤   r¥   r’   Ú	documentsÚordered_result_embeddingsrH   r¨   r“   Únew_orderingr­   r‚   s                      r   r³   z0VikingDB.max_marginal_relevance_search_by_vectorQ  s¸  € ð �?‰?Ð"Ü�L‰LÐ<Ô=ØˆIØˆØˆØˆØˆ	ØÐØ�z‰z˜(Ó#Ð/Ø Ñ)�Ø�z‰z˜'Ó"Ð.Ø˜w™�Ø�z‰z˜/Ó*Ð6Ø & Ñ 7�Ø�z‰z˜+Ó&Ð2Ø" ;Ñ/�	à�j‰j×)Ñ)ØØØØ'Øð *ó 
ˆð ˆ	Ø$&Ð!ÛˆDà §¡Ñ+Ø ¨¯©Ñ3Ø §¡Ñ,àØ%×,Ñ,¨T¯[©[¯_©_¸XÓ-FÔGØ�K‰K�O‰O˜MÔ*ØŸ;™;Ÿ?™?¨6Ó2ˆLÜ¨¸t¿{¹{ÔKˆCØ×Ñ˜SÕ!ð ô 2Ü�H‰H�YÓÐ!:¸aÈ[ô
ˆð ˆÛˆAà�BŠwØð ˆ
ð —
‘
˜9 Q™<Õ(ð ð ˆ
r   c                ó|   — | j                   €t        j                  d«       | j                   j                  |«       y )NrŸ   )r5   rx   ry   Údelete_data)r   Úidsr=   s      r   ÚdeletezVikingDB.deleteŽ  s-   € ð
 �?‰?Ð"Ü�L‰LÐ<Ô=Ø�‰×#Ñ# CÕ(r   c           	     ób   — |€t        d«      ‚ | d|||||dœ|¤Ž}	|	j                  ||¬«       |	S )z0Create a collection, indexes it and insert data.zVikingDBConfig does not exists)r<   r-   r/   r0   r1   )r€   rc   r"   )r4   rŒ   )
Úclsr€   rš   r/   rc   r-   r0   r1   r=   Ú	vector_dbs
             r   Ú
from_textszVikingDB.from_texts—  sY   € ð Ð"ÜÐ<Ó=Ð=Ùð 
Ø(Ø+Ø+Ø%Øñ
ð ñ
ˆ	ð 	×Ñ %°9ÐÔ=ØÐr   )ÚLangChainCollectionNNF)r<   r	   r-   r   r/   úOptional[VikingDBConfig]r0   úOptional[dict]r1   zOptional[bool]r=   r   )r   r	   r   )rA   r   rc   úOptional[List[dict]]r   r   )r   r   )Niè  )
r€   ú	List[str]rc   rÇ   r�   rM   r=   r   r   rÈ   )r�   r   r�   rÆ   r=   r   r   úList[Document])r�   r   r�   rÆ   r=   r   r   úList[Tuple[Document, float]])rš   úList[float]r�   rÆ   r=   r   r   rÉ   )rš   rË   r�   rÆ   r=   r   r   rÊ   )é   g      à?N)r�   r   r±   rM   r²   Úfloatr�   rÆ   r=   r   r   rÉ   )rš   rË   r±   rM   r²   rÍ   r�   rÆ   r=   r   r   rÉ   )r¾   zOptional[List[str]]r=   r   r   r   )NNrÄ   NF)r€   rÈ   rš   r	   r/   rÅ   rc   rÇ   r-   r   r0   rÆ   r1   rX   r=   r   r   r   )r   r   r    r!   r   ÚpropertyrA   rg   rr   rŒ   r•   r‘   r�   r›   r´   r³   r¿   ÚclassmethodrÃ   r"   r   r   r$   r$   2   sÏ  „ ñð  5Ø48Ø'+Ø#(ð-à&ð-ð ð-ð 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   rx   Úobjectr   r$   r"   r   r   Ú<module>rÛ      sS   ðÝ "ã Û ß -Ó -ã Ý -Ý 0Ý 3Ý "å Mà	ˆ×	Ñ	˜8Ó	$€ô�Vô ô@}ˆ{õ }r   