Ë
    uPêjÓ  ã                   ó¾   — d Z ddlmZmZmZ ddl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 dd
lmZmZ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 Cohere's /v1/embed format.

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

Convers
- v3 embedding models
- v2 embedding models

Docs - https://docs.cohere.com/v2/reference/embed
é    )ÚAnyÚFinalÚcastN)Ú#COHERE_DEFAULT_EMBEDDING_INPUT_TYPE)ÚLogging)ÚBaseEmbeddingConfig)ÚBaseLLMException)ÚCohereEmbeddingRequestÚCohereEmbeddingRequestWithModel)ÚAllEmbeddingInputValuesÚAllMessageValues)ÚEmbeddingResponseÚPromptTokensDetailsWrapperÚUsage)Úis_base64_encodedé   ©ÚCohereErrorc                   óô  — e Zd ZdZd&d„Zdedee   fd„Z	 d'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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e   dedefd„Zdededededef
d„Zdee   dededefd„Zdej.                  dedz  dedee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#ed$edeej<                  z  defd%„Z y)*ÚCohereEmbeddingConfigz?
    Reference: https://docs.cohere.com/v2/reference/embed
    ÚreturnNc                  ó   — y ©N© )Úselfs    úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/cohere/embed/transformation.pyÚ__init__zCohereEmbeddingConfig.__init__&   s   € Øó    Úmodelc                 ó
   — ddgS )NÚencoding_formatÚ
dimensionsr   ©r   r   s     r   Úget_supported_openai_paramsz1CohereEmbeddingConfig.get_supported_openai_params)   s   € Ø! <Ð0Ð0r   Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ó�   — |j                  «       D ]2  \  }}|dk(  rt        |t        «      r||d<   Œ!|g|d<   Œ(|dk(  sŒ.||d<   Œ4 |S )Nr!   Úembedding_typesr"   Úoutput_dimension)ÚitemsÚ
isinstanceÚlist)r   r%   r&   r   r'   ÚkÚvs          r   Úmap_openai_paramsz'CohereEmbeddingConfig.map_openai_params,   sf   € ð '×,Ñ,Ó.ò 	8‰DˆAˆqØÐ%Ò%Ü˜a¤Ô&Ø9:�OÐ$5Ò6à:;¸�OÐ$5Ò6Ø�lÓ"Ø67�Ð 2Ò3ð	8ð Ðr   ÚheadersÚmessagesÚlitellm_paramsÚapi_keyÚapi_basec                 ó.   — ddi}|rd|› �|d<   i |¥|¥}|S )NzContent-Typezapplication/jsonzBearer ÚAuthorizationr   )	r   r1   r   r2   r&   r3   r4   r5   Údefault_headerss	            r   Úvalidate_environmentz*CohereEmbeddingConfig.validate_environment=   s;   € ð Ð.ð"
ˆñ Ø18¸¸	Ð/BˆO˜OÑ,Ø0�_Ð0¨Ð0ˆØˆr   c                 ó
   — d|v S )NÚ3r   r#   s     r   Ú_is_v3_modelz"CohereEmbeddingConfig._is_v3_modelO   s   € Ø�eˆ|Ðr   Ústreamc                 ó   — |xs dS )Nzhttps://api.cohere.ai/v2/embedr   )r   r5   r4   r   r&   r3   r=   s          r   Úget_complete_urlz&CohereEmbeddingConfig.get_complete_urlR   s   € ð Ò;Ð;Ð;r   ÚinputÚinference_paramsc                 ó®   — d}|D ]  }t        |«      }Œ |rt        ||d¬«      }nt        ||t        ¬«      }|j                  «       D ]
  \  }}|||<   Œ |S )NFÚimage)r   ÚimagesÚ
input_type)r   ÚtextsrE   )r   r   r   r+   )	r   r   r@   rA   Ú
is_encodedÚ	input_strÚtransformed_requestr.   r/   s	            r   Ú_transform_requestz(CohereEmbeddingConfig._transform_request]   sƒ   € ð ˆ
Øò 	6ˆIÜ*¨9Ó5‰Jð	6ñ Ü"AØØØ"ô#Ñô #BØØÜ>ô#Ðð %×*Ñ*Ó,ò 	'‰DˆAˆqØ%&Ð Ò"ð	'ð #Ð"r   c           
      ó  — t        |t        «      r1t        |d   t        «      st        |d   t        «      rt        d«      ‚t	        t
        | j                  |t        |t        «      rt	        t        t           |«      n|g|¬«      «      S )Nr   zInput must be a list of strings)r   r@   rA   )r,   r-   ÚintÚ
ValueErrorr   ÚdictrJ   Ústr)r   r   r@   r&   r1   s        r   Útransform_embedding_requestz1CohereEmbeddingConfig.transform_embedding_requestv   s|   € ô �eœTÔ"¬
°5¸±8¼TÔ(BÄjÐQVÐWXÑQYÔ[^ÔF_ÜÐ>Ó?Ð?ÜÜØ×#Ñ#ØÜ0:¸5Ä$Ô0G”dœ4¤™9 eÔ,ÈeÈWØ!0ð $ó ó
ð 	
r   ÚencodingÚmetac                 ó4  — d}|j                  di «      j                  d«      }|j                  di «      j                  d«      }d }|€'|€%|D ]  }|t        |j                  |«      «      z  }Œ! nt        ||¬«      }|r||z  }|r||z  }t	        |d||¬«      S )Nr   Úbilled_unitsÚinput_tokensrD   )Úimage_tokensÚtext_tokens)Úprompt_tokensÚcompletion_tokensÚtotal_tokensÚprompt_tokens_details)ÚgetÚlenÚencoder   r   )	r   r@   rQ   rR   rU   rW   rV   r[   Útexts	            r   Ú_calculate_usagez&CohereEmbeddingConfig._calculate_usageˆ   s½   € Øˆà)-¯©°.À"Ó)E×)IÑ)IÈ.Ó)Yˆà*.¯(©(°>À2Ó*F×*JÑ*JÈ8Ó*TˆàCGÐØÐ KÐ$7Øò ;�Ø¤ H§O¡O°DÓ$9Ó :Ñ:‘ñ;ô %?Ø)Ø'ô%Ð!ñ Ø Ñ,�ÙØ Ñ+�äØ&ØØ%Ø"7ô	
ð 	
r   ÚresponseÚlogging_objÚdataÚmodel_responsec	                 ó¶  — |j                  «       }	|j                  ||d|i|	¬«       	 |	d   }
g }|
j                  «       D ]-  \  }}t        |«      D ]  \  }}|j	                  d||dœ«       Œ Œ/ d|_        ||_        ||_        d}|D ]  }|t        |j                  |«      «      z  }Œ! t        |d| j                  |||	j                  d	i «      «      «       |S )
NÚcomplete_input_dict)r@   r4   Úadditional_argsÚoriginal_responseÚ
embeddingsÚ	embedding)ÚobjectÚindexrj   r-   r   ÚusagerR   )ÚjsonÚ	post_callr+   Ú	enumerateÚappendrk   rc   r   r]   r^   Úsetattrr`   r\   )r   ra   r4   rb   rc   rd   r   rQ   r@   Úresponse_jsonri   Úoutput_datar.   Úembedding_listÚidxrj   rU   r_   s                     r   Ú_transform_responsez)CohereEmbeddingConfig._transform_response¤   s  € ð  (Ÿ}™}›ˆà×ÑØØØ2°DÐ9Ø+ð	 	ô 	
ð
	ð *¨,Ñ7ˆ
ØˆØ!+×!1Ñ!1Ó!3ò 	bÑˆAˆ~Ü"+¨NÓ";ò b‘��YØ×"Ñ"¨kÀCÐV_Ñ#`Õañbð	bð !'ˆÔØ)ˆÔØ$ˆÔØˆØò 	7ˆDØœC §¡°Ó 5Ó6Ñ6‰Lð	7ô 	ØØØ×!Ñ! %¨°=×3DÑ3DÀVÈRÓ3PÓQô	
ð Ðr   Úraw_responseÚrequest_datac	                 ój   — | j                  ||||||t        j                  |j                  d   ¬«      S )Nr@   )ra   r4   rb   rc   rd   r   rQ   r@   )rw   ÚlitellmrQ   Úmodel_call_details)	r   r   rx   rd   rb   r4   ry   r&   r3   s	            r   Útransform_embedding_responsez2CohereEmbeddingConfig.transform_embedding_responseÖ   sE   € ð ×'Ñ'Ø!ØØ#ØØ)ØÜ×%Ñ%Ø×0Ñ0°Ñ9ð (ó 	
ð 		
r   Úerror_messageÚstatus_codec                 ó   — t        ||¬«      S )N)r   Úmessager   )r   r~   r   r1   s       r   Úget_error_classz%CohereEmbeddingConfig.get_error_classì   s   € ÜØ#Ø!ô
ð 	
r   )r   N)F)NNr   )!Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rO   r-   r$   rN   Úboolr0   r   r9   r<   r?   r   rJ   r   rP   r   r   r`   ÚhttpxÚResponseÚLiteLLMLoggingObjr
   r   rw   r}   rL   ÚHeadersr	   r‚   r   r   r   r   r   !   sµ  „ ñóð1°ð 1¸¸c¹ó 1ð "ñà ðð ðð ð	ð
 ðð 
óð0 #Ø#ñàðð ðð Ð'Ñ(ð	ð
 ðð ðð �t‘ðð ˜‘*ðð 
óð$ #ð ¨$ó ð #ñ	<à˜‘*ð	<ð �t‘ð	<ð ð		<ð
 ð	<ð ð	<ð �t‘ð	<ð 
ó	<ð#Øð#Ø!% c¡ð#Ø>Bð#à	(ó#ð2
àð
ð 'ð
ð ð	
ð
 ð
ð 
ó
ð$
 d¨3¡ið 
¸3ð 
Àdð 
Èuó 
ð80à—.‘.ð0ð �t‘ð0ð 'ð	0ð
 Ð+Ñ+ð0ð *ð0ð ð0ð ð0ð ð0ð 
ó0ðd
àð
ð —n‘nð
ð *ð	
ð
 'ð
ð �t‘ð
ð ð
ð ð
ð ð
ð 
ó
ð,
¨Sð 
¸sð 
ÈTÐTY×TaÑTaÑMað 
Ðfvô 
r   r   )r†   Útypingr   r   r   rˆ   r{   r   Ú*litellm.litellm_core_utils.litellm_loggingr   rŠ   Úlitellm.llms.base_llmr   Ú)litellm.llms.base_llm.chat.transformationr	   Úlitellm.types.llms.bedrockr
   r   Úlitellm.types.llms.openair   r   Úlitellm.types.utilsr   r   r   Úlitellm.utilsr   Úcommon_utilsr   r   r   r   r   ú<module>r•      sJ   ðñ
÷ $Ñ #ã ã Ý 7Ý SÝ 5Ý F÷÷ Pß TÑ TÝ +å &ôO
Ð/õ O
r   