
    'Xh8                         d dl mZ d dlmZ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)Optional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     F/RAG/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e   deddfdZ	 	 	 	 	 	 ddedee   dee   deed	      d
e	dee
e      de	dedefdZ	 	 	 	 	 	 ddedee   dee   deed	      d
e	dee
e      de	dedefdZ	 	 	 	 	 d dedee   dee   deed	      d
e	dee
e      dedefdZ	 	 	 	 	 d dedee   dee   deed	      d
e	dee
e      dedefdZ	 	 	 	 	 d dedee   dee   deed	      d
e	dee
e      dedefdZ	 	 	 	 	 d!dedee
e      dee
e      deeeef      de	dedefdZde
e   dedeeeef      de	dede
e
e      fdZde
e   dedeeeef      de	dede
ej8                     fdZde
e   dedeeeef      de	dede
e
e
e         fdZde
e   dedeeeef      dede
e
e
e         f
dZde
e   dedeeeef      dede
e
e
e         f
dZ de
e   dedeeeef      dede
e
e      f
dZ!y)"EmbedderNthreads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)selfr'   r(   s      r#   __init__zEmbedder.__init__   sb    OZ[_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_modelsr2   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_model.   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_modelsr2   r.   r   r   r   r   r   rB   rC   s                r#   get_or_init_sparse_modelz!Embedder.get_or_init_sparse_modelR   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_modelsr2   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_modelx   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_modelsr2   r1   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_modelsr2   r0   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                 v   |d u |d u u rt        d      |t        j                  |      r| j                  |||||      }|S t        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 88D!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                   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 )Nr5   rh   )indicesvaluesrj   r!   )rJ   re   r
   SparseVectorrs   rl   rt   rm   )	r3   rY   r5   r   r[   r\   ro   sparse_embeddingrd   s	            r#   r_   zEmbedder._embed_sparse_text"  s     =t<<  
! 
%,] 
  )=(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C-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_textA  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_textW  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_imageh  sm      RtQQ  
! 
%,] 

 2==VXb=c
c	 c
 	
 
rz   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_imagew  so      <t;;czcU\Ub`bc 277vR\7]
]	 ] 	 
 	
s   A	r+   )NNNFNF)NNNFN)NNNF   )"r   r   r   r   intr   r4   r   r   r    r,   r   rF   r   rJ   r   rP   r   rT   r   rX   r   r   r   re   floatr^   r
   ru   r_   r`   ra   rc   rb   r!   r"   r#   r&   r&      s@          & $(!%8<*. "" C=" #	"
 H^45" " T#Y'" " " 
"N $(!%8<*. $$ C=$ #	$
 H^45$ $ T#Y'$ $ $ 
$R $(!%8<*.!! C=! #	!
 H^45! ! T#Y'! ! 
&!L $(!%8<*.!! C=! #	!
 H^45! ! T#Y'! ! 
,!L $(!%8<*. C= #	
 H^45  T#Y'  
F &*-1,0-- S	"- j)*	-
 $sCx.)- - - 
-^Cy  $sCx.)	
   
d5k	*Cy  $sCx.)	
   
f!!	">Cy  $sCx.)	
   
d4;	 ,
Cy
 
 $sCx.)	

 
 
d4;	 
"
Z 
 
 $sCx.)	

 
 
d4;	 
Z   $sCx.)	
  
d5k	r"   r&   N)collectionsr   typingr   r   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      sQ    # < <  % 4	 	 	 CLIwqz4 f fr"   