a
    bg2                     @  s|   d Z ddlmZ ddlmZ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 G d	d
 d
eZdS )z$Wrapper around Vald vector database.    )annotations)AnyIterableListOptionalTupleTypeN)Document)
Embeddings)VectorStore)maximal_marginal_relevancec                   @  sd  e Zd ZdZd@ddd	d
dddddZeddddZddddZdAdddddddddZdBddddddd d!Z	dCdd	d&d&d	ddd'd(d)d*Z
dDdd	d&d&d	ddd+d(d,d-ZdEd.d	d&d&d	ddd'd/d0d1ZdFd.d	d&d&d	ddd+d/d2d3ZdGdd	d	d&d&d&d	ddd'd6
d7d8ZdHd.d	d	d&d&d&d	ddd'd9
d:d;ZedId<ddddd	d
dddddd d=d>d?ZdS )JValda  Vald vector database.

    To use, you should have the ``vald-client-python`` python package installed.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import HuggingFaceEmbeddings
            from langchain_community.vectorstores import Vald

            model_name = "sentence-transformers/all-mpnet-base-v2"
            texts = ['foo', 'bar', 'baz']
            vald = Vald.from_texts(
                texts=texts,
                embedding=HuggingFaceEmbeddings(model_name=model_name),
                host="localhost",
                port=8080,
                skip_strict_exist_check=False,
             )
    	localhost  )zgrpc.keepalive_time_ms'  )zgrpc.keepalive_timeout_msr   FNr
   strintr   boolzOptional[Any]	embeddinghostportgrpc_optionsgrpc_use_securegrpc_credentialsc                 C  s.   || _ |d t| | _|| _|| _|| _d S )N:)
_embeddingr   targetr   r   r   )selfr   r   r   r   r   r    r    s/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/vectorstores/vald.py__init__%   s
    zVald.__init__zOptional[Embeddings])returnc                 C  s   | j S N)r   )r   r    r    r!   
embeddings7   s    zVald.embeddingsr   c                 C  sV   zdd l }W n ty&   tdY n0 | jrD|j| j| j| jdS |j| j| jdS )Nr   zTCould not import grpcio python package. Please install it with `pip install grpcio`.)options)grpcImportErrorr   Zsecure_channelr   r   r   Zinsecure_channel)r   r'   r    r    r!   _get_channel;   s    
zVald._get_channelzIterable[str]zOptional[List[dict]]z	List[str])texts	metadatasgrpc_metadataskip_strict_exist_checkkwargsr#   c                 K  s   zddl m} ddlm} W n ty6   tdY n0 |  }||}	|jj|d}
g }| j	
t|}t||D ]>\}}|jj||d}|	j|jj||
d|d}||j qv|  |S )	d
        Args:
            skip_strict_exist_check: Deprecated. This is not used basically.
        r   payload_pb2)upsert_pb2_grpclCould not import vald-client-python python package. Please install it with `pip install vald-client-python`.r-   )idvectorr6   configmetadata)vald.v1.payloadr1   vald.v1.valdr2   r(   r)   Z
UpsertStubZUpsertConfigr   Zembed_documentslistzipObjectZVectorRequestappenduuidclose)r   r*   r+   r,   r-   r.   r1   r2   channelstubcfgidsembstextembvecresr    r    r!   	add_textsK   s*    

zVald.add_textszOptional[List[str]]zOptional[bool])rH   r-   r,   r.   r#   c                 K  s   zddl m} ddlm} W n ty6   tdY n0 |du rHtd|  }||}|jj	|d}	|D ],}
|j
j|
d}|j|jj||	d	|d
}ql|  dS )r/   r   r0   )remove_pb2_grpcr3   NzNo ids provided to deleter4   r5   )r5   r8   r9   T)r;   r1   r<   rO   r(   
ValueErrorr)   Z
RemoveStubZRemover=   r@   IDrA   rD   )r   rH   r-   r,   r.   r1   rO   rE   rF   rG   Z_idoid_r    r    r!   deletet   s&    

zVald.delete         {Gz?    ^e floatzList[Document])querykradiusepsilontimeoutr,   r.   r#   c                 K  s4   |  ||||||}g }	|D ]\}
}|	|
 q|	S r$   )similarity_search_with_scorerB   )r   r[   r\   r]   r^   r_   r,   r.   docs_and_scoresdocsdocrT   r    r    r!   similarity_search   s    
zVald.similarity_searchzList[Tuple[Document, float]]c           
      K  s$   | j |}| ||||||}	|	S r$   )r   embed_query&similarity_search_with_score_by_vector)
r   r[   r\   r]   r^   r_   r,   r.   rK   ra   r    r    r!   r`      s
    
z!Vald.similarity_search_with_scorezList[float])r   r\   r]   r^   r_   r,   r.   r#   c                 K  s4   |  ||||||}g }	|D ]\}
}|	|
 q|	S r$   )rf   rB   )r   r   r\   r]   r^   r_   r,   r.   ra   rb   rc   rT   r    r    r!   similarity_search_by_vector   s    
z Vald.similarity_search_by_vectorc                 K  s   zddl m} ddlm}	 W n ty6   tdY n0 |  }
|	|
}|jj||||d}|j|jj	||d|d}g }|j
D ]}|t|jd|jf q|
  |S )	Nr   r0   )search_pb2_grpcr3   )numr]   r^   r_   r7   r9   )page_content)r;   r1   r<   rh   r(   r)   Z
SearchStubZSearchr=   rA   resultsrB   r	   r5   ZdistancerD   )r   r   r\   r]   r^   r_   r,   r.   r1   rh   rE   rF   rG   rM   ra   resultr    r    r!   rf      s*    



z+Vald.similarity_search_with_score_by_vector         ?)
r[   r\   fetch_klambda_multr]   r^   r_   r,   r.   r#   c	              
   K  s*   | j |}
| j|
|||||||d}|S )N)r\   ro   r]   r^   r_   rp   r,   )r   re   'max_marginal_relevance_search_by_vector)r   r[   r\   ro   rp   r]   r^   r_   r,   r.   rK   rb   r    r    r!   max_marginal_relevance_search   s    z"Vald.max_marginal_relevance_search)
r   r\   ro   rp   r]   r^   r_   r,   r.   r#   c	                   s   zddl m}
 ddlm} W n ty6   tdY n0 |  }||}| j||||||d}g  g }|D ]B\}}|j|
j	j
|
j	j|jdd|d}||j  | qltt||||d}|   fd	d
|D S )Nr   r0   )object_pb2_grpcr3   )ro   r]   r^   r_   r,   rP   r9   )rp   r\   c                   s   g | ]} | qS r    r    ).0irb   r    r!   
<listcomp>M      z@Vald.max_marginal_relevance_search_by_vector.<locals>.<listcomp>)r;   r1   r<   rs   r(   r)   Z
ObjectStubrf   Z	GetObjectr@   ZVectorRequestrR   rj   rB   r6   r   nparrayrD   )r   r   r\   ro   rp   r]   r^   r_   r,   r.   r1   rs   rE   rF   ra   rI   rc   rT   rL   Zmmrr    rv   r!   rq     sH    

	z,Vald.max_marginal_relevance_search_by_vectorz
Type[Vald])clsr*   r   r+   r   r   r   r   r   r,   r-   r.   r#   c              	   K  s2   | f ||||||d|}|j |||	|
d |S )r/   r   )r*   r+   r,   r-   )rN   )r{   r*   r   r+   r   r   r   r   r   r,   r-   r.   Zvaldr    r    r!   
from_textsO  s"    	zVald.from_texts)r   r   r   FN)NNF)NFN)rV   rW   rX   rY   N)rV   rW   rX   rY   N)rV   rW   rX   rY   N)rV   rW   rX   rY   N)rV   rm   rn   rW   rX   rY   N)rV   rm   rn   rW   rX   rY   N)Nr   r   r   FNNF)__name__
__module____qualname____doc__r"   propertyr%   r)   rN   rU   rd   r`   rg   rf   rr   rq   classmethodr|   r    r    r    r!   r      s           +   *                    +       "       "9        r   )r   
__future__r   typingr   r   r   r   r   r   numpyry   Zlangchain_core.documentsr	   Zlangchain_core.embeddingsr
   Zlangchain_core.vectorstoresr   Z&langchain_community.vectorstores.utilsr   r   r    r    r    r!   <module>   s      j