
    <i?                         S SK Jr  S SKJrJrJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJrJrJrJrJrJr  \" S5      r " S S	\\\   S
S9r " S S5      rg)    )defaultdict)SequenceAnyTypeVarGeneric)	BaseModel)models)NumericVector)OnnxProvider
ImageInputTextEmbeddingSparseTextEmbeddingLateInteractionTextEmbedding"LateInteractionMultimodalEmbeddingImageEmbeddingFastEmbedMiscTc                   B    \ rS rSr% \\S'   \\\4   \S'   Sr	\
\S'   Srg)ModelInstance   modeloptionsF
deprecated N)__name__
__module____qualname____firstlineno__r   __annotations__dictstrr   r   bool__static_attributes__r       V/home/james-whalen/.local/lib/python3.13/site-packages/qdrant_client/embed/embedder.pyr   r      s    H#s(^Jr$   r   T)arbitrary_types_allowedc                      \ rS rSrS%S\S-  S\SS4S jjr      S&S\S\S-  S\S-  S	\S
   S-  S\	S\
\   S-  S\	S\S\4S jjr      S&S\S\S-  S\S-  S	\S
   S-  S\	S\
\   S-  S\	S\S\4S jjr     S'S\S\S-  S\S-  S	\S
   S-  S\	S\
\   S-  S\S\4S jjr     S'S\S\S-  S\S-  S	\S
   S-  S\	S\
\   S-  S\S\4S jjr     S'S\S\S-  S\S-  S	\S
   S-  S\	S\
\   S-  S\S\4S jjr     S(S\S\
\   S-  S\
\   S-  S\\\4   S-  S\	S\S\4S jjrS\
\   S\S\\\4   S-  S\	S\S\
\
\      4S jrS\
\   S\S\\\4   S-  S\	S\S\
\R8                     4S jrS\
\   S\S\\\4   S-  S\	S\S\
\
\
\         4S jrS\
\   S\S\\\4   S-  S\S\
\
\
\         4
S jrS\
\   S\S\\\4   S-  S\S\
\
\
\         4
S jr S\
\   S\S\\\4   S-  S\S\
\
\      4
S jr!\"S\S\	4S j5       r#\"S\S\	4S  j5       r$\"S\S\	4S! j5       r%\"S\S\	4S" j5       r&\"S\S\	4S# j5       r'S$r(g))Embedder   Nthreadskwargsreturnc                     [        [        5      U l        [        [        5      U l        [        [        5      U l        [        [        5      U l        [        [        5      U l        Xl        g N)r   listembedding_modelssparse_embedding_models!late_interaction_embedding_modelsimage_embedding_models,late_interaction_multimodal_embedding_models_threads)selfr*   r+   s      r%   __init__Embedder.__init__   s`    OZ[_O` 	$
  	. WbW
#
  	9  r$   
model_name	cache_dir	providersr   cuda
device_idsr   c                    [         R                  " U5      (       d$  [        SU S[         R                  " 5        35      eUU=(       d    U R                  UUUS.UEn	U R
                  U    HB  n
U(       a  U
R                  (       d  U(       a  M$  U
R                  U	:X  d  M6  U
R                  s  $    [        SSU0U	D6n[        XUS9nU R
                  U   R                  U5        U$ NUnsupported embedding model: . Supported models: r:   r*   r;   r<   r=   r9   )r   r   r   r   )r   is_supported_text_model
ValueErrorlist_text_modelsr5   r0   r   r   r   r   r   appendr6   r9   r:   r*   r;   r<   r=   r   r+   r   instancer   model_instances                r%   get_or_init_modelEmbedder.get_or_init_model.   s     44Z@@/
|;OP]PnPnPpOqr  #/$--"$
 
 --j9Hx22J8#3#3w#>~~%	 : ??w?7DZ8
 	j)00@r$   c                    [         R                  " U5      (       d$  [        SU S[         R                  " 5        35      eUU=(       d    U R                  UUUS.UEn	U R
                  U    HB  n
U(       a  U
R                  (       d  U(       a  M$  U
R                  U	:X  d  M6  U
R                  s  $    [        SSU0U	D6n[        XUS9nU R
                  U   R                  U5        U$ r?   )r   is_supported_sparse_modelrD   list_sparse_modelsr5   r1   r   r   r   r   r   rF   rG   s                r%   get_or_init_sparse_model!Embedder.get_or_init_sparse_modelR   s     66zBB/
|;OP]PpPpPrOst 
 #/$--"$
 
 44Z@Hx22J8#3#3w#>~~%	 A $EzEWE=JZ>
 	$$Z077Gr$   c                    [         R                  " U5      (       d$  [        SU S[         R                  " 5        35      eUU=(       d    U R                  UUUS.UEnU R
                  U    H!  n	U	R                  U:X  d  M  U	R                  s  $    [        SSU0UD6n
[        XS9nU R
                  U   R                  U5        U
$ Nr@   rA   rB   r9   )r   r   r   )r   (is_supported_late_interaction_text_modelrD   !list_late_interaction_text_modelsr5   r2   r   r   r   r   rF   r6   r9   r:   r*   r;   r<   r=   r+   r   rH   r   rI   s               r%   "get_or_init_late_interaction_model+Embedder.get_or_init_late_interaction_modelx   s     EEjQQ/
| <%%2%T%T%V$WY 
 #/$--"$
 
 >>zJH7*~~% K -N
NgNFSG
 	..z:AA.Qr$   c                    [         R                  " U5      (       d$  [        SU S[         R                  " 5        35      eUU=(       d    U R                  UUUS.UEnU R
                  U    H!  n	U	R                  U:X  d  M  U	R                  s  $    [        SSU0UD6n
[        XS9nU R
                  U   R                  U5        U
$ rR   )r   .is_supported_late_interaction_multimodal_modelrD   'list_late_interaction_multimodal_modelsr5   r4   r   r   r   r   rF   rU   s               r%   -get_or_init_late_interaction_multimodal_model6Embedder.get_or_init_late_interaction_multimodal_model   s     KKJWW/
| <%%2%Z%Z%\$]_ 
 #/$--"$
 
 II*UH7*~~% V 3TjTGTLYM
 	99*ELL^\r$   c                    [         R                  " U5      (       d$  [        SU S[         R                  " 5        35      eUU=(       d    U R                  UUUS.UEnU R
                  U    H!  n	U	R                  U:X  d  M  U	R                  s  $    [        SSU0UD6n
[        XS9nU R
                  U   R                  U5        U
$ rR   )r   is_supported_image_modelrD   list_image_modelsr5   r3   r   r   r   r   rF   rU   s               r%   get_or_init_image_model Embedder.get_or_init_image_model   s     55jAA/
|;OP]PoPoPqOrs  #/$--"$
 
 33J?H7*~~% @ @*@@8EE8c##J/66~Fr$   textsimagesr   is_query
batch_sizec                    US L US L L a  [        S5      eUb  [        R                  " U5      (       a  U R                  X!XEU5      nU$ [        R                  " U5      (       a  U R                  X!XEU5      nU$ [        R                  " U5      (       a  U R                  X!XEU5      nU$ [        R                  " U5      (       a  U R                  X!XF5      nU$ [        SU 35      eUc   e[        R                  " U5      (       a  U R                  X1XF5      nU$ [        R                  " U5      (       a  U R                  X1XF5      nU$ [        SU 35      e)Nz-Either documents or images should be providedr@   )rD   r   rC   _embed_dense_textrM   _embed_sparse_textrS   _embed_late_interaction_textrY   '_embed_late_interaction_multimodal_textr^   _embed_dense_image(_embed_late_interaction_multimodal_image)r6   r9   rb   rc   r   rd   re   
embeddingss           r%   embedEmbedder.embed   s    TMv~.LMM 44Z@@!33w*
< 7 88DD!44w*
4 / GG
SS!>>w*
, ' MMjYY!IIw
$  !#@!MNN ""55jAA!44V]
  MMjYY!JJ
  !#@!MNNr$   c                    U R                   " SSU0U=(       d    0 D6nU(       d/  UR                  XS9 Vs/ s H  nUR                  5       PM     nnU$ UR                  US9 Vs/ s H  owR                  5       PM     nnU$ s  snf s  snf Nr9   	documentsre   queryr   )rJ   rn   tolistquery_embed	r6   rb   r9   r   rd   re   embedding_model_inst	embeddingrm   s	            r%   rg   Embedder._embed_dense_text  s      $55]]w}Z\] "6!;!;e!;!c!cI   "!c    5I4T4T[`4T4a4ay  "4a   
   B%Bc                    U R                   " SSU0U=(       d    0 D6nU(       dd  UR                  XS9 Vs/ s HH  n[        R                  " UR                  R                  5       UR                  R                  5       S9PMJ     nnU$ UR                  US9 Vs/ s HH  n[        R                  " UR                  R                  5       UR                  R                  5       S9PMJ     nnU$ s  snf s  snf )Nr9   rr   )indicesvaluesrt   r   )rO   rn   r	   SparseVectorr~   rv   r   rw   )	r6   rb   r9   r   rd   re   ry   sparse_embeddingrm   s	            r%   rh   Embedder._embed_sparse_text"  s     $<<  
! 
%,] 
  )=(B(B# )C )
)$	 ##,44;;=+2299;)  "  )=(H(Hu(H(U
 )V$	 ##,44;;=+2299; )V   #s   AC-AC2c                    U R                   " SSU0U=(       d    0 D6nU(       d/  UR                  XS9 Vs/ s H  nUR                  5       PM     nnU$ UR                  US9 Vs/ s H  owR                  5       PM     nnU$ s  snf s  snf rq   )rV   rn   rv   rw   rx   s	            r%   ri   %Embedder._embed_late_interaction_textA  s      $FF  
! 
%,] 
  "6!;!;e!;!c!cI   "!c    5I4T4T[`4T4a4ay  "4a   
r|   c                     U R                   " SSU0U=(       d    0 D6nUR                  XS9 Vs/ s H  nUR                  5       PM     sn$ s  snf )Nr9   rr   r   )r[   
embed_textrv   )r6   rb   r9   r   re   ry   rz   s          r%   rj   0Embedder._embed_late_interaction_multimodal_textW  sp      $QQ  
! 
%,] 

 2<< = 
	 
 	
 
   Ac                     U R                   " SSU0U=(       d    0 D6nUR                  XS9 Vs/ s H  nUR                  5       PM     sn$ s  snf Nr9   )rc   re   r   )r[   embed_imagerv   )r6   rc   r9   r   re   ry   rz   s          r%   rl   1Embedder._embed_late_interaction_multimodal_imageh  sg      $QQ  
! 
%,] 

 2==V=c
c	 c
 	
 
r   c                     U R                   " SSU0U=(       d    0 D6nUR                  XS9 Vs/ s H  nUR                  5       PM     nnU$ s  snf r   )r`   rn   rv   )r6   rc   r9   r   re   ry   rz   rm   s           r%   rk   Embedder._embed_dense_imagew  sj      $;;czcU\Ub`bc 277v7]
]	 ] 	 
 	
s   Ac                 .    [         R                  " U5      $ zCheck 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   rC   clsr9   s     r%   rC    Embedder.is_supported_text_model  s     44Z@@r$   c                 .    [         R                  " U5      $ r   )r   r^   r   s     r%   r^   !Embedder.is_supported_image_model  s     55jAAr$   c                 .    [         R                  " U5      $ r   )r   rS   r   s     r%   rS   1Embedder.is_supported_late_interaction_text_model  s     EEjQQr$   c                 .    [         R                  " U5      $ r   )r   rY   r   s     r%   rY   7Embedder.is_supported_late_interaction_multimodal_model  s     KKJWWr$   c                 .    [         R                  " U5      $ r   )r   rM   r   s     r%   rM   "Embedder.is_supported_sparse_model  s     66zBBr$   )r5   r0   r3   r2   r4   r1   r.   )NNNFNF)NNNFN)NNNF   ))r   r   r   r   intr   r7   r!   r   r"   r/   r   rJ   r   rO   r   rV   r   r[   r   r`   r   r    r
   rn   floatrg   r	   r   rh   ri   rj   rl   rk   classmethodrC   r^   rS   rY   rM   r#   r   r$   r%   r(   r(      s    d
  S  T  & !%"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$&- - - 
-^Cy  c3h$&	
   
d5k	*Cy  c3h$&	
   
f!!	">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3 	C4 	C 	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 bC bCr$   