
    j*                        d dl Z d dlmZmZmZmZmZmZmZ d dl	Z	d dl
m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mZmZmZmZ d d	lmZ d
dlm Z  er	d dl!m"Z# e#Z$neZ$ G d de      Z% G d de      Z&ee%   Z' G d de      Z(y)    N)TYPE_CHECKINGAnyDictListOptionalTupleUnion)	TypedDict)uuid)BaseLLMException)BaseRerankConfig)get_secret_str)OptionalRerankParamsRerankBilledUnitsRerankResponseRerankResponseDocumentRerankResponseMetaRerankResponseResultRerankTokens)token_counter   HuggingFaceError)Loggingc                   6    e Zd ZU dZeed<   eed<   ee   ed<   y)HuggingFaceRerankResponseItemz:Type definition for HuggingFace rerank API response items.indexscoretextN)	__name__
__module____qualname____doc__int__annotations__floatr   str     /Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/huggingface/rerank/transformation.pyr   r   !   s    DJL
3-r)   r   c                       e Zd ZdZy)HuggingFaceRerankResponsez=Type definition for HuggingFace rerank API complete response.N)r    r!   r"   r#   r(   r)   r*   r,   r,   )   s
    G 	r)   r,   c                      e Zd Zdedee   defdZ	 d#dee   dedee   defdZdedef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Z	 	 	 d%dededee   dee   dee   defdZdedeeef   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dZded edeeej2                  f   defd!Z	 	 d&dee   dee   deee   ee   f   fd"Zy)'HuggingFaceRerankConfigmodelapi_basereturnc                     ||S t        j                  d      t        j                  dd      S t        j                  d      t        j                  dd      S y)NHF_API_BASE HUGGINGFACE_API_BASEz$https://api-inference.huggingface.co)osgetenv)selfr/   r0   s      r*   get_api_basez$HuggingFaceRerankConfig.get_api_base5   sR    OYY}%199]B//YY-.:993R889r)   Noptional_paramsc                 z    | j                  ||      }|j                  d      }|j                  d      s| d}|S )zc
        Get the complete URL for the API call, including the /rerank suffix if necessary.
        )r/   r0   /z/rerank)r9   rstripendswith)r8   r0   r/   r:   base_urls        r*   get_complete_urlz(HuggingFaceRerankConfig.get_complete_url?   sH     $$58$D ??3'  +"7+Hr)   c                 
    g dS )N)query	documentstop_nreturn_documentsr(   )r8   r/   s     r*   "get_supported_cohere_rerank_paramsz:HuggingFaceRerankConfig.get_supported_cohere_rerank_paramsR   s    
 	
r)   non_default_paramsdrop_paramsrB   rC   custom_llm_providerrD   rank_fieldsrE   max_chunks_per_docmax_tokens_per_docc                     i }|j|j                         D ]W  \  }}|dk(  r|||d<   |dk(  r|t        |t              r||d<   0|dk(  r|||d<   =|dk(  r|||d<   J|dk(  sP|S||d<   Y t        di |S )NrC   textsrE   return_textrD   rB   r(   )items
isinstanceboolr   )r8   rG   r/   rH   rB   rC   rI   rD   rJ   rE   rK   rL   optional_rerank_paramskvs                  r*   map_cohere_rerank_paramsz0HuggingFaceRerankConfig.map_cohere_rerank_paramsZ   s     "$)*0021#67*73,,:aQUCV<=*=9'\am67*73+%!-67*73'\am67*73 3 $=&<==r)   headersapi_keyc                 p    | j                  ||      \  }}ddd}|rd| |d<   d|v r|d   |d<   i ||S )N)rX   r0   zapplication/json)acceptzcontent-typezBearer Authorization)get_api_credentials)r8   rW   r/   rX   r:   r0   default_headerss          r*   validate_environmentz,HuggingFaceRerankConfig.validate_environmentx   sj     !44Wx4X ).

 18	/BOO,g%/6/GOO,-/-W--r)   rS   c                 p    d|vrt        d      d|vrt        d      dddd}|j                  |       |S )NrB   z(query is required for HuggingFace rerankrN   z;Cohere 'documents' param is required for HuggingFace rerankFRight)
raw_scorestruncatetruncation_direction)
ValueErrorupdate)r8   r/   rS   rW   request_bodys        r*   transform_rerank_requestz0HuggingFaceRerankConfig.transform_rerank_request   s[     00GHH00M   $+
 	23r)   raw_responsemodel_responselogging_objrequest_datalitellm_paramsc	           
      b   	 |j                         }	|j                  dd      }
	 t	        |	      }t        ||      }|j                  dd      }|j                  dg       }d}|D ]<  }t        |t              r	||d	z   z  }t        |t              s-d|v s2||d   d	z   z  }> |d	z   |z   }
t        ||
      }t        d      }t        ||      }t        ddi||      }|j                  dd      xs |j                  dd      }|j                  dg       }g }|	D ]  }|j                  d      }|j                  d      }||*t        ||      }|r|j                  dd      }|rt        |      |d<   n|rd|j                  dd      cxk  rt        |      k  r]n nZ||j                  d         }t        |t              rt        |      |d<   n&t        |t              rd|v rt        |d         |d<   |j!                  |        t#        t	        t%        j&                               ||      S # t        $ r- t        t        |dt	        |            t        |dd            w xY w# t        $ r2 |	rt        |	      d
z  nd
}dt               v rt        |
      dz  nd}Y w xY w)Nr   status_codei  messagern   rB   r4   )r/   r   rN    
   
input_text   r      )search_units)input_tokensoutput_tokensversionz1.0)api_versionbilled_unitstokensrO   FrE   r   r   )r   relevance_score)r   document)idresultsmeta)json	Exceptionr   getattrr'   getr   rQ   dictlenlocalsr   r   r   r   r   appendr   r   uuid4)r8   r/   rh   ri   rj   rX   rk   r:   rl   raw_response_jsonrs   response_textestimated_output_tokensrB   rC   documents_textdocestimated_input_tokens_billed_units_tokensrerank_metashould_return_documentsoriginal_documentsr   itemr   r   resulttext_contents                                r*   transform_rerank_responsez1HuggingFaceRerankConfig.transform_rerank_response   s   	?K?P?P?R "%%gr2
	 12M&3%m&T# !$$Wb1E$(("5I  N c3'"cCi/NT*v}"c&kC&77N	 ! ~5J%2Z%P" *q9/?V
 )"E*w

 #/"2"25#
 #90%8 	  *--gr:%DHHW%EHHW%E } *uMF '#xx3  )?\)RF:&'A'21F -&J - -TXXg->?C!#s+-C-Mz*#C.6S=-CV-Uz*NN6"; &> 4::< 
 	
g  	"fc,6GH#L-E 	8  	 0A%&+b $ (4vx'?J!#Q #	s)   H: A,I3 I3 "I3 :6I037J.-J.error_messagern   c                     t        ||      S )Nro   r   )r8   r   rn   rW   s       r*   get_error_classz'HuggingFaceRerankConfig.get_error_class  s      ;OOr)   c                     |xs t         j                  xs t        d      }|xs* t         j                  xs t        d      xs t        d      }||fS )aX  
        Get API key and base URL from multiple sources.
        Returns tuple of (api_key, api_base).

        Parameters:
            api_key: API key provided directly to this function, takes precedence over all other sources
            api_base: API base provided directly to this function, takes precedence over all other sources
        HUGGINGFACE_API_KEYr3   r5   )litellmhuggingface_keyr   r0   )r8   rX   r0   final_api_keyfinal_api_bases        r*   r\   z+HuggingFaceRerankConfig.get_api_credentials  sd     Ww..W.AV2W 	  66m,6 45	 	 n,,r)   )N)NNNTNN)NNN)NN)r    r!   r"   r'   r   r9   r   r@   listrF   rR   r   r	   r   r   r$   rV   r^   r   rg   httpxResponser   LoggingClassr   Headersr   r   r   r\   r(   r)   r*   r.   r.   4   s   :# :# :3 : +/	3-  "$	
 
&
 
 
 .2#+/+/,0,0>$TN> > 	>
 > c4S>123> &c]> }> d3i(> #4.> %SM> %SM> 
>D "&*."&.. . #	.
 "$. 3-. 
.0 !&&:D&@ A 	
 
< "& "!d
d
 nnd
 '	d

 "d
 #d
 d
 d
 d
 
d
LP P/2P=B4CV=WP	P "&"&-#- 3-- 
x}hsm+	,	-r)   r.   ))r6   typingr   r   r   r   r   r   r	   r   typing_extensionsr
   r   litellm._uuidr   )litellm.llms.base_llm.chat.transformationr   +litellm.llms.base_llm.rerank.transformationr   litellm.secret_managers.mainr   litellm.types.rerankr   r   r   r   r   r   r   litellm.utilsr   common_utilsr   *litellm.litellm_core_utils.litellm_loggingr   LiteLLMLoggingObjr   r   r,   HuggingFaceRerankResponseListr.   r(   r)   r*   <module>r      s    	 I I I  '   F H 7   ( +W$LLI 		 	 !%%B C y-. y-r)   