o
    Zh2                     @  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                   @  s  e Zd ZdZ					dLdMddZedNddZdOddZ			dPdQd$d%Z			dRdSd)d*Z		+	,	-	.	dTdUd6d7Z
	+	,	-	.	dTdVd9d:Z	+	,	-	.	dTdWd<d=Z	+	,	-	.	dTdXd>d?Z	+	@	A	,	-	.	dYdZdDdEZ	+	@	A	,	-	.	dYd[dFdGZe								d\d]dJdKZdS )^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   FN	embeddingr
   hoststrportintgrpc_optionsr   grpc_use_secureboolgrpc_credentialsOptional[Any]c                 C  s.   || _ |d t| | _|| _|| _|| _d S )N:)
_embeddingr   targetr   r   r   )selfr   r   r   r   r   r    r    \/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/vectorstores/vald.py__init__%   s
   
zVald.__init__returnOptional[Embeddings]c                 C  s   | j S N)r   )r   r    r    r!   
embeddings7   s   zVald.embeddingsr   c                 C  sR   zdd l }W n ty   tdw | jr |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_channeltextsIterable[str]	metadatasOptional[List[dict]]grpc_metadataskip_strict_exist_checkkwargs	List[str]c                 K  s   zddl m} ddlm} W n ty   tdw |  }||}	|jj|d}
g }| j	
t|}t||D ]\}}|jj||d}|	j|jj||
d|d}||j q9|  |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`.r0   )idvectorr:   configmetadata)vald.v1.payloadr5   vald.v1.valdr6   r)   r*   Z
UpsertStubZUpsertConfigr   Zembed_documentslistzipObjectZVectorRequestappenduuidclose)r   r+   r-   r/   r0   r1   r5   r6   channelstubcfgidsembstextembvecresr    r    r!   	add_textsK   s,   
zVald.add_textsrL   Optional[List[str]]Optional[bool]c                 K  s   zddl m} ddlm} W n ty   tdw |du r"td|  }||}|jj	|d}	|D ]}
|j
j|
d}|j|jj||	d	|d
}q4|  dS )r3   r   r4   )remove_pb2_grpcr7   NzNo ids provided to deleter8   r9   )r9   r<   r=   T)r?   r5   r@   rU   r)   
ValueErrorr*   Z
RemoveStubZRemoverA   rD   IDrE   rH   )r   rL   r0   r/   r1   r5   rU   rI   rJ   rK   Z_idoid_r    r    r!   deletet   s(   
zVald.delete         {Gz?    ^e querykradiusfloatepsilontimeoutList[Document]c                 K  4   |  ||||||}g }	|D ]	\}
}|	|
 q|	S r%   )similarity_search_with_scorerF   )r   r`   ra   rb   rd   re   r/   r1   docs_and_scoresdocsdocrZ   r    r    r!   similarity_search      
zVald.similarity_searchList[Tuple[Document, float]]c           
      K  s$   | j |}| ||||||}	|	S r%   )r   embed_query&similarity_search_with_score_by_vector)
r   r`   ra   rb   rd   re   r/   r1   rO   ri   r    r    r!   rh      s
   
z!Vald.similarity_search_with_scoreList[float]c                 K  rg   r%   )rp   rF   )r   r   ra   rb   rd   re   r/   r1   ri   rj   rk   rZ   r    r    r!   similarity_search_by_vector   rm   z Vald.similarity_search_by_vectorc                 K  s   zddl m} ddlm}	 W n ty   tdw |  }
|	|
}|jj||||d}|j|jj	||d|d}g }|j
D ]}|t|jd|jf q?|
  |S )	Nr   r4   )search_pb2_grpcr7   )numrb   rd   re   r;   r=   )page_content)r?   r5   r@   rs   r)   r*   Z
SearchStubZSearchrA   rE   resultsrF   r	   r9   ZdistancerH   )r   r   ra   rb   rd   re   r/   r1   r5   rs   rI   rJ   rK   rQ   ri   resultr    r    r!   rp      s,   


z+Vald.similarity_search_with_score_by_vector         ?fetch_klambda_multc	              
   K  s*   | j |}
| j|
|||||||d}|S )N)ra   rz   rb   rd   re   r{   r/   )r   ro   'max_marginal_relevance_search_by_vector)r   r`   ra   rz   r{   rb   rd   re   r/   r1   rO   rj   r    r    r!   max_marginal_relevance_search   s   z"Vald.max_marginal_relevance_searchc	                   s   zddl m}
 ddlm} W n ty   tdw |  }||}| j||||||d}g  g }|D ]!\}}|j|
j	j
|
j	j|jdd|d}||j  | q4tt||||d}|   fd	d
|D S )Nr   r4   )object_pb2_grpcr7   )rz   rb   rd   re   r/   rV   r=   )r{   ra   c                   s   g | ]} | qS r    r    ).0irj   r    r!   
<listcomp>M  s    z@Vald.max_marginal_relevance_search_by_vector.<locals>.<listcomp>)r?   r5   r@   r~   r)   r*   Z
ObjectStubrp   Z	GetObjectrD   ZVectorRequestrX   ru   rF   r:   r   nparrayrH   )r   r   ra   rz   r{   rb   rd   re   r/   r1   r5   r~   rI   rJ   ri   rM   rk   rZ   rP   Zmmrr    r   r!   r|     sJ   
	z,Vald.max_marginal_relevance_search_by_vectorcls
Type[Vald]c              	   K  s2   | d||||||d|}|j |||	|
d |S )r3   )r   r   r   r   r   r   )r+   r-   r/   r0   Nr    )rR   )r   r+   r   r-   r   r   r   r   r   r/   r0   r1   Zvaldr    r    r!   
from_textsO  s"   	zVald.from_texts)r   r   r   FN)r   r
   r   r   r   r   r   r   r   r   r   r   )r#   r$   )r#   r   )NNF)r+   r,   r-   r.   r/   r   r0   r   r1   r   r#   r2   )NFN)
rL   rS   r0   r   r/   r   r1   r   r#   rT   )r\   r]   r^   r_   N)r`   r   ra   r   rb   rc   rd   rc   re   r   r/   r   r1   r   r#   rf   )r`   r   ra   r   rb   rc   rd   rc   re   r   r/   r   r1   r   r#   rn   )r   rq   ra   r   rb   rc   rd   rc   re   r   r/   r   r1   r   r#   rf   )r   rq   ra   r   rb   rc   rd   rc   re   r   r/   r   r1   r   r#   rn   )r\   rx   ry   r]   r^   r_   N)r`   r   ra   r   rz   r   r{   rc   rb   rc   rd   rc   re   r   r/   r   r1   r   r#   rf   )r   rq   ra   r   rz   r   r{   rc   rb   rc   rd   rc   re   r   r/   r   r1   r   r#   rf   )Nr   r   r   FNNF)r   r   r+   r2   r   r
   r-   r.   r   r   r   r   r   r   r   r   r   r   r/   r   r0   r   r1   r   r#   r   )__name__
__module____qualname____doc__r"   propertyr&   r*   rR   r[   rl   rh   rr   rp   r}   r|   classmethodr   r    r    r    r!   r      s    
+*+9r   )r   
__future__r   typingr   r   r   r   r   r   numpyr   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