
    Y j5                     L   % 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  S SKJr  S SKJrJrJr  \R$                  " \5      r0 S0 _S	0 _S
0 _S0 _S0 _S0 _S0 _S0 _S0 _S0 _S0 _S0 _S0 _S0 _S0 _S0 _S0 _0 0 S.Er\\\\\4   4   \S'   \S\\\4   S\\\4   4S j5       r\S\\   S\\   4S j5       rS\\\4   \\   -  S\\\4   \\   -  4S jr " S  S!5      r " S" S#\5      r " S$ S%\5      r " S& S'\5      r\" S(S)9S*\S\S+   4S, j5       rS-\S.\S\4S/ jr g()0    )	lru_cache)Anyoverload)	constants)InferenceProviderMapping)	MimeBytesRequestParameters)ChatCompletionInputMessage)build_hf_headers	get_tokenloggingcerebrascohereclarifai	deepinfrazfal-aizfireworks-aigroqzhf-inference
hyperbolicnebiusnscalenvidiaovhcloud	replicate	sambanovascalewaytogether)	wavespeedzzai-org!HARDCODED_MODEL_INFERENCE_MAPPINGobjreturnc                     g N r   s    }/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/huggingface_hub/inference/_providers/_common.pyfilter_noner%   /   s    8;    c                     g r!   r"   r#   s    r$   r%   r%   1   s    .1r&   c                    [        U [        5      (       aL  0 nU R                  5        H4  u  p#Uc  M
  [        U[        [        45      (       a  [	        U5      nX1U'   M6     U$ [        U [        5      (       a9  U  Vs/ s H+  n[        U[        [        45      (       a  [	        U5      OUPM-     sn$ [        S[        U 5       35      es  snf )NzExpected dict or list, got )
isinstancedictitemslistr%   
ValueErrortype)r   cleanedkvs       r$   r%   r%   5   s    #t"$IIKDAy!dD\**NAJ   #tNQRc*Qt"="=A1DcRR
249+>
?? Ss   ;2Cc                      \ rS rSrSrS\S\S\SS4S jrSS	.S
\S\\\4   S\S\S-  S\S-  S\\\4   S-  S\	4S jjr
 S"S\\-  S\	S-  S\4S jjrS\S-  S\4S jrS\S-  S\4S jrS\\\4   S\\\4   S-  S\S-  S\\\4   4S jrS\S\S\\\4   4S jrS\S\S\4S jrS\S\4S jrS\S\S\4S jrS
\S\S\S\S-  4S jrS
\S\S\S\S-  S\S-  4
S  jrS!rg)#TaskProviderHelperF   z.Base class for task-specific provider helpers.providerbase_urltaskr   Nc                 (    Xl         X0l        X l        g r!   )r5   r7   r6   )selfr5   r6   r7   s       r$   __init__TaskProviderHelper.__init__I   s     	 r&   )extra_payloadinputs
parametersheadersmodelapi_keyr<   c          	         U R                  U5      nU R                  U5      nU R                  X55      nU R                  XWR                  5      nU R                  XUS9n	U	b  [        U	[        U=(       d    0 5      5      n	U R                  XXv5      n
U	b  U
b  [        S5      eU	c  U
c  [        S5      eU R                  X9U
5      n[        UU R                  UR                  U	U
US9$ )z
Prepare the request to be sent to the provider.

Each step (api_key, model, headers, url, payload) can be customized in subclasses.
)provider_mapping_infoz8Both payload and data cannot be set in the same request.z2Either payload or data must be set in the request.)urlr7   r@   jsondatar?   )_prepare_api_key_prepare_mapping_info_prepare_headers_prepare_urlprovider_id_prepare_payload_as_dictrecursive_merger%   _prepare_payload_as_bytesr-   _normalize_headersr	   r7   )r9   r=   r>   r?   r@   rA   r<   rC   rD   payloadrF   normalized_headerss               r$   prepare_request"TaskProviderHelper.prepare_requestN   s     ''0 !% : :5 A ''9 )J)JK //Zo/p%g{=;NB/OPG --fBWg 4#3WXX?t|QRR "44WtL '33&
 	
r&   responserequest_paramsc                     U$ )zr
Return the response in the expected format.

Override this method in subclasses for customized response handling.r"   )r9   rT   rU   s      r$   get_responseTaskProviderHelper.get_response   s	     r&   c                 X    Uc
  [        5       nUc  [        SU R                   S35      eU$ )zRReturn the API key to use for the request.

Usually not overwritten in subclasses.z)You must provide an api_key to work with z$ API or log in with `hf auth login`.)r   r-   r5   r9   rA   s     r$   rG   #TaskProviderHelper._prepare_api_key   s:     ?kG?;DMM?Jno  r&   c                    Uc  [        SU R                   S35      e[        R                  U R                  0 5      R                  U5      (       a  [        U R                     U   $ Sn[	        U5       H!  nUR                  U R                  :X  d  M  Un  O   Uc  [        SU SU R                   S35      eUR
                  U R
                  :w  a6  [        SU SU R
                   SU R                   SUR
                   S3	5      eUR                  S	:X  a&  [        R                  SU S
U R                   S35        UR                  S:X  a&  [        R                  SU SU R                   S35        U$ )zZReturn the mapped model ID to use for the request.

Usually not overwritten in subclasses.Nz+Please provide an HF model ID supported by .zModel z is not supported by provider z is not supported for task z and provider z. Supported task: stagingz! is in staging mode for provider z. Meant for test purposes only.errorz,Our latest automated health check on model 'z' for provider 'z<' did not complete successfully.  Inference call might fail.)	r-   r5   r   get!_fetch_inference_provider_mappingr7   statusloggerwarning)r9   r@   provider_mappingmappings       r$   rH   (TaskProviderHelper._prepare_mapping_info   s    =J4==/YZ[\\ -00CGGNN4T]]CEJJ8?G4==0#*  @
 #veW,J4==/YZ[\\  DII-:499+^TXTaTaSb c##3#8#8"9< 
 ""i/NN@Ono ""g-NN>ugEUVZVcVcUd e- -  r&   rP   rF   c                     UR                  5        VVs0 s H  u  pEUc  M
  UR                  5       U_M     nnnUR                  S5      c)  Ub  UR                  b  UR                  US'   U$ Ub  SUS'   U$ s  snnf )zjNormalize the headers to use for the request.

Override this method in subclasses for customized headers.
zcontent-typezapplication/json)r+   lowerr`   	mime_type)r9   r?   rP   rF   keyvaluerQ   s          r$   rO   %TaskProviderHelper._normalize_headers   s     DK==?h?ZSV[0ciik50?h!!.19DNN$>59^^">2 "! $5G">2!! is
   	A6A6c                     0 [        US9EUE$ )zgReturn the headers to use for the request.

Override this method in subclasses for customized headers.
)token)r   )r9   r?   rA   s      r$   rI   #TaskProviderHelper._prepare_headers   s    
 >"1=W==r&   mapped_modelc                     U R                  U5      nU R                  X!5      nUR                  S5       SUR                  S5       3$ )zNReturn the URL to use for the request.

Usually not overwritten in subclasses./)_prepare_base_url_prepare_routerstriplstrip)r9   rA   rq   r6   routes        r$   rJ   TaskProviderHelper._prepare_url   sI     ))'2##L://#&'qc):(;<<r&   c                     UR                  S5      (       aJ  [        R                  SU R                   S35        [        R
                  R                  U R                  S9$ [        R                  SU R                   S35        U R                  $ )SReturn the base URL to use for the request.

Usually not overwritten in subclasses.hf_z	Calling 'z'' provider through Hugging Face router.)r5   z' provider directly.)
startswithrc   infor5   r   INFERENCE_PROXY_TEMPLATEformatr6   rZ   s     r$   rt   $TaskProviderHelper._prepare_base_url   sq    
 e$$KK)DMM?2YZ[55<<dmm<TTKK)DMM?2FGH== r&   c                     g)zdReturn the route to use for the request.

Override this method in subclasses for customized routes.
 r"   r9   rq   rA   s      r$   ru   !TaskProviderHelper._prepare_route   s    
 r&   rC   c                     g)zReturn the payload to use for the request, as a dict.

Override this method in subclasses for customized payloads.
Only one of `_prepare_payload_as_dict` and `_prepare_payload_as_bytes` should return a value.
Nr"   r9   r=   r>   rC   s       r$   rL   +TaskProviderHelper._prepare_payload_as_dict   s     r&   c                     g)zReturn the body to use for the request, as bytes.

Override this method in subclasses for customized body data.
Only one of `_prepare_payload_as_dict` and `_prepare_payload_as_bytes` should return a value.
Nr"   )r9   r=   r>   rC   r<   s        r$   rN   ,TaskProviderHelper._prepare_payload_as_bytes   s     r&   )r6   r5   r7   r!   )__name__
__module____qualname____firstlineno____doc__strr:   r   r*   r	   rR   bytesrW   rG   r   rH   r   rO   rI   rJ   rt   ru   rL   rN   __static_attributes__r"   r&   r$   r3   r3   F   s   8! ! !3 !4 ! 043
 3
 cN	3

 3
 Tz3
 t3
 CH~,3
 
3
p 48	$,	 *D0	 
		
d
 
s 
# 3: # :R # J"CH~"04S#X0E"MVY]M]"	c3h"> >s >tCH~ >=C =s =s =
! 
! 
!3   '+D\	   8	
 d{ 
T	r&   r3   c            	       z   ^  \ rS rSrSrS\S\4U 4S jjrS\S\S\4S	 jrS
\\	\
-     S\	S\S\	S-  4S jrSrU =r$ )BaseConversationalTaski	  z
Base class for conversational (chat completion) tasks.
The schema follows the OpenAI API format defined here: https://platform.openai.com/docs/api-reference/chat
r5   r6   c                 "   > [         TU ]  XSS9  g )Nconversationalr5   r6   r7   superr:   r9   r5   r6   	__class__s      r$   r:   BaseConversationalTask.__init__  s    (DTUr&   rq   rA   r   c                     g)Nz/v1/chat/completionsr"   r   s      r$   ru   %BaseConversationalTask._prepare_route  s    %r&   r=   r>   rC   Nc                 <    [        SU0UESUR                  0E5      $ )Nmessagesr@   r%   rK   r   s       r$   rL   /BaseConversationalTask._prepare_payload_as_dict  s'     Ji*igG\GhGhijjr&   r"   )r   r   r   r   r   r   r:   ru   r,   r*   r
   r   rL   r   __classcell__r   s   @r$   r   r   	  s}    
V V V&3 & & &kT667k k  8	k
 
k kr&   r   c                   V   ^  \ rS rSrSrU 4S jrS\S\4S jrS\S-  S\4S	 jr	S
r
U =r$ )AutoRouterConversationalTaski  a  
Auto-router for conversational tasks.

We let the Hugging Face router select the best provider for the model, based on availability and user preferences.
This is a special case since the selection is done server-side (avoid 1 API call to fetch provider mapping).
c                 "   > [         TU ]  SSS9  g )Nautozhttps://router.huggingface.co)r5   r6   r   )r9   r   s    r$   r:   %AutoRouterConversationalTask.__init__&  s    &3RSr&   rA   r   c                 \    UR                  S5      (       d  [        S5      eU R                  $ )r{   r|   z>Cannot select auto-router when using non-Hugging Face API key.)r}   r-   r6   rZ   s     r$   rt   .AutoRouterConversationalTask._prepare_base_url)  s+    
 !!%((]^^== r&   r@   Nc                 8    Uc  [        S5      e[        SUUSSS9$ )z
In auto-router, we don't need to fetch provider mapping info.
We just return a dummy mapping info with provider_id set to the HF model ID.
zPlease provide an HF model ID.r   liver   )r5   hf_model_id
providerIdrb   r7   )r-   r   )r9   r@   s     r$   rH   2AutoRouterConversationalTask._prepare_mapping_info3  s1    
 ==>>'!
 	
r&   r"   )r   r   r   r   r   r:   r   rt   r   rH   r   r   r   s   @r$   r   r     s>    T! ! !
3: 
:R 
 
r&   r   c            	       n   ^  \ rS rSrSrS\S\4U 4S jjrS\S\S\4S	 jrS
\S\	S\
S\	S-  4S jrSrU =r$ )BaseTextGenerationTaskiD  z
Base class for text-generation (completion) tasks.
The schema follows the OpenAI API format defined here: https://platform.openai.com/docs/api-reference/completions
r5   r6   c                 "   > [         TU ]  XSS9  g )Nztext-generationr   r   r   s      r$   r:   BaseTextGenerationTask.__init__J  s    (DUVr&   rq   rA   r   c                     g)Nz/v1/completionsr"   r   s      r$   ru   %BaseTextGenerationTask._prepare_routeM  s     r&   r=   r>   rC   Nc                 <    [        SU0UESUR                  0E5      $ )Npromptr@   r   r   s       r$   rL   /BaseTextGenerationTask._prepare_payload_as_dictP  s'     Hfg
gGEZEfEfghhr&   r"   )r   r   r   r   r   r   r:   ru   r   r*   r   rL   r   r   r   s   @r$   r   r   D  sl    
W W W!3 ! ! !ii'+iD\i	i ir&   r   N)maxsizer@   r   c                 x    SSK Jn  U" 5       R                  U S/S9nUR                  nUc  [	        SU  35      eU$ )z3
Fetch provider mappings for a model from the Hub.
r   )HfApiinferenceProviderMapping)expandz$No provider mapping found for model )huggingface_hub.hf_apir   
model_infoinference_provider_mappingr-   )r@   r   r~   re   s       r$   ra   ra   V  sM    
 -7e-G,HID66?wGHHr&   dict1dict2c           
          0 U EUR                  5        VVs0 s HG  u  p#UX ;   a:  [        X   [        5      (       a#  [        U[        5      (       a  [        X   U5      OU_MI     snnE$ s  snnf r!   )r+   r)   r*   rM   )r   r   rk   rl   s       r$   rM   rM   d  s}    
 $kkm	
 ,
 EJ!=!=*UTXBYBY !U3 ,	
 
s   AA*)!	functoolsr   typingr   r   huggingface_hubr   r   r   !huggingface_hub.inference._commonr   r	   :huggingface_hub.inference._generated.types.chat_completionr
   huggingface_hub.utilsr   r   r   
get_loggerr   rc   r   r*   r   __annotations__r%   r,   r3   r   r   r   ra   rM   r"   r&   r$   <module>r      sA      % ; J a F F 
		H	%U U bU U U bU BU BU BU  "!U" b#U$ b%U& b'U( )U* +U, -U. /U0 1U2 5U !4T#7O2O-P(P#Q < 
 ;T#s(^ ;S#X ; 
 ;	 1T#Y 149 1 
 1@T#s(^d3i/ @DcNT#Y4N @"@ @Fk/ k*#
#9 #
Li/ i$ 4
S 
T:T5U 
 
	4 	 	 	r&   