
    kh,                        U d dl mZ d dlmZmZmZmZmZm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  ej*                  e      Zi i i i i i i i i i i i dZeeeeef   f   ed	<   ed
eeef   deeef   fd       Zed
ee   dee   fd       Zd
eeeef   ee   f   deeeef   ee   f   fdZ G d d      Z G d de      Z G d de      Z ed      deded   fd       ZdededefdZ y)    )	lru_cache)AnyDictListOptionalUnionoverload)	constants)InferenceProviderMapping)RequestParameters)ChatCompletionInputMessage)build_hf_headers	get_tokenlogging)cerebrascoherezfal-aizfireworks-aigroqzhf-inference
hyperbolicnebiusnscale	replicate	sambanovatogether!HARDCODED_MODEL_INFERENCE_MAPPINGobjreturnc                      y N r   s    h/var/www/teggl/fontify/venv/lib/python3.12/site-packages/huggingface_hub/inference/_providers/_common.pyfilter_noner"   (   s    8;    c                      y r   r   r    s    r!   r"   r"   *   s    .1r#   c                    t        | t              rXi }| j                         D ]A  \  }}|	t        |t        t        f      rt	        |      }t        |t              r|s=|||<   C |S t        | t              r1| D cg c]%  }t        |t        t        f      rt	        |      n|' c}S t        dt        |              c c}w )NzExpected dict or list, got )
isinstancedictitemslistr"   
ValueErrortype)r   cleanedkvs       r!   r"   r"   .   s    #t"$IIK 	DAqy!dD\*Na&qGAJ	 #tNQR*Qt"=A1DRR
249+>
?? Ss   =*Cc                   ^   e Zd ZdZdedededdfdZddd	ed
eeef   dedee   dee   deeeef      de	fdZ
	 ddeeef   dee	   defdZdee   defdZdee   defdZdededefdZdededefdZdedefdZdededefdZd	ed
ededee   fdZd	ed
ededee   dee   f
dZy)TaskProviderHelperz.Base class for task-specific provider helpers.providerbase_urltaskr   Nc                 .    || _         || _        || _        y r   )r1   r3   r2   )selfr1   r2   r3   s       r!   __init__zTaskProviderHelper.__init__E   s     	 r#   )extra_payloadinputs
parametersheadersmodelapi_keyr7   c                   | j                  |      }| j                  |      }| j                  ||      }| j                  ||j                        }| j                  |||      }	|	t        |	|xs i       }	| j                  ||||      }
|	|
t        d      |	|
t        d      t        || j                  |j                  |	|
|      S )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.)urlr3   r;   jsondatar:   )_prepare_api_key_prepare_mapping_info_prepare_headers_prepare_urlprovider_id_prepare_payload_as_dictrecursive_merge_prepare_payload_as_bytesr*   r   r3   )r5   r8   r9   r:   r;   r<   r7   r>   r?   payloadrA   s              r!   prepare_requestz"TaskProviderHelper.prepare_requestJ   s      ''0 !% : :5 A ''9 )>)J)JK //
Zo/p%g}/BCG --fjBWYfg 4#3WXX?t|QRR $))+@+L+LSZaeov
 	
r#   responserequest_paramsc                     |S )z
        Return the response in the expected format.

        Override this method in subclasses for customized response handling.r   )r5   rL   rM   s      r!   get_responsezTaskProviderHelper.get_responsev   s	     r#   c                 T    |
t               }|t        d| j                   d      |S )zZReturn 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 `huggingface-cli login`.)r   r*   r1   r5   r<   s     r!   rB   z#TaskProviderHelper._prepare_api_key   s:     ?kG?;DMM?Jvw  r#   c                    |t        d| j                   d      t        j                  | j                  i       j                  |      rt        | j                     |   S d}t	        |      D ]  }|j                  | j                  k(  s|} n |t        d| d| j                   d      |j
                  | j
                  k7  r6t        d| d| j
                   d| j                   d|j
                   d	      |j                  d	k(  r&t        j                  d| d
| j                   d       |j                  dk(  r&t        j                  d| d| j                   d       |S )zbReturn 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*   r1   r   get!_fetch_inference_provider_mappingr3   statusloggerwarning)r5   r;   provider_mappingmappings       r!   rC   z(TaskProviderHelper._prepare_mapping_info   s    =J4==/YZ[\\ -00CGG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#   c                 "    i t        |      |S )zwReturn the headers to use for the request.

        Override this method in subclasses for customized headers.
        )token)r   )r5   r:   r<   s      r!   rD   z#TaskProviderHelper._prepare_headers   s    
 >"1=W==r#   mapped_modelc                     | j                  |      }| j                  ||      }|j                  d       d|j                  d       S )zVReturn the URL to use for the request.

        Usually not overwritten in subclasses./)_prepare_base_url_prepare_routerstriplstrip)r5   r<   r_   r2   routes        r!   rE   zTaskProviderHelper._prepare_url   sK     ))'2##L'://#&'qc):(;<<r#   c                    |j                  d      rMt        j                  d| j                   d       t        j
                  j                  | j                        S t        j                  d| j                   d       | j                  S )z[Return the base URL to use for the request.

        Usually not overwritten in subclasses.hf_z	Calling 'z'' provider through Hugging Face router.)r1   z' provider directly.)
startswithrY   infor1   r
   INFERENCE_PROXY_TEMPLATEformatr2   rQ   s     r!   rb   z$TaskProviderHelper._prepare_base_url   sn    
 e$KK)DMM?2YZ[55<<dmm<TTKK)DMM?2FGH== r#   c                      y)ztReturn the route to use for the request.

        Override this method in subclasses for customized routes.
         r   r5   r_   r<   s      r!   rc   z!TaskProviderHelper._prepare_route   s    
 r#   r>   c                      y)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   r5   r8   r9   r>   s       r!   rG   z+TaskProviderHelper._prepare_payload_as_dict   s     r#   c                      y)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   )r5   r8   r9   r>   r7   s        r!   rI   z,TaskProviderHelper._prepare_payload_as_bytes   s     r#   r   )__name__
__module____qualname____doc__strr6   r   r   r   r   rK   r   bytesrO   rB   r   rC   rD   rE   rb   rc   rG   rI   r   r#   r!   r0   r0   B   s   8! ! !3 !4 ! 37*
 *
 cN	*

 *
 }*
 #*
  S#X/*
 
*
^ 7;	t$	 !!23	 
		
 
# 
# 8C= # =U # J> >s >t >=C =s =s =
! 
! 
!3   '+D\	$   8	
  ~ 
%r#   r0   c            	       n     e Zd ZdZdedef fdZdededefdZd	eee	e
f      d
e	dedee	   fdZ xZS )BaseConversationalTaskz
    Base class for conversational (chat completion) tasks.
    The schema follows the OpenAI API format defined here: https://platform.openai.com/docs/api-reference/chat
    r1   r2   c                 *    t         |   ||d       y )Nconversationalr1   r2   r3   superr6   r5   r1   r2   	__class__s      r!   r6   zBaseConversationalTask.__init__   s    (XDTUr#   r_   r<   r   c                      y)Nz/v1/chat/completionsr   ro   s      r!   rc   z%BaseConversationalTask._prepare_route   s    %r#   r8   r9   r>   c                 <    t        d|i|d|j                  i      S )Nmessagesr;   r"   rF   rq   s       r!   rG   z/BaseConversationalTask._prepare_payload_as_dict   s'     Ji*igG\GhGhijjr#   )rs   rt   ru   rv   rw   r6   rc   r   r   r   r   r   r   rG   __classcell__r   s   @r!   rz   rz      s|    
V V V&3 & & &kU4!;;<=k k  8	k
 
$kr#   rz   c            	       ^     e Zd ZdZdedef fdZdededefdZd	ed
ede	de
e   fdZ xZS )BaseTextGenerationTaskz
    Base class for text-generation (completion) tasks.
    The schema follows the OpenAI API format defined here: https://platform.openai.com/docs/api-reference/completions
    r1   r2   c                 *    t         |   ||d       y )Nztext-generationr}   r~   r   s      r!   r6   zBaseTextGenerationTask.__init__  s    (XDUVr#   r_   r<   r   c                      y)Nz/v1/completionsr   ro   s      r!   rc   z%BaseTextGenerationTask._prepare_route  s     r#   r8   r9   r>   c                 <    d|it        |      d|j                  iS )Npromptr;   r   rq   s       r!   rG   z/BaseTextGenerationTask._prepare_payload_as_dict  s'     &hK
$;hWF[FgFghhr#   )rs   rt   ru   rv   rw   r6   rc   r   r   r   r   rG   r   r   s   @r!   r   r     sf    
W W W!3 ! ! !ii'+iD\i	$ir#   r   N)maxsizer;   r   c                 |    ddl m}  |       j                  | dg      }|j                  }|t	        d|        |S )z;
    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   rj   r[   s       r!   rW   rW     sM    
 -7e-G,HID66?wGHHr#   dict1dict2c           
          i | |j                         D ci c]>  \  }}||| v r2t        | |   t              rt        |t              rt        | |   |      n|@ c}}S c c}}w r   )r(   r&   r'   rH   )r   r   keyvalues       r!   rH   rH   "  sx    
 $kkm	
 U uE#J!=*UTXBY !sU3
 
s   AA)!	functoolsr   typingr   r   r   r   r   r	   huggingface_hubr
   r   r   !huggingface_hub.inference._commonr   :huggingface_hub.inference._generated.types.chat_completionr   huggingface_hub.utilsr   r   r   
get_loggerrs   rY   r   rw   __annotations__r"   r0   rz   r   rW   rH   r   r#   r!   <module>r      s    = = % ; ? a F F 
		H	% 'U !4T#7O2O-P(P#Q . 
 ;T#s(^ ;S#X ; 
 ;	 1T#Y 149 1 
 1@U4S>4945 @%S#XPTUXPY@Y:Z @(h hVk/ k*i/ i$ 4
S 
T:T5U 
 
	4 	 	 	r#   