Ë
    Q^(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      új/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/huggingface_hub/inference/_providers/_common.pyÚfilter_noner   $   s(   € ØŸW™W›Y×8‘T�Q˜¨!©-ˆAˆq‰DÓ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ÀÓCˆGð ×-Ñ-¨f°jÐBWÐYfÓgˆð Ð 4Ð#3ÜÐWÓXÐXØˆ?˜t˜|ÜÐQÓRÐRÜ Ø˜$Ÿ)™)Ð+@×+LÑ+LÐSZÐaeÐovô
ð 	
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:   € ð ˆ?Ü“kˆGØˆ?ÜØ;¸D¿M¹M¸?Ð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,  € ð ˆ=ÜÐJÈ4Ï=É=È/ÐYZÐ[Ó\Ð\ô -×0Ñ0°·±ÀÓC×GÑGÈÔNÜ4°T·]±]ÑCÀEÑJÐJä<¸UÓC×GÑGÈÏÉÓVÐØÐ#Ü˜v e WÐ,JÈ4Ï=É=È/ÐYZÐ[Ó\Ð\à× Ñ  D§I¡IÒ-ÜØ˜˜Ð:¸4¿9¹9¸+À^ÐTX×TaÑTaÐSbð c#Ø#3×#8Ñ#8Ð"9¸ð<óð ð
 ×"Ñ" iÒ/Ü�N‰NØ˜˜Ð@ÀÇÁÀÐ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Ô$Ü�K‰K˜) D§M¡M ?Ð2YÐZÔ[Ü×5Ñ5×<Ñ<ÀdÇmÁmÐ<ÓTÐTä�K‰K˜) D§M¡M ?Ð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)zéReturn 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)zæReturn 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ð	ð 
ó		ð
¨°©ð 
¸#ó 
ð ¨8°C©=ð  Ð=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   ø€ Ü‰Ñ (°XÐDTÐÕ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Ðj¤k°*Ó&=Ðj¸wÐH]×HiÑHiÑ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   ø€ Ü‰Ñ (°XÐDUÐÕ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'   € ð ˜&Ðh¤K°
Ó$;Ðh¸WÐF[×FgÑFgÑ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ÐÓI€DØ×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   € ðØ
ðð $Ÿk™k›m÷	
ñ ��Uð Ø�u‘¤¨E°#©J¼Ô!=Ä*ÈUÔTXÔBYô !  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°#Ð7OÐ2OÑ-PÐ(PÑ#Qó ð*9�4˜˜S˜‘>ð 9 d¨3°¨8¡nó 9÷^ñ ^ôBkÐ/ô kô$iÐ/ô iñ$ �4Ôð
¨Sð 
°Tò 
ó ð
ð	˜4ð 	¨ð 	°ô 	r'   