U
    h                     @   sr   d dl Z d dlZ d dl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ZG dd deeZdS )	    N)AnyDictListLiteralOptional)
Embeddings)	BaseModel)pre_initz0.2.0c                   @   s   e Zd ZU dZdZeed< dZeed< e	e ed< e	e ed< dZ
ed	 ed
< dZeed< 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 )FastEmbedEmbeddingsa  Qdrant FastEmbedding models.

    FastEmbed is a lightweight, fast, Python library built for embedding generation.
    See more documentation at:
    * https://github.com/qdrant/fastembed/
    * https://qdrant.github.io/fastembed/

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

    `pip install fastembed`
    Example:
        from langchain_community.embeddings import FastEmbedEmbeddings
        fastembed = FastEmbedEmbeddings()
    zBAAI/bge-small-en-v1.5
model_namei   
max_length	cache_dirthreadsdefault)r   passagedoc_embed_type   
batch_sizeNparallel_modelc                   @   s   e Zd ZdZdS )zFastEmbedEmbeddings.ConfigZallowN)__name__
__module____qualname__extra r   r   L/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/embeddings/fastembed.pyConfigF   s   r   )valuesreturnc                 C   s   | d}| d}| d}| d}ztd}W n tk
rR   tdY nX tjdtk rltd|j||||d|d	< |S )
z+Validate that FastEmbed has been installed.r   r   r   r   	fastembedz\Could not import 'fastembed' Python package. Please install it with `pip install fastembed`.zAFastEmbedEmbeddings requires `pip install -U "fastembed>=0.2.0"`.)r   r   r   r   r   )	get	importlibimport_moduleModuleNotFoundErrorImportErrormetadataversionMIN_VERSIONZTextEmbedding)clsr   r   r   r   r   r   r   r   r   validate_environmentI   s*    





z(FastEmbedEmbeddings.validate_environment)textsr   c                 C   sF   | j dkr"| jj|| j| jd}n| jj|| j| jd}dd |D S )zGenerate embeddings for documents using FastEmbed.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        r   r   r   c                 S   s   g | ]}|  qS r   )tolist).0er   r   r   
<listcomp>y   s     z7FastEmbedEmbeddings.embed_documents.<locals>.<listcomp>)r   r   Zpassage_embedr   r   embed)selfr*   Z
embeddingsr   r   r   embed_documentsg   s    

    z#FastEmbedEmbeddings.embed_documents)textr   c                 C   s"   t | jj|| j| jd}| S )zGenerate query embeddings using FastEmbed.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r+   )nextr   Zquery_embedr   r   r,   )r1   r3   Zquery_embeddingsr   r   r   embed_query{   s    	  zFastEmbedEmbeddings.embed_query)r   r   r   __doc__r   str__annotations__r   intr   r   r   r   r   r   r   r	   r   r)   r   floatr2   r5   r   r   r   r   r
      s   
r
   )r!   importlib.metadatatypingr   r   r   r   r   ZnumpynpZlangchain_core.embeddingsr   Zlangchain_core.pydantic_v1r   Zlangchain_core.utilsr	   r'   r
   r   r   r   r   <module>   s   