§
    šŠtj˜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dS )
é    )Ú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	 	 	 dAdBd/„Z	 	 	 dAdCd1„Z		 	 	 	 dDdEd8„Z
	 	 	 	 dDdFd9„Zeddddddd:gdddf
dGd;„¦   «         Z	 dHdId<„ZdS )JÚ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_idÚ	embeddingr
   Útext_keyÚstrr   r   r   úOptional[str]r   Úintr   úOptional[List[str]]r   r   r   Úboolc               óþ  — 	 ddl }
n# t          $ r t          d¦  «        ‚w xY w|�|ndg}|�|}n=	 |
                     |||¦  «        }n$# t          $ r}t          d|› �¦  «        ‚d}~ww xY w|| _        || _        |�r||                     ¦   «         vr\|                     ¦   «         |                     ¦   «         vr4|	du r|                     ||d¬¦  «         n|                     ||¬	¦  «         || _	        || _
        dS )
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)Úselfr   r   r   r   r   r   r   r   r   r%   Údingo_clientÚes                úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/dingo.pyÚ__init__zDingo.__init__    sp  € ð	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ýð?ñô ð ð	øøøð Ð'ˆtˆtÐ.BÐ-Cˆð ÐØ!ˆLˆLðBà&Ÿš¨t°X¸tÑDÔD��øÝð Bð Bð BÝ Ð!@¸QÐ!@Ð!@ÑAÔAÐAøøøøðBøøøð "ˆŒØ#ˆŒð Ð"Ø ,×"8Ò"8Ñ":Ô":Ð:Ð:Ø× Ò Ñ"Ô"¨,×*@Ò*@Ñ*BÔ*BÐBÐBà˜$ˆˆØ×)Ò)Ø¨)¸Uð *ñ ô ð ð ð ×)Ò)¨*À	Ð)ÑJÔJÐJà%ˆÔØ#ˆŒˆˆs   ‚ ‡!±A	 Á	
A*ÁA%Á%A*ÚreturnúOptional[Embeddings]c                ó   — | j         S ©N)r/   )r0   s    r3   Ú
embeddingszDingo.embeddingsT   s
   € àŒÐó    Útextéô  ÚtextsúIterable[str]Ú	metadatasúOptional[List[dict]]ÚidsÚ
batch_sizeÚkwargsú	List[str]c           	     óô  — |pd„ |D ¦   «         }g }t          |¦  «        }| j                             |¦  «        }t          |¦  «        D ]0\  }	}
|r||	         ni }|
|| j        <   |                     |¦  «         Œ1t          dt          t          |¦  «        ¦  «        |¦  «        D ]R}	|	|z   }| j         	                    | j
        ||	|…         ||	|…         ||	|…         ¦  «        }|st          d¦  «        ‚ŒS|S )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.

        c                óh   — g | ]/}t          t          j        ¦   «         j        ¦  «        d d…         ‘Œ0S ©Né   ©r   ÚuuidÚuuid4r   ©Ú.0Ú_s     r3   ú
<listcomp>z#Dingo.add_texts.<locals>.<listcomp>n   ó2   € Ð@Ð@Ð@°Q•c�$œ*™,œ,Ô*Ñ+Ô+¨C¨R¨CÔ0Ð@Ð@Ð@r:   r   úvector add fail)Úlistr/   Úembed_documentsÚ	enumerater)   ÚappendÚrangeÚlenr*   Ú
vector_addr.   Ú	Exception)r0   r=   r?   rA   r   rB   rC   Úmetadatas_listÚembedsÚir;   ÚmetadataÚjÚadd_ress                 r3   Ú	add_textszDingo.add_textsX   s%  € ð, Ð@Ð@Ð@¸%Ð@Ñ@Ô@ˆØˆÝ�U‘”ˆØ”×0Ò0°Ñ7Ô7ˆÝ  Ñ'Ô'ð 	,ð 	,‰GˆAˆtØ'0Ð8�y ”|�|°bˆHØ'+ˆH�T”^Ñ$Ø×!Ò! (Ñ+Ô+Ð+Ð+å�q�#�d 5™kœkÑ*Ô*¨JÑ7Ô7ð 	3ð 	3ˆAØ�J‘ˆAØ”l×-Ò-ØÔ  .°°1°Ô"5°v¸aÀ¸c´{ÀCÈÈ!ÈÄHñô ˆGð ð 3ÝÐ 1Ñ2Ô2Ð2ð3ð ˆ
r:   é   ÚqueryÚkÚsearch_paramsúOptional[dict]ÚtimeoutúOptional[int]úList[Document]c                ó<   —  | j         |f||dœ|¤Ž}d„ |D ¦   «         S )á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
        )rc   rd   c                ó   — g | ]\  }}|‘ŒS © rl   )rM   ÚdocrN   s      r3   rO   z+Dingo.similarity_search.<locals>.<listcomp>–   s   € Ð2Ð2Ð2™˜˜Q�Ð2Ð2Ð2r:   )Úsimilarity_search_with_score)r0   rb   rc   rd   rf   rC   Údocs_and_scoress          r3   Úsimilarity_searchzDingo.similarity_search�   sH   € ð$ <˜$Ô;Øð
Ø mð
ð 
Ø7=ð
ð 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2r:   úList[Tuple[Document, float]]c                óB  — g }| j                              |¦  «        }| j                             | j        |||¬¦  «        }|sg S |d         d         D ]Ì}	|	d         }
d|v r/|                     d¦  «        �|
|                     d¦  «        k    rŒ=|	d         }|	d         }|| j                 d	         d         d
         }|||
dœ}|                     ¦   «         D ]}||         d	         d         d
         ||<   Œ |                     t          ||¬¦  «        |
f¦  «         ŒÍ|S )rj   )ÚxqÚtop_krd   r   ÚvectorWithDistancesÚdistanceÚscore_thresholdNÚ
scalarDataÚidÚfieldsÚdata)ry   r;   Úscore©Úpage_contentr]   )
r/   Úembed_queryr*   Úvector_searchr.   Úgetr)   ÚkeysrU   r	   )r0   rb   rc   rd   rf   rC   ÚdocsÚ	query_objÚresultsÚresr|   r?   ry   r;   r]   Úmeta_keys                   r3   rn   z"Dingo.similarity_search_with_score˜   sW  € ð$ ˆØ”O×/Ò/°Ñ6Ô6ˆ	Ø”,×,Ò,ØÔ °!À=ð -ñ 
ô 
ˆð ð 	ØˆIà˜1”:Ð3Ô4ð 	Qð 	QˆCØ˜
”OˆEà! VÐ+Ð+Ø—J’JÐ0Ñ1Ô1Ð=à˜6Ÿ:š:Ð&7Ñ8Ô8Ò8Ð8ØØ˜LÔ)ˆIØ�T”ˆBØ˜Tœ^Ô,¨XÔ6°qÔ9¸&ÔAˆDØ ¨$¸Ð?Ð?ˆHØ%ŸNšNÑ,Ô,ð Nð N�Ø%.¨xÔ%8¸Ô%BÀ1Ô%EÀfÔ%M�˜Ñ"Ð"Ø�KŠK�¨t¸hÐGÑGÔGÈÐOÑPÔPÐPÐPàˆr:   é   ç      à?úList[float]Úfetch_kÚlambda_multÚfloatc                ó  ‡ — ‰ j                              ‰ j        |g||¬¦  «        }t          t	          j        |gt          j        ¬¦  «        d„ |d         d         D ¦   «         ||¬¦  «        }g }	|D ]�}
i }|d         d         |
         d                              ¦   «         D ];\  }}|                     t          |¦  «        |d         d         d	         i¦  «         Œ<|	 
                    |¦  «         Œ‚ˆ fd
„|	D ¦   «         S )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.
        )rd   rt   )Údtypec                ó*   — g | ]}|d          d         ‘ŒS )ÚvectorÚfloatValuesrl   )rM   Úitems     r3   rO   zADingo.max_marginal_relevance_search_by_vector.<locals>.<listcomp>ä   s1   € ð ð ð àð �X”˜}Ô-ðð ð r:   r   ru   )rc   rŒ   rx   rz   r{   c                ób   •— g | ]+}t          |                     ‰j        ¦  «        |¬ ¦  «        ‘Œ,S )r}   )r	   Úpopr)   )rM   r]   r0   s     €r3   rO   zADingo.max_marginal_relevance_search_by_vector.<locals>.<listcomp>ñ   sD   ø€ ð 
ð 
ð 
àõ  (§,¢,¨t¬~Ñ">Ô">ÈÐRÑRÔRð
ð 
ð 
r:   )r*   r€   r.   r   ÚnpÚarrayÚfloat32ÚitemsÚupdater   rU   )r0   r   rc   r‹   rŒ   rd   rC   r…   Úmmr_selectedÚselectedr\   Ú	meta_dataÚvs   `            r3   Ú'max_marginal_relevance_search_by_vectorz-Dingo.max_marginal_relevance_search_by_vectorÅ   sH  ø€ ð2 ”,×,Ò,ØÔ˜y˜k¸Èað -ñ 
ô 
ˆõ 2ÝŒH�i�[­¬
Ð3Ñ3Ô3ðð à# AœJÐ'<Ô=ðñ ô ð Ø#ð
ñ 
ô 
ˆð ˆØð 	'ð 	'ˆAØˆIØ œ
Ð#8Ô9¸!Ô<¸\ÔJ×PÒPÑRÔRð Cð C‘��1Ø× Ò ¥# a¡&¤&¨!¨H¬+°a¬.¸Ô*@Ð!AÑBÔBÐBÐBØ�OŠO˜IÑ&Ô&Ð&Ð&ð
ð 
ð 
ð 
à$ð
ñ 
ô 
ð 	
r:   c                óh   — | 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/   r   rŸ   )r0   rb   rc   r‹   rŒ   rd   rC   r   s           r3   Úmax_marginal_relevance_searchz#Dingo.max_marginal_relevance_searchö   s<   € ð2 ”O×/Ò/°Ñ6Ô6ˆ	Ø×;Ò;Ø�q˜' ;°ñ
ô 
ð 	
r:   r    c           	     óB  — 	 ddl }n# t          $ r t          d¦  «        ‚w xY w|�|}n=	 |                     |
||	¦  «        }n$# t          $ r}t          d|› �¦  «        ‚d}~ww xY w|�p|                     d¦  «        du rY|�V||                     ¦   «         vr@|                     ¦   «         |                     ¦   «         vr|                     ||d¬¦  «         nW|�U||                     ¦   «         vr?|                     ¦   «         |                     ¦   «         vr|                     ||¬	¦  «         |pd
„ |D ¦   «         }g }t          |¦  «        }| 	                    |¦  «        }t          |¦  «        D ]+\  }}|r||         ni }|||<   |                     |¦  «         Œ,t          dt          t          |¦  «        ¦  «        |¦  «        D ]H}||z   }|                     ||||…         |||…         |||…         ¦  «        }|st          d¦  «        ‚ŒI | ||||¬¦  «        S )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$   c                óh   — g | ]/}t          t          j        ¦   «         j        ¦  «        d d…         ‘Œ0S rG   rI   rL   s     r3   rO   z$Dingo.from_texts.<locals>.<listcomp>^  rP   r:   rQ   )r   r   )r%   r&   r'   r(   r�   r+   r,   r-   rR   rS   rT   rU   rV   rW   rX   rY   )Úclsr=   r   r?   rA   r   r   r   r   r   r   r   rB   rC   r%   r1   r2   rZ   r[   r\   r;   r]   r^   r_   s                           r3   Ú
from_textszDingo.from_texts  s¶  € ðN	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ýð@ñô ð ð	øøøð ÐØ!ˆLˆLðBà&Ÿš¨t°X¸tÑDÔD��øÝð Bð Bð BÝ Ð!@¸QÐ!@Ð!@ÑAÔAÐAøøøøðBøøøàÐ &§*¢*¨YÑ"7Ô"7¸4Ð"?Ð"?àÐ&Ø l×&<Ò&<Ñ&>Ô&>Ð>Ð>Ø×$Ò$Ñ&Ô&¨l×.DÒ.DÑ.FÔ.FÐFÐFà×)Ò)Ø¨)¸Uð *ñ ô ð øð
 Ð&Ø l×&<Ò&<Ñ&>Ô&>Ð>Ð>Ø×$Ò$Ñ&Ô&¨l×.DÒ.DÑ.FÔ.FÐFÐFà×)Ò)¨*À	Ð)ÑJÔJÐJð Ð@Ð@Ð@¸%Ð@Ñ@Ô@ˆØˆÝ�U‘”ˆØ×*Ò*¨5Ñ1Ô1ˆÝ  Ñ'Ô'ð 	,ð 	,‰GˆAˆtØ'0Ð8�y ”|�|°bˆHØ!%ˆH�XÑØ×!Ò! (Ñ+Ô+Ð+Ð+õ �q�#�d 5™kœkÑ*Ô*¨JÑ7Ô7ð 	3ð 	3ˆAØ�J‘ˆAØ"×-Ò-Ø˜N¨1¨Q¨3Ô/°¸¸!¸´¸cÀ!ÀAÀ#¼hñô ˆGð ð 3ÝÐ 1Ñ2Ô2Ð2ð3àˆs�9˜h¨|È
ÐSÑSÔSÐSs   ‚ ‡!ªA Á
A#ÁAÁA#c                óf   — |€t          d¦  «        ‚| j                             | j        |¬¦  «        S )z^Delete by vector IDs or filter.
        Args:
            ids: List of ids to delete.
        NzNo ids provided to delete.)rA   )r(   r*   Úvector_deleter.   )r0   rA   rC   s      r3   ÚdeletezDingo.deleteq  s6   € ð ˆ;ÝÐ9Ñ:Ô:Ð:àŒ|×)Ò)¨$Ô*:ÀÐ)ÑDÔDÐDr:   )r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r5   r6   )NNr;   r<   )r=   r>   r?   r@   rA   r   r   r   rB   r   rC   r   r5   rD   )ra   NN)rb   r   rc   r   rd   re   rf   rg   rC   r   r5   rh   )rb   r   rc   r   rd   re   rf   rg   rC   r   r5   rq   )ra   rˆ   r‰   N)r   rŠ   rc   r   r‹   r   rŒ   r�   rd   re   rC   r   r5   rh   )rb   r   rc   r   r‹   r   rŒ   r�   rd   re   rC   r   r5   rh   )r=   rD   r   r
   r?   r@   rA   r   r   r   r   r   r   r   r   r   r   rD   r   r   r   r   rB   r   rC   r   r5   r   r8   )rA   r   rC   r   r5   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r4   Úpropertyr9   r`   rp   rn   rŸ   r¡   Úclassmethodr¥   r¨   rl   r:   r3   r   r      s¬  € € € € € ðð ð& Ø$(ØØ$(ØØ Øð2$ð 2$ð 2$ð 2$ð 2$ð 2$ðh ðð ð ñ „Xðð +/Ø#'ØØð'ð 'ð 'ð 'ð 'ðX Ø(,Ø!%ð3ð 3ð 3ð 3ð 3ð4 Ø(,Ø!%ð+ð +ð +ð +ð +ð` ØØ Ø(,ð/
ð /
ð /
ð /
ð /
ðh ØØ Ø(,ð
ð 
ð 
ð 
ð 
ð< ð
 +/Ø#'ØØ$(ØØØ/Ð0ØØ ØðZTð ZTð ZTð ZTñ „[ðZTð| $(ðEð Eð Eð Eð Eð Eð Er:   r   )Ú
__future__r   ÚloggingrJ   Útypingr   r   r   r   r   Únumpyr–   Úlangchain_core.documentsr	   Úlangchain_core.embeddingsr
   Úlangchain_core.vectorstoresr   Ú&langchain_community.vectorstores.utilsr   Ú	getLoggerr©   Úloggerr   rl   r:   r3   ú<module>r¹      s  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à MÐ MÐ MÐ MÐ MÐ Mà	ˆÔ	˜8Ñ	$Ô	$€ðmEð mEð mEð mEð mEˆKñ mEô mEð mEð mEð mEr:   