
    Ng]                     J    d dl mZmZmZmZ d dlmZmZ  G d de          ZdS )    )AnyListOptionalSequence)SparseEmbeddingsSparseVectorc                       e Zd ZdZ	 	 	 	 	 	 ddededee         dee         d	eee                  d
ee         deddfdZ	de
e         de
e         fdZdedefdZdS )FastEmbedSparsez<An interface for sparse embedding models to use with Qdrant.Qdrant/bm25   N
model_name
batch_size	cache_dirthreads	providersparallelkwargsreturnc                     	 ddl m} n# t          $ r t          d          w xY w|| _        || _         |d||||d|| _        dS )a}  
        Sparse encoder implementation using FastEmbed - https://qdrant.github.io/fastembed/
        For a list of available models, see https://qdrant.github.io/fastembed/examples/Supported_Models/

        Args:
            model_name (str): The name of the model to use. Defaults to `"Qdrant/bm25"`.
            batch_size (int): Batch size for encoding. Defaults to 256.
            cache_dir (str, optional): The path to the model cache directory.                                       Can also be set using the                                       `FASTEMBED_CACHE_PATH` env variable.
            threads (int, optional): The number of threads onnxruntime session can use.
            providers (Sequence[Any], optional): List of ONNX execution providers.            parallel (int, optional): If `>1`, data-parallel encoding will be used, r                                      Recommended for encoding of large datasets.                                      If `0`, use all available cores.                                      If `None`, don't use data-parallel processing,                                      use default onnxruntime threading instead.                                      Defaults to None.
            kwargs: Additional options to pass to fastembed.SparseTextEmbedding
        Raises:
            ValueError: If the model_name is not supported in SparseTextEmbedding.
        r   )SparseTextEmbeddingzxThe 'fastembed' package is not installed. Please install it with `pip install fastembed` or `pip install fastembed-gpu`.)r   r   r   r   N )	fastembedr   ImportError
ValueError_batch_size	_parallel_model)	selfr   r   r   r   r   r   r   r   s	            ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_qdrant/fastembed_sparse.py__init__zFastEmbedSparse.__init__	   s    @	5555555 	 	 	J  	 &!)) 
!	
 

 
 
s   	 #textsc                 h    | j                             || j        | j                  }d |D             S )N)r   r   c                     g | ]A}t          |j                                        |j                                                   BS )indicesvalues)r   r%   tolistr&   ).0results     r   
<listcomp>z3FastEmbedSparse.embed_documents.<locals>.<listcomp>?   sQ     
 
 
 !6!6!8!8AUAUAWAWXXX
 
 
    )r   embedr   r   )r   r!   resultss      r   embed_documentszFastEmbedSparse.embed_documents;   sK    +##d. $ 
 

 
!
 
 
 	
r+   textc                     t          | j                            |                    }t          |j                                        |j                                                  S )Nr$   )nextr   query_embedr   r%   r'   r&   )r   r/   r)   s      r   embed_queryzFastEmbedSparse.embed_queryD   sW    dk--d3344N))++FM4H4H4J4J
 
 
 	
r+   )r   r   NNNN)__name__
__module____qualname____doc__strintr   r   r   r    r   r   r.   r3   r   r+   r   r
   r
      s        FF (#'!%-1"&0
 0
0
 0
 C=	0

 #0
 HSM*0
 3-0
 0
 
0
 0
 0
 0
d
T#Y 
43E 
 
 
 

 
 
 
 
 
 
 
r+   r
   N)	typingr   r   r   r   "langchain_qdrant.sparse_embeddingsr   r   r
   r   r+   r   <module>r<      s    0 0 0 0 0 0 0 0 0 0 0 0 M M M M M M M MC
 C
 C
 C
 C
& C
 C
 C
 C
 C
r+   