Ë
    ÂÓ^j”5  ã                   óö  — U d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
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 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f   ee   z  deeef   ee   z  fd„Z G d„ d«      Z G d„ de«      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Úoverload)Ú	constants)ÚInferenceProviderMapping)Ú	MimeBytesÚRequestParameters)ÚChatCompletionInputMessage)Úbuild_hf_headersÚ	get_tokenÚlogging)ÚcerebrasÚcohereÚ	deepinfrazfal-aizfireworks-aiÚgroqzhf-inferenceÚnscaleÚovhcloudÚ	replicateÚscalewayÚtogetherÚ	wavespeedzzai-orgÚ!HARDCODED_MODEL_INFERENCE_MAPPINGÚobjÚreturnc                  ó   — y ©N© ©r   s    úw/var/www/ramen.bs-engineer-server.com/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                 óf  — t        | t        «      rEi }| j                  «       D ].  \  }}|€Œ	t        |t        t        f«      rt	        |«      }|||<   Œ0 |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    0   s§   € Ü�#”tÔØ"$ˆØ—I‘I“Kò 	‰DˆAˆqØˆyØÜ˜!œd¤D˜\Ô*Ü “N�ØˆG�AŠJð	ð ˆä�#”tÔØNQÖRÈ¤*¨Q´´t°Ô"=”˜A”À1ÑDÒRÐRä
Ð2´4¸³9°+Ð>Ó
?Ð?ùò Ss   Á**B.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dz  dedz  deeef   dz  defd„Z		 d de
ez  dedz  defd„Zdedz  defd„Zdedz  defd„Zdeeef   deeef   dz  dedz  deeef   fd„Zdededeeef   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dz  fd„Zd	ed
edededz  dedz  f
d„Zy)!ÚTaskProviderHelperz.Base class for task-specific provider helpers.ÚproviderÚbase_urlÚtaskr   Nc                 ó.   — || _         || _        || _        y r   )r/   r1   r0   )Úselfr/   r0   r1   s       r   Ú__init__zTaskProviderHelper.__init__D   s   € Ø ˆŒØˆŒ	Ø ˆ�r!   )Úextra_payloadÚinputsÚ
parametersÚheadersÚmodelÚapi_keyr5   c                óÔ  — | j                  |«      }| j                  |«      }| j                  ||«      }| j                  ||j                  «      }| j                  |||¬«      }	|	�t        |	t        |xs i «      «      }	| j                  ||||«      }
|	�|
�t        d«      ‚|	€|
€t        d«      ‚| j                  ||	|
«      }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.)Úurlr1   r9   ÚjsonÚdatar8   )Ú_prepare_api_keyÚ_prepare_mapping_infoÚ_prepare_headersÚ_prepare_urlÚprovider_idÚ_prepare_payload_as_dictÚrecursive_merger    Ú_prepare_payload_as_bytesr(   Ú_normalize_headersr	   r1   )r3   r6   r7   r8   r9   r:   r5   r<   r=   Úpayloadr?   Únormalized_headerss               r   Úprepare_requestz"TaskProviderHelper.prepare_requestI   s  € ð  ×'Ñ'¨Ó0ˆð !%× :Ñ :¸5Ó AÐð ×'Ñ'¨°Ó9ˆð ×Ñ Ð)>×)JÑ)JÓKˆð ×/Ñ/°¸
ÐZoÐ/ÓpˆØÐÜ% g¬{¸=Ò;NÈBÓ/OÓPˆGð ×-Ñ-¨f°jÐBWÐYfÓgˆð Ð 4Ð#3ÜÐWÓXÐXØˆ?˜t˜|ÜÐQÓRÐRð "×4Ñ4°W¸gÀtÓLÐä ØØ—‘Ø'×3Ñ3ØØØ&ô
ð 	
r!   ÚresponseÚrequest_paramsc                 ó   — |S )z‚
        Return the response in the expected format.

        Override this method in subclasses for customized response handling.r   )r3   rL   rM   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 `hf auth login`.)r   r(   r/   ©r3   r:   s     r   r@   z#TaskProviderHelper._prepare_api_key‰   s:   € ð ˆ?Ü“kˆGØˆ?ÜØ;¸D¿M¹M¸?ÐJnÐoóð ð ˆ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(   r/   r   ÚgetÚ!_fetch_inference_provider_mappingr1   ÚstatusÚloggerÚwarning)r3   r9   Úprovider_mappingÚmappings       r   rA   z(TaskProviderHelper._prepare_mapping_info•   s†  € ð ˆ=ÜÐJÈ4Ï=É=È/ÐYZÐ[Ó\Ð\ô -×0Ñ0°·±ÀÓC×GÑGÈÔNÜ4°T·]±]ÑCÀEÑJÐJàÐÜ8¸Ó?ò 	ˆGØ×Ñ 4§=¡=Ó0Ø#*Ð Ùð	ð
 Ð#Ü˜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ôð ×"Ñ" gÒ-Ü�N‰NØ>¸u¸gÐEUÐVZ×VcÑVcÐUdð e-ð -ôð  Ðr!   rI   r?   c                 óè   — |j                  «       D ��ci c]  \  }}|€Œ	|j                  «       |“Œ }}}|j                  d«      €&|�|j                  �|j                  |d<   |S |�d|d<   |S c c}}w )zzNormalize the headers to use for the request.

        Override this method in subclasses for customized headers.
        zcontent-typezapplication/json)r&   ÚlowerrV   Ú	mime_type)r3   r8   rI   r?   ÚkeyÚvaluerJ   s          r   rH   z%TaskProviderHelper._normalize_headersº   s‹   € ð DKÇ=Á=Ã?×h±Z°S¸%ÐV[ÑVg˜cŸi™i›k¨5Ñ0ÐhÐÑhØ×!Ñ! .Ó1Ð9ØÐ D§N¡NÐ$>Ø59·^±^Ð" >Ñ2ð "Ð!ð Ð$Ø5GÐ" >Ñ2Ø!Ð!ùó is
   ”
A.ŸA.c                 ó"   — i t        |¬«      ¥|¥S )zwReturn the headers to use for the request.

        Override this method in subclasses for customized headers.
        )Útoken)r   )r3   r8   r:   s      r   rB   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)r3   r:   rd   r0   Úroutes        r   rC   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 )ú[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.)Ú
startswithrY   Úinfor/   r   ÚINFERENCE_PROXY_TEMPLATEÚformatr0   rQ   s     r   rg   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.
        Ú r   ©r3   rd   r:   s      r   rh   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.
        Nr   ©r3   r6   r7   r<   s       r   rE   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.
        Nr   )r3   r6   r7   r<   r5   s        r   rG   z,TaskProviderHelper._prepare_payload_as_bytesõ   s   € ð r!   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr4   r   r%   r	   rK   ÚbytesrO   r@   r   rA   r   rH   rB   rC   rg   rh   rE   rG   r   r!   r   r.   r.   A   s  „ Ù8ð! ð !°ð !¸3ð !À4ó !ð 04ò3
ð ð3
ð ˜˜c˜‘Nð	3
ð
 ð3
ð �T‰zð3
ð �t‘ð3
ð ˜C ˜H‘~¨Ñ,ð3
ð 
ó3
ðp 48ñ	à˜$‘,ð	ð *¨DÑ0ð	ð 
ó		ð
¨¨d©
ð 
°só 
ð# ¨3°©:ð # Ð:Ró # ðJ"Ø˜C ˜H‘~ð"Ø04°S¸#°X±ÀÑ0Eð"ØMVÐY]ÑM]ð"à	ˆc�3ˆh‰ó"ð>¨ð >°sð >¸tÀCÈÀH¹~ó >ð= Cð =°sð =¸só =ð
!¨ð 
!°ó 
!ð¨3ð ¸ð Àó ðØðØ'+ðØD\ðà	�‰óðàðð ðð  8ð	ð
 ˜d‘{ðð 
�TÑ	ôr!   r.   c            	       ój   ‡ — 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	z     d
ede
dedz  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/   r0   c                 ó*   •— t         ‰| �  ||d¬«       y )NÚconversational©r/   r0   r1   ©Úsuperr4   ©r3   r/   r0   Ú	__class__s      €r   r4   zBaseConversationalTask.__init__
  s   ø€ Ü‰Ñ (°XÐDTÐÕUr!   rd   r:   r   c                  ó   — y)Nz/v1/chat/completionsr   ru   s      r   rh   z%BaseConversationalTask._prepare_route  s   € Ø%r!   r6   r7   r<   Nc                 ó<   — t        d|i|¥d|j                  i¥«      S )NÚmessagesr9   ©r    rD   rw   s       r   rE   z/BaseConversationalTask._prepare_payload_as_dict  s'   € ô ˜J¨Ði°*Ði¸gÐG\×GhÑGhÑiÓjÐjr!   )ry   rz   r{   r|   r}   r4   rh   r'   r%   r
   r   rE   Ú__classcell__©r‡   s   @r   r€   r€     sw   ø„ ñð
V ð V°õ Vð&¨3ð &¸ð &Àó &ðkà�TÐ6Ñ6Ñ7ðkð ðkð  8ð	kð
 
�‰÷kr!   r€   c                   óH   ‡ — e Zd ZdZˆ fd„Zdedefd„Zdedz  defd„Zˆ xZ	S )	ÚAutoRouterConversationalTaska  
    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         ‰| �  dd¬«       y )NÚautozhttps://router.huggingface.co)r/   r0   r„   )r3   r‡   s    €r   r4   z%AutoRouterConversationalTask.__init__!  s   ø€ Ü‰Ñ &Ð3RÐÕSr!   r:   r   c                 óR   — |j                  d«      st        d«      ‚| j                  S )rm   rn   z>Cannot select auto-router when using non-Hugging Face API key.)ro   r(   r0   rQ   s     r   rg   z.AutoRouterConversationalTask._prepare_base_url$  s(   € ð
 ×!Ñ! %Ô(ÜÐ]Ó^Ð^à—=‘=Ð r!   r9   Nc                 ó<   — |€t        d«      ‚t        d||dd¬«      S )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‚   )r/   Úhf_model_idÚ
providerIdrX   r1   )r(   r   )r3   r9   s     r   rA   z2AutoRouterConversationalTask._prepare_mapping_info.  s1   € ð
 ˆ=ÜÐ=Ó>Ð>ä'ØØØØØ!ô
ð 	
r!   )
ry   rz   r{   r|   r4   r}   rg   r   rA   rŒ   r�   s   @r   r�   r�     s9   ø„ ñôTð!¨ð !°ó !ð
¨3°©:ð 
Ð:R÷ 
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dz  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/   r0   c                 ó*   •— t         ‰| �  ||d¬«       y )Nztext-generationrƒ   r„   r†   s      €r   r4   zBaseTextGenerationTask.__init__E  s   ø€ Ü‰Ñ (°XÐDUÐÕVr!   rd   r:   r   c                  ó   — y)Nz/v1/completionsr   ru   s      r   rh   z%BaseTextGenerationTask._prepare_routeH  s   € Ø r!   r6   r7   r<   Nc                 ó<   — t        d|i|¥d|j                  i¥«      S )NÚpromptr9   r‹   rw   s       r   rE   z/BaseTextGenerationTask._prepare_payload_as_dictK  s'   € ô ˜H fÐg°
Ðg¸GÐEZ×EfÑEfÑgÓhÐhr!   )ry   rz   r{   r|   r}   r4   rh   r   r%   r   rE   rŒ   r�   s   @r   r˜   r˜   ?  sf   ø„ ñð
W ð W°õ Wð!¨3ð !¸ð !Àó !ðiØðiØ'+ðiØD\ðià	�‰÷ir!   r˜   N)Úmaxsizer9   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(   )r9   rŸ   rp   r[   s       r   rW   rW   Q  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&   r$   r%   rF   )r¥   r¦   r`   ra   s       r   rF   rF   _  sx   € ðØ
ðð $Ÿk™k›m÷	
ñ ��Uð Ø�u‘¤¨E°#©J¼Ô!=Ä*ÈUÔTXÔBYô !  s¡¨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_loggerry   rY   r   r%   r}   Ú__annotations__r    r'   r.   r€   r�   r˜   rW   rF   r   r!   r   ú<module>r°      s„  ðÞ ß  å %Ý ;ß JÝ aß FÑ Fð 
ˆ×	Ñ	˜HÓ	%€ð ØØØØØØØØØØØØØñ+UÐ ! 4¨¨T°#Ð7OÐ2OÑ-PÐ(PÑ#Qó ð2 
Ø ;�T˜#˜s˜(‘^Ð ;¨¨S°#¨X©Ò ;ó 
Ø ;Ø	Ø 1�T˜#‘YÐ 1 4¨¡9Ò 1ó 
Ø 1ð@�T˜#˜s˜(‘^ d¨3¡iÑ/ð @°D¸¸c¸±NÀTÈ#ÁYÑ4Nó @÷"@ñ @ôFkÐ/ô kô*#
Ð#9ô #
ôLiÐ/ô iñ$ �4Ôð
¨Sð 
°TÐ:TÑ5Uò 
ó ð
ð	˜4ð 	¨ð 	°ô 	r!   