Ë
    uPêjÒ  ã                   ó®   — d Z ddl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 dd	lmZmZ dd
lmZ ddlmZ ddlmZ  G d„ de«      Zy)zÄ
Transformation logic from OpenAI /v1/embeddings format to Jina AI's  `/v1/embeddings` format.

Why separate file? Make it easy to see how transformation works

Docs - https://jina.ai/embeddings/
é    N)ÚFinalÚcast)ÚLlmProviders)ÚLogging)ÚBaseEmbeddingConfig)ÚBaseLLMException)Úget_secret_str)ÚAllEmbeddingInputValuesÚAllMessageValues)ÚEmbeddingResponse©Úis_base64_encodedé   ©ÚJinaAIErrorc                   ó¤  — e Zd ZdZ	 	 dd„Zed„ «       Zdedee   fd„Z	de
d	e
ded
ede
f
d„Zdedz  dedz  deeedz  edz  f   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d	e
de
de
f
d„Z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!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dede
ej4                  z  defd„Zy)"ÚJinaAIEmbeddingConfigz0
    Reference: https://jina.ai/embeddings/
    ÚreturnNc                 ó¤   — t        «       j                  «       }|j                  «       D ]%  \  }}|dk7  sŒ|€Œt        | j                  ||«       Œ' y )NÚself)ÚlocalsÚcopyÚitemsÚsetattrÚ	__class__)r   Úlocals_ÚkeyÚvalues       úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/jina_ai/embedding/transformation.pyÚ__init__zJinaAIEmbeddingConfig.__init__   sF   € ô  ›Ÿ™›ˆØ!Ÿ-™-›/ò 	4‰JˆC�Ø�f‹} Ñ!2Ü˜Ÿ™¨¨UÕ3ñ	4ó    c                 óø   — | j                   j                  «       D ��ci c]O  \  }}|j                  d«      s9t        |t        j
                  t        j                  t        t        f«      s|�||“ŒQ c}}S c c}}w )NÚ__)	Ú__dict__r   Ú
startswithÚ
isinstanceÚtypesÚFunctionTypeÚBuiltinFunctionTypeÚclassmethodÚstaticmethod)ÚclsÚkÚvs      r   Ú
get_configz JinaAIEmbeddingConfig.get_config'   st   € ð Ÿ™×*Ñ*Ó,÷
á��1Ø—<‘< Ô%ÜØä×&Ñ&Ü×-Ñ-ÜÜ ð	ôð �ð ˆq‰Dó
ð 	
ùó 
s   žAA6Úmodelc                 ó   — dgS ©NÚ
dimensions© )r   r0   s     r   Úget_supported_openai_paramsz1JinaAIEmbeddingConfig.get_supported_openai_params9   s
   € Øˆ~Ðr!   Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ó   — d|v r|d   |d<   |S r2   r4   )r   r6   r7   r0   r8   s        r   Úmap_openai_paramsz'JinaAIEmbeddingConfig.map_openai_params<   s"   € ð Ð-Ñ-Ø,>¸|Ñ,LˆO˜LÑ)ØÐr!   Úapi_baseÚapi_keyc                 ó´   — |xs t        d«      xs d}|xs% t        d«      xs t        d«      xs t        d«      }t        j                  j                  ||fS )zÂ
        Returns:
            Tuple[str, Optional[str], Optional[str]]:
                - custom_llm_provider: str
                - api_base: str
                - dynamic_api_key: str
        ÚJINA_AI_API_BASEzhttps://api.jina.ai/v1ÚJINA_AI_API_KEYÚJINA_API_KEYÚJINA_AI_TOKEN)r	   r   ÚJINA_AIr   )r   r;   r<   Údynamic_api_keys       r   Ú$_get_openai_compatible_provider_infoz:JinaAIEmbeddingConfig._get_openai_compatible_provider_infoG   sa   € ð Ò]œ~Ð.@ÓAÒ]ÐE]ˆØ!(ò "
ÜÐ,Ó-Òr´ÀÓ1OÒrÔSaÐbqÓSrð 	ô ×#Ñ#×)Ñ)¨8°_ÐDÐDr!   Úlitellm_paramsÚstreamc                 ó   — |r|› d�S dS )Nz/embeddingsz!https://api.jina.ai/v1/embeddingsr4   )r   r;   r<   r0   r7   rE   rF   s          r   Úget_complete_urlz&JinaAIEmbeddingConfig.get_complete_urlY   s   € ñ ,4�(�˜;Ð'Ð\Ð9\Ð\r!   ÚinputÚheadersc                 ób  — d|i|¥}t        |t        «      rt        t        t           |«      n|g}t	        d„ |D «       «      rgg }|D ]Y  }t        |t        «      sŒt        |«      r(|j                  d«      d   }|j                  d|i«       ŒG|j                  d|i«       Œ[ ||d<   |S ||d<   |S )Nr0   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©Nr   )Ú.0Úxs     r   ú	<genexpr>zDJinaAIEmbeddingConfig.transform_embedding_request.<locals>.<genexpr>m   s   è ø€ Ò3¨Ô  ×#Ñ3ùs   ‚ú,é   ÚimageÚtextrI   )r&   Úlistr   ÚstrÚanyr   ÚsplitÚappend)	r   r0   rI   r7   rJ   ÚdataÚtransformed_inputr   Úimg_datas	            r   Útransform_embedding_requestz1JinaAIEmbeddingConfig.transform_embedding_requestd   sÁ   € ð  Ð9¨Ð9ˆÜ*4°U¼DÔ*A””Tœ#‘Y Ô&ÈÀwˆÜÑ3¨UÔ3Ô3Ø')ÐØò B�Ü˜e¤SÕ)Ü(¨Ô/Ø#(§;¡;¨sÓ#3°AÑ#6˜Ø)×0Ñ0°'¸8Ð1DÕEà)×0Ñ0°&¸%°ÕAðBð .ˆD�‰Mð ˆð "ˆD�‰MØˆr!   Úraw_responseÚmodel_responseÚlogging_objÚrequest_datac	                 ón   — |j                  «       }	|j                  t        |d|i|	¬«       t        di |	¤ŽS )NÚcomplete_input_dict)rI   r<   Úadditional_argsÚoriginal_responser4   )ÚjsonÚ	post_callrI   r   )
r   r0   r^   r_   r`   r<   ra   r7   rE   Úresponse_jsons
             r   Útransform_embedding_responsez2JinaAIEmbeddingConfig.transform_embedding_response{   sF   € ð  ,×0Ñ0Ó2ˆà×ÑÜØØ2°LÐAØ+ð	 	ô 	
ô !Ñ1 =Ñ1Ð1r!   Úmessagesc                 ó.   — ddi}|rd|› �|d<   i |¥|¥}|S )NzContent-Typezapplication/jsonzBearer ÚAuthorizationr4   )	r   rJ   r0   rj   r7   rE   r<   r;   Údefault_headerss	            r   Úvalidate_environmentz*JinaAIEmbeddingConfig.validate_environment�   s;   € ð Ð.ð"
ˆñ Ø18¸¸	Ð/BˆO˜OÑ,Ø0�_Ð0¨Ð0ˆØˆr!   Úerror_messageÚstatus_codec                 ó   — t        ||¬«      S )N)rp   Úmessager   )r   ro   rp   rJ   s       r   Úget_error_classz%JinaAIEmbeddingConfig.get_error_class¢   s   € ÜØ#Ø!ô
ð 	
r!   )r   NrM   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r*   r/   rV   rU   r5   ÚdictÚboolr:   ÚtuplerD   rH   r
   r]   ÚhttpxÚResponser   ÚLiteLLMLoggingObjri   r   rn   ÚintÚHeadersr   rs   r4   r!   r   r   r      sH  „ ñð4à	ó4ð ñ
ó ð
ð"°ð ¸¸c¹ó ð	à ð	ð ð	ð ð		ð
 ð	ð 
ó	ðEà˜‘*ðEð �t‘ðEð 
ˆs�C˜$‘J  d¡
Ð*Ñ	+ó	Eð2 #ñ	]à˜‘*ð	]ð �t‘ð	]ð ð		]ð
 ð	]ð ð	]ð �t‘ð	]ð 
ó	]ðàðð 'ðð ð	ð
 ðð 
óð.2àð2ð —n‘nð2ð *ð	2ð
 'ð2ð �t‘ð2ð ð2ð ð2ð ð2ð 
ó2ð8 #Ø#ñàðð ðð Ð'Ñ(ð	ð
 ðð ðð �t‘ðð ˜‘*ðð 
óð$
¨Sð 
¸sð 
ÈTÐTY×TaÑTaÑMað 
Ðfvô 
r!   r   )rw   r'   Útypingr   r   r{   Úlitellmr   Ú*litellm.litellm_core_utils.litellm_loggingr   r}   Úlitellm.llms.base_llmr   Ú)litellm.llms.base_llm.chat.transformationr   Úlitellm.secret_managers.mainr	   Úlitellm.types.llms.openair
   r   Úlitellm.types.utilsr   Úlitellm.utilsr   Úcommon_utilsr   r   r4   r!   r   ú<module>rŠ      s?   ðñó ß ã å  Ý SÝ 5Ý FÝ 7ß OÝ 1Ý +å &ôL
Ð/õ L
r!   