o
    ưi                     @   s   d dl mZmZ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mZ dd	lmZ G d
d deZdS )    )AnyDictListOptionalUnionN)Logging)BaseLLMException)BaseRerankConfig)get_secret_str)OptionalRerankParamsRerankRequestRerankResponse   CohereErrorc                   @   sv  e Zd ZdZd,ddZ	d-dee dedee defd	d
Zdede	fddZ
						d.dee dedededeeeeeef f  dee dee deee  dee dee dee defddZ		d/dededee dee def
ddZdedededefdd Zdi i i fded!ejd"ed#edee d$eded%edefd&d'Zd(ed)edeeejf defd*d+ZdS )0CohereRerankConfigz@
    Reference: https://docs.cohere.com/v2/reference/rerank
    returnNc                 C   s   d S N )selfr   r   `/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/cohere/rerank/transformation.py__init__   s   zCohereRerankConfig.__init__api_basemodeloptional_paramsc                 C   s*   |r| d}|ds| d}|S dS )N/z
/v1/rerankzhttps://api.cohere.ai/v1/rerank)rstripendswith)r   r   r   r   r   r   r   get_complete_url   s   


z#CohereRerankConfig.get_complete_urlc                 C   s   g dS )N)query	documentstop_nmax_chunks_per_docrank_fieldsreturn_documentsr   )r   r   r   r   r   "get_supported_cohere_rerank_params%   s   z5CohereRerankConfig.get_supported_cohere_rerank_paramsTnon_default_paramsdrop_paramsr   r    custom_llm_providerr!   r#   r$   r"   max_tokens_per_docc              	   C   s   t t|||||	|
dS )zf
        Map Cohere rerank params

        No mapping required - returns all supported params
        )r   r    r!   r#   r$   r"   )dictr   )r   r&   r   r'   r   r    r(   r!   r#   r$   r"   r)   r   r   r   map_cohere_rerank_params/   s   z+CohereRerankConfig.map_cohere_rerank_paramsheadersapi_keyc                 C   s`   |d u rt dpt dptj}|d u rtdd| ddd}d|v r*|d |d< i ||S )NZCOHERE_API_KEYZ
CO_API_KEYz_Cohere API key is required. Please set 'COHERE_API_KEY' or 'CO_API_KEY' or 'litellm.cohere_key'zBearer zapplication/json)Authorizationacceptzcontent-typer.   )r
   litellmZ
cohere_key
ValueError)r   r,   r   r-   r   default_headersr   r   r   validate_environmentK   s"   z'CohereRerankConfig.validate_environmentoptional_rerank_paramsc                 C   sj   d|vrt dd|vrt dt||d |d |dd |dd |dd |dd d	}|jd
dS )Nr   z#query is required for Cohere rerankr    z'documents is required for Cohere rerankr!   r#   r$   r"   )r   r   r    r!   r#   r$   r"   T)Zexclude_none)r1   r   getZ
model_dump)r   r   r4   r,   Zrerank_requestr   r   r   transform_rerank_requestk   s   



	z+CohereRerankConfig.transform_rerank_requestraw_responsemodel_responselogging_objrequest_datalitellm_paramsc	           
      C   s:   z|  }	W n ty   t|j|jdw tdi |	S )z
        Transform Cohere rerank response

        No transformation required, litellm follows cohere API response format
        messagestatus_codeNr   )json	Exceptionr   textr>   r   )
r   r   r7   r8   r9   r-   r:   r   r;   Zraw_response_jsonr   r   r   transform_rerank_response   s   z,CohereRerankConfig.transform_rerank_responseerror_messager>   c                 C   s   t ||dS )Nr<   r   )r   rC   r>   r,   r   r   r   get_error_class   s   z"CohereRerankConfig.get_error_class)r   Nr   )NNNTNN)NN)__name__
__module____qualname____doc__r   r   strr*   r   listr%   boolr   r   r   r   intr+   r3   r6   httpxResponser   LiteLLMLoggingObjrB   ZHeadersr   rD   r   r   r   r   r      s    


	

 
 
	

r   )typingr   r   r   r   r   rM   r0   Z*litellm.litellm_core_utils.litellm_loggingr   rO   Z)litellm.llms.base_llm.chat.transformationr   Z+litellm.llms.base_llm.rerank.transformationr	   Zlitellm.secret_managers.mainr
   Zlitellm.types.rerankr   r   r   Zcommon_utilsr   r   r   r   r   r   <module>   s    