
    j"                         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
e      Zy)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                       e Zd ZdZ	 d"dee   dedee   defdZ	 	 d#deded	ee   dee   def
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Zdedededef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ZdedefdZded edeeej0                  f   defd!Z xZS )%DeepinfraRerankConfigzC
    Deepinfra Rerank - Follows the same Spec as Cohere Rerank
    Napi_basemodeloptional_paramsreturnc                     |st        d      d|v r|j                  dd      n|}|j                  d      dz   }| 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.openai /z
inference/)
ValueErrorreplacerstrip)selfr   r   r   api_base_cleans        /Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/deepinfra/rerank/transformation.pyget_complete_urlz&DeepinfraRerankConfig.get_complete_url   sb    & q  /7(.BHXr* 	
 (..s3c9 !!E733    headersapi_keyc                 l    |t        d      }|t        d      d| ddd}d|v r|d   |d<   i ||S )N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_headerss         r"   validate_environmentz*DeepinfraRerankConfig.validate_environmentB   sm     ?$%89G?d 
  'wi0(.
 g%/6/GOO, ./-W--r$   non_default_paramsdrop_paramsquery	documentscustom_llm_providertop_nrank_fieldsreturn_documentsmax_chunks_per_docmax_tokens_per_docc                     i }|r|gt        |      z  |d<   |Z|j                         D ]G  \  }}|dk(  r|||d<   |dk(  r|||d<    |dk(  r|||d<   -|dk(  r|||d<   :|dk(  s@|C||d<   I t        di |S )Nqueriesr0   service_tierinstructionwebhook )lenitemsr   )r    r-   r   r.   r/   r0   r1   r2   r3   r4   r5   r6   optional_rerank_paramskvs                  r"   map_cohere_rerank_paramsz.DeepinfraRerankConfig.map_cohere_rerank_params^   s     "$16#; 1"9- )*0021	>am89*95+%!-:;*;7.(Q]=>*>:-'AM<=*=9)^89*95 3 $=&<==r$   r?   c                      |i S t        |      S N)dict)r    r   r?   r%   s       r"   transform_rerank_requestz.DeepinfraRerankConfig.transform_rerank_request   s     ")I*++r$   raw_responsemodel_responselogging_objrequest_datalitellm_paramsc	                 H   	 |j                         }	|j                  |j                         |	j                  dg       }
|	j                  dd      }|	j                  d      }|	j                  di       }|j                  dd      }|j                  d	d      }|j                  d
d      }|j                  dd      }|j                  dd      }g }t	        |
      D ]*  \  }}|j                  t        |t        |                   , t        |d      }t        |      }t        ||      }t        |xs t        t        j                               ||      }||||||d|_        |S # t         $ r+ t"        | I  ||||||||      }||j                  d<   |cY S w xY w)N)original_responsescoresinput_tokensr   
request_idinference_statusstatusunknown
runtime_mscostg        tokens_generatedtokens_input)indexrelevance_score)rO   output_tokens)total_tokens)tokensbilled_units)idresultsmeta)rR   rT   rU   rV   rW   r   )r   rG   rH   rI   r&   rJ   r   rK   r   )json	post_calltextget	enumerateappendr   floatr   r   r   r   strr   uuid4_hidden_params	Exceptionsupertransform_rerank_response)r    r   rG   rH   rI   r&   rJ   r   rK   response_jsonrN   rO   rP   rQ   rR   rT   rU   rV   rW   r_   iscorer\   r]   r`   rerank_response	__class__s                             r"   rm   z/DeepinfraRerankConfig.transform_rerank_response   s   >	#(--/M!!L4E4E!F #&&x4F(,,^Q?L&**<8J  -001CRH%))(I>F)--lA>J#''4D/334FJ+//BL G%f-5(q%,O . ")F -,GL%V,OD,2TZZ\!2G$O !($4 ,.O* #" 	##g?)-') /- @ 	O 7<O**73""	#s   E)E- -1F! F!c                 
    ddgS )Nr/   r0   r<   )r    r   s     r"   "get_supported_cohere_rerank_paramsz8DeepinfraRerankConfig.get_supported_cohere_rerank_params   s    %%r$   error_messagestatus_codec                 &   dd l }	 |}t        |t              r|j                  |      }t        |t              r=|j                  d      }t        |t              r
d|v r|d   }nt        |t              r|}t        |||      # t        $ r Y w xY w)Nr   detailerror)rv   messager%   )ra   
isinstancerh   loadsrE   rd   rk   r
   )r    ru   rv   r%   ra   
error_datarx   s          r"   get_error_classz%DeepinfraRerankConfig.get_error_class   s     		&J--!ZZ6
*d+#1fd+60A$*7OM,$*M
 #!
 	
	  		s   A0B 	BBrD   )NN)NNNTNN)__name__
__module____qualname____doc__r   rh   rE   r#   r,   boolr   r   r   r   intrB   rF   httpxResponser   LiteLLMLoggingObjrm   listrt   Headersr
   r~   __classcell__)rr   s   @r"   r   r      s:    +/	!43-!4 !4 "$	!4
 
!4N "&*... . #	.
 "$. 
.F .2#+/+/,0,0"> "> "> 	">
 "> c4S>123"> &c]"> }"> d3i("> #4."> %SM"> %SM"> 
">H	,	, !%	, 		,
 
	," "& "!I#I# nnI# '	I#
 'I# #I# I# I# I# 
I#V& & &
 
/2
=B4CV=W
	
r$   r   )r   typingr   r   r   r   r   r   litellm._uuidr   *litellm.litellm_core_utils.litellm_loggingr	   r   +litellm.llms.base_llm.rerank.transformationr
   r   litellm.secret_managers.mainr   litellm.types.rerankr   r   r   r   r   r   r   r<   r$   r"   <module>r      s>    4 3   S 8 [
, [
r$   