
    ^ho\                     *   S SK r S SKrS SKrS SKJr  S SKJrJrJrJ	r	J
r
JrJr  S SKrS SKrS SKJr  S SKJrJr  S SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJrJrJ r J!r!  S SK"J#r#  SSK$J%r%J&r&J'r'J(r(  \(       a	  S SK)J*r+  \+r,O\r,Sq-Sq. " S S\5      r/g)    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                   F  ^  \ rS rSr% SrSr\\   \S'   Sr	\\
   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\
   \S	'   Sr\\   \S
'   Sr\\   \S'   Sr\\
   \S'   Sr\\   \S'   Sr\\
   \S'   Sr\\
   \S'   Sr\\
   \S'   Sr\\
   \S'   Sr\\   \S'   Sr\\   \S'                 S;S\\
   S\\   S\\   S	\\
   S
\\   S\\   S\\
   S\\   S\\
   S\\
   S\\
   S\\
   S\\   S\\   SS4S jjr\U 4S j5       rS rS\4S jrS\ S\ S\S\S\ 4
S jr!S\\   4S jr"S  r#S\S\$\\4   4S! jr%S\S"\&\'   S\(S#\(S$\(S\(4S% jr)S&\\   S\S\4S' jr* S<S$\ S\S"\&\'   S\ S(\\   S\ 4S) jjr+S*\S+\
S$\,\(\-R\                  4   S\/4S, jr0 S<S-\-Rb                  S.\2S\S/\(S(\\   S\&\ \\34      4S0 jjr4S1\,\&\ \\34      \ \\34   4   S2\5S3\\   S\(S4\3S"\&\'   S\4S5 jr6  S=S\S6\-Rb                  S2\5S.\2S7\ S"\&\'   S\ S#\ S4\3S(\\   S8\\   S\54S9 jjr7S:r8U =r9$ )>HuggingfaceChatConfig&   zt
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                     [        5       nUR                  5        H*  u  nnUS:w  d  M  Uc  M  [        U R                  UU5        M,     g )Nself)localsitemssetattr	__class__)r3   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   locals_keyvalues                     f/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/huggingface/chat/transformation.py__init__HuggingfaceChatConfig.__init__?   s;    " (!--/JCf}!2U3 *    c                     > [         TU ]  5       $ N)super
get_config)clsr7   s    r;   rB    HuggingfaceChatConfig.get_configU   s    w!##r>   c                 
    SS/$ )N	use_cachewait_for_model r3   s    r;   get_special_options_params0HuggingfaceChatConfig.get_special_options_paramsY   s    -..r>   modelc                 
    / SQ$ )N)streamr*   
max_tokensmax_completion_tokensr-   stopnechorH   )r3   rL   s     r;   get_supported_openai_params1HuggingfaceChatConfig.get_supported_openai_params\   s    	
 		
r>   non_default_paramsoptional_paramsdrop_paramsc                    UR                  5        Ho  u  pVUS:X  a  US:X  d  US:X  a  SnXbS'   US:X  a  XbS'   US:X  a	  XbS'   SUS	'   US
:X  a  XbS
'   US:X  a  XbS'   US:X  d  US:X  a  US:X  a  SnXbS'   US:X  d  Mj  SUS'   Mq     U$ )Nr*   g        r   g{Gz?r-   rR   r#   T	do_samplerN   rQ   rO   rP      r&   rS   r$   )r5   )r3   rV   rW   rL   rX   paramr:   s          r;   map_openai_params'HuggingfaceChatConfig.map_openai_paramsh   s     /446LE%C<5A: !E16.+0(|-2	*  ,  ,1)*/'$1H(H A:E49 01 <@ 789 7< r>   c                     [        S5      $ )NHUGGINGFACE_API_KEYr   rI   s    r;   get_hf_api_key$HuggingfaceChatConfig.get_hf_api_key   s    344r>   c                 0    [         b  [        b  [         [        4$ [        5       n[        R                  R                  [        R                  R                  [        5      5      n[        R                  R                  U5      n[        R                  R                  USS5      n[        US5       nU H"  nUR                  UR                  5       5        M$     S S S 5        Uq [        R                  R                  USS5      n[        5       n[        US5       nU H"  nUR                  UR                  5       5        M$     S S S 5        UqX4$ ! , (       d  f       N}= f! , (       d  f       N$= f! [         a    [        5       [        5       4s $ f = f)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)r3   
tgi_modelsscript_directory	file_pathfilelineconv_modelss          r;   read_tgi_conv_models*HuggingfaceChatConfig.read_tgi_conv_models   sB   &	  !,3D3P'):::J!wwrwwx/HI!ww/?@ +/I i% DNN4::<0 ! &
  *  +.I
 %Ki% DOODJJL1 ! & !,**' &% &%  	 5#%<	 sH   E4 BE4 2)EAE4 )E#E4 
E E4 #
E1-E4 4FFc                     UR                  S5      S   [        ;   a  UR                  SS5      nUS   US   4$ U R                  5       u  p4X;   a  SU4$ X;   a  SU4$ SU;   a  SU4$ SU4$ )N/r   r[   text-generation-inferenceconversationalzroneneldan/TinyStoriesztext-generation)splitr   ry   )r3   rL   split_modelrs   conversational_modelss        r;   get_hf_task_for_model+HuggingfaceChatConfig.get_hf_task_for_model   s     ;;sA,.++c1-Kq>;q>11,0,E,E,G)
.55+#U**%.$e++.55r>   messageslitellm_paramsheadersc           
         UR                  SS 5      nUb  [        U[        5      (       a
  U[        ;  a  [	        SR                  U[        5      5      e[        R                  R                  5       nUR                  5        H  u  pX;  d  M  XU'   M     U R                  5       n
0 n/ nUR                  5        H!  u  pX;   d  M  XU'   UR                  U5        M#     U H  nUR                  U5        M     US:X  a  [        U5      nUR                  S5        UR                  S5        / n/ nSnU H^  nUS   S:X  a$  US:w  a  UR                  U5        [        U5      nM0  US   S	:X  d  US   S
:X  d  MD  UR                  [        U5      5        M`     UUUS.US.nGOUS:X  a  U[        R                   ;   aP  [        R                   U   n[#        UR                  SS 5      UR                  SS5      UR                  SS5      US9nO	[%        XS9nUUSU;   a"  [        US   [&        5      (       a
  US   SL a  SOSS.nOU[        R                   ;   ar  [        R                   U   n[#        UR                  S0 5      UR                  SS5      UR                  SS5      UR                  SS5      UR                  SS5      US9nO	[%        XS9n[        U5      nUR                  S5        UR                  S5        SU0nUS:X  a  UUS'   SU;   a
  US   SL a  SOSUS'   [)        UR+                  5       5      S:  a  UR-                  SU05        U$ )Ntaskz)Invalid hf task - {}. Valid formats - {}.r~   r%   r(    roleuser	assistantsystem)textpast_user_inputsgenerated_responses)inputs
parametersr}   rolesinitial_prompt_valuefinal_prompt_value)	role_dictr   r   r   rL   r   rN   TF)r   r   rN   	bos_token	eos_token)r   r   r   r   r   r   r   r   r   options)get
isinstancestrr   rr   formatr   litellmHuggingfaceConfigrB   r5   rJ   appendpopr   r   custom_prompt_dictr   r   boollenkeysupdate)r3   rL   r   rW   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_request'HuggingfaceChatConfig.transform_request   s    !!&$/<z$44L8P;BB4R 
 **557LLNDA(%&"	 # 88: #))+DA")*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( &	 (eG -  ?2"?8#<dC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% (eG'8  +  !34&D 22%5\"  ?2x7PTX7X  X "'')*Q.KK$789r>   api_basec                     SU;   a  UnU$ Ub  UnU$ S[         R                  ;   a  [         R                  " SS5      nU$ S[         R                  ;   a  [         R                  " SS5      nU$ SU 3nU$ )zz
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/)ri   environgetenv)r3   r   rL   completion_urls       r;   get_api_base"HuggingfaceChatConfig.get_api_baseM  s     e"N  !%N  bjj(YY}b9N  $rzz1YY'=rBN   LE7SNr>   api_keyc                 0    SS0nUb  SU 3US'   0 UEUEnU$ )Nzcontent-typezapplication/jsonzBearer AuthorizationrH   )r3   r   rL   r   rW   r   default_headerss          r;   validate_environment*HuggingfaceChatConfig.validate_environment`  sC     .
 '# O, 1W00r>   error_messagestatus_codec                     [        X!US9$ )Nr   r   r   )r   )r3   r   r   r   s       r;   get_error_class%HuggingfaceChatConfig.get_error_classs  s      #G
 	
r>   responselogging_objr   c                     [        UR                  5       USUS9nSnU H  nXxS   S   S   S   -  nM     SU0/n	UR                  UUU	S	U0S
9  U	$ )Nhuggingface)completion_streamrL   custom_llm_providerr   r   choicesr   deltacontentgenerated_textcomplete_input_dictinputr   original_responseadditional_args)r   
iter_lines	post_call)
r3   r   r   rL   r   r   streamed_responser   chunkcompletion_responses
             r;   /_convert_streamed_response_to_complete_responseEHuggingfaceChatConfig._convert_streamed_response_to_complete_responsez  s     0&113 -#	
 &EY'*73I>>G '6F5P4Q12D9	 	 	
 #"r>   r   model_responser   encodingc                    Uc  SnUS:X  a5  [        US   5      S:  a!  US   UR                  S   R                  l        GOfUS:X  Ga  [	        U[
        5      (       a!  [	        US   [        5      (       a	  SUS   ;  a  [        SSU 3S S9e[        US   S   5      S:  a-  [        US   S   5      UR                  S   R                  l        SUS   ;   ap  S	US   S   ;   ad  US   S   S
   UR                  S   l	        SnUS   S   S	    H  n	U	S   c  M  XS   -  nM     [        UR                  S   R                  SU5        SU;   a  US   S:  a  SUS   ;   a  SUS   S   ;   a  / n
[        US   S   S   5       Hv  u  pSnUS	    H  n	U	S   c  M  XS   -  nM     [        US   5      S:  a  [        [        US   5      US9nO	[        S S9n[        US
   US-   US9nU
R                  U5        Mx     UR                  R                  U
5        OUS:X  a3  [         R"                  " U5      UR                  S   R                  l        OW[	        U[
        5      (       aB  [        US   S   5      S:  a-  [        US   S   5      UR                  S   R                  l        Sn [%        XvS9nUS   S   S   R)                  SS5      nUbF  [        U5      S:  a7  Sn [        UR+                  US   S   S   R)                  SS5      5      5      nOSn[-        [.        R.                  " 5       5      Ul        Xrl        [5        UUUU-   S9n[        USU5        XR6                  S'   U$ ! [&         a     Nf = f! [&         a     Npf = f)Nr}   r~   r   r   i  z%response is not in expected format - r   r%   tokensfinish_reasonlogprob_logprobr#   r[   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   rr   r   encodeinttimecreatedrL   r   _hidden_params)r3   r   r   r   rW   r   r   rL   sum_logprobtokenchoices_listidxitemmessage_obj
choice_objr   output_textr   r   s                      r;    convert_to_model_response_object6HuggingfaceChatConfig.convert_to_model_response_object  s-    <.D##&'789A=<O$=&&q)119 002D9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#Y'77 I ..q199:{SO+	0JQ0N!4Q!77+/B1/Ei/PP#%L%.+A.y9:MN&	 '(%)(^E$Y/; +Y/? ? &4 t$456:*1(5d;K6L(M)4+K
 +2$*?K%,*.*?"%'$/&

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

#9N""1%--5
 .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:9M:=
N
	N
raw_responserequest_data	json_modec           
      B   UR                  SS 5      nSnUR                  S   R                  SS5      S:X  a  SnU(       a  U R                  UUUUU
S9nOGUR                  UU
UR                  S	U0S
9   UR                  5       n[        U[        5      (       a  U/n[        U[        5      (       a  SU;   a  [        US   UR                  S9eU R                  UUUb  U[        ;   a  UOS UU	UUS9$ ! [         a"    [        SUR                   3UR                  S9ef = f)Nr   Fr   zContent-Typer   ztext/event-streamT)r   r   rL   r   r   r   r   zOriginal Response received: )r   r   error)r   r   r   rW   r   r   rL   )r   __dict__r   r   r   r   r   r   rr   r   r   r  r   )r3   rL   r  r   r   r  r   rW   r   r   r   r  r   is_streamedr   s                  r;   transform_response(HuggingfaceChatConfig.transform_response  sr    !!&$/!!),00D"# K "&"V"V%'! #W # !!""."3"3!6 E	 " &2&7&7&9#1488+>*?' )400W@S5S"+G4(44  44 3))dl.B+ 5 
 	
  &:<;L;L:MN , 8 8 s   4(C2 2,DrH   )NNNNNNNNNNNNNNr@   )NN):__name__
__module____qualname____firstlineno____doc__r"   r   r   __annotations__r#   r   r$   r   r%   r&   r'   floatr(   r)   r*   r+   r,   r-   r.   r/   r0   r<   classmethodrB   rJ   r   rT   r   r]   ra   ry   r	   r   r   r   r   r   r   r   r
   httpxHeadersr   r   ResponseLoggingClassr   r   r   r  r  __static_attributes____classcell__)r7   s   @r;   r    r    &   s   
 	 Xh  "GXc]!,08D>0"GXd^"$(NHSM(*.. htn  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 2 "&  '(	
  # 
&
 
/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   ri   r   copyr   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  rf   rg   r    rH   r>   r;   <module>r(     st     	   I I I   M R 7 6 F F ' R RW$LL   f
J f
r>   