
    kh#                     \   d dl Z d dlmZ 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mZmZmZ d dlmZmZ d d	lmZmZmZmZ  G d
 de      Z G d de      Z G d de      ZdedefdZ ed      deeee   f   fd       Z  ed      dededdfd       Z! G d de      Z"y)    N)	lru_cache)Path)AnyDictOptionalUnion)	constants)InferenceProviderMapping)RequestParameters_b64_encode_bytes_to_dict_open_as_binary)TaskProviderHelperfilter_none)build_hf_headersget_session	get_tokenhf_raise_for_statusc            	            e Zd ZdZdef 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dee   fdZ xZS )HFInferenceTaskz&Base class for HF Inference API tasks.taskc                 f    t         |   dt        j                  j	                  d      |       y )Nhf-inferenceprovider)r   base_urlr   )super__init__r	   INFERENCE_PROXY_TEMPLATEformat)selfr   	__class__s     m/var/www/teggl/fontify/venv/lib/python3.12/site-packages/huggingface_hub/inference/_providers/hf_inference.pyr   zHFInferenceTask.__init__   s2    #77>>>W 	 	
    api_keyreturnc                     |xs
 t               S N)r   )r!   r%   s     r#   _prepare_api_keyz HFInferenceTask._prepare_api_key   s    %)+%r$   modelc                 @   |+|j                  d      rt        d||| j                  d      S ||n"t               j	                  | j                        }|t        d| j                   d      t        || j                         t        d||| j                  d      S )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!   r*   model_ids      r#   _prepare_mapping_infoz%HFInferenceTask._prepare_mapping_info   s    !1!12I!J+'EuSWS\S\ek  "-53L3N3R3RSWS\S\3]		{ #Q Q  	h		2'#hUYU^U^gm
 	
r$   mapped_modelc                     |j                  d      r|S | j                  dv r| j                   d| d| j                   S | j                   d| S )Nr,   feature-extractionzsentence-similarity/models/z
/pipeline/)r1   r   r   )r!   r%   r8   s      r#   _prepare_urlzHFInferenceTask._prepare_url+   sb    ""#:; yyII }}oXl^:dii[I	

 MM?(<.9	
r$   inputs
parametersprovider_mapping_infoc                     t        |t              rt        d| j                   d      t        |t              rt        d| j                   d| d      |t        |      dS )N!Unexpected binary input for task .Unexpected path input for task  (got )r>   r?   
isinstancebytesr4   r   r   r   r!   r>   r?   r@   s       r#   _prepare_payload_as_dictz(HFInferenceTask._prepare_payload_as_dict7   sb     fe$@1MNNfd#>tyykPVxWXYZZ J0GHHr$   )__name__
__module____qualname____doc__strr   r   r)   r
   r7   r=   r   r   rL   __classcell__r"   s   @r#   r   r      s    0
S 
& &# &
8C= 
=U 
 

C 

s 

s 

II'+ID\I	$Ir$   r   c                   R    e Z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)	HFInferenceBinaryInputTaskr>   r?   r@   r&   c                      y r(    rK   s       r#   rL   z3HFInferenceBinaryInputTask._prepare_payload_as_dictB   s     r$   extra_payloadc                    t        |      }|xs i }t        |      dkD  xs t        |      dkD  }t        |t        t        f      st        |t
              st        d|       |s9t        |      5 }t        |t              r|n|j                         }|cd d d        S t        j                  t        |      |d|      j                  d      S # 1 sw Y   ;xY w)Nr   z5Expected binary inputs or a local path or a URL. Got rG   zutf-8)r   lenrI   rJ   r   rQ   r4   r   readjsondumpsr   encode)r!   r>   r?   r@   rX   has_parametersdatadata_as_bytess           r#   _prepare_payload_as_bytesz4HFInferenceBinaryInputTask._prepare_payload_as_bytesG   s     !,
%+Z1,FM0BQ0F &5$-0FC9PTU[T\]^^  ( %D(24(?TYY[$% %
 zz[%8
dVcdellmtuu% %s   1$CCN)
rM   rN   rO   r   r   r
   r   rL   rJ   rb   rW   r$   r#   rU   rU   A   sn    '+D\	$
vv v  8	v
  ~v 
%vr$   rU   c            	       P     e Zd Z fdZdedededee   fdZde	de	de	fd	Z
 xZS )
HFInferenceConversationalc                 $    t         |   d       y )Nconversationalr   r   r!   r"   s    r#   r   z"HFInferenceConversational.__init__a   s    )*r$   r>   r?   r@   r&   c                    t        |      }|j                  }|j                  d      xs |}||j                  d      rd}|j                  d      }t	        |t
              r"|j                  d      dk(  rd|d   d   d	|d<   i |||d
S )Nr*   r,   dummyresponse_formattypejson_schemajson_objectschema)rl   value)r*   messages)r   provider_idr3   r1   rI   dict)r!   r>   r?   r@   payloadr8   payload_modelrk   s           r#   rL   z2HFInferenceConversational._prepare_payload_as_dictd   s     j),88"w/?< M$<$<=T$U#M$..):;ot,1D1DV1LP]1]%(7A*G%& G'FMvFFr$   r%   r8   c                     |j                  d      r|n$t        j                  j                  d       d| }t	        |      S )Nr,   r   r   r<   )r1   r	   r   r    _build_chat_completion_url)r!   r%   r8   r   s       r#   r=   z&HFInferenceConversational._prepare_urlv   sP     &&'>? 66==~=VWW_`l_mn 	
 *(33r$   )rM   rN   rO   r   r   r   r
   r   rL   rQ   r=   rR   rS   s   @r#   rd   rd   `   sP    +GG'+GD\G	$G$4C 4s 4s 4r$   rd   	model_urlr&   c                     | j                  d      } | j                  d      r| dz  } | j                  d      s| dz  } | S )N/z/v1z/chat/completionsz/v1/chat/completions)rstripendswith)rx   s    r#   rw   rw      sO      %I % ((	 12++	r$      )maxsizec                     t               j                  t        j                   dt	                     } t        |        | j                         j                         D ci c]  \  }}|t        t        |d         d         c}}S c c}}w )Nz
/api/tasks)headerswidgetModels)
r   r3   r	   ENDPOINTr   r   r\   itemsnextiter)responser   detailss      r#   r2   r2      ss    }  I$6$6#7z!BL\L^ _H!QYQ^Q^Q`QfQfQhigD$tGN34d;;iiis   !#Br*   r   c                    ddl m}  |       j                  |       }|j                  }|j                  xs g }d|v }|dv r |dk(  r|ry |dk(  ry t        d|  d| d      |d	k(  r|dk(  ry t        d|  d| d      |d
k(  r|r|dk(  ry t        d      |dv r	|dv r||v ry ||k7  rt        d|  d| d| d| d	      y )Nr   )HfApirf   )text-generationrf   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.r:   z'. Supported tasks: 'z	', got: '')huggingface_hub.hf_apir   
model_infopipeline_tagtagsr4   )r*   r   r   r   r   r   is_conversationals          r#   r5   r5      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DL 	 teW4TF:OP\~]fgkfllmn
 	
 r$   c            	       b     e Zd Z fdZdedededee   fdZd
de	e
ef   dee   defd	Z xZS ) HFInferenceFeatureExtractionTaskc                 $    t         |   d       y )Nr;   rg   rh   s    r#   r   z)HFInferenceFeatureExtractionTask.__init__   s    -.r$   r>   r?   r@   r&   c                     t        |t              rt        d| j                   d      t        |t              rt        d| j                   d| d      d|it        |      S )NrB   rC   rD   rE   rF   r>   rH   rK   s       r#   rL   z9HFInferenceFeatureExtractionTask._prepare_payload_as_dict   si     fe$@1MNNfd#>tyykPVxWXYZZ &<K
$;<<r$   r   request_paramsc                 <    t        |t              rt        |      S |S r(   )rI   rJ   r   )r!   r   r   s      r#   get_responsez-HFInferenceFeatureExtractionTask.get_response   s    h&!(++r$   r(   )rM   rN   rO   r   r   r   r
   r   rL   r   rJ   r   r   rR   rS   s   @r#   r   r      s[    /
=
='+
=D\
=	$
=U5$;%7 RcId ps r$   r   )#r\   	functoolsr   pathlibr   typingr   r   r   r   huggingface_hubr	   r   r
   !huggingface_hub.inference._commonr   r   r   r   ,huggingface_hub.inference._providers._commonr   r   huggingface_hub.utilsr   r   r   r   r   rU   rd   rQ   rw   r2   r5   r   rW   r$   r#   <module>r      s       - - % ; m m X _ _1I( 1Ihv v>4 4># #  1j4Xc](:#; j j 4( (C (D ( (V r$   