
    g6                         d Z ddlmZmZmZmZ ddl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mZ ddlmZ  G d	 d
      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ListOptionalUnionN)#COHERE_DEFAULT_EMBEDDING_INPUT_TYPE)Logging)CohereEmbeddingRequestCohereEmbeddingRequestWithModel)EmbeddingResponsePromptTokensDetailsWrapperUsage)is_base64_encodedc                       e Zd ZdZddZdee   fdZdededefdZ	d	ede
fd
Zd	ede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e   dedeeef   ded	edededefdZy)CohereEmbeddingConfigz?
    Reference: https://docs.cohere.com/v2/reference/embed
    returnNc                      y )N selfs    ]/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/cohere/embed/transformation.py__init__zCohereEmbeddingConfig.__init__    s        c                     dgS )Nencoding_formatr   r   s    r   get_supported_openai_paramsz1CohereEmbeddingConfig.get_supported_openai_params#   s    !""r   non_default_paramsoptional_paramsc                 L    |j                         D ]  \  }}|dk(  s||d<    |S )Nr   embedding_types)items)r   r   r   kvs        r   map_openai_paramsz'CohereEmbeddingConfig.map_openai_params&   s7     ',,.DAq%%56 12 / r   modelc                 
    d|v S )N3r   )r   r$   s     r   _is_v3_modelz"CohereEmbeddingConfig._is_v3_model.   s    e|r   inputinference_paramsc                     d}|D ]  }t        |      } |rt        ||d      }nt        ||t              }|j                         D ]
  \  }}|||<    |S )NFimage)r$   images
input_type)r$   textsr-   )r   r
   r   r    )	r   r$   r(   r)   
is_encoded	input_strtransformed_requestr!   r"   s	            r   _transform_requestz(CohereEmbeddingConfig._transform_request1   sy     
I*95J  "A"# #B># %**,DAq%&" - #"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_tokensr,   )image_tokenstext_tokens)prompt_tokenscompletion_tokenstotal_tokensprompt_tokens_details)getlenencoder   r   )	r   r(   r3   r4   r7   r9   r8   r=   texts	            r   _calculate_usagez&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	                    |j                         }	|j                  ||d|i|	       	 |	d   }
g }t        |
      D ]  \  }}|j                  d||d        d|_        ||_        ||_        d}|D ]  }|t        |j                  |            z  }! t        |d| j                  |||	j                  d	i                    |S )
Ncomplete_input_dict)r(   rD   additional_argsoriginal_response
embeddings	embedding)objectindexrM   listr   usager4   )json	post_call	enumerateappendrN   rF   r$   r?   r@   setattrrB   r>   )r   rC   rD   rE   rF   rG   r$   r3   r(   response_jsonrL   output_dataidxrM   r7   rA   s                   r   _transform_responsez)CohereEmbeddingConfig._transform_responseg   s     !2D9+	 	 	

	 #<0
'
3NC&9M 4 !')$DC 566L  	!!%=3D3DVR3PQ	
 r   )r   N)__name__
__module____qualname____doc__r   r   strr   dictr#   boolr'   r
   r2   r   r   rB   httpxResponser   LiteLLMLoggingObjr   r	   r   rP   rZ   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   )r^   typingr   r   r   r   rb   litellmr   *litellm.litellm_core_utils.litellm_loggingr   rd   litellm.types.llms.bedrockr	   r
   litellm.types.utilsr   r   r   litellm.utilsr   r   r   r   r   <module>rk      s8   
 . -  7 S U T +~ ~r   