
    rOiaA                         d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZ  ed      Z G d d	eee   d
      Z G d d      Zy)    )defaultdict)SequenceAnyTypeVarGeneric)	BaseModel)models)NumericVector)OnnxProvider
ImageInputTextEmbeddingSparseTextEmbeddingLateInteractionTextEmbedding"LateInteractionMultimodalEmbeddingImageEmbeddingFastEmbedMiscTc                   :    e Zd ZU eed<   eeef   ed<   dZe	ed<   y)ModelInstancemodeloptionsF
deprecatedN)
__name__
__module____qualname__r   __annotations__dictstrr   r   bool     c/volume1/homes/robertsu/coba/app/.venv/lib/python3.12/site-packages/qdrant_client/embed/embedder.pyr   r      s    H#s(^Jr!   r   T)arbitrary_types_allowedc                      e Zd Z	 d$dedz  dededdfdZ	 	 	 	 	 	 d%dededz  dedz  d	ed
   dz  dede	e   dz  dedede
fdZ	 	 	 	 	 	 d%dededz  dedz  d	ed
   dz  dede	e   dz  dededefdZ	 	 	 	 	 d&dededz  dedz  d	ed
   dz  dede	e   dz  dedefdZ	 	 	 	 	 d&dededz  dedz  d	ed
   dz  dede	e   dz  dedefdZ	 	 	 	 	 d&dededz  dedz  d	ed
   dz  dede	e   dz  dedefdZ	 	 	 	 	 d'dede	e   dz  de	e   dz  deeef   dz  dededee	ej0                     z  fdZde	e   dedeeef   dz  dedede	e	e      fdZde	e   dedeeef   dz  dedede	ej8                     e	ej0                     z  fdZde	e   dedeeef   dz  dedede	e	e	e         fdZde	e   dedeeef   dz  dede	e	e	e         f
dZde	e   dedeeef   dz  dede	e	e	e         f
dZ de	e   dedeeef   dz  dede	e	e      f
dZ!e"dedefd       Z#e"dedefd        Z$e"dedefd!       Z%e"dedefd"       Z&dedefd#Z'y)(EmbedderNthreadsuse_core_bm25kwargsreturnc                     t        t              | _        t        t              | _        t        t              | _        t        t              | _        t        t              | _        || _        || _        y )N)	r   listembedding_modelssparse_embedding_models!late_interaction_embedding_modelsimage_embedding_models,late_interaction_multimodal_embedding_models_threads_use_core_bm25)selfr&   r'   r(   s       r"   __init__zEmbedder.__init__   sn     P[[_O` 	$
  	. WbW
#
  	9  +r!   
model_name	cache_dir	providersr   cuda
device_idsr   c                    t        j                  |      s#t        d| dt        j                                ||xs | j                  |||d|}	| j
                  |   D ]0  }
|r|
j                  s|r|
j                  |	k(  s$|
j                  c S  t        dd|i|	}t        ||	|      }| j
                  |   j                  |       |S NUnsupported embedding model: . Supported models: r6   r&   r7   r8   r9   r5   )r   r   r   r    )r   is_supported_text_model
ValueErrorlist_text_modelsr1   r,   r   r   r   r   r   appendr3   r5   r6   r&   r7   r8   r9   r   r(   r   instancer   model_instances                r"   get_or_init_modelzEmbedder.get_or_init_model1   s     44Z@/
|;OP]PnPnPpOqr  #/$--"$
 
 --j9Hx228#3#3w#>~~%	 : ??w?7DZ8
 	j)00@r!   c                    t        j                  |      s#t        d| dt        j                                ||xs | j                  |||d|}	| j
                  |   D ]0  }
|r|
j                  s|r|
j                  |	k(  s$|
j                  c S  t        dd|i|	}t        ||	|      }| j
                  |   j                  |       |S r;   )r   is_supported_sparse_modelr@   list_sparse_modelsr1   r-   r   r   r   r   r   rB   rC   s                r"   get_or_init_sparse_modelz!Embedder.get_or_init_sparse_modelU   s     66zB/
|;OP]PpPpPrOst 
 #/$--"$
 
 44Z@Hx228#3#3w#>~~%	 A $EzEWE=JZ>
 	$$Z077Gr!   c                 x   t        j                  |      s#t        d| dt        j                                ||xs | j                  |||d|}| j
                  |   D ]  }	|	j                  |k(  s|	j                  c S  t        dd|i|}
t        |
|      }| j
                  |   j                  |       |
S Nr<   r=   r>   r5   )r   r   r    )r   (is_supported_late_interaction_text_modelr@   !list_late_interaction_text_modelsr1   r.   r   r   r   r   rB   r3   r5   r6   r&   r7   r8   r9   r(   r   rD   r   rE   s               r"   "get_or_init_late_interaction_modelz+Embedder.get_or_init_late_interaction_model{   s     EEjQ/
| <%%2%T%T%V$WY 
 #/$--"$
 
 >>zJH7*~~% K -N
NgNFSG
 	..z:AA.Qr!   c                 x   t        j                  |      s#t        d| dt        j                                ||xs | j                  |||d|}| j
                  |   D ]  }	|	j                  |k(  s|	j                  c S  t        dd|i|}
t        |
|      }| j
                  |   j                  |       |
S rL   )r   .is_supported_late_interaction_multimodal_modelr@   'list_late_interaction_multimodal_modelsr1   r0   r   r   r   r   rB   rO   s               r"   -get_or_init_late_interaction_multimodal_modelz6Embedder.get_or_init_late_interaction_multimodal_model   s     KKJW/
| <%%2%Z%Z%\$]_ 
 #/$--"$
 
 II*UH7*~~% V 3TjTGTLYM
 	99*ELL^\r!   c                 x   t        j                  |      s#t        d| dt        j                                ||xs | j                  |||d|}| j
                  |   D ]  }	|	j                  |k(  s|	j                  c S  t        dd|i|}
t        |
|      }| j
                  |   j                  |       |
S rL   )r   is_supported_image_modelr@   list_image_modelsr1   r/   r   r   r   r   rB   rO   s               r"   get_or_init_image_modelz Embedder.get_or_init_image_model   s     55jA/
|;OP]PoPoPqOrs  #/$--"$
 
 33J?H7*~~% @ @*@@8EE[b8c##J/66~Fr!   textsimagesr   is_query
batch_sizec                 n   |d u |d u u rt        d      |t        j                  |      r| j                  |||||      }|S | j	                  |      r| j                  |||||      }|S t        j                  |      r| j                  |||||      }|S t        j                  |      r| j                  ||||      }|S t        d|       |J t        j                  |      r| j                  ||||      }|S t        j                  |      r| j                  ||||      }|S t        d|       )Nz-Either documents or images should be providedr<   )r@   r   r?   _embed_dense_textrH   _embed_sparse_textrM   _embed_late_interaction_textrR   '_embed_late_interaction_multimodal_textrV   _embed_dense_image(_embed_late_interaction_multimodal_image)r3   r5   rY   rZ   r   r[   r\   
embeddingss           r"   embedzEmbedder.embed   s    TMv~.LMM 44Z@!33:w*
< 7 //
;!44:w*
4 / GG
S!>>:w*
, ' MMjY!II:w

$  !#@!MNN ""55jA!44VZR\]
  MMjY!JJJ
  !#@!MNNr!   c                     | j                   dd|i|xs i }|s0|j                  ||      D cg c]  }|j                          }}|S |j                  |      D cg c]  }|j                          }}|S c c}w c c}w Nr5   	documentsr\   queryr    )rF   re   tolistquery_embed	r3   rY   r5   r   r[   r\   embedding_model_inst	embeddingrd   s	            r"   r^   zEmbedder._embed_dense_text  s      6t55]]w}Z\] "6!;!;eXb!;!c!cI   "!c    5I4T4T[`4T4a4ay	  "4a   
   A:A?c                    | j                   rG|j                         dj                         k(  r&|D cg c]  }t        j                  |||       c}S  | j                  dd|i|xs i }|sg|j                  ||      D cg c]I  }t        j                  |j                  j                         |j                  j                               K }	}|	S |j                  |      D cg c]I  }t        j                  |j                  j                         |j                  j                               K }	}|	S c c}w c c}w c c}w )NQdrant/bm25)textr   r   r5   rh   )indicesvaluesrj   r    )r2   lowerr	   DocumentrJ   re   SparseVectorru   rl   rv   rm   )
r3   rY   r5   r   r[   r\   rt   ro   sparse_embeddingrd   s
             r"   r_   zEmbedder._embed_sparse_text%  sp    :#3#3#59L9L9N#NZ_Z_RVTWMZ_   =t<<  
! 
%,] 
  )=(B(B#
 )C )
)$	 ##,44;;=+2299;)  "  )=(H(Hu(H(U
 )V$	 ##,44;;=+2299; )V   3s   D;AE )AEc                     | j                   dd|i|xs i }|s0|j                  ||      D cg c]  }|j                          }}|S |j                  |      D cg c]  }|j                          }}|S c c}w c c}w rg   )rP   re   rl   rm   rn   s	            r"   r`   z%Embedder._embed_late_interaction_textI  s      GtFF  
! 
%,] 
  "6!;!;eXb!;!c!cI   "!c    5I4T4T[`4T4a4ay	  "4a   
rq   c                      | j                   dd|i|xs i }|j                  ||      D cg c]  }|j                          c}S c c}w )Nr5   rh   r    )rT   
embed_textrl   )r3   rY   r5   r   r\   ro   rp   s          r"   ra   z0Embedder._embed_late_interaction_multimodal_text_  su      RtQQ  
! 
%,] 

 2<<J = 
	 
 	
 
   Ac                      | j                   dd|i|xs i }|j                  ||      D cg c]  }|j                          c}S c c}w Nr5   )rZ   r\   r    )rT   embed_imagerl   )r3   rZ   r5   r   r\   ro   rp   s          r"   rc   z1Embedder._embed_late_interaction_multimodal_imagep  sm      RtQQ  
! 
%,] 

 2==VXb=c
c	 c
 	
 
r~   c                      | j                   dd|i|xs i }|j                  ||      D cg c]  }|j                          }}|S c c}w r   )rX   re   rl   )r3   rZ   r5   r   r\   ro   rp   rd   s           r"   rb   zEmbedder._embed_dense_image  so      <t;;czcU\Ub`bc 277vR\7]
]	 ] 	 
 	
s   A	c                 ,    t        j                  |      S Check if model is supported by fastembed

        Args:
            model_name (str): The name of the model to check.

        Returns:
            bool: True if the model is supported, False otherwise.
        )r   r?   clsr5   s     r"   r?   z Embedder.is_supported_text_model  s     44Z@@r!   c                 ,    t        j                  |      S r   )r   rV   r   s     r"   rV   z!Embedder.is_supported_image_model  s     55jAAr!   c                 ,    t        j                  |      S r   )r   rM   r   s     r"   rM   z1Embedder.is_supported_late_interaction_text_model  s     EEjQQr!   c                 ,    t        j                  |      S r   )r   rR   r   s     r"   rR   z7Embedder.is_supported_late_interaction_multimodal_model  s     KKJWWr!   c                     | j                   r"|j                         dj                         k(  ryt        j                  |      S )r   rs   T)r2   rw   r   rH   )r3   r5   s     r"   rH   z"Embedder.is_supported_sparse_model  s:     :#3#3#59L9L9N#N66zBBr!   )NT)NNNFNF)NNNFN)NNNF   )(r   r   r   intr   r   r4   r   r   r+   r   rF   r   rJ   r   rP   r   rT   r   rX   r   r   r
   r	   rx   re   floatr^   ry   r_   r`   ra   rc   rb   classmethodr?   rV   rM   rR   rH   r    r!   r"   r%   r%      s   @D,Tz,9=,PS,	,, !%"59'+ "" :" t	"
 N+d2" " I$" " " 
"N !%"59'+ $$ :$ t	$
 N+d2$ $ I$$ $ $ 
$R !%"59'+!! :! t	!
 N+d2! ! I$! ! 
&!L !%"59'+!! :! t	!
 N+d2! ! I$! ! 
,!L !%"59'+ : t	
 N+d2  I$  
F #'*.)--- Cy4- Z 4'	-
 c3h$&- - - 
foo.	.-^Cy  c3h$&	
   
d5k	*"Cy" " c3h$&	"
 " " 
f!!	"T&//%:	:"HCy  c3h$&	
   
d4;	 ,
Cy
 
 c3h$&	

 
 
d4;	 
"
Z 
 
 c3h$&	

 
 
d4;	 
Z   c3h$&	
  
d5k	 	A 	A 	A 	A 	B# 	B$ 	B 	B 	R# 	R$ 	R 	R 	X 	XPT 	X 	XCC CD Cr!   r%   N)collectionsr   typingr   r   r   r   pydanticr   qdrant_client.httpr	   qdrant_client.embed.modelsr
   qdrant_client.fastembed_commonr   r   r   r   r   r   r   r   r   r   r%   r    r!   r"   <module>r      sS    # 2 2  % 4	 	 	 CLIwqz4 kC kCr!   