
    Mi                     &   S SK Jr  S SKJr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  \(       a  S SKJr  0 S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_rSr " S S \5      r\ " S! S"\5      5       rg)#    )	dataclass)TYPE_CHECKINGIterableListOptionalN)Field	SecretStr)Element)BaseEmbeddingEncoderEmbeddingConfig)requires_dependenciesClientzvoyage-context-3i }  zvoyage-3.5-litei@B z
voyage-3.5i  zvoyage-2z	voyage-02zvoyage-3-large zvoyage-code-3zvoyage-large-2-instructzvoyage-finance-2zvoyage-multilingual-2zvoyage-law-2zvoyage-large-2zvoyage-3zvoyage-3-litezvoyage-code-2zvoyage-3-m-expzvoyage-multimodal-3i  c                       \ rS rSr% \\S'   \\S'   Sr\\S'   \	" SS9r
\\   \S'   \	" SS9r\\   \S	'   \	" SS9r\\   \S
'   \" S/SS9SS j5       rS\4S jrSrg)VoyageAIEmbeddingConfig'   api_key
model_nameFshow_progress_barN)default
batch_size
truncationoutput_dimensionvoyageaizembed-voyageai)extrasreturnc                 J    SSK Jn  U" U R                  R                  5       S9$ )z3Creates a VoyageAI python client to embed elements.r   r   )r   )r   r   r   get_secret_value)selfr   s     u/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/unstructured/embed/voyageai.py
get_client"VoyageAIEmbeddingConfig.get_client/   s$     	$LL113
 	
    c                 B    [         R                  U R                  S5      $ )z*Get the token limit for the current model.r   )VOYAGE_TOTAL_TOKEN_LIMITSgetr   r    s    r!   get_token_limit'VoyageAIEmbeddingConfig.get_token_limit;   s    (,,T__gFFr$    )r   r   )__name__
__module____qualname____firstlineno__r	   __annotations__strr   boolr   r   r   intr   r   r   r"   r)   __static_attributes__r+   r$   r!   r   r   '   s    O#t# %d 3J3!&t!4J4&+D&9hsm9	
	
G Gr$   r   c                   N   \ rS rSr% \\S'   S\\   4S jrS r	\
S\\S4   4S j5       r\
S\4S j5       rS\4S	 jrS
\\   SSS\\\      4S jr SS\\   SSS\S\\\      4S jjrS\\   S\\   4S jrS\S\\   4S jrS
\\   S\\   4S jr\S\\   4S j5       rSrg)VoyageAIEmbeddingEncoder@   configr   c                      U R                  SS9$ )NzA sample query.)query)embed_queryr(   s    r!   get_exemplary_embedding0VoyageAIEmbeddingEncoder.get_exemplary_embeddingD   s    &788r$   c                     g Nr+   r(   s    r!   
initialize#VoyageAIEmbeddingEncoder.initializeG   s    r$   .c                 N    U R                  5       n[        R                  " U5      $ r?   )r<   npshaper    exemplary_embeddings     r!   num_of_dimensions*VoyageAIEmbeddingEncoder.num_of_dimensionsJ   s!    "::<xx+,,r$   c                     U R                  5       n[        R                  " [        R                  R	                  U5      S5      $ )Ng      ?)r<   rC   iscloselinalgnormrE   s     r!   is_unit_vector'VoyageAIEmbeddingEncoder.is_unit_vectorO   s0    "::<zz"))..)<=sCCr$   c                 4    SU R                   R                  ;   $ )z7Check if the model is a contextualized embedding model.context)r8   r   r(   s    r!   _is_context_model*VoyageAIEmbeddingEncoder._is_context_modelT   s    DKK2222r$   textsclientr   c              #     #    U(       d  gU R                   R                  5       n/ nSnUR                  XR                   R                  S9nU Vs/ s H  n[	        U5      PM     nn[        U5       HH  u  pX   nU(       a#  [	        U5      [        :  d  X[-   U:  a  Uv   / nSnUR                  U
5        X[-  nMJ     U(       a  Uv   ggs  snf 7f)z
Generate batches of texts based on token limits.

Args:
    texts: List of texts to batch.
    client: VoyageAI client instance to use for tokenization.

Yields:
    Batches of texts as lists.
Nr   model)r8   r)   tokenizer   len	enumerateMAX_BATCH_SIZEappend)r    rS   rT   max_tokens_per_batchcurrent_batchcurrent_batch_tokensall_token_liststokenstoken_countsitextn_tokenss               r!   _build_batches'VoyageAIEmbeddingEncoder._build_batchesX   s      #{{::<#%  !//%{{7M7M/N2AB/F/B 'GA#H M"n4(36JJ $# "'($  & ,  ("  ' Cs   ACC%A+Cbatch
input_typec                    U R                  5       (       an  UR                  U/U R                  R                  UU R                  R                  S9nUR
                  S   R                   Vs/ s H  n[        U5      PM     sn$ UR                  UU R                  R                  UU R                  R                  U R                  R                  S9nUR                   Vs/ s H  n[        U5      PM     sn$ s  snf s  snf )a	  
Embed a batch of texts using the appropriate method for the model.

Args:
    batch: List of texts to embed.
    client: VoyageAI client instance to use for embedding.
    input_type: Type of input ("document" or "query").

Returns:
    List of embedding vectors.
)inputsrW   ri   r   r   )rS   rW   ri   r   r   )
rQ   contextualized_embedr8   r   r   results
embeddingslistembedr   )r    rh   rT   ri   resultembs         r!   _embed_batch%VoyageAIEmbeddingEncoder._embed_batch   s     !!##00wkk,,%!%!=!=	 1 F *0):)E)EF)E#DI)EFF\\kk,,%;;11!%!=!= " F *0):):;):#DI):;; G <s   ,C9!C>elementsc                    U(       d  / $ U R                   R                  5       nU Vs/ s H  n[        U5      PM     nn/ n[        U R	                  XB5      5      nU R                   R
                  (       a   SSKJn  U" USS9nU H$  nU R                  XSS9n	UR                  U	5        M&     U R                  X5      $ s  snf ! [         a  n[        S5      UeSnAff = f)	z
Embed documents with automatic batching based on token limits.

Args:
    elements: List of elements to embed.

Returns:
    List of elements with embeddings added.
r   )tqdmzEmbedding batches)desczgMust have tqdm installed if `show_progress_bar` is set to True. Please install with `pip install tqdm`.Ndocumentri   )r8   r"   r1   ro   rf   r   	tqdm.autorw   ImportErrorrs   extend_add_embeddings_to_elements)
r    ru   rT   erS   all_embeddingsbatchesrw   rh   batch_embeddingss
             r!   embed_documents(VoyageAIEmbeddingEncoder.embed_documents   s     I'')!)*AQ*,. t**59:;;((*w-@A E#00:0V!!"23  //II+ +  !> s   B?7C 
CCCr:   c                 d    U R                   R                  5       nU R                  U/USS9nUS   $ )zg
Embed a single query string.

Args:
    query: Query string to embed.

Returns:
    Embedding vector.
r:   rz   r   )r8   r"   rs   )r    r:   rT   r   s       r!   r;   $VoyageAIEmbeddingEncoder.embed_query   s;     ''),,eWf,Q""r$   c                     U(       d  / $ U R                   R                  5       nUR                  XR                   R                  S9nU Vs/ s H  n[	        U5      PM     sn$ s  snf )z
Count tokens for the given texts.

Args:
    texts: List of texts to count tokens for.

Returns:
    List of token counts for each text.
rV   )r8   r"   rX   r   rY   )r    rS   rT   token_lists
token_lists        r!   count_tokens%VoyageAIEmbeddingEncoder.count_tokens   sT     I'')ooe;;3I3IoJ2=>+JJ+>>>s   A#c                     [        U 5      [        U5      :X  d   e/ n[        U 5       H  u  p4X   Ul        UR                  U5        M!     U $ r?   )rY   rZ   rn   r\   )ru   rn   elements_w_embeddingrc   elements        r!   r~   4VoyageAIEmbeddingEncoder._add_embeddings_to_elements   sN    8}J///!#H-JA!+G ''0 . r$   r+   N)ry   )r,   r-   r.   r/   r   r0   r   floatr<   r@   propertytupler3   rG   r2   rM   rQ   r1   r   rf   rs   r
   r   r;   r   staticmethodr~   r4   r+   r$   r!   r6   r6   @   s=   ##9e 9 -5c? - - D D D34 3( DI ( x ( HTRUYDW ( V EO<#Y<(0<>A<	d5k	<@#JW #J$w- #JJ# #e #?$s) ?S	 ?" T']  r$   r6   )dataclassesr   typingr   r   r   r   numpyrC   pydanticr   r	   unstructured.documents.elementsr
   unstructured.embed.interfacesr   r   unstructured.utilsr   r   r   r&   r[   r   r6   r+   r$   r!   <module>r      s'   ! : :  % 3 O 4y ' 	
  g W w  W G g  W W  g!" 7# * Go G2 l3 l lr$   