
    ^j$                     d   d dl Z d dl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 d dlmZ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dz  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)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            	            e Zd ZdZdef fdZdedz  defdZdedz  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 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     |/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/huggingface_hub/inference/_providers/hf_inference.pyr   zHFInferenceTask.__init__   s2    #77>>>W 	 	
    api_keyN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_url2   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_dict>   sb     fe$@1MNNfd#>tyykPVxWXYZZfJGHHr$   )__name__
__module____qualname____doc__strr   r)   r	   r7   r=   r   dictrL   __classcell__r"   s   @r#   r   r      s    0
S 
&d
 &s &
3: 
:R 
 

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dz  fdZdededededz  dedz  f
dZy)	HFInferenceBinaryInputTaskr>   r?   r@   r&   Nc                      y r(    rK   s       r#   rL   z3HFInferenceBinaryInputTask._prepare_payload_as_dictI   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|       |st        |      S t        t        j                  t        |      |d|      j                  d      d      S )Nr   z5Expected binary inputs or a local path or a URL. Got rG   zutf-8zapplication/json)	mime_type)r   lenrI   rJ   r   rQ   r4   r   r
   jsondumpsr   encode)r!   r>   r?   r@   rY   has_parameterss         r#   _prepare_payload_as_bytesz4HFInferenceBinaryInputTask._prepare_payload_as_bytesN   s     !,
%+Z1,FM0BQ0F &5$-0FC9PTU[T\]^^ &v.. JJ+f"5ZaS`abiijqr(
 	
r$   )	rM   rN   rO   r   rR   r	   rL   r
   ra   rX   r$   r#   rV   rV   H   si    '+D\	


 
  8	

 d{
 
T	
r$   rV   c            	       P     e Zd Z fdZdededededz  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__i   s    )*r$   r>   r?   r@   r&   Nc                    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)rk   value)r*   messages)r   provider_idr3   r1   rI   rR   )r!   r>   r?   r@   payloadr8   payload_modelrj   s           r#   rL   z2HFInferenceConversational._prepare_payload_as_dictl   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_url~   sP     &&'>? 66==~=VWW_`l_mn 	
 *(33r$   )rM   rN   rO   r   r   rR   r	   rL   rQ   r=   rS   rT   s   @r#   rc   rc   h   sP    +GG'+GD\G	G$4C 4s 4s 4r$   rc   	model_urlr&   c                    t        |       }|j                  j                  d      }|j                  d      r| S |j                  d      r|dz   }n
|sd}n|dz   }|j	                  |      }t        t        |            S )N/z/chat/completionsz/v1z/v1/chat/completions)path)r   ry   rstripendswith_replacerQ   r   )rv   parsedry   new_path
new_parseds        r#   ru   ru      s    i F;;c"D }}() }}U--) 00 h/Jz*%&&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   )HfApire   )text-generationre   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            	       ^     e Zd Z fdZdededededz  fdZddeez  d	e	dz  defd
Z
 xZS ) HFInferenceFeatureExtractionTaskc                 $    t         |   d       y )Nr;   rf   rg   s    r#   r   z)HFInferenceFeatureExtractionTask.__init__   s    -.r$   r>   r?   r@   r&   Nc                     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   rR   r	   rL   rJ   r   r   rS   rT   s   @r#   r   r      sW    /
=
='+
=D\
=	
=UT\ CTW[C[ gj r$   r   )%r]   	functoolsr   pathlibr   typingr   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   rV   rc   rQ   ru   rR   r2   r5   r   rX   r$   r#   <module>r      s        - % ;  Y _ _1I( 1Ih
 
@4 4>'# '# '. 1j4S4Z#8 j j 4( (C (D ( (V r$   