
    h\                         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e      Z/y)    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                   ,    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<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 d9d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Ze fd       Zd ZdefdZdededededef
dZ dee   fdZ!d Z"dede#eef   fd Z$ded!e%e&   de'd"e'd#e'de'fd$Z(d%ee   dedefd&Z)	 	 d:d#eded!e%e&   ded"e'd'ee   d%ee   defd(Z*d)ed*e	d#e+e'e,jZ                  f   de.fd+Z/	 d;d,e,j`                  d-e1ded.e'd'ee   de%eee2f      fd/Z3d0e+e%eee2f      eee2f   f   d1e4d2ee   de'd3e2d!e%e&   defd4Z5	 	 d:ded5e,j`                  d1e4d-e1d6ed!e%e&   ded"ed3e2d'ee   d7ee   de4fd8Z6 xZ7S )<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                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localscopyitemssetattr	__class__)r2   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   locals_keyvalues                     m/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/huggingface/embedding/transformation.py__init__z#HuggingFaceEmbeddingConfig.__init__?   sA    " (--/!--/JCf}!2U3 *    c                      t         |          S N)super
get_config)clsr7   s    r;   rA   z%HuggingFaceEmbeddingConfig.get_configU   s    w!##r=   c                 
    ddgS )N	use_cachewait_for_model r2   s    r;   get_special_options_paramsz5HuggingFaceEmbeddingConfig.get_special_options_paramsY   s    -..r=   modelc                 
    g dS )N)streamr)   
max_tokensmax_completion_tokensr,   stopnechorF   )r2   rI   s     r;   get_supported_openai_paramsz6HuggingFaceEmbeddingConfig.get_supported_openai_params\   s    	
 		
r=   non_default_paramsoptional_paramsdrop_paramsc                     |j                         D ]i  \  }}|dk(  r|dk(  s|dk(  rd}||d<   |dk(  r||d<   |dk(  r
||d<   d|d	<   |d
k(  r||d
<   |dk(  r||d<   |dk(  s|dk(  r|dk(  rd}||d<   |dk(  sed|d<   k |S )Nr)   g        r   g{Gz?r,   rO   r"   T	do_samplerK   rN   rL   rM      r%   rP   r#   )r5   )r2   rR   rS   rI   rT   paramr:   s          r;   map_openai_paramsz,HuggingFaceEmbeddingConfig.map_openai_paramsh   s     /446LE5%C<5A: !E16.+0(|-2	*     ,1)*/'$1H(H A:E49 01 <@ 789 7< r=   c                     t        d      S )NHUGGINGFACE_API_KEYr   rG   s    r;   get_hf_api_keyz)HuggingFaceEmbeddingConfig.get_hf_api_key   s    344r=   c                    	 t         t        t         t        fS t               }t        j                  j                  t        j                  j                  t                    }t        j                  j                  |      }t        j                  j                  |dd      }t        |d      5 }|D ]!  }|j                  |j                                # 	 d d d        |a t        j                  j                  |dd      }t               }t        |d      5 }|D ]!  }|j                  |j                                # 	 d d d        |a||fS # 1 sw Y   xxY w# 1 sw Y   xY w# t        $ r t               t               fcY S w xY w)N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)r2   
tgi_modelsscript_directory	file_pathfilelineconv_modelss          r;   read_tgi_conv_modelsz/HuggingFaceEmbeddingConfig.read_tgi_conv_models   sR   &	  !,3D3P'):::J!wwrwwx/HI!ww/?@ +/I i% 1 DNN4::<0 !1
  *  +.I
 %Ki% 2 DOODJJL1 !2 !,{**'1 12 2  	 5#%<	 sH   E' BE' 0'EAE' 'EE' EE' E$ E' 'FFc                     |j                  d      d   t        v r|j                  dd      }|d   |d   fS | j                         \  }}||v rd|fS ||v rd|fS d|v rd|fS d|fS )N/r   rW   text-generation-inferenceconversationalzroneneldan/TinyStoriesztext-generation)splitr   rs   )r2   rI   split_modelrm   conversational_modelss        r;   get_hf_task_for_modelz0HuggingFaceEmbeddingConfig.get_hf_task_for_model   s     ;;sA,.++c1-Kq>;q>11,0,E,E,G)
)J.55++#U**%.$e++.55r=   messageslitellm_paramsheadersc           
      t   |j                  dd       }|t        |t              r|t        vrt	        dj                  |t                    t        j                  j                         }|j                         D ]  \  }}	||vs|	||<    | j                         }
i }g }|j                         D ]   \  }}	||
v s|	||<   |j                  |       " |D ]  }|j                  |        |dk(  rt        |      }|j                  d       |j                  d       g }g }d}|D ]W  }|d   dk(  r"|dk7  r|j                  |       t        |      }-|d   d	k(  s	|d   d
k(  s>|j                  t        |             Y |||d|d}n|dk(  r|t        j                   v rSt        j                   |   }t#        |j                  dd       |j                  dd      |j                  dd      |      }nt%        ||      }||d|v rt        |d   t&              r	|d   du rdndd}n|t        j                   v rut        j                   |   }t#        |j                  di       |j                  dd      |j                  dd      |j                  dd      |j                  dd      |      }nt%        ||      }t        |      }|j                  d       |j                  d       d|i}|dk(  r||d<   d|v r	|d   du rdnd|d<   t)        |j+                               dkD  r|j-                  d|i       |S )Ntaskz)Invalid hf task - {}. Valid formats - {}.rw   r$   r'    roleuser	assistantsystem)textpast_user_inputsgenerated_responses)inputs
parametersrv   rolesinitial_prompt_valuefinal_prompt_value)	role_dictr   r   r|   rI   r|   rK   TF)r   r   rK   	bos_token	eos_token)r   r   r   r   r   r|   r   r   r   options)get
isinstancestrr   rl   formatr   litellmr    rA   r5   rH   appendpopr   r   custom_prompt_dictr   r   boollenkeysupdate)r2   rI   r|   rS   r}   r~   r   configkvspecial_paramsspecial_params_dictkeys_to_popinference_paramsr   r   r   messagedatamodel_prompt_detailsprompts                        r;   transform_requestz,HuggingFaceEmbeddingConfig.transform_request   s    !!&$/<z$4L8P;BB4R 
 33>>@LLNDAq(%&"	 # 88: #))+DAqN")*#A&""1% , A" ##'8  +  !34!"$D#6?f,rz(//56w?DV_3wv(7R'../J7/ST $ !(8+>
 /D 00222'.'A'A%'H$&266wE)=)A)A.* (<'?'?,b( &	 (ehG -  ?2"?8#<dC'1T9  
D 222'.'A'A%'H$&266wC)=)A)A.* (<'?'?,b( 366{BG266{BG% (ehG'8  +  !34&D 22%5\"  ?2x7PTX7X  X "'')*Q.KK$789r=   api_basec                     d|v r|}|S ||}|S dt         j                  v rt        j                  dd      }|S dt         j                  v rt        j                  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.
        httpsHF_API_BASEr   HUGGINGFACE_API_BASEz,https://api-inference.huggingface.co/models/)rc   environgetenv)r2   r   rI   completion_urls       r;   get_api_basez'HuggingFaceEmbeddingConfig.get_api_baseM  s     e"N  !%N  bjj(YY}b9N  $rzz1YY'=rBN   LE7SNr=   api_keyc                 .    ddi}|d| |d<   i ||}|S )Nzcontent-typezapplication/jsonzBearer AuthorizationrF   )	r2   r~   rI   r|   rS   r}   r   r   default_headerss	            r;   validate_environmentz/HuggingFaceEmbeddingConfig.validate_environment`  sH     .
  '#  1W00r=   error_messagestatus_codec                     t        |||      S )Nr   r   r~   )r   )r2   r   r   r~   s       r;   get_error_classz*HuggingFaceEmbeddingConfig.get_error_classu  s      #]G
 	
r=   responselogging_objr   c                     t        |j                         |d|      }d}|D ]  }||d   d   d   d   z  } d|ig}	|j                  |||	d	|i
       |	S )Nhuggingface)completion_streamrI   custom_llm_providerr   r   choicesr   deltacontentgenerated_textcomplete_input_dictinputr   original_responseadditional_args)r   
iter_lines	post_call)
r2   r   r   rI   r   r   streamed_responser   chunkcompletion_responses
             r;   /_convert_streamed_response_to_complete_responsezJHuggingFaceEmbeddingConfig._convert_streamed_response_to_complete_response|  s     0&113 -#	
 &EuY'*73I>>G '6F5P4Q12D9	 	 	
 #"r=   r   model_responser   encodingc                    |d}|dk(  r5t        |d         dkD  rp|d   |j                  d   j                  _        nM|dk(  rt	        |t
              rt	        |d   t              rd|d   vrt        dd| d       t        |d   d         dkD  r-t        |d   d         |j                  d   j                  _        d|d   v rkd	|d   d   v ra|d   d   d
   |j                  d   _	        d}|d   d   d	   D ]  }	|	d   	||	d   z  } t        |j                  d   j                  d|       d|v rT|d   dkD  rKd|d   v rCd|d   d   v r8g }
t        |d   d   d         D ]{  \  }}d}|d	   D ]  }	|	d   	||	d   z  } t        |d         dkD  rt        t        |d         |      }nt        d       }t        |d
   |dz   |      }|
j                  |       } |j                  j                  |
       n|dk(  r2t!        j"                  |      |j                  d   j                  _        nQt	        |t
              rAt        |d   d         dkD  r-t        |d   d         |j                  d   j                  _        d}	 t%        ||      }|d   d   d   j)                  dd      }|Et        |      dkD  r7d}	 t        |j+                  |d   d   d   j)                  dd                  }nd}t-        t/        j.                               |_        ||_        t5        ||||z         }t        |d|       ||j6                  d<   |S # t&        $ r Y w xY w# t&        $ r Y rw xY w)Nrv   rw   r   r   i  z%response is not in expected format - r   r$   tokensfinish_reasonlogprob_logprobr"   rW   best_of_sequences)r   logprobs)r   )r   indexr   ztext-classificationr   r   r   r   r   )prompt_tokenscompletion_tokenstotal_tokensusager   )r   r   r   r   r   listdictr   r   r   r6   	enumerater   r   r   extendjsondumpsr   rl   r   encodeinttimecreatedrI   r   _hidden_params)r2   r   r   r   rS   r   r|   rI   sum_logprobtokenchoices_listidxitemmessage_obj
choice_objr   output_textr   r   s                      r;    convert_to_model_response_objectz;HuggingFaceEmbeddingConfig.convert_to_model_response_object  s.    <.D##&'789A=<O$=&&q)119 002D9!"5a"8$?#+>q+AA& #CDWCXY   &q)*:;<q@<I'*+;<=&&q)119
 033 3A 6y AA:Ma:P;!;#&&q)7  03I>xHEY'3#uY'77 I ..q199:{SO+	0JQ0N!4Q!77+/B1/Ei/PP#%L%.+A.y9:MN&	T '(%)(^E$Y/; +uY/? ? &4 t$456:*1(5d;K6L(M)4+K
 +2$*?K%,*.*?"%'$/&

 %++J7'&( #**11,?**8<

#9N""1%--5
 .5+A./?@AAE<I'*+;<=&&q)119 	)IM %Y/29=AA)RP"s;'7!'; !$'OO&y1!4Y?CCIrR%! !"!$TYY[!1$'/&)::

 	/=P%%&9:7  		  s$   M 
3M' 	M$#M$'	M32M3raw_responserequest_data	json_modec           	      4   |j                  dd       }d}|j                  d   j                  dd      dk(  rd}|r| j                  |||||
      }nE|j                  ||
|j                  d	|i
       	 |j                         }t        |t              r|g}t        |t              rd|v rt        |d   |j                        | j                  |||
|t        v r|nd ||	||      S # t        $ r% t        d|j                   |j                        w xY w)Nr   Fr~   zContent-Typer   ztext/event-streamT)r   r   rI   r   r   r   r   zOriginal Response received: )r   r   error)r   r   r   rS   r   r|   rI   )r   __dict__r   r   r   r   r   r   rl   r   r   r   r   )r2   rI   r   r   r   r   r|   rS   r}   r   r   r   r   is_streamedr   s                  r;   transform_responsez-HuggingFaceEmbeddingConfig.transform_response  sl    !!&$/!!),00D"# K "&"V"V%'! #W # !!""."3"3!6 E	 " &2&7&7&9#148+>*?' )40W@S5S"+G4(44  44 3))dl.B+ 5 
 	
  &:<;L;L:MN , 8 8 s   4#C) ).D)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/   r<   classmethodrA   rH   r   rQ   r   rY   r\   rs   r	   r{   r   r   r   r   r   r   r
   httpxHeadersr   r   ResponseLoggingClassr   r   r   r   r   __classcell__)r7   s   @r;   r    r    &   s    	 X  "GXc]!,08D>0"GXd^"$(NHSM(*.. 	 h  D(3-#'K%'E8C="&L(3-&E8C="Hhsm"!%Ix% $Ix~$ "&04"&(,.2+/"'+#&*#"&%)$(4#4  (~4 $	4
 !4 %UO4 #4.4 sm4 e_4 }4 sm4 }4 3-4 E?4 D>4  
!4, $ $/

 

% % % 	%
 % 
%N5 5' R63 6533G 6" '( 	
   
BXc] 3 3 4 "&"&  '(	
   # 3- 
*
 
/2
=B4CV=W
	
 "&#..# "# 	#
 # ## 
d38n	#6u"4S#X#7c3h#GHu &u x 	u
 u u '(u uD "&$(@
@
 nn@
 &	@

 "@
 @
 '(@
 @
 @
 @
 #@
 D>@
 
@
r=   r    )0r   rc   r   r4   r   typingr   r   r   r   r   r	   r
   r  r   8litellm.litellm_core_utils.prompt_templates.common_utilsr   3litellm.litellm_core_utils.prompt_templates.factoryr   r   ,litellm.litellm_core_utils.streaming_handlerr   )litellm.llms.base_llm.chat.transformationr   r   litellm.secret_managers.mainr   litellm.types.llms.openair   litellm.types.utilsr   r   r   r   litellm.utilsr   common_utilsr   r   r   r   *litellm.litellm_core_utils.litellm_loggingr   LiteLLMLoggingObjr  r`   ra   r    rF   r=   r;   <module>r     st     	   I I I   M R 7 6 F F ' R RW$LL   h
 h
r=   