
    Ig-                         d dl mZmZ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 d dlmZ d dlmZ d d	lmZ  G d
 de      Zy)    )AnyDictIterableListOptionalSequenceTypeUnionN)OnnxProvider)CLIPOnnxEmbedding)E5OnnxEmbedding)PooledNormalizedEmbedding)PooledEmbedding)OnnxTextEmbedding)TextEmbeddingBasec                   
    e Zd ZU eeeeegZe	e
e      ed<   ede	eeef      fd       Z	 	 	 	 	 	 	 ddedee   dee   deee      ded	ee	e      d
ef fdZ	 	 ddeeee   f   dedee   deej6                     fdZ xZS )TextEmbeddingEMBEDDINGS_REGISTRYreturnc                 j    g }| j                   D ]!  }|j                  |j                                # |S )aa  
        Lists the supported models.

        Returns:
            List[Dict[str, Any]]: A list of dictionaries containing the model information.

            Example:
                ```
                [
                    {
                        "model": "intfloat/multilingual-e5-large",
                        "dim": 1024,
                        "description": "Multilingual model, e5-large. Recommend using this model for non-English languages",
                        "license": "mit",
                        "size_in_GB": 2.24,
                        "sources": {
                            "gcp": "https://storage.googleapis.com/qdrant-fastembed/fast-multilingual-e5-large.tar.gz",
                            "hf": "qdrant/multilingual-e5-large-onnx",
                        }
                    }
                ]
                ```
        )r   extendlist_supported_models)clsresult	embeddings      Z/var/www/html/answerous/venv/lib/python3.12/site-packages/fastembed/text/text_embedding.pyr   z#TextEmbedding.list_supported_models   s8    2 00 	=IMM)99;<	=    
model_name	cache_dirthreads	providerscuda
device_ids	lazy_loadc                     t        |   ||fi | | j                  D ]=  }	|	j                         }
t	        fd|
D              s( |	d||||||d|| _         y  t        d d      )Nc              3   f   K   | ](  }j                         |d    j                         k(   * yw)modelN)lower).0r'   r   s     r   	<genexpr>z)TextEmbedding.__init__.<locals>.<genexpr>C   s,     ^E:##%w)=)=)??^s   .1)r   r   r    r!   r"   r#   r$   zModel zr is not supported in TextEmbedding.Please check the supported models using `TextEmbedding.list_supported_models()` )super__init__r   r   anyr'   
ValueError)selfr   r   r    r!   r"   r#   r$   kwargsEMBEDDING_MODEL_TYPEsupported_models	__class__s    `         r   r-   zTextEmbedding.__init__5   s     	YB6B$($<$< 	 3IIK^M]^^1 	)'#')'	 	
 	 ZL !^ ^
 	
r   	documents
batch_sizeparallelc              +   ^   K    | j                   j                  |||fi |E d{    y7 w)a  
        Encode a list of documents into list of embeddings.
        We use mean pooling with attention so that the model can handle variable-length inputs.

        Args:
            documents: Iterator of documents or single document to embed
            batch_size: Batch size for encoding -- higher values will use more memory, but be faster
            parallel:
                If > 1, data-parallel encoding will be used, recommended for offline encoding of large datasets.
                If 0, use all available cores.
                If None, don't use data-parallel processing, use default onnxruntime threading instead.

        Returns:
            List of embeddings, one per document
        N)r'   embed)r0   r5   r6   r7   r1   s        r   r9   zTextEmbedding.embedU   s+     , $4::##Iz8NvNNNs   #-+-)zBAAI/bge-small-en-v1.5NNNFNF)   N)__name__
__module____qualname__r   r   r   r   r   r   r   r	   r   __annotations__classmethodr   strr   r   r   intr   r   boolr-   r
   r   npndarrayr9   __classcell__)r4   s   @r   r   r      s#   !:d#456  d4S>&:  > 3#'!%6:*.

 C=
 #	

 H\23
 
 T#Y'
 
F "&	Ohsm+,O O 3-	O 
"**	Or   r   )typingr   r   r   r   r   r   r	   r
   numpyrC   fastembed.commonr   fastembed.text.clip_embeddingr    fastembed.text.e5_onnx_embeddingr   *fastembed.text.pooled_normalized_embeddingr   fastembed.text.pooled_embeddingr   fastembed.text.onnx_embeddingr   "fastembed.text.text_embedding_baser   r   r+   r   r   <module>rO      s7    M M M  ) ; < P ; ; @]O% ]Or   