Ë
    µŒj˜3  ã                  ó®   — d dl m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
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y)
é    )ÚannotationsN)ÚAnyÚIterableÚListÚOptionalÚTuple)ÚDocument)Ú
Embeddings)ÚVectorStore)Úmaximal_marginal_relevancec                  ó¤  — e Zd ZdZddddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Ze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
ddddgdddf
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z	 d	 	 	 	 	 d d„Zy)!ÚDingoax  `Dingo` vector store.

    To use, you should have the ``dingodb`` python package installed.

    Example:
        .. code-block:: python

            from langchain_community.vectorstores import Dingo
            from langchain_community.embeddings.openai import OpenAIEmbeddings

            embeddings = OpenAIEmbeddings()
            dingo = Dingo(embeddings, "text")
    Ni   ÚrootÚ123123F)ÚclientÚ
index_nameÚ	dimensionÚhostÚuserÚpasswordÚself_idc               ó´  — 	 ddl }
|�|ndg}|�|}n	 |
j                  |||«      }|| _        || _        |�^||j                  «       vrL|j                  «       |j                  «       vr,|	du r|j                  ||d¬«       n|j                  ||¬	«       || _	        || _
        y# t        $ r t        d«      ‚w xY w# t        $ r}t        d|› �«      ‚d}~ww xY w)
zInitialize with Dingo client.r   NzSCould not import dingo python package. Please install it with `pip install dingodb.ú172.20.31.10:13000úDingo failed to connect: TF©r   Úauto_id©r   )ÚdingodbÚImportErrorÚDingoDBÚ
ValueErrorÚ	_text_keyÚ_clientÚ	get_indexÚupperÚcreate_indexÚ_index_nameÚ
_embedding)ÚselfÚ	embeddingÚtext_keyr   r   r   r   r   r   r   r   Údingo_clientÚes                úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/dingo.pyÚ__init__zDingo.__init__    s  € ð	Ûð Ð'‰tÐ.BÐ-Cˆð ÐØ!‰LðBà&Ÿ™¨t°X¸tÓD�ð "ˆŒØ#ˆŒð Ð"Ø ,×"8Ñ"8Ó":Ñ:Ø× Ñ Ó"¨,×*@Ñ*@Ó*BÑBà˜$‰Ø×)Ñ)Ø¨)¸Uð *õ ð ×)Ñ)¨*À	Ð)ÔJà%ˆÔØ#ˆ�øôE ò 	Üð?óð ð	ûô ò BÜ Ð#<¸Q¸CÐ!@ÓAÐAûðBús"   ‚B# “B; Â#B8Â;	CÃCÃCc                ó   — | j                   S ©N)r(   )r)   s    r.   Ú
embeddingszDingo.embeddingsT   s   € à�‰Ðó    Útextéô  c           	     ó  — |xs8 |D �cg c],  }t        t        j                  «       j                  «      dd ‘Œ. c}}g }t	        |«      }| j
                  j                  |«      }	t        |«      D ].  \  }
}|r||
   ni }||| j                  <   |j                  |«       Œ0 t        dt        t	        |«      «      |«      D ]E  }
|
|z   }| j                  j                  | j                  ||
| |	|
| ||
| «      }|rŒ<t        d«      ‚ |S c c}w )a‚  Run more texts through the embeddings and add to the vectorstore.

        Args:
            texts: Iterable of strings to add to the vectorstore.
            metadatas: Optional list of metadatas associated with the texts.
            ids: Optional list of ids to associate with the texts.

        Returns:
            List of ids from adding the texts into the vectorstore.

        Né   r   úvector add fail)ÚstrÚuuidÚuuid4ÚintÚlistr(   Úembed_documentsÚ	enumerater"   ÚappendÚrangeÚlenr#   Ú
vector_addr'   Ú	Exception)r)   ÚtextsÚ	metadatasÚidsr+   Ú
batch_sizeÚkwargsÚ_Úmetadatas_listÚembedsÚir4   ÚmetadataÚjÚadd_ress                  r.   Ú	add_textszDingo.add_textsX   s  € ð, Ò@¹%Ó@¹%°Q”cœ$Ÿ*™*›,×*Ñ*Ó+¨C¨RÒ0¸%Ñ@ˆØˆÜ�U“ˆØ—‘×0Ñ0°Ó7ˆÜ  Ö'‰GˆAˆtÙ'0�y ’|°bˆHØ'+ˆH�T—^‘^Ñ$Ø×!Ñ! (Õ+ð (ô
 �qœ#œd 5›kÓ*¨JÖ7ˆAØ�J‘ˆAØ—l‘l×-Ñ-Ø× Ñ  .°°1Ð"5°v¸aÀ°{ÀCÈÈ!ÀHóˆGò ÜÐ 1Ó2Ð2ð 8ð ˆ
ùò# As   ‰1D
c                ód   —  | j                   |f||dœ|¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )áv  Return Dingo documents most similar to query, along with scores.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            search_params: Dictionary of argument(s) to filter on metadata

        Returns:
            List of Documents most similar to the query and score for each
        )ÚkÚsearch_params)Úsimilarity_search_with_score)	r)   ÚqueryrT   rU   ÚtimeoutrI   Údocs_and_scoresÚdocrJ   s	            r.   Úsimilarity_searchzDingo.similarity_search�   sI   € ð$ <˜$×;Ñ;Øð
Ø mñ
Ø7=ñ
ˆñ #2Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   œ,c                óê  — g }| j                   j                  |«      }| j                  j                  | j                  |||¬«      }|sg S |d   d   D ]�  }	|	d   }
d|v r&|j                  d«      �|
|j                  d«      kD  rŒ2|	d   }|	d   }|| j                     d   d   d	   }|||
d
œ}|j                  «       D ]  }||   d   d   d	   ||<   Œ |j                  t        ||¬«      |
f«       ŒŸ |S )rS   )ÚxqÚtop_krU   r   ÚvectorWithDistancesÚdistanceÚscore_thresholdÚ
scalarDataÚidÚfieldsÚdata)rc   r4   Úscore©Úpage_contentrN   )
r(   Úembed_queryr#   Úvector_searchr'   Úgetr"   Úkeysr@   r	   )r)   rW   rT   rU   rX   rI   ÚdocsÚ	query_objÚresultsÚresrf   rF   rc   r4   rN   Úmeta_keys                   r.   rV   z"Dingo.similarity_search_with_score˜   s#  € ð$ ˆØ—O‘O×/Ñ/°Ó6ˆ	Ø—,‘,×,Ñ,Ø×Ñ °!À=ð -ó 
ˆñ ØˆIà˜1‘:Ð3Ô4ˆCØ˜
‘OˆEà! VÑ+Ø—J‘JÐ0Ó1Ð=à˜6Ÿ:™:Ð&7Ó8Ò8ØØ˜LÑ)ˆIØ�T‘ˆBØ˜TŸ^™^Ñ,¨XÑ6°qÑ9¸&ÑAˆDØ ¨$¸Ñ?ˆHØ%ŸN™NÖ,�Ø%.¨xÑ%8¸Ñ%BÀ1Ñ%EÀfÑ%M�˜Ò"ð -à�K‰Kœ¨t¸hÔGÈÐOÕPð 5ð  ˆr3   c                ó6  — | j                   j                  | j                  |g||¬«      }t        t	        j
                  |gt        j                  ¬«      |d   d   D �cg c]
  }|d   d   ‘Œ c}||¬«      }	g }
|	D ]^  }i }|d   d   |   d   j                  «       D ]*  \  }}|j                  t        |«      |d	   d   d
   i«       Œ, |
j                  |«       Œ` |
D �cg c](  }t        |j                  | j                  «      |¬«      ‘Œ* c}S c c}w c c}w )aó  Return docs selected using the maximal marginal relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch to pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
        Returns:
            List of Documents selected by maximal marginal relevance.
        )rU   r^   )Údtyper   r_   ÚvectorÚfloatValues)rT   Úlambda_multrb   rd   re   rg   )r#   rj   r'   r   ÚnpÚarrayÚfloat32ÚitemsÚupdater9   r@   r	   Úpopr"   )r)   r*   rT   Úfetch_krv   rU   rI   ro   ÚitemÚmmr_selectedÚselectedrM   Ú	meta_dataÚvrN   s                  r.   Ú'max_marginal_relevance_search_by_vectorz-Dingo.max_marginal_relevance_search_by_vectorÅ   s8  € ð2 —,‘,×,Ñ,Ø×Ñ˜y˜k¸Èað -ó 
ˆô 2Ü�H‰H�i�[¬¯
©
Ô3ð $ A™JÐ'<Ò=óá=�Dð �X‘˜}Ó-Ø=ñð Ø#ô
ˆð ˆÛˆAØˆIØ ™
Ð#8Ñ9¸!Ñ<¸\ÑJ×PÑPÖR‘��1Ø× Ñ ¤# a£&¨!¨H©+°a©.¸Ñ*@Ð!AÕBð Sà�O‰O˜IÕ&ð	 ñ %ó
á$�ô  (§,¡,¨t¯~©~Ó">ÈÖRØ$ñ
ð 	
ùòùò
s   ÁD
Ã!-Dc                ób   — | j                   j                  |«      }| j                  |||||«      S )aê  Return docs selected using the maximal marginal relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch to pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
        Returns:
            List of Documents selected by maximal marginal relevance.
        )r(   ri   rƒ   )r)   rW   rT   r}   rv   rU   rI   r*   s           r.   Úmax_marginal_relevance_searchz#Dingo.max_marginal_relevance_searchö   s6   € ð2 —O‘O×/Ñ/°Ó6ˆ	Ø×;Ñ;Ø�q˜' ;°ó
ð 	
r3   r   c           	     óÖ  — 	 ddl }|�|}n	 |j                  |
||	«      }|�\|j	                  d«      du rI|�Ž||j                  «       vr||j                  «       |j                  «       vr\|j                  ||d¬«       nG|�E||j                  «       vr3|j                  «       |j                  «       vr|j                  ||¬	«       |xs8 |D �cg c],  }t        t        j                  «       j                  «      dd
 ‘Œ. c}}g }t        |«      }|j                  |«      }t        |«      D ]$  \  }}|r||   ni }|||<   |j                  |«       Œ& t!        dt#        t        |«      «      |«      D ]1  }||z   }|j%                  |||| ||| ||| «      }|rŒ(t'        d«      ‚  | ||||¬«      S # t        $ r t        d«      ‚w xY w# t        $ r}t        d|› �«      ‚d}~ww xY wc c}w )a=  Construct Dingo wrapper from raw documents.

                This is a user friendly interface that:
                    1. Embeds documents.
                    2. Adds the documents to a provided Dingo index

                This is intended to be a quick way to get started.

                Example:
                    .. code-block:: python

                        from langchain_community.vectorstores import Dingo
                        from langchain_community.embeddings import OpenAIEmbeddings
                        import dingodb
        sss
                        embeddings = OpenAIEmbeddings()
                        dingo = Dingo.from_texts(
                            texts,
                            embeddings,
                            index_name="langchain-demo"
                        )
        r   NzTCould not import dingo python package. Please install it with `pip install dingodb`.r   r   TFr   r   r7   r8   )r   r   )r   r   r    r!   rk   r$   r%   r&   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   )ÚclsrE   r*   rF   rG   r+   r   r   r   r   r   r   rH   rI   r   r,   r-   rJ   rK   rL   rM   r4   rN   rO   rP   s                            r.   Ú
from_textszDingo.from_texts  s)  € ðN	Ûð ÐØ!‰LðBà&Ÿ™¨t°X¸tÓD�ð Ð &§*¡*¨YÓ"7¸4Ñ"?àÐ&Ø l×&<Ñ&<Ó&>Ñ>Ø×$Ñ$Ó&¨l×.DÑ.DÓ.FÑFà×)Ñ)Ø¨)¸Uð *õ ð
 Ð&Ø l×&<Ñ&<Ó&>Ñ>Ø×$Ñ$Ó&¨l×.DÑ.DÓ.FÑFà×)Ñ)¨*À	Ð)ÔJð Ò@¹%Ó@¹%°Q”cœ$Ÿ*™*›,×*Ñ*Ó+¨C¨RÒ0¸%Ñ@ˆØˆÜ�U“ˆØ×*Ñ*¨5Ó1ˆÜ  Ö'‰GˆAˆtÙ'0�y ’|°bˆHØ!%ˆH�XÑØ×!Ñ! (Õ+ð (ô �qœ#œd 5›kÓ*¨JÖ7ˆAØ�J‘ˆAØ"×-Ñ-Ø˜N¨1¨QÐ/°¸¸!°¸cÀ!ÀA¸hóˆGò ÜÐ 1Ó2Ð2ð 8ñ �9˜h¨|È
ÔSÐSøôe ò 	Üð@óð ð	ûô ò BÜ Ð#<¸Q¸CÐ!@ÓAÐAûðBüò* As(   ‚F/ ŒG Ã1G&Æ/GÇ	G#ÇGÇG#c                ój   — |€t        d«      ‚| j                  j                  | j                  |¬«      S )z^Delete by vector IDs or filter.
        Args:
            ids: List of ids to delete.
        zNo ids provided to delete.)rG   )r!   r#   Úvector_deleter'   )r)   rG   rI   s      r.   ÚdeletezDingo.deleteq  s5   € ð ˆ;ÜÐ9Ó:Ð:à�|‰|×)Ñ)¨$×*:Ñ*:ÀÐ)ÓDÐDr3   )r*   r
   r+   r9   r   r   r   úOptional[str]r   r<   r   úOptional[List[str]]r   r9   r   r9   r   Úbool)ÚreturnzOptional[Embeddings])NNr4   r5   )rE   zIterable[str]rF   úOptional[List[dict]]rG   r�   r+   r9   rH   r<   rI   r   r�   ú	List[str])é   NN)rW   r9   rT   r<   rU   úOptional[dict]rX   úOptional[int]rI   r   r�   úList[Document])rW   r9   rT   r<   rU   r“   rX   r”   rI   r   r�   zList[Tuple[Document, float]])r’   é   g      à?N)r*   zList[float]rT   r<   r}   r<   rv   ÚfloatrU   r“   rI   r   r�   r•   )rW   r9   rT   r<   r}   r<   rv   r—   rU   r“   rI   r   r�   r•   )rE   r‘   r*   r
   rF   r�   rG   r�   r+   r9   r   rŒ   r   r<   r   r   r   r‘   r   r9   r   r9   rH   r<   rI   r   r�   r   r1   )rG   r�   rI   r   r�   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   Úpropertyr2   rQ   r[   rV   rƒ   r…   Úclassmethodrˆ   r‹   © r3   r.   r   r      s8  „ ñð& Ø$(ØØ$(ØØ Øñ2$àð2$ð ð2$ð
 ð2$ð "ð2$ð ð2$ð "ð2$ð ð2$ð ð2$ð ó2$ðh òó ðð +/Ø#'ØØð'àð'ð (ð'ð !ð	'ð
 ð'ð ð'ð ð'ð 
ó'ðX Ø(,Ø!%ð3àð3ð ð3ð &ð	3ð
 ð3ð ð3ð 
ó3ð4 Ø(,Ø!%ð+àð+ð ð+ð &ð	+ð
 ð+ð ð+ð 
&ó+ð` ØØ Ø(,ð/
àð/
ð ð/
ð ð	/
ð
 ð/
ð &ð/
ð ð/
ð 
ó/
ðh ØØ Ø(,ð
àð
ð ð
ð ð	
ð
 ð
ð &ð
ð ð
ð 
ó
ð< ð
 +/Ø#'ØØ$(ØØØ/Ð0ØØ ØðZTàðZTð ðZTð (ð	ZTð
 !ðZTð ðZTð "ðZTð ðZTð ðZTð ðZTð ðZTð ðZTð ðZTð ðZTð 
òZTó ðZTð| $(ðEà ðEð ðEð 
ô	Er3   r   )Ú
__future__r   Úloggingr:   Útypingr   r   r   r   r   Únumpyrw   Úlangchain_core.documentsr	   Úlangchain_core.embeddingsr
   Úlangchain_core.vectorstoresr   Ú&langchain_community.vectorstores.utilsr   Ú	getLoggerr˜   Úloggerr   rž   r3   r.   Ú<module>r©      sE   ðÝ "ã Û ß 7Õ 7ã Ý -Ý 0Ý 3å Mà	ˆ×	Ñ	˜8Ó	$€ômEˆKõ mEr3   