
    +#h]                     B    d dl mZmZmZmZ d dlmZmZ  G d de      Zy)    )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y)FastEmbedSparsez<An interface for sparse embedding models to use with Qdrant.N
model_name
batch_size	cache_dirthreads	providersparallelkwargsreturnc                     	 ddl m} || _        || _         |d||||d|| _        y# t        $ r t        d      w xY w)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/sandstorm/venv/lib/python3.12/site-packages/langchain_qdrant/fastembed_sparse.py__init__zFastEmbedSparse.__init__	   sg    @	5 &!) 
!	

 
  	J 	s   ) >textsc                    | j                   j                  || j                  | j                        }|D cg c]?  }t	        |j
                  j                         |j                  j                               A c}S c c}w )N)r   r   indicesvalues)r   embedr   r   r   r"   tolistr#   )r   r   resultsresults       r   embed_documentszFastEmbedSparse.embed_documents;   so    ++##d.. $ 

 "
 !6!6!8AUAUAWX
 	
 
s   AA>textc                     t        | j                  j                  |            }t        |j                  j                         |j                  j                               S )Nr!   )nextr   query_embedr   r"   r%   r#   )r   r)   r'   s      r   embed_queryzFastEmbedSparse.embed_queryD   sG    dkk--d34NN))+FMM4H4H4J
 	
    )zQdrant/bm25   NNNN)__name__
__module____qualname____doc__strintr   r   r   r   r   r   r(   r-   r   r.   r   r
   r
      s    F (#'!%-1"&0
0
 0
 C=	0

 #0
 HSM*0
 3-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>r8      s    0 0 MC
& C
r.   