
    Mi_                         S SK r S SKJrJr  S SKJrJrJr  S SKr	S SK
JrJr  S SKJr  S SKJrJr  S SKJr  SrS	rS
rSrSrSr\(       a  S SKJr  S SKJr   " S S\5      r\ " S S\5      5       rg)    N)	dataclassfield)TYPE_CHECKINGListOptional)Field	SecretStr)Element)BaseEmbeddingEncoderEmbeddingConfig)requires_dependenciesz@mixedbread-ai/unstructured   <      floatendMixedbreadAIRequestOptionsc                   h    \ rS rSr% Sr\" S S9r\\S'   \" SS9r	\
\S'   \" S	/S
S9SS j5       rSrg)MixedbreadAIEmbeddingConfig   z
Configuration class for Mixedbread AI Embedding Encoder.

Attributes:
    api_key (str): API key for accessing Mixedbread AI..
    model_name (str): Name of the model to use for embeddings.
c                  R    [        [        R                  R                  S5      5      $ )NMXBAI_API_KEY)r	   osenvironget     y/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/unstructured/embed/mixedbreadai.py<lambda>$MixedbreadAIEmbeddingConfig.<lambda>#   s    	"**..*I Jr    )default_factoryapi_keyz"mixedbread-ai/mxbai-embed-large-v1)default
model_namemixedbread_aizembed-mixedbreadai)extrasc                 J    SSK Jn  U" U R                  R                  5       S9$ )zR
Create the Mixedbread AI client.

Returns:
    MixedbreadAI: Initialized client.
r   r   )r%   )mixedbread_ai.clientr   r%   get_secret_value)selfr   s     r!   
get_client&MixedbreadAIEmbeddingConfig.get_client*   s$     	6LL113
 	
r    r   N)returnr   )__name__
__module____qualname____firstlineno____doc__r   r%   r	   __annotations__r'   strr   r.   __static_attributes__r   r    r!   r   r      sU     JGY  4J  	#
	
r    r   c                   :   \ rS rSr% Sr\\S'   \" SSS9r\	\
\      \S'   \" SSS9r\	S   \S	'   S
\
\   4S jrS r\S 5       r\S
\4S j5       rS\
\   S
\
\
\      4S jr\S\
\   S\
\
\      S
\
\   4S j5       rS\
\   S
\
\   4S jrS\S
\
\   4S jrSrg)MixedbreadAIEmbeddingEncoderr   z
Embedding encoder for Mixedbread AI.

Attributes:
    config (MixedbreadAIEmbeddingConfig): Configuration for the embedding encoder.
configFN)initr&   _exemplary_embeddingr   _request_optionsr0   c                 ,    U R                  S/5      S   $ )zJGet an exemplary embedding to determine dimensions and unit vector status.Qr   _embed)r-   s    r!   get_exemplary_embedding4MixedbreadAIEmbeddingEncoder.get_exemplary_embeddingJ   s    {{C5!!$$r    c                     U R                   R                  c  [        S5      eSSKJn  U" [
        [        S[        0S9U l        g )NzThe Mixedbread AI API key must be specified.You either pass it in the constructor using 'api_key'or via the 'MXBAI_API_KEY' environment variable.r   r   z
User-Agent)max_retriestimeout_in_secondsadditional_headers)	r;   r%   
ValueErrormixedbread_ai.corer   MAX_RETRIESTIMEOUT
USER_AGENTr>   )r-   r   s     r!   
initialize'MixedbreadAIEmbeddingEncoder.initializeN   sE    ;;&E  	6 .#& ,j9!
r    c                 N    U R                  5       n[        R                  " U5      $ )z0Get the number of dimensions for the embeddings.)rC   npshaper-   exemplary_embeddings     r!   num_of_dimensions.MixedbreadAIEmbeddingEncoder.num_of_dimensions^   s#     #::<xx+,,r    c                     U R                  5       n[        R                  " [        R                  R	                  U5      S5      $ )z(Check if the embedding is a unit vector.g      ?)rC   rQ   iscloselinalgnormrS   s     r!   is_unit_vector+MixedbreadAIEmbeddingEncoder.is_unit_vectord   s2     #::<zz"))..)<=sCCr    textsc           
         [         n[        S[        U5      U5      n/ nU R                  R	                  5       nU HT  nXXb-    nUR                  U R                  R                  S[        [        U R                  US9nUR                  U5        MV     U VV	s/ s H!  oR                    H  oR                  PM     M#     sn	n$ s  sn	nf )z
Embed a list of texts using the Mixedbread AI API.

Args:
    texts (List[str]): List of texts to embed.

Returns:
    List[List[float]]: List of embeddings.
r   T)model
normalizedencoding_formattruncation_strategyrequest_optionsinput)
BATCH_SIZErangelenr;   r.   
embeddingsr'   ENCODING_FORMATTRUNCATION_STRATEGYr>   appenddata	embedding)
r-   r]   
batch_size	batch_itr	responsesclientibatchresponseitems
             r!   rB   #MixedbreadAIEmbeddingEncoder._embedj   s      
!SZ4		'')Aan-E((kk,, /$7 $ 5 5 ) H X&  09Sy8]]T]ySSSs   (Celementsrh   c                     [        U 5      [        U5      :X  d   e/ n[        U 5       H  u  p4X   Ul        UR                  U5        M!     U $ )z
Add embeddings to elements.

Args:
    elements (List[Element]): List of elements.
    embeddings (List[List[float]]): List of embeddings.

Returns:
    List[Element]: Elements with embeddings added.
)rg   	enumeraterh   rk   )rw   rh   elements_w_embeddingrr   elements        r!   _add_embeddings_to_elements8MixedbreadAIEmbeddingEncoder._add_embeddings_to_elements   sP     8}J///!#H-JA!+G ''0 . r    c                     U R                  U Vs/ s H  n[        U5      PM     sn5      nU R                  X5      $ s  snf )z
Embed a list of document elements.

Args:
    elements (List[Element]): List of document elements.

Returns:
    List[Element]: Elements with embeddings.
)rB   r7   r|   )r-   rw   erh   s       r!   embed_documents,MixedbreadAIEmbeddingEncoder.embed_documents   s;     [[(!;(Q#a&(!;<
//EE "<s   =queryc                 ,    U R                  U/5      S   $ )zy
Embed a query string.

Args:
    query (str): Query string to embed.

Returns:
    List[float]: Embedding of the query.
r   rA   )r-   r   s     r!   embed_query(MixedbreadAIEmbeddingEncoder.embed_query   s     {{E7#A&&r    )r>   )r1   r2   r3   r4   r5   r   r6   r   r=   r   r   r   r>   rC   rN   propertyrU   boolr[   r7   rB   staticmethodr
   r|   r   r   r8   r   r    r!   r:   r:   <   s    ('27UD2Q(4;/Q38eT3Rh/0R%e %
  - -
 D D D
TDI T$tE{*; T8 w--1$u+->	g (FW F$w- F
' 
'e 
'r    r:   ) r   dataclassesr   r   typingr   r   r   numpyrQ   pydanticr   r	   unstructured.documents.elementsr
   unstructured.embed.interfacesr   r   unstructured.utilsr   rM   re   rL   rK   ri   rj   r+   r   rJ   r   r   r:   r   r    r!   <module>r      sv    	 ( 0 0  % 3 O 4*


  11 
/  
F u'#7 u' u'r    