o
    ưi"                     @   s   d Z ddlmZ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 ddlmZmZmZmZmZmZ G d	d
 d
eZdS )zP
Translate between Cohere's `/rerank` format and Deepinfra's `/rerank` format. 
    )AnyDictListOptionalUnionN)uuid)Logging)BaseLLMExceptionBaseRerankConfig)get_secret_str)OptionalRerankParamsRerankBilledUnitsRerankResponseRerankResponseMetaRerankResponseResultRerankTokensc                       sp  e Zd ZdZ	d*dee d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,d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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 fd"d#Zdedefd$d%Zd&ed'ed	eeejf defd(d)Z  ZS )-DeepinfraRerankConfigzC
    Deepinfra Rerank - Follows the same Spec as Cohere Rerank
    Napi_basemodeloptional_paramsreturnc                 C   s@   |st dd|v r|ddn|}|dd }| d| S )a}  
        Constructs the complete DeepInfra inference endpoint URL for rerank.

        Args:
            api_base (Optional[str]): The base URL for the DeepInfra API.
            model (str): The model identifier.

        Returns:
            str: The complete URL for the DeepInfra rerank inference endpoint.

        Raises:
            ValueError: If api_base is None.
        z_Deepinfra API Base is required. api_base=None. Set in call or via `DEEPINFRA_API_BASE` env var.Zopenai /z
inference/)
ValueErrorreplacerstrip)selfr   r   r   Zapi_base_clean r   c/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/deepinfra/rerank/transformation.pyget_complete_url   s   z&DeepinfraRerankConfig.get_complete_urlheadersapi_keyc                 C   sR   |d u rt d}|d u rtdd| ddd}d|v r#|d |d< i ||S )NZDEEPINFRA_API_KEYzRDeepinfra API key is required. Please set 'DEEPINFRA_API_KEY' environment variablezBearer zapplication/json)Authorizationacceptzcontent-typer"   )r   r   )r   r    r   r!   r   default_headersr   r   r   validate_environmentB   s   z*DeepinfraRerankConfig.validate_environmentTnon_default_paramsdrop_paramsquery	documentscustom_llm_providertop_nrank_fieldsreturn_documentsmax_chunks_per_docmax_tokens_per_docc                 C   s   i }|r|gt | |d< |d urZ| D ]D\}}|dkr&|d ur&||d< q|dkr3|d ur3||d< q|dkr@|d ur@||d< q|dkrM|d urM||d< q|dkrY|d urY||d< qtdi |S )NZqueriesr)   Zservice_tierZinstructionZwebhookr   )lenitemsr   )r   r&   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   optional_rerank_paramskvr   r   r   map_cohere_rerank_params^   s&   




z.DeepinfraRerankConfig.map_cohere_rerank_paramsr2   c                 C   s   |d u ri S t |S N)dict)r   r   r2   r    r   r   r   transform_rerank_request   s   z.DeepinfraRerankConfig.transform_rerank_requestraw_responsemodel_responselogging_objrequest_datalitellm_paramsc	                    s@  z|  }	|j|jd |	dg }
|	dd}|	d}|	di }|dd}|d	d}|d
d}|dd}|dd}g }t|
D ]\}}|t|t|d qGt|dd}t	|d}t
||d}t|pptt ||d}||||||d|_|W S  ty   t j||||||||d}||jd< | Y S w )N)original_responsescoresinput_tokensr   
request_idinference_statusstatusunknown
runtime_mscostg        tokens_generatedtokens_input)indexZrelevance_score)r@   Zoutput_tokens)Ztotal_tokens)tokensbilled_units)idresultsmeta)rC   rE   rF   rG   rH   r   )r   r9   r:   r;   r!   r<   r   r=   r   )jsonZ	post_calltextget	enumerateappendr   floatr   r   r   r   strr   uuid4Z_hidden_params	Exceptionsupertransform_rerank_response)r   r   r9   r:   r;   r!   r<   r   r=   Zresponse_jsonr?   r@   rA   rB   rC   rE   rF   rG   rH   rM   iZscorerJ   rK   rN   Zrerank_response	__class__r   r   rY      s`   

	
z/DeepinfraRerankConfig.transform_rerank_responsec                 C   s   ddgS )Nr(   r)   r   )r   r   r   r   r   "get_supported_cohere_rerank_params   s   z8DeepinfraRerankConfig.get_supported_cohere_rerank_paramserror_messagestatus_codec                 C   s   dd l }z-|}t|tr||}t|tr0|d}t|tr)d|v r)|d }nt|tr0|}W n	 ty:   Y nw t|||d)Nr   detailerror)r_   messager    )rO   
isinstancerU   loadsr7   rQ   rW   r	   )r   r^   r_   r    rO   Z
error_datar`   r   r   r   get_error_class   s(   





z%DeepinfraRerankConfig.get_error_classr6   )NN)NNNTNN)__name__
__module____qualname____doc__r   rU   r7   r   r%   boolr   r   r   r   intr5   r8   httpxResponser   LiteLLMLoggingObjrY   listr]   ZHeadersr	   re   __classcell__r   r   r[   r   r      s    
'
#
	

$
	
Kr   )ri   typingr   r   r   r   r   rl   Zlitellm._uuidr   Z*litellm.litellm_core_utils.litellm_loggingr   rn   Z+litellm.llms.base_llm.rerank.transformationr	   r
   Zlitellm.secret_managers.mainr   Zlitellm.types.rerankr   r   r   r   r   r   r   r   r   r   r   <module>   s     
