
    Ng3                        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                b/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/vectorstores/dingo.py__init__zDingo.__init__    sp   	NNNN 	 	 	?  	 'tt.B-C !LLB&tXt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    @@@Qc$*,,*++CRC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 '' 	, 	,GAt'08y||bH'+HT^$!!(++++q#d5kk**J77 	3 	3AJAl-- .1"5va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
OE!V++JJ011=6::&78888L)ITBT^,X6q9&AD $??H%NN,, N N%.x%8%B1%Ef%M""KKth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 ,,,yka - 
 
 2Hi[
333 #AJ'<=   #
 
 
  	' 	'AI
#89!<\JPPRR C C1  #a&&!H+a.*@!ABBBBOOI&&&&
 
 
 
$
 
 
 	
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	NNNN 	 	 	@  	 !LLB&tXtDD B B B !@Q!@!@AAAB&**Y"7"74"?"?&l&<&<&>&>>>$$&&l.D.D.F.FFF)))U *   
 &l&<&<&>&>>>$$&&l.D.D.F.FFF))*	)JJJ @@@%@@@U**511 '' 	, 	,GAt'08y||bH!%HX!!(++++ q#d5kk**J77 	3 	3AJA"--N1Q3/!c!A#h G  3 12223s9h|
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 34 (,!%+ + + + +`  (,/
 /
 /
 /
 /
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:   