o
    ưi*                     @   s
  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red dl!m"Z# e#Z$neZ$G dd deZ%G dd deZ&ee% Z'G dd deZ(dS )    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                   @   s.   e Zd ZU dZeed< eed< ee ed< dS )HuggingFaceRerankResponseItemz:Type definition for HuggingFace rerank API response items.indexscoretextN)	__name__
__module____qualname____doc__int__annotations__floatr   str r&   r&   e/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/huggingface/rerank/transformation.pyr   !   s
   
 r   c                   @   s   e Zd ZdZdS )HuggingFaceRerankResponsez=Type definition for HuggingFace rerank API complete response.N)r   r   r    r!   r&   r&   r&   r'   r(   )   s    r(   c                   @   s  e Zd Zdedee def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e defddZdedeeef 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		d0dee dee deee ee f fd+d,ZdS )1HuggingFaceRerankConfigmodelapi_basereturnc                 C   sD   |d ur|S t dd urt ddS t dd ur t ddS dS )NHF_API_BASE HUGGINGFACE_API_BASEz$https://api-inference.huggingface.co)osgetenv)selfr*   r+   r&   r&   r'   get_api_base5   s   z$HuggingFaceRerankConfig.get_api_baseNoptional_paramsc                 C   s0   | j ||d}|d}|ds| d}|S )zc
        Get the complete URL for the API call, including the /rerank suffix if necessary.
        )r*   r+   /z/rerank)r3   rstripendswith)r2   r+   r*   r4   base_urlr&   r&   r'   get_complete_url?   s
   



z(HuggingFaceRerankConfig.get_complete_urlc                 C   s   g dS )N)query	documentstop_nreturn_documentsr&   )r2   r*   r&   r&   r'   "get_supported_cohere_rerank_paramsR   s   z:HuggingFaceRerankConfig.get_supported_cohere_rerank_paramsTnon_default_paramsdrop_paramsr:   r;   custom_llm_providerr<   rank_fieldsr=   max_chunks_per_docmax_tokens_per_docc                 C   s   i }|d urT|  D ]I\}}|dkr|d ur||d< q
|dkr-|d ur-t|tr-||d< q
|dkr:|d ur:||d< q
|dkrG|d urG||d< q
|dkrS|d urS||d< q
tdi |S )Nr;   textsr=   return_textr<   r:   r&   )items
isinstanceboolr   )r2   r?   r*   r@   r:   r;   rA   r<   rB   r=   rC   rD   optional_rerank_paramskvr&   r&   r'   map_cohere_rerank_paramsZ   s   



z0HuggingFaceRerankConfig.map_cohere_rerank_paramsheadersapi_keyc                 C   sN   | j ||d\}}ddd}|rd| |d< d|v r!|d |d< i ||S )N)rO   r+   zapplication/json)acceptzcontent-typezBearer Authorization)get_api_credentials)r2   rN   r*   rO   r4   r+   default_headersr&   r&   r'   validate_environmentx   s   	z,HuggingFaceRerankConfig.validate_environmentrJ   c                 C   s:   d|vrt dd|vrt ddddd}|| |S )Nr:   z(query is required for HuggingFace rerankrE   z;Cohere 'documents' param is required for HuggingFace rerankFZRight)Z
raw_scorestruncateZtruncation_direction)
ValueErrorupdate)r2   r*   rJ   rN   request_bodyr&   r&   r'   transform_rerank_request   s   
z0HuggingFaceRerankConfig.transform_rerank_requestraw_responsemodel_responselogging_objrequest_datalitellm_paramsc	              	   C   sj  z|  }	W n ty   tt|dt|t|dddw |dd}
zHt|	}t||d}|dd}|dg }d}|D ]}t|trM||d	 7 }q?t|tr^d|v r^||d d	 7 }q?|d	 | }
t||
d}W n  ty   |	r{t	|	d
 nd
}dt
 v rt	|
d nd}Y nw tdd}t||d}tddi||d}|ddp|dd}|dg }g }|	D ]r}|d}|d}|d u s|d u rqt||d}|r$|dd}|rt|d|d< n?|r$d|dd  krt	|k r$n n)||d }t|trt|d|d< nt|tr$d|v r$t|d d|d< || qttt ||dS )Nr   status_codei  messager_   r:   r.   )r*   r   rE    
   
input_text   r      )Zsearch_units)Zinput_tokensZoutput_tokensversionz1.0)api_versionZbilled_unitstokensrF   Fr=   r   r   )r   Zrelevance_score)r   Zdocument)idresultsmeta)json	Exceptionr   getattrr%   getr   rH   dictlenlocalsr   r   r   r   r   appendr   r
   uuid4)r2   r*   rZ   r[   r\   rO   r]   r4   r^   Zraw_response_jsonrd   Zresponse_textZestimated_output_tokensr:   r;   Zdocuments_textdocZestimated_input_tokensZ_billed_units_tokensZrerank_metaZshould_return_documentsZoriginal_documentsrl   itemr   r   resultZtext_contentr&   r&   r'   transform_rerank_response   s   


	




z1HuggingFaceRerankConfig.transform_rerank_responseerror_messager_   c                 C   s   t ||dS )Nr`   r   )r2   r|   r_   rN   r&   r&   r'   get_error_class  s   z'HuggingFaceRerankConfig.get_error_classc                 C   s4   |pt jptd}|pt jptdp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
        ZHUGGINGFACE_API_KEYr-   r/   )litellmZhuggingface_keyr   r+   )r2   rO   r+   Zfinal_api_keyZfinal_api_baser&   r&   r'   rR     s   z+HuggingFaceRerankConfig.get_api_credentials)N)NNNTNN)NNN)NN)r   r   r    r%   r   r3   rr   r9   listr>   rI   r   r   r   r   r"   rM   rT   r   rY   httpxResponser   LoggingClassr{   ZHeadersr   r}   r   rR   r&   r&   r&   r'   r)   4   s    

	

"


	

f
r)   ))r0   typingr   r   r   r   r   r   r   r   Ztyping_extensionsr	   r~   Zlitellm._uuidr
   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   r   r   r   r   Zlitellm.utilsr   Zcommon_utilsr   Z*litellm.litellm_core_utils.litellm_loggingr   ZLiteLLMLoggingObjr   r   r(   ZHuggingFaceRerankResponseListr)   r&   r&   r&   r'   <module>   s(    $$	