
    dh3                        S SK Jr  S SKrS SKrS SKJr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  \R(                  " \5      r " S S	\5      rg)
    )annotationsN)AnyIterableListOptionalTuple)Document)
Embeddings)VectorStore)maximal_marginal_relevancec                     \ rS rSrSrSSSSSSSS.                 SS	 jjr\SS
 j5       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SSSS/SSS4
                           S S jj5       r S!     S"S jjrSrg)#Dingo   aX  `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                   SSK n
Ub  UOS/nUb  UnO U
R                  XxU5      nX l        Xl        UbZ  XKR                  5       ;  aG  UR                  5       UR                  5       ;  a%  U	SL a  UR                  XESS9  OUR                  XES	9  X@l	        Xl
        g! [         a    [        S5      ef = f! [         a  n[        SU 35      eSnAff = f)
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                ^/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/dingo.py__init__Dingo.__init__    s   	 't.B-C !LB&ttD "# ""8"8"::  ",*@*@*BB$))U *  ))*)J%#E  	? 	  B #<QC!@AABs"   B B6 B36
C CCc                    U R                   $ N)r)   )r*   s    r/   
embeddingsDingo.embeddingsT   s        text  c           	     <   U=(       d;    U Vs/ sH.  n[        [        R                  " 5       R                  5      SS PM0     snn/ n[	        U5      nU R
                  R                  U5      n	[        U5       H1  u  pU(       a  X*   O0 nXU R                  '   UR                  U5        M3     [        S[        [	        U5      5      U5       HG  n
X-   nU R                  R                  U R                  XU XU X:U 5      nU(       a  M>  [        S5      e   U$ s  snf )aJ  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ir7   metadatajadd_ress                  r/   	add_textsDingo.add_textsX   s   , @%@%Qc$**,**+CR0%@U007 'GA'0y|bH'+T^^$!!(+ (
 q#d5k*J7AAll--  .1"5v{C!HG 7 122 8 
# As   4Dc                d    U R                   " U4X#S.UD6nU VVs/ sH  u  pxUPM	     snn$ s  snnf )>  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*   queryrX   rY   timeoutrL   docs_and_scoresdocrM   s	            r/   similarity_searchDingo.similarity_search   sC    $ ;;

7=
 #22//222s   ,c                   / nU R                   R                  U5      nU R                  R                  U R                  XrUS9nU(       d  / $ US   S    H  n	U	S   n
SU;   a(  UR                  S5      b  XR                  S5      :  a  M6  U	S   nU	S   nXR                     S   S   S	   nXU
S
.nUR                  5        H  nX   S   S   S	   X'   M     UR                  [        XS9U
45        M     U$ )rW   )xqtop_krY   r   vectorWithDistancesdistancescore_threshold
scalarDataidfieldsdata)rh   r7   scorepage_contentrQ   )
r)   embed_queryr$   vector_searchr(   getr#   keysrC   r	   )r*   r[   rX   rY   r\   rL   docs	query_objresultsresrk   rI   rh   r7   rQ   meta_keys                   r/   rZ   "Dingo.similarity_search_with_score   s   $ OO//6	,,,,= - 
 I1:34C
OE!V+JJ01=::&788L)ITB^^,X6q9&AD ?H%NN,%.%8%B1%Ef%M" -KKtGOP 5  r6   c                ,   U R                   R                  U R                  U/XRS9n[        [        R
                  " U/[        R                  S9US   S    Vs/ sH  nUS   S   PM     snUUS9n	/ n
U	 H`  n0 nUS   S   U   S   R                  5        H*  u  p-UR                  [        U5      US	   S   S
   05        M,     U
R                  U5        Mb     U
 Vs/ sH&  n[        UR                  U R                  5      US9PM(     sn$ s  snf s  snf )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.
)rY   rc   )dtyper   rd   vectorfloatValues)rX   lambda_multrg   ri   rj   rl   )r$   ro   r(   r   nparrayfloat32itemsupdater<   rC   r	   popr#   )r*   r+   rX   fetch_kr|   rY   rL   rt   itemmmr_selectedselectedrP   	meta_datavrQ   s                  r/   'max_marginal_relevance_search_by_vector-Dingo.max_marginal_relevance_search_by_vector   s4   2 ,,,,yk - 
 2HHi[

3 $AJ'<==D X}-= #
 AI
#89!<\JPPR  #a&!H+a.*@!AB SOOI&	  %
$ (,,t~~">R$
 	

s   D
,Dc                ^    U R                   R                  U5      nU R                  XrX4U5      $ )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)   rn   r   )r*   r[   rX   r   r|   rY   rL   r+   s           r/   max_marginal_relevance_search#Dingo.max_marginal_relevance_search   s2    2 OO//6	;;'
 	
r6   r   c           	          SSK nUb  UnO UR                  XU	5      nUb]  UR	                  S5      SL aI  UbE  XoR                  5       ;  a2  UR                  5       UR                  5       ;  a  UR                  XgSS9  OGUbD  XoR                  5       ;  a1  UR                  5       UR                  5       ;  a  UR                  XgS	9  U=(       d;    U Vs/ sH.  n[        [        R                  " 5       R                  5      SS
 PM0     snn/ n[        U5      nUR                  U5      n[        U5       H*  u  nnU(       a  UU   O0 nUUU'   UR                  U5        M,     [!        S[#        [        U5      5      U5       H7  nUU-   nUR%                  UUUU UUU UUU 5      nU(       a  M.  ['        S5      e   U " X%XS9$ ! [         a    [        S5      ef = f! [         a  n[        SU 35      eSnAff = fs  snf )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   r:   r;   )r   r   )r   r    r!   r"   rp   r%   r&   r'   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   )clsrH   r+   rI   rJ   r,   r   r   r   r   r   r   rK   rL   r   r-   r.   rM   rN   rO   rP   r7   rQ   rR   rS   s                            r/   
from_textsDingo.from_texts  s   N	 !LB&ttD &**Y"74"?&&<&<&>>$$&l.D.D.FF))U * 
 &&<&<&>>$$&l.D.D.FF))*)J @%@%Qc$**,**+CR0%@U**51 'GAt'0y|bH!%HX!!(+ ( q#d5k*J7AJA"--N1Q/!c!AhG 7 122 8 9|SSe  	@ 	  B #<QC!@AAB* As(   G G 4G;G
G8%G33G8c                f    Uc  [        S5      eU R                  R                  U R                  US9$ )zFDelete by vector IDs or filter.
Args:
    ids: List of ids to delete.
zNo ids provided to delete.)rJ   )r"   r$   vector_deleter(   )r*   rJ   rL   s      r/   deleteDingo.deleteq  s5     ;9::||))$*:*:)DDr6   )r$   r)   r(   r#   )r+   r
   r,   r<   r   r   r   Optional[str]r   r?   r   Optional[List[str]]r   r<   r   r<   r   bool)returnzOptional[Embeddings])NNr7   r8   )rH   zIterable[str]rI   Optional[List[dict]]rJ   r   r,   r<   rK   r?   rL   r   r   	List[str])   NN)r[   r<   rX   r?   rY   Optional[dict]r\   Optional[int]rL   r   r   List[Document])r[   r<   rX   r?   rY   r   r\   r   rL   r   r   zList[Tuple[Document, float]])r      g      ?N)r+   zList[float]rX   r?   r   r?   r|   floatrY   r   rL   r   r   r   )r[   r<   rX   r?   r   r?   r|   r   rY   r   rL   r   r   r   )rH   r   r+   r
   rI   r   rJ   r   r,   r<   r   r   r   r?   r   r   r   r   r   r<   r   r<   rK   r?   rL   r   r   r   r3   )rJ   r   rL   r   r   r   )__name__
__module____qualname____firstlineno____doc__r0   propertyr4   rT   r_   rZ   r   r   classmethodr   r   __static_attributes__ r6   r/   r   r      s>   & $($( 2$2$ 2$
 2$ "2$ 2$ "2$ 2$ 2$ 2$h   +/#''' (' !	'
 ' ' ' 
'X (,!%33 3 &	3
 3 3 
34 (,!%++ + &	+
 + + 
&+`  (,/
/
 /
 	/

 /
 &/
 /
 
/
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 Er6   r   )
__future__r   loggingr=   typingr   r   r   r   r   numpyr}   langchain_core.documentsr	   langchain_core.embeddingsr
   langchain_core.vectorstoresr   &langchain_community.vectorstores.utilsr   	getLoggerr   loggerr   r   r6   r/   <module>r      sC    "   7 7  - 0 3 M			8	$mEK mEr6   