
    Ng2                        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
e          ZdS )z$Wrapper around Vald vector database.    )annotations)AnyIterableListOptionalTupleTypeN)Document)
Embeddings)VectorStore)maximal_marginal_relevancec                     e Zd ZdZ	 	 	 	 	 d@dAdZedBd            ZdCdZ	 	 	 dDdEd!Z	 	 	 dFdGd%Z		 	 	 	 	 dHdId1Z
	 	 	 	 	 dHdJd3Z	 	 	 	 	 dHdKd5Z	 	 	 	 	 dHdLd6Z	 	 	 	 	 	 	 dMdNd;Z	 	 	 	 	 	 	 dMdOd<Ze	 	 	 	 	 	 	 	 dPdQd?            ZdS )R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                r    || _         |dz   t          |          z   | _        || _        || _        || _        d S )N:)
_embeddingr   targetr   r   r   )selfr   r   r   r   r   r   s          a/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/vectorstores/vald.py__init__zVald.__init__%   s?     $Sj3t99,(. 0    returnOptional[Embeddings]c                    | j         S N)r    )r"   s    r#   
embeddingszVald.embeddings7   s
    r%   r   c                    	 dd l }n# t          $ r t          d          w xY w| j        r'|                    | j        | j        | j                  n |                    | j        | j                  S )Nr   zTCould not import grpcio python package. Please install it with `pip install grpcio`.)options)grpcImportErrorr   secure_channelr!   r   r   insecure_channel)r"   r-   s     r#   _get_channelzVald._get_channel;   s    	KKKK 	 	 	?  	 #ODT2D<M      &&t{D<M&NN	
s    !textsIterable[str]	metadatasOptional[List[dict]]grpc_metadataskip_strict_exist_checkkwargs	List[str]c                X   	 ddl m} ddlm} n# t          $ r t	          d          w xY w|                                 }|                    |          }	|j                            |          }
g }| j	        
                    t          |                    }t          ||          D ]l\  }}|j                            ||          }|	                    |j                            ||
          |          }|                    |j                   m|                                 |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`.r7   )idvectorrB   configmetadata)vald.v1.payloadr=   vald.v1.valdr>   r.   r1   
UpsertStubUpsertConfigr    embed_documentslistzipObjectVectorRequestappenduuidclose)r"   r2   r4   r6   r7   r8   r=   r>   channelstubcfgidsembstextembvecress                    r#   	add_textszVald.add_textsK   sZ   	3333334444444 	 	 	K  	 ##%% ))'22 ''@W'XX..tE{{;;UD)) 	! 	!ID#$++tC+@@C++"**#c*BB&   C JJsx    
    )rX   Optional[List[str]]Optional[bool]c                   	 ddl m} ddlm} n# t          $ r t	          d          w xY w|t          d          |                                 }|                    |          }|j        	                    |          }	|D ]N}
|j
                            |
          }|                    |j                            ||		          |
          }O|                                 dS )r;   r   r<   )remove_pb2_grpcr?   NzNo ids provided to deleter@   rA   )rA   rD   rE   T)rG   r=   rH   rc   r.   
ValueErrorr1   
RemoveStubRemoverK   rO   IDrQ   rT   )r"   rX   r7   r6   r8   r=   rc   rU   rV   rW   _idoid_s                r#   deletezVald.deletet   s(   	3333334444444 	 	 	K  	 ;8999##%% ))'22 ''@W'XX 	 	C$''3'//C"**c#*>>   AA 	tr_            {Gz?    ^e querykradiusfloatepsilontimeoutList[Document]c                x    |                      ||||||          }g }	|D ]\  }
}|	                    |
           |	S r)   )similarity_search_with_scorerR   )r"   rq   rr   rs   ru   rv   r6   r8   docs_and_scoresdocsdocrk   s               r#   similarity_searchzVald.similarity_search   sZ     ;;1fgw
 
 % 	 	FCKKr%   List[Tuple[Document, float]]c                n    | j                             |          }|                     ||||||          }	|	S r)   )r    embed_query&similarity_search_with_score_by_vector)
r"   rq   rr   rs   ru   rv   r6   r8   r[   rz   s
             r#   ry   z!Vald.similarity_search_with_score   sC     o))%00EEFGWm
 
 r%   List[float]c                x    |                      ||||||          }g }	|D ]\  }
}|	                    |
           |	S r)   )r   rR   )r"   r   rr   rs   ru   rv   r6   r8   rz   r{   r|   rk   s               r#   similarity_search_by_vectorz Vald.similarity_search_by_vector   sZ     EEq&'7M
 
 % 	 	FCKKr%   c                   	 ddl m} ddlm}	 n# t          $ r t	          d          w xY w|                                 }
|	                    |
          }|j                            ||||          }|                    |j        	                    ||          |          }g }|j
        D ]1}|                    t          |j                  |j        f           2|
                                 |S )	Nr   r<   )search_pb2_grpcr?   )numrs   ru   rv   rC   rE   )page_content)rG   r=   rH   r   r.   r1   
SearchStubSearchrK   rQ   resultsrR   r
   rA   distancerT   )r"   r   rr   rs   ru   rv   r6   r8   r=   r   rU   rV   rW   r]   rz   results                   r#   r   z+Vald.similarity_search_with_score_by_vector   s=   	3333334444444 	 	 	K  	 ##%% ))'22 ''&'7 ( 
 
 kk&&i&DD"  
 

 k 	X 	XF""H&)$D$D$Dfo#VWWWWr_            ?fetch_klambda_multc	           
     t    | j                             |          }
|                     |
|||||||          }|S )N)rr   r   rs   ru   rv   r   r6   )r    r   'max_marginal_relevance_search_by_vector)r"   rq   rr   r   r   rs   ru   rv   r6   r8   r[   r{   s               r#   max_marginal_relevance_searchz"Vald.max_marginal_relevance_search   sR     o))%00;;#' < 	
 	
 r%   c	                   	 ddl m}
 ddlm} n# t          $ r t	          d          w xY w|                                 }|                    |          }|                     ||||||          }g g }|D ]\  }}|                    |
j	        
                    |
j	                            |j                            |          }|                    |j                                       |           t          t!          j        |          |||          }|                                 fd	|D             S )
Nr   r<   )object_pb2_grpcr?   )r   rs   ru   rv   r6   rd   rE   )r   rr   c                     g | ]
}|         S  r   ).0ir{   s     r#   
<listcomp>z@Vald.max_marginal_relevance_search_by_vector.<locals>.<listcomp>M  s    %%%AQ%%%r%   )rG   r=   rH   r   r.   r1   
ObjectStubr   	GetObjectrO   VectorRequestrh   r   rR   rB   r   nparrayrT   )r"   r   rr   r   r   rs   ru   rv   r6   r8   r=   r   rU   rV   rz   rY   r|   rk   r\   mmrr{   s                       @r#   r   z,Vald.max_marginal_relevance_search_by_vector  s   	3333334444444 	 	 	K  	
 ##%% ))'22EE' F 
 
 % 	 	FC.."00"),,0@,AA 1   '	 !  C KK
###KK(HY#	
 
 
 	%%%%%%%%s    *cls
Type[Vald]c           
     V     | d||||||d|}|                     |||	|
           |S )r;   )r   r   r   r   r   r   )r2   r4   r6   r7   r   )r^   )r   r2   r   r4   r   r   r   r   r   r6   r7   r8   valds                r#   
from_textszVald.from_textsO  sk    , s 
%+-
 
 
 
 	'$;	 	 	
 	
 	
 r%   )r   r   r   FN)r   r   r   r   r   r   r   r   r   r   r   r   )r&   r'   )r&   r   )NNF)r2   r3   r4   r5   r6   r   r7   r   r8   r   r&   r9   )NFN)
rX   r`   r7   r   r6   r   r8   r   r&   ra   )rm   rn   ro   rp   N)rq   r   rr   r   rs   rt   ru   rt   rv   r   r6   r   r8   r   r&   rw   )rq   r   rr   r   rs   rt   ru   rt   rv   r   r6   r   r8   r   r&   r~   )r   r   rr   r   rs   rt   ru   rt   rv   r   r6   r   r8   r   r&   rw   )r   r   rr   r   rs   rt   ru   rt   rv   r   r6   r   r8   r   r&   r~   )rm   r   r   rn   ro   rp   N)rq   r   rr   r   r   r   r   rt   rs   rt   ru   rt   rv   r   r6   r   r8   r   r&   rw   )r   r   rr   r   r   r   r   rt   rs   rt   ru   rt   rv   r   r6   r   r8   r   r&   rw   )Nr   r   r   FNNF)r   r   r2   r9   r   r   r4   r5   r   r   r   r   r   r   r   r   r   r   r6   r   r7   r   r8   r   r&   r   )__name__
__module____qualname____doc__r$   propertyr*   r1   r^   rl   r}   ry   r   r   r   r   classmethodr   r   r%   r#   r   r      s        0  
 !&*.1 1 1 1 1$    X
 
 
 
& +/'+(-' ' ' ' 'V $((-'+	% % % % %T !'+    . !'+    ( !'+    . !'+& & & & &V  !'+    :  !'+7& 7& 7& 7& 7&r 
 +/
 !&*.'+(-$ $ $ $ [$ $ $r%   r   )r   
__future__r   typingr   r   r   r   r   r	   numpyr   langchain_core.documentsr
   langchain_core.embeddingsr   langchain_core.vectorstoresr   &langchain_community.vectorstores.utilsr   r   r   r%   r#   <module>r      s    * * " " " " " " = = = = = = = = = = = = = = = =     - - - - - - 0 0 0 0 0 0 3 3 3 3 3 3 M M M M M Me e e e e; e e eP 1 0r%   