U
    h                     @   sh   U d dl 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Zeed< G dd	 d	e
eZdS )
    )AnyDictListOptionalN)
Embeddings)	BaseModel)pre_initZlaser2LASER_MULTILINGUAL_MODELc                   @   sx   e Zd ZU dZee ed< eed< G dd dZe	e
e
dddZee eee  d	d
dZeee dddZdS )LaserEmbeddingsa  LASER Language-Agnostic SEntence Representations.
    LASER is a Python library developed by the Meta AI Research team
    and used for creating multilingual sentence embeddings for over 147 languages
    as of 2/25/2024
    See more documentation at:
    * https://github.com/facebookresearch/LASER/
    * https://github.com/facebookresearch/LASER/tree/main/laser_encoders
    * https://arxiv.org/abs/2205.12654

    To use this class, you must install the `laser_encoders` Python package.

    `pip install laser_encoders`
    Example:
        from laser_encoders import LaserEncoderPipeline
        encoder = LaserEncoderPipeline(lang="eng_Latn")
        embeddings = encoder.encode_sentences(["Hello", "World"])
    lang_encoder_pipelinec                   @   s   e Zd ZdZdS )zLaserEmbeddings.ConfigZforbidN)__name__
__module____qualname__extra r   r   H/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/embeddings/laser.pyConfig(   s   r   )valuesreturnc              
   C   sn   z<ddl m} |d}|r(||d}n
|td}||d< W n, tk
rh } ztd|W 5 d}~X Y nX |S )	z0Validate that laser_encoders has been installed.r   )LaserEncoderPipeliner   )r   )Zlaserr   zfCould not import 'laser_encoders' Python package. Please install it with `pip install laser_encoders`.N)Zlaser_encodersr   getr	   ImportError)clsr   r   r   Zencoder_pipelineer   r   r   validate_environment+   s    

z$LaserEmbeddings.validate_environment)textsr   c                 C   s   | j |}| S )zGenerate embeddings for documents using LASER.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        r   Zencode_sentencestolist)selfr   Z
embeddingsr   r   r   embed_documents?   s    
zLaserEmbeddings.embed_documents)textr   c                 C   s   | j |g}| d S )zGenerate single query text embeddings using LASER.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   r   )r   r!   Zquery_embeddingsr   r   r   embed_queryM   s    
zLaserEmbeddings.embed_queryN)r   r   r   __doc__r   str__annotations__r   r   r   r   r   r   floatr    r"   r   r   r   r   r
      s   
r
   )typingr   r   r   r   ZnumpynpZlangchain_core.embeddingsr   Zlangchain_core.pydantic_v1r   Zlangchain_core.utilsr   r	   r$   r%   r
   r   r   r   r   <module>   s    