
    Ig                     n    d dl mZmZmZmZmZmZmZ d dlZ	d dl
mZmZ d dlmZ d dlmZ  G d de      Zy)    )AnyDictIterableListOptionalSequenceTypeN)
ImageInputOnnxProvider)ImageEmbeddingBase)OnnxImageEmbeddingc                        e Zd ZU 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dedee   deej.                     fdZ xZS )ImageEmbeddingEMBEDDINGS_REGISTRYreturnc                 j    g }| j                   D ]!  }|j                  |j                                # |S )a  
        Lists the supported models.

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

            Example:
                ```
                [
                    {
                        "model": "Qdrant/clip-ViT-B-32-vision",
                        "dim": 512,
                        "description": "CLIP vision encoder based on ViT-B/32",
                        "license": "mit",
                        "size_in_GB": 0.33,
                        "sources": {
                            "hf": "Qdrant/clip-ViT-B-32-vision",
                        },
                        "model_file": "model.onnx",
                    }
                ]
                ```
        )r   extendlist_supported_models)clsresult	embeddings      \/var/www/html/answerous/venv/lib/python3.12/site-packages/fastembed/image/image_embedding.pyr   z$ImageEmbedding.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( |	|f|||||d|| _         y  t        d d      )Nc              3   f   K   | ](  }j                         |d    j                         k(   * yw)modelN)lower).0r#   r   s     r   	<genexpr>z*ImageEmbedding.__init__.<locals>.<genexpr>9   s,     ^E:##%w)=)=)??^s   .1)r   r   r   r   r    zModel zt is not supported in ImageEmbedding.Please check the supported models using `ImageEmbedding.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ImageEmbedding.__init__+   s     	YB6B$($<$< 	 3IIK^M]^^1	 $')'	 	
 	 ZL !_ _
 	
r   images
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:
            images: Iterator of image paths or single image path 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)r+   r0   r1   r2   r,   s        r   r4   zImageEmbedding.embedK   s+     , $4::##FJKFKKKs   #-+-)NNNFNF)   N)__name__
__module____qualname__r   r   r   r	   r   __annotations__classmethodr   strr   r   r   intr   r   boolr(   r
   r   npndarrayr4   __classcell__)r/   s   @r   r   r   
   s   ;M:Nd#567Nd4S>&:  @ $(!%6:*.

 C=
 #	

 H\23
 
 T#Y'
 
F "&	LL L 3-	L 
"**	Lr   r   )typingr   r   r   r   r   r   r	   numpyr>   fastembed.commonr
   r   $fastembed.image.image_embedding_baser   fastembed.image.onnx_embeddingr   r    r   r   <module>rG      s+    F F F  5 C =WL' WLr   