
    O&h'                     ^   U 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
 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 d
Zeeeee
f   f   ed<   d	eeef   d
e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fd       Zdeded
efdZy)    )	lru_cache)AnyDictOptionalUnion)	constants)InferenceProviderMapping)RequestParameters)build_hf_headers	get_tokenlogging)
cerebrascoherezfal-aizfireworks-aizhf-inference
hyperbolicnebius	replicate	sambanovatogether!HARDCODED_MODEL_INFERENCE_MAPPINGdreturnc                 \    | j                         D ci c]  \  }}|	|| c}}S c c}}w N)items)r   kvs      m/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/huggingface_hub/inference/_providers/_common.pyfilter_noner   $   s(    WWY8TQ!-AqD888s   
((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   )r!   r#   r"   )selfr!   r"   r#   s       r   __init__zTaskProviderHelper.__init__+   s     	     )extra_payloadinputs
parametersheadersmodelapi_keyr(   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.)urlr#   r,   jsondatar+   )_prepare_api_key_prepare_mapping_info_prepare_headers_prepare_urlprovider_id_prepare_payload_as_dictrecursive_merge_prepare_payload_as_bytes
ValueErrorr
   r#   )r%   r)   r*   r+   r,   r-   r(   r/   r0   payloadr2   s              r   prepare_requestz"TaskProviderHelper.prepare_request0   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%   r>   r?   s      r   get_responsezTaskProviderHelper.get_response\   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;   r!   r%   r-   s     r   r3   z#TaskProviderHelper._prepare_api_keyg   s:     ?kG?;DMM?Jvw  r'   c                 R   |t        d| j                   d      t        j                  | j                  i       j                  |      rt        | j                     |   S t	        |      j                  | j                        }|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
       |S )zbReturn the mapped model ID to use for the request.

        Usually not overwritten in subclasses.z+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.)	r;   r!   r   get!_fetch_inference_provider_mappingr#   statusloggerwarning)r%   r,   provider_mappings      r   r4   z(TaskProviderHelper._prepare_mapping_infos   s,    =J4==/YZ[\\ -00CGGN4T]]CEJJ<UCGGV#veW,J4==/YZ[\\  DII-:499+^TXTaTaSb c##3#8#8"9< 
 ""i/NN@Ono  r'   c                 "    i t        |      |S )zwReturn the headers to use for the request.

        Override this method in subclasses for customized headers.
        )token)r   )r%   r+   r-   s      r   r5   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)r%   r-   rP   r"   routes        r   r6   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.)r!   z' provider directly.)
startswithrK   infor!   r   INFERENCE_PROXY_TEMPLATEformatr"   rD   s     r   rS   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.
         rA   r%   rP   r-   s      r   rT   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.
        NrA   r%   r)   r*   r/   s       r   r8   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.
        NrA   )r%   r)   r*   r/   r(   s        r   r:   z,TaskProviderHelper._prepare_payload_as_bytes   s     r'   r   )__name__
__module____qualname____doc__strr&   r   r   r   r
   r=   r   bytesrB   r3   r	   r4   r5   r6   rS   rT   r8   r:   rA   r'   r   r    r    (   s   8! ! !3 !4 ! 37*
 *
 cN	*

 *
 }*
 #*
  S#X/*
 
*
^ 7;	t$	 !!23	 
		
 
# 
 8C=  =U  6> >s >t >=C =s =s =
! 
! 
!3   '+D\	$   8	
  ~ 
%r'   r    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 )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
    r!   r"   c                 *    t         |   ||d       y )Nconversationalr!   r"   r#   superr&   r%   r!   r"   	__class__s      r   r&   zBaseConversationalTask.__init__   s    (XDTUr'   rP   r-   r   c                      y)Nz/v1/chat/completionsrA   r`   s      r   rT   z%BaseConversationalTask._prepare_route   s    %r'   r)   r*   r/   c                 <    d|it        |      d|j                  iS )Nmessagesr,   r   r7   rb   s       r   r8   z/BaseConversationalTask._prepare_payload_as_dict   s'     Fjk*&=jwH]HiHijjr'   rd   re   rf   rg   rh   r&   rT   r   r   r	   r   r8   __classcell__rr   s   @r   rk   rk      sf    
V V V&3 & & &kk'+kD\k	$kr'   rk   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
    r!   r"   c                 *    t         |   ||d       y )Nztext-generationrn   ro   rq   s      r   r&   zBaseTextGenerationTask.__init__   s    (XDUVr'   rP   r-   r   c                      y)Nz/v1/completionsrA   r`   s      r   rT   z%BaseTextGenerationTask._prepare_route   s     r'   r)   r*   r/   c                 <    d|it        |      d|j                  iS )Npromptr,   rv   rb   s       r   r8   z/BaseTextGenerationTask._prepare_payload_as_dict   s'     &hK
$;hWF[FgFghhr'   rw   ry   s   @r   r{   r{      sf    
W W W!3 ! ! !ii'+iD\i	$ir'   r{   N)maxsizer,   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   r[   rM   s       r   rI   rI      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   
isinstancedictr9   )r   r   keyvalues       r   r9   r9      sx    
 $kkm	
 U uE#J!=*UTXBY !sU3
 
s   AA)	functoolsr   typingr   r   r   r   huggingface_hubr   r   r	   !huggingface_hub.inference._commonr
   huggingface_hub.utilsr   r   r   
get_loggerrd   rK   r   rh   __annotations__r   r    rk   r{   rI   r9   rA   r'   r   <module>r      s    - - % ; ? F F 
		H	% #U !4T#7O2O-P(P#Q *94S> 9d38n 9^ ^Bk/ k$i/ i$ 4
S 
T 
 
	4 	 	 	r'   