
    h?*                        d dl Z d dlZd dlmZmZmZ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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	TypedDictUnion)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     j/var/www/Befach/backend/env/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ee   d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	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.   r/   s      r)   get_api_basez$HuggingFaceRerankConfig.get_api_base4   sR    OYY}%199]B//YY-.:993R889r(   c                 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.   r/   /z/rerank)r8   rstripendswith)r7   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'   )r7   r.   s     r)   "get_supported_cohere_rerank_paramsz:HuggingFaceRerankConfig.get_supported_cohere_rerank_paramsL   s    
 	
r(   Nnon_default_paramsdrop_paramsr@   rA   custom_llm_providerrB   rank_fieldsrC   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 )NrA   textsrC   return_textrB   r@   r'   )items
isinstanceboolr   )r7   rE   r.   rF   r@   rA   rG   rB   rH   rC   rI   rJ   optional_rerank_paramskvs                  r)   map_cohere_rerank_paramsz0HuggingFaceRerankConfig.map_cohere_rerank_paramsT   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)rV   r/   zapplication/json)acceptzcontent-typezBearer Authorization)get_api_credentials)r7   rU   r.   rV   r/   default_headerss         r)   validate_environmentz,HuggingFaceRerankConfig.validate_environmentr   sj     !44Wx4X ).

 18	/BOO,g%/6/GOO,-/-W--r(   rQ   c                 p    d|vrt        d      d|vrt        d      dddd}|j                  |       |S )Nr@   z(query is required for HuggingFace rerankrL   z;Cohere 'documents' param is required for HuggingFace rerankFRight)
raw_scorestruncatetruncation_direction)
ValueErrorupdate)r7   r.   rQ   rU   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optional_params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  messagerm   r@   r3   )r.   r   rL    
   
input_text   r      )search_units)input_tokensoutput_tokensversionz1.0)api_versionbilled_unitstokensrM   FrC   r   r   )r   relevance_score)r   document)idresultsmeta)json	Exceptionr   getattrr&   getr   rO   dictlenlocalsr   r   r   r   r   appendr   uuiduuid4)r7   r.   rf   rg   rh   rV   ri   rj   rk   raw_response_jsonrr   response_textestimated_output_tokensr@   rA   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_messagerm   c                     t        ||      S )Nrn   r   )r7   r   rm   rU   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_KEYr2   r4   )litellmhuggingface_keyr   r/   )r7   rV   r/   final_api_keyfinal_api_bases        r)   rZ   z+HuggingFaceRerankConfig.get_api_credentials  sd     Ww..W.AV2W 	  66m,6 45	 	 n,,r(   )NNNTNN)NN)r   r    r!   r&   r   r8   r>   listrD   r   rP   r   r
   r   r   r#   r   rT   r\   re   httpxResponser   LoggingClassr   Headersr   r   r   rZ   r'   r(   r)   r-   r-   3   s   :# :# :3 :# s s 
 
 
 .2#+/+/,0,0>$TN> > 	>
 > c4S>123> &c]> }> d3i(> #4.> %SM> %SM> 
>D "&"&.. . #	.
 3-. 
.. !&&: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-   )'r5   r   typingr   r   r   r   r   r   r	   r
   r   r   )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    	  T T T   F H 7   ( +W$LLI 		 	 !%%B C s-. s-r(   