
    ^hD%                     j   S SK r S SKJr  S SKJr  S SKJrJrJr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JrJrJr  S S	KJrJr  S S
KJrJrJrJr   " S S\5      r " S S\5      r  " S S\5      r!S\"S\"4S jr#\" SS9S\\"\\"   4   4S j5       r$\" SS9S\"S\"SS4S j5       r% " S S\5      r&g)    N)	lru_cache)Path)AnyDictOptionalUnion)urlparse
urlunparse)	constants)InferenceProviderMapping)	MimeBytesRequestParameters_b64_encode_bytes_to_dict_open_as_mime_bytes)TaskProviderHelperfilter_none)build_hf_headersget_session	get_tokenhf_raise_for_statusc            	          ^  \ rS rSrSrS\4U 4S jjrS\\   S\4S jrS\\   S\	4S	 jr
S\S
\S\4S jrS\S\S\	S\\   4S jrSrU =r$ )HFInferenceTask   z&Base class for HF Inference API tasks.taskc                 Z   > [         TU ]  S[        R                  R	                  SS9US9  g )Nhf-inferenceprovider)r   base_urlr   )super__init__r   INFERENCE_PROXY_TEMPLATEformat)selfr   	__class__s     k/home/james-whalen/.local/lib/python3.13/site-packages/huggingface_hub/inference/_providers/hf_inference.pyr"   HFInferenceTask.__init__   s2    #77>>>W 	 	
    api_keyreturnc                 (    U=(       d
    [        5       $ N)r   )r%   r*   s     r'   _prepare_api_key HFInferenceTask._prepare_api_key   s    %)+%r)   modelc                 >   Ub,  UR                  S5      (       a  [        SXU R                  SS9$ Ub  UO"[        5       R	                  U R                  5      nUc  [        SU R                   S35      e[        X R                  5        [        SX"U R                  SS9$ )Nzhttp://zhttps://r   live)r   
providerIdhf_model_idr   statuszTask z has no recommended model for HF Inference. Please specify a model explicitly. Visit https://huggingface.co/tasks for more info.)
startswithr   r   _fetch_recommended_modelsget
ValueError_check_supported_task)r%   r0   model_ids      r'   _prepare_mapping_info%HFInferenceTask._prepare_mapping_info"   s    !1!12I!J!J+'ESWS\S\ek  "-53L3N3R3RSWS\S\3]		{ #Q Q  	h		2'#UYU^U^gm
 	
r)   mapped_modelc                     UR                  S5      (       a  U$ U R                  S;   a  U R                   SU SU R                   3$ U R                   SU 3$ )Nr2   feature-extractionzsentence-similarity/models/z
/pipeline/)r7   r   r    )r%   r*   r?   s      r'   _prepare_urlHFInferenceTask._prepare_url2   se    ""#:;; yyII }}oXl^:dii[I	

 MM?(<.9	
r)   inputs
parametersprovider_mapping_infoc                     [        U[        5      (       a  [        SU R                   S35      e[        U[        5      (       a  [        SU R                   SU S35      e[        XS.5      $ )N!Unexpected binary input for task .Unexpected path input for task  (got )rF   rG   
isinstancebytesr:   r   r   r   r%   rF   rG   rH   s       r'   _prepare_payload_as_dict(HFInferenceTask._prepare_payload_as_dict>   sf     fe$$@1MNNfd##>tyykPVxWXYZZfGHHr)    )__name__
__module____qualname____firstlineno____doc__strr"   r   r.   r   r=   rD   r   r   rT   __static_attributes____classcell__r&   s   @r'   r   r      s    0
S 
& &# &
8C= 
=U 
 

C 

s 

s 

II'+ID\I	$I Ir)   r   c                   ^    \ rS rSrS\S\S\S\\   4S jrS\S\S\S\\   S\\	   4
S jr
S	rg
)HFInferenceBinaryInputTaskH   rF   rG   rH   r+   c                     g r-   rV   rS   s       r'   rT   3HFInferenceBinaryInputTask._prepare_payload_as_dictI   s     r)   extra_payloadc                    [        U5      nU=(       d    0 n[        U5      S:  =(       d    [        U5      S:  n[        U[        [        45      (       d#  [        U[
        5      (       d  [        SU 35      eU(       d  [        U5      $ [        [        R                  " [        U5      US.UE5      R                  S5      SS9$ )Nr   z5Expected binary inputs or a local path or a URL. Got rO   zutf-8zapplication/json)	mime_type)r   lenrQ   rR   r   r\   r:   r   r   jsondumpsr   encode)r%   rF   rG   rH   re   has_parameterss         r'   _prepare_payload_as_bytes4HFInferenceBinaryInputTask._prepare_payload_as_bytesN   s     !,
%+Z1,FM0BQ0F &5$-00FC9P9PTU[T\]^^ &v.. JJ+f"5ZaS`abiijqr(
 	
r)   rV   N)rW   rX   rY   rZ   r   r   r   r   rT   r   rm   r]   rV   r)   r'   ra   ra   H   si    '+D\	$


 
  8	

  ~
 
)	
r)   ra   c            	       ^   ^  \ rS rSrU 4S jrS\S\S\S\\   4S jr	S\
S	\
S\
4S
 jrSrU =r$ )HFInferenceConversationalh   c                 $   > [         TU ]  S5        g )Nconversationalr!   r"   r%   r&   s    r'   r"   "HFInferenceConversational.__init__i   s    )*r)   rF   rG   rH   r+   c                 <   [        U5      nUR                  nUR                  S5      =(       d    UnUb  UR                  S5      (       a  SnUR                  S5      n[	        U[
        5      (       a#  UR                  S5      S:X  a  SUS   S   S	.US'   0 UEXaS
.E$ )Nr0   r2   dummyresponse_formattypejson_schemajson_objectschema)rz   value)r0   messages)r   provider_idr9   r7   rQ   dict)r%   rF   rG   rH   payloadr?   payload_modelry   s           r'   rT   2HFInferenceConversational._prepare_payload_as_dictl   s     j),88"w/?< M$<$<=T$U$U#M$..):;ot,,1D1DV1LP]1]%(7A*G%& G'FMFFr)   r*   r?   c                     UR                  S5      (       a  UO![        R                  R                  SS9 SU 3n[	        U5      $ )Nr2   r   r   rC   )r7   r   r#   r$   _build_chat_completion_url)r%   r*   r?   r    s       r'   rD   &HFInferenceConversational._prepare_url~   sS     &&'>?? 66==~=VWW_`l_mn 	
 *(33r)   rV   )rW   rX   rY   rZ   r"   r   r   r   r   rT   r\   rD   r]   r^   r_   s   @r'   rp   rp   h   sU    +GG'+GD\G	$G$4C 4s 4s 4 4r)   rp   	model_urlr+   c                    [        U 5      nUR                  R                  S5      nUR                  S5      (       a  U $ UR                  S5      (       a  US-   nOU(       d  SnOUS-   nUR	                  US9n[        [        U5      5      $ )N/z/chat/completionsz/v1z/v1/chat/completions)path)r	   r   rstripendswith_replacer\   r
   )r   parsedr   new_path
new_parseds        r'   r   r      s    i F;;c"D }}()) }}U--) 00 h/Jz*%&&r)      )maxsizec                     [        5       R                  [        R                   S3[	        5       S9n [        U 5        U R                  5       R                  5        VVs0 s H  u  pU[        [        US   5      S 5      _M      snn$ s  snnf )Nz
/api/tasks)headerswidgetModels)
r   r9   r   ENDPOINTr   r   ri   itemsnextiter)responser   detailss      r'   r8   r8      sw    }  I$6$6#7z!BL\L^ _H!QYQ^Q^Q`QfQfQhiQhD$tGN34d;;Qhiiis   %Br0   r   c                    SSK Jn  U" 5       R                  U 5      nUR                  nUR                  =(       d    / nSU;   nUS;   a'  US:X  a!  U(       a  g US:X  a  g [        SU  SU S35      eUS	:X  a  US:X  a  g [        SU  SU S35      eUS
:X  a  U(       a  US:X  a  g [        S5      eUS;   a  US;   a  X;   a  g XA:w  a  [        SU  SU SU SU S3	5      eg )Nr   )HfApirs   )text-generationrs   r   zModel 'z' doesn't support task 'z'.ztext2text-generationzimage-text-to-textz<Non-conversational image-text-to-text task is not supported.rA   z'. Supported tasks: 'z	', got: '')huggingface_hub.hf_apir   
model_infopipeline_tagtagsr:   )r0   r   r   r   r   r   is_conversationals          r'   r;   r;      s*   ,##E*J**L?? bD(D044,, ((wug-EdV2NOO--$$75')A$rJKK++)9!9WXX 	==IIL 	 eW4TF:OP\~]fgkfllmn
 	
 r)   c            	       r   ^  \ rS rSrU 4S jrS\S\S\S\\   4S jr	SS\
\\4   S	\\   S\4S
 jjrSrU =r$ ) HFInferenceFeatureExtractionTask   c                 $   > [         TU ]  S5        g )NrB   rt   ru   s    r'   r"   )HFInferenceFeatureExtractionTask.__init__   s    -.r)   rF   rG   rH   r+   c                     [        U[        5      (       a  [        SU R                   S35      e[        U[        5      (       a  [        SU R                   SU S35      eSU0[        U5      E$ )NrJ   rK   rL   rM   rN   rF   rP   rS   s       r'   rT   9HFInferenceFeatureExtractionTask._prepare_payload_as_dict   so     fe$$@1MNNfd##>tyykPVxWXYZZ &<K
$;<<r)   r   request_paramsc                 F    [        U[        5      (       a  [        U5      $ U$ r-   )rQ   rR   r   )r%   r   r   s      r'   get_response-HFInferenceFeatureExtractionTask.get_response   s    h&&!(++r)   rV   r-   )rW   rX   rY   rZ   r"   r   r   r   r   rT   r   rR   r   r   r]   r^   r_   s   @r'   r   r      s`    /
=
='+
=D\
=	$
=U5$;%7 RcId ps  r)   r   )'ri   	functoolsr   pathlibr   typingr   r   r   r   urllib.parser	   r
   huggingface_hubr   r   r   !huggingface_hub.inference._commonr   r   r   r   r   ,huggingface_hub.inference._providers._commonr   r   huggingface_hub.utilsr   r   r   r   r   ra   rp   r\   r   r8   r;   r   rV   r)   r'   <module>r      s       - - - % ;  Y _ _1I( 1Ih
 
@4 4>'# '# '. 1j4Xc](:#; j j 4( (C (D ( (V r)   