Ë
    uPêjœ  ã                   óœ   — d Z ddlmZmZ ddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ dd	lmZmZ  G d
„ de	«      Z G d„ de«      Zy)a   
Transform request/response for Voyage multimodal embeddings.

Voyage multimodal models use /v1/multimodalembeddings and accept `inputs`
containing content blocks, unlike standard Voyage embeddings which use
/v1/embeddings and a string/list `input` field.
é    )ÚAnyÚFinalN)ÚLogging)ÚBaseLLMException)ÚBaseEmbeddingConfig)Úget_secret_str)ÚAllEmbeddingInputValuesÚAllMessageValues)ÚEmbeddingResponseÚUsagec                   óJ   ‡ — e Zd Zi fdededeej                  z  fˆ fd„Zˆ xZ	S )ÚVoyageMultimodalEmbeddingErrorÚstatus_codeÚmessageÚheadersc                 óÊ   •— || _         || _        t        j                  dd¬«      | _        t        j
                  || j                  ¬«      | _        t        ‰| �!  |||¬«       y )NÚPOSTú0https://api.voyageai.com/v1/multimodalembeddings)ÚmethodÚurl)r   Úrequest)r   r   r   )	r   r   ÚhttpxÚRequestr   ÚResponseÚresponseÚsuperÚ__init__)Úselfr   r   r   Ú	__class__s       €ú|/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/voyage/embedding/transformation_multimodal.pyr   z'VoyageMultimodalEmbeddingError.__init__   sX   ø€ ð 'ˆÔØˆŒÜ—}‘}¨FÐ8jÔkˆŒÜŸ™°;ÈÏÉÔUˆŒÜ‰ÑØ#ØØð 	õ 	
ó    )
Ú__name__Ú
__module__Ú__qualname__ÚintÚstrÚdictr   ÚHeadersr   Ú__classcell__)r   s   @r    r   r      s7   ø„ ð
 )+ñ	
àð
ð ð
ð ˜Ÿ™Ñ%÷	
ñ 
r!   r   c                   ó¬  — e Zd ZdZededefd„«       Z	 d dedz  dedz  deded	ed
edz  defd„Z	dede
fd„Zdededededef
d„Z	 	 d!dedede
e   ded	ededz  dedz  defd„Zdeeef   deeef   fd„Zdedeeef   fd„Zdededededef
d„Zdi i i fdedej*                  dedededz  deded	edefd„Zdededeej4                  z  defd„Zy)"ÚVoyageMultimodalEmbeddingConfigzR
    Reference: https://docs.voyageai.com/reference/multimodal-embeddings-api
    ÚmodelÚreturnc                 ó&   — d| j                  «       v S )NÚ
multimodal)Úlower)r,   s    r    Úis_multimodal_embeddingsz8VoyageMultimodalEmbeddingConfig.is_multimodal_embeddings,   s   € à˜uŸ{™{›}Ð,Ð,r!   NÚapi_baseÚapi_keyÚoptional_paramsÚlitellm_paramsÚstreamc                 ó8   — |r|j                  d«      s|› d�}|S y)Nz/multimodalembeddingsr   )Úendswith)r   r2   r3   r,   r4   r5   r6   s          r    Úget_complete_urlz0VoyageMultimodalEmbeddingConfig.get_complete_url0   s+   € ñ Ø×$Ñ$Ð%<Ô=Ø&˜ZÐ'<Ð=�ØˆOØAr!   c                 ó   — dgS )NÚ
dimensions© )r   r,   s     r    Úget_supported_openai_paramsz;VoyageMultimodalEmbeddingConfig.get_supported_openai_params?   s
   € Øˆ~Ðr!   Únon_default_paramsÚdrop_paramsc                 ó   — d|v r|d   |d<   |S )Nr;   Úoutput_dimensionr<   )r   r>   r4   r,   r?   s        r    Úmap_openai_paramsz1VoyageMultimodalEmbeddingConfig.map_openai_paramsB   s#   € ð Ð-Ñ-Ø2DÀ\Ñ2RˆOÐ.Ñ/ØÐr!   r   Úmessagesc                 óx   — |€%t        d«      xs t        d«      xs t        d«      }|st        d«      ‚dd|› �iS )NÚVOYAGE_API_KEYÚVOYAGE_AI_API_KEYÚVOYAGE_AI_TOKENzŒVoyage API key is required for multimodal embeddings. Set VOYAGE_API_KEY / VOYAGE_AI_API_KEY / VOYAGE_AI_TOKEN or pass `api_key` explicitly.ÚAuthorizationzBearer )r   Ú
ValueError)r   r   r,   rC   r4   r5   r3   r2   s           r    Úvalidate_environmentz4VoyageMultimodalEmbeddingConfig.validate_environmentM   s^   € ð ˆ?äÐ/Ó0ò 5Ü!Ð"5Ó6ò5ä!Ð"3Ó4ð ñ
 Üð0óð ð
   7¨7¨)Ð!4Ð5Ð5r!   Úitemc                 ó0  — |j                  d«      }|dk(  r|j                  d«      }t        |t        «      r|j                  d«      }|€t        d«      ‚t        |t        «      r+|j                  d«      r|j                  d«      \  }}}d|dœS d|d	œS |S )
NÚtypeÚ	image_urlr   ziVoyage multimodal embeddings require a non-empty `image_url`. Got an image content block without a `url`.zdata:image/ú,Úimage_base64)rM   rP   )rM   rN   )ÚgetÚ
isinstancer'   rI   r&   Ú
startswithÚ	partition)r   rK   Ú	item_typerN   Ú_Úencodeds         r    Ú_normalize_content_itemz7VoyageMultimodalEmbeddingConfig._normalize_content_iteme   s¡   € ØŸ8™8 FÓ+ˆ	Ø˜Ò#ØŸ™ Ó-ˆIÜ˜)¤TÔ*Ø%ŸM™M¨%Ó0�	ØÐ Ü ðBóð ô ˜)¤SÔ)¨i×.BÑ.BÀ=Ô.QØ )× 3Ñ 3°CÓ 8‘��1�gØ .ÀÑHÐHØ'°iÑ@Ð@Øˆr!   c                 óÜ   — t        |t        «      rdd|dœgiS t        |t        «      r>d|v r:|j                  d«      xs g }i |¥d|D �cg c]  }| j	                  |«      ‘Œ c}i¥S |S c c}w )NÚcontentÚtext)rM   r[   )rR   r&   r'   rQ   rX   )r   rK   rZ   Úcontent_items       r    Ú_normalize_input_itemz5VoyageMultimodalEmbeddingConfig._normalize_input_itemv   sƒ   € Ü�dœCÔ Ø¨¸Ñ >Ð?Ð@Ð@Ü�dœDÔ! i°4Ñ&7Ø!ŸX™X iÓ0Ò6°BˆGðØðàÐ[bÖcÈ<˜D×8Ñ8¸ÕFÒcñð ð ˆùò ds   Á
A)Úinputc                 ó~   — t        |t        «      r|n|g}|D �cg c]  }| j                  |«      ‘Œ c}|dœ|¥S c c}w )N)Úinputsr,   )rR   Úlistr]   )r   r,   r^   r4   r   r`   rK   s          r    Útransform_embedding_requestz;VoyageMultimodalEmbeddingConfig.transform_embedding_request�   sI   € ô ",¨E´4Ô!8™¸u¸gˆàDJÖK¸D�t×1Ñ1°$Õ7ÒKØñ
ð ð
ð 	
ùÚKs   š:Úraw_responseÚmodel_responseÚlogging_objÚrequest_datac	                 ót  — 	 |j                  «       }	|	j                  d«      |_        |	j                  d«      |_        |	j                  d«      |_        |	j                  di «      }
|
j                  dd«      }t        ||¬«      |_
        |S # t        $ r" t        |j                  |j                  ¬«      ‚w xY w)	N)r   r   r,   ÚdataÚobjectÚusageÚtotal_tokensr   )Úprompt_tokensrk   )ÚjsonÚ	Exceptionr   r[   r   rQ   r,   rh   ri   r   rj   )r   r,   rc   rd   re   r3   rf   r4   r5   Úraw_response_jsonÚusage_payloadrk   s               r    Útransform_embedding_responsez<VoyageMultimodalEmbeddingConfig.transform_embedding_response�   s¾   € ð	rØ'3×'8Ñ'8Ó':Ðð  1×4Ñ4°WÓ=ˆÔØ/×3Ñ3°FÓ;ˆÔØ 1× 5Ñ 5°hÓ ?ˆÔà0×4Ñ4°W¸bÓAˆØ+×/Ñ/°ÀÓBˆÜ$Ø&Ø%ô 
ˆÔð Ðøô ò 	rÜ0¸×9JÑ9JÐXd×XpÑXpÔqÐqð	rús   ‚B Â+B7Úerror_messager   c                 ó   — t        |||¬«      S )N)r   r   r   )r   )r   rr   r   r   s       r    Úget_error_classz/VoyageMultimodalEmbeddingConfig.get_error_class«   s   € Ü-°mÐQ\ÐfmÔnÐnr!   )N)NN)r"   r#   r$   Ú__doc__Ústaticmethodr&   Úboolr1   r'   r9   ra   r=   rB   r
   rJ   r   rX   r]   r	   rb   r   r   r   ÚLiteLLMLoggingObjrq   r%   r(   r   rt   r<   r!   r    r+   r+   '   sU  „ ñð ð-¨ð -°ò -ó ð-ð #ñBà˜‘*ðBð �t‘ðBð ð	Bð
 ðBð ðBð �t‘ðBð 
óBð°ð ¸ó ð	à ð	ð ð	ð ð		ð
 ð	ð 
ó	ð$ #Ø#ñ6àð6ð ð6ð Ð'Ñ(ð	6ð
 ð6ð ð6ð �t‘ð6ð ˜‘*ð6ð 
ó6ð0¨D°°c°©Nð ¸tÀCÈÀH¹~ó ð"	¨#ð 	°$°s¸C°x±.ó 	ð
àð
ð 'ð
ð ð	
ð
 ð
ð 
ó
ð( #ØØ "Ø!ñàðð —n‘nðð *ð	ð
 'ðð �t‘ðð ðð ðð ðð 
óð8o¨Sð o¸sð oÈTÐTY×TaÑTaÑMað oÐfvô or!   r+   )ru   Útypingr   r   r   Ú*litellm.litellm_core_utils.litellm_loggingr   rx   Ú)litellm.llms.base_llm.chat.transformationr   Ú.litellm.llms.base_llm.embedding.transformationr   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.openair	   r
   Úlitellm.types.utilsr   r   r   r+   r<   r!   r    ú<module>r€      sB   ðñ÷ ã å SÝ FÝ NÝ 7ß Oß 8ô
Ð%5ô 
ô$EoÐ&9õ Eor!   