U
    hk                     @   sN   d dl mZmZmZmZ d dlmZmZ d dlm	Z	 dZ
G dd dee	ZdS )    )AnyDictListTuple)	BaseModelField)BaseCrossEncoderzBAAI/bge-reranker-basec                       s   e Zd ZU dZeed< eZeed< e	e
dZeeef ed< ed fddZG d	d
 d
Zeeeef  ee dddZ  ZS )HuggingFaceCrossEncodera  HuggingFace cross encoder models.

    Example:
        .. code-block:: python

            from langchain_community.cross_encoders import HuggingFaceCrossEncoder

            model_name = "BAAI/bge-reranker-base"
            model_kwargs = {'device': 'cpu'}
            hf = HuggingFaceCrossEncoder(
                model_name=model_name,
                model_kwargs=model_kwargs
            )
    client
model_name)default_factorymodel_kwargs)kwargsc              
      s`   t  jf | zddl}W n, tk
rF } ztd|W 5 d}~X Y nX |j| jf| j| _dS )z$Initialize the sentence_transformer.r   NzrCould not import sentence_transformers python package. Please install it with `pip install sentence-transformers`.)super__init__sentence_transformersImportErrorZCrossEncoderr   r   r
   )selfr   r   exc	__class__ R/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/cross_encoders/huggingface.pyr       s    z HuggingFaceCrossEncoder.__init__c                   @   s   e Zd ZdZdS )zHuggingFaceCrossEncoder.ConfigZforbidN)__name__
__module____qualname__extrar   r   r   r   Config0   s   r   )
text_pairsreturnc                 C   s,   | j |}t|jdkr(tdd |}|S )zCompute similarity scores using a HuggingFace transformer model.

        Args:
            text_pairs: The list of text text_pairs to score the similarity.

        Returns:
            List of scores, one for each pair.
           c                 S   s   | d S )Nr    r   )xr   r   r   <lambda>@       z/HuggingFaceCrossEncoder.score.<locals>.<lambda>)r
   Zpredictlenshapemap)r   r   Zscoresr   r   r   score3   s    	zHuggingFaceCrossEncoder.score)r   r   r   __doc__r   __annotations__DEFAULT_MODEL_NAMEr   strr   dictr   r   r   r   r   r   floatr'   __classcell__r   r   r   r   r	   
   s   
r	   N)typingr   r   r   r   Zlangchain_core.pydantic_v1r   r   Z'langchain_community.cross_encoders.baser   r*   r	   r   r   r   r   <module>   s   