
    ^h6                         S r SSKJrJrJrJr  SSKrSSKJr  SSK	J
r  SSKJrJr  SSKJrJrJr  SSKJr   " S	 S
5      rg)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ListOptionalUnionN)#COHERE_DEFAULT_EMBEDDING_INPUT_TYPE)Logging)CohereEmbeddingRequestCohereEmbeddingRequestWithModel)EmbeddingResponsePromptTokensDetailsWrapperUsage)is_base64_encodedc                       \ rS rSrSrSS jrS\\   4S jrS\	S\	S\	4S	 jr
S
\S\4S jrS
\S\\   S\	S\4S jrS\\   S\S\	S\4S jrS\R&                  S\\   S\S\\	\4   S\S
\S\S\S\4S jrSrg)CohereEmbeddingConfig   z7
Reference: https://docs.cohere.com/v2/reference/embed
returnNc                     g )N selfs    b/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/cohere/embed/transformation.py__init__CohereEmbeddingConfig.__init__    s        c                     S/$ )Nencoding_formatr   r   s    r   get_supported_openai_params1CohereEmbeddingConfig.get_supported_openai_params#   s    !""r   non_default_paramsoptional_paramsc                 P    UR                  5        H  u  p4US:X  d  M  XBS'   M     U$ )Nr   embedding_types)items)r   r   r    kvs        r   map_openai_params'CohereEmbeddingConfig.map_openai_params&   s3     ',,.DA%%56 12 / r   modelc                     SU;   $ )N3r   )r   r(   s     r   _is_v3_model"CohereEmbeddingConfig._is_v3_model.   s    e|r   inputinference_paramsc                     SnU H  n[        U5      nM     U(       a  [        UUSS9nO[        UU[        S9nUR                  5        H	  u  pxXU'   M     U$ )NFimage)r(   images
input_type)r(   textsr2   )r   r
   r   r#   )	r   r(   r-   r.   
is_encoded	input_strtransformed_requestr$   r%   s	            r   _transform_request(CohereEmbeddingConfig._transform_request1   st     
I*95J  "A"# #B># %**,DA%&" - #"r   encodingmetac                 @   SnUR                  S0 5      R                  S5      nUR                  S0 5      R                  S5      nS nUc*  Uc'  U H   nU[        UR                  U5      5      -  nM"     O [        UUS9nU(       a  XF-  nU(       a  XE-  n[	        USUUS9$ )Nr   billed_unitsinput_tokensr1   )image_tokenstext_tokens)prompt_tokenscompletion_tokenstotal_tokensprompt_tokens_details)getlenencoder   r   )	r   r-   r9   r:   r=   r?   r>   rC   texts	            r   _calculate_usage&CohereEmbeddingConfig._calculate_usageJ   s    %)XXnb%A%E%En%U&*hh~r&B&F&Fx&PFJK$7HOOD$9 ::  %?)'%! ,+&%"7	
 	
r   responseapi_keylogging_objdatamodel_responsec	                 ~   UR                  5       n	UR                  UUSU0U	S9   U	S   n
/ n[        U
5       H  u  pUR                  SXS.5        M     SUl        Xl        Xel        SnU H   nU[        UR                  U5      5      -  nM"     [        USU R                  XU	R                  S	0 5      5      5        U$ )
Ncomplete_input_dict)r-   rK   additional_argsoriginal_response
embeddings	embedding)objectindexrT   listr   usager:   )json	post_call	enumerateappendrU   rM   r(   rE   rF   setattrrH   rD   )r   rJ   rK   rL   rM   rN   r(   r9   r-   response_jsonrS   output_dataidxrT   r=   rG   s                   r   _transform_response)CohereEmbeddingConfig._transform_responseg   s     !2D9+	 	 	

	 #<0
'
3NC&M 4 !')$DC 566L  	!!%=3D3DVR3PQ	
 r   r   )r   N)__name__
__module____qualname____firstlineno____doc__r   r   strr   dictr&   boolr+   r
   r7   r   r   rH   httpxResponser   LiteLLMLoggingObjr   r	   r   rW   ra   __static_attributes__r   r   r   r   r      s
   #T#Y #"&9=	# $ ##!%c#>B#	(#2
d3i 
3 
d 
u 
:2..2 #2 '	2
 D0012 *2 2 2 2 
2r   r   )rg   typingr   r   r   r   rk   litellmr   *litellm.litellm_core_utils.litellm_loggingr   rm   litellm.types.llms.bedrockr	   r
   litellm.types.utilsr   r   r   litellm.utilsr   r   r   r   r   <module>ru      s8   
 . -  7 S U T +~ ~r   