o
    ưi\                     @   s  d dl Z d dlZd dl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Zd dl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 d dlmZ d d	lmZ d d
lmZmZm Z m!Z! d dl"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( er}d dl)m*Z+ e+Z,neZ,da-da.G dd deZ/dS )    N)deepcopy)TYPE_CHECKINGAnyDictListOptionalTupleUnion)convert_content_list_to_str)custom_promptprompt_factory)CustomStreamWrapper)
BaseConfigBaseLLMExceptionget_secret_str)AllMessageValues)ChoicesMessageModelResponseUsage)token_counter   )HuggingFaceErrorhf_task_listhf_tasksoutput_parser)Loggingc                       s  e Zd ZU dZdZee ed< dZee	 ed< dZ
ee ed< dZee ed< dZee	 ed< dZee ed	< d
Zee ed< dZee	 ed< dZee ed< dZee	 ed< dZee	 ed< dZee	 ed< dZee	 ed< dZee ed< dZee ed< 														dHdee	 dee dee dee	 d	ee dee dee	 dee dee	 dee	 dee	 dee	 dee dee ddfddZe fddZdd ZdefddZdededed edef
d!d"Z dee fd#d$Z!d%d& Z"dede#eef fd'd(Z$ded)e%e& de'd*e'd+e'de'fd,d-Z(d.ee dedefd/d0Z)		dId+eded)e%e& ded*e'd1ee d.ee defd2d3Z*d4ed5e	d+e+e'e,j-f de.fd6d7Z/	dJd8e,j0d9e1ded:e'd1ee de%eee2f  fd;d<Z3d=e+e%eee2f  eee2f f d>e4d?ee de'd@e2d)e%e& defdAdBZ5		dIdedCe,j0d>e4d9e1dDed)e%e& ded*ed@e2d1ee dEee de4fdFdGZ6  Z7S )KHuggingFaceEmbeddingConfigz|
    Reference: https://huggingface.github.io/text-generation-inference/#/Text%20Generation%20Inference/compat_generate
    Nhf_taskbest_ofdecoder_input_detailsTdetailsmax_new_tokensrepetition_penaltyFreturn_full_textseedtemperaturetop_ktop_n_tokenstop_ptruncate	typical_p	watermarkreturnc                 C   s>   t   }| D ]\}}|dkr|d urt| j|| q	d S )Nself)localscopyitemssetattr	__class__)r/   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   Zlocals_keyvalue r7   h/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/huggingface/embedding/transformation.py__init__?   s   
z#HuggingFaceEmbeddingConfig.__init__c                    s
   t   S N)super
get_config)clsr4   r7   r8   r<   U   s   
z%HuggingFaceEmbeddingConfig.get_configc                 C   s   ddgS )NZ	use_cacheZwait_for_modelr7   r/   r7   r7   r8   get_special_options_paramsY      z5HuggingFaceEmbeddingConfig.get_special_options_paramsmodelc                 C   s   g dS )N)streamr'   
max_tokensmax_completion_tokensr*   stopnechor7   )r/   rB   r7   r7   r8   get_supported_openai_params\   rA   z6HuggingFaceEmbeddingConfig.get_supported_openai_paramsnon_default_paramsoptional_paramsdrop_paramsc                 C   s   |  D ]T\}}|dkr|dks|dkrd}||d< |dkr"||d< |dkr.||d< d|d	< |d
kr6||d
< |dkr>||d< |dksF|dkrP|dkrLd}||d< |dkrXd|d< q|S )Nr'   g        r   g{Gz?r*   rG   r    TZ	do_samplerC   rF   rD   rE      r#   rH   r!   )r2   )r/   rJ   rK   rB   rL   paramr6   r7   r7   r8   map_openai_paramsh   s.   z,HuggingFaceEmbeddingConfig.map_openai_paramsc                 C   s   t dS )NZHUGGINGFACE_API_KEYr   r?   r7   r7   r8   get_hf_api_key   rA   z)HuggingFaceEmbeddingConfig.get_hf_api_keyc                 C   s  z~t d urtd urt tfW S t }tjtjt}tj|}tj|dd}t	|d}|D ]	}|
|  q1W d    n1 sEw   Y  |a tj|dd}t }t	|d}|D ]	}|
|  q_W d    n1 ssw   Y  |a||fW S  ty   t t f Y S w )NZhuggingface_llms_metadatazhf_text_generation_models.txtrzhf_conversational_models.txt)tgi_models_cacheconv_models_cachesetospathdirnameabspath__file__joinopenaddstrip	Exception)r/   
tgi_modelsZscript_directory	file_pathfilelineZconv_modelsr7   r7   r8   read_tgi_conv_models   sB   

z/HuggingFaceEmbeddingConfig.read_tgi_conv_modelsc                 C   sr   | dd tv r| dd}|d |d fS |  \}}||v r%d|fS ||v r-d|fS d|v r5d|fS d|fS )N/r   rM   text-generation-inferenceconversationalzroneneldan/TinyStoriesztext-generation)splitr   rc   )r/   rB   Zsplit_modelr_   Zconversational_modelsr7   r7   r8   get_hf_task_for_model   s   z0HuggingFaceEmbeddingConfig.get_hf_task_for_modelmessageslitellm_paramsheadersc              	   C   s  | dd }|d u st|tr|tvrtd|ttj	 }|
 D ]\}}	||vr0|	||< q$|  }
i }g }|
 D ]\}}	||
v rN|	||< || q=|D ]}|| qQ|dkrt|}|d |d g }g }d}|D ])}|d dkr|dkr|| t|}qs|d d	ks|d d
kr|t| qs|||d|d}n|dkr|tjv rtj| }t| dpi | dd| dd|d}nt||d}||d|v rt|d tr|d du rdndd}n]|tjv rtj| }t| di | dd| dd| dd| dd|d}nt||d}t|}|d |d d|i}|dkrH||d< d|v rD|d du rDdnd|d< t| dkrX|d|i |S )Ntaskz)Invalid hf task - {}. Valid formats - {}.rf   r"   r%    ZroleuserZ	assistantsystem)textpast_user_inputsgenerated_responses)inputs
parametersre   Zrolesinitial_prompt_valuefinal_prompt_value)	role_dictru   rv   ri   rB   ri   rC   TF)rs   rt   rC   	bos_token	eos_token)rw   ru   rv   ry   rz   ri   rs   rt   r   options)get
isinstancestrr   r^   formatr   litellmr   r<   r2   r@   appendpopr   r
   Zcustom_prompt_dictr   r   boollenkeysupdate)r/   rB   ri   rK   rj   rk   rl   configkvZspecial_paramsZspecial_params_dictZkeys_to_popZinference_paramsrq   rr   rp   messagedataZmodel_prompt_detailspromptr7   r7   r8   transform_request   s   






	








z,HuggingFaceEmbeddingConfig.transform_requestapi_basec                 C   sb   d|v r|}|S |dur|}|S dt jv rt dd}|S dt jv r*t dd}|S d| }|S )z
        Get the API base for the Huggingface API.

        Do not add the chat/embedding/rerank extension here. Let the handler do this.
        httpsNZHF_API_BASErm   ZHUGGINGFACE_API_BASEz,https://api-inference.huggingface.co/models/)rU   environgetenv)r/   r   rB   Zcompletion_urlr7   r7   r8   get_api_baseM  s   



z'HuggingFaceEmbeddingConfig.get_api_baseapi_keyc           	      C   s.   ddi}|d urd| |d< i ||}|S )Nzcontent-typezapplication/jsonzBearer Authorizationr7   )	r/   rk   rB   ri   rK   rj   r   r   default_headersr7   r7   r8   validate_environment`  s   z/HuggingFaceEmbeddingConfig.validate_environmenterror_messagestatus_codec                 C   s   t |||dS )Nr   r   rk   )r   )r/   r   r   rk   r7   r7   r8   get_error_classu  s   z*HuggingFaceEmbeddingConfig.get_error_classresponselogging_objr   c           
      C   s^   t | |d|d}d}|D ]}||d d d d 7 }qd|ig}	|j|||	d	|id
 |	S )NZhuggingface)Zcompletion_streamrB   Zcustom_llm_providerr   rm   choicesr   deltacontentgenerated_textcomplete_input_dictinputr   original_responseZadditional_args)r   
iter_lines	post_call)
r/   r   r   rB   r   r   Zstreamed_responser   chunkcompletion_responser7   r7   r8   /_convert_streamed_response_to_complete_response|  s"   
zJHuggingFaceEmbeddingConfig._convert_streamed_response_to_complete_responser   model_responserl   encodingc                 C   s6  |d u rd}|dkrt |d dkr|d |jd j_n|dkrt|tr3t|d tr3d|d vr=tdd| d dt |d d dkrTt|d d |jd j_d|d v rd	|d d v r|d d d
 |jd _	d}|d d d	 D ]}	|	d d ur||	d 7 }qxt
|jd jd| d|v r|d dkrd|d v rd|d d v rg }
t|d d d D ]A\}}d}|d	 D ]}	|	d d ur||	d 7 }qt |d dkrtt|d |d}ntd d}t|d
 |d |d}|
| q|j|
 n.|dkrt||jd j_nt|tr,t |d d dkr,t|d d |jd j_d}zt||d}W n
 ty@   Y nw |d d d dd}|d uryt |dkryd}zt ||d d d dd}W n tyx   Y nw d}tt |_||_t|||| d}t
|d| ||jd< |S )Nre   rf   r   r   i  z%response is not in expected format - r   r"   tokensfinish_reasonZlogprobZ_logprobr    rM   Zbest_of_sequences)r   Zlogprobs)r   )r   indexr   ztext-classificationrx   r   r   r   rm   )prompt_tokenscompletion_tokensZtotal_tokensusager   )r   r   r   r   r}   listdictr   r   r   r3   	enumerater   r   r   extendjsondumpsr   r^   r|   encodeinttimecreatedrB   r   Z_hidden_params)r/   r   r   rl   rK   r   ri   rB   Zsum_logprobtokenZchoices_listidxitemZmessage_objZ
choice_objr   Zoutput_textr   r   r7   r7   r8    convert_to_model_response_object  s   






z;HuggingFaceEmbeddingConfig.convert_to_model_response_objectraw_responserequest_data	json_modec              	   C   s   | dd }d}|jd  dddkrd}|r"| j|||||
d}n-|j||
|jd	|id
 z| }t|tr;|g}W n tyN   t	d|j |j
dw t|trad|v rat	|d |j
d| j|||d uro|tv ro|nd ||	||dS )Nrl   Frk   zContent-Typerm   ztext/event-streamT)r   r   rB   r   r   r   r   zOriginal Response received: )r   r   error)r   r   rl   rK   r   ri   rB   )r|   __dict__r   r   rp   r   r}   r   r^   r   r   r   r   )r/   rB   r   r   r   r   ri   rK   rj   r   r   r   rl   Zis_streamedr   r7   r7   r8   transform_response  sZ   	

z-HuggingFaceEmbeddingConfig.transform_response)NNNNNNNNNNNNNN)NNr:   )8__name__
__module____qualname____doc__r   r   r   __annotations__r    r   r!   r   r"   r#   r$   floatr%   r&   r'   r(   r)   r*   r+   r,   r-   r9   classmethodr<   r@   r~   rI   r   rO   rP   rc   r   rh   r   r   r   r   r   r   r	   httpxZHeadersr   r   ResponseLoggingClassr   r   r   r   r   __classcell__r7   r7   r>   r8   r   &   sl  
 	


')
 	



 	
r   )0r   rU   r   r1   r   typingr   r   r   r   r   r   r	   r   r   Z8litellm.litellm_core_utils.prompt_templates.common_utilsr
   Z3litellm.litellm_core_utils.prompt_templates.factoryr   r   Z,litellm.litellm_core_utils.streaming_handlerr   Z)litellm.llms.base_llm.chat.transformationr   r   Zlitellm.secret_managers.mainr   Zlitellm.types.llms.openair   Zlitellm.types.utilsr   r   r   r   Zlitellm.utilsr   Zcommon_utilsr   r   r   r   Z*litellm.litellm_core_utils.litellm_loggingr   ZLiteLLMLoggingObjr   rR   rS   r   r7   r7   r7   r8   <module>   s.    $