
    O&h~                     \   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     r/var/www/html/hubwallet-dev/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        ||| j                  d      S ||n"t               j	                  | j                        }|t        d| j                   d      t        || j                         t        ||| j                  d      S )Nzhttp://zhttps://live)
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+u%VZV_V_hnoo!-53L3N3R3RSWS\S\3]		{ #Q Q  	h		2'8X\XaXajpqqr$   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 )Nz!Unexpected binary input for task .zUnexpected path input for task z (got )r>   r?   )
isinstancebytesr4   r   r   r   r!   r>   r?   r@   s       r#   _prepare_payload_as_dictz(HFInferenceTask._prepare_payload_as_dict3   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   rH   __classcell__r"   s   @r#   r   r      s    0
S 
& &# &
r8C= 
r=U 
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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(    rG   s       r#   rH   z3HFInferenceBinaryInputTask._prepare_payload_as_dict>   s     r$   extra_payloadc                    t        |j                         D ci c]  \  }}|	|| c}}      }|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 c c}}w # 1 sw Y   AxY w)Nr   z5Expected binary inputs or a local path or a URL. Got rD   zutf-8)r   itemslenrE   rF   r   rM   r4   r   readjsondumpsr   encode)
r!   r>   r?   r@   rT   kvhas_parametersdatadata_as_bytess
             r#   _prepare_payload_as_bytesz4HFInferenceBinaryInputTask._prepare_payload_as_bytesC   s     !:3C3C3E!W41a!Q$!WX
%+Z1,FM0BQ0F &5$-0FC9PTU[T\]^^  ( %D(24(?TYY[$% %
 zz[%8
dVcdellmtuu "X% %s   
C6
C6
$C<<DN)
rI   rJ   rK   r   r   r
   r   rH   rF   ra   rS   r$   r#   rQ   rQ   =   sn    '+D\	$
vv v  8	v
  ~v 
%vr$   rQ   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__]   s    )*r$   r>   r?   r@   r&   c                     |j                   }|j                  d      xs |}||j                  d      rd}i t        |      ||dS )Nr*   r,   dummy)r*   messages)provider_idr3   r1   r   )r!   r>   r?   r@   r8   payload_models         r#   rH   z2HFInferenceConversational._prepare_payload_as_dict`   sR     -88"w/?< M$<$<=T$U#MV+j)VMvVVr$   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_urlk   sP     &&'>? 66==~=VWW_`l_mn 	
 *(33r$   )rI   rJ   rK   r   r   r   r
   r   rH   rM   r=   rN   rO   s   @r#   rc   rc   \   sP    +	W	W'+	WD\	W	$	W4C 4s 4s 4r$   rc   	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)ro   s    r#   rn   rn   t   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   rY   rV   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                   D     e Zd Z 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;   rf   rg   s    r#   r   z)HFInferenceFeatureExtractionTask.__init__   s    -.r$   r|   request_paramsr&   c                 <    t        |t              rt        |      S |S r(   )rE   rF   r   )r!   r|   r   s      r#   get_responsez-HFInferenceFeatureExtractionTask.get_response   s    h&!(++r$   r(   )rI   rJ   rK   r   r   rF   r   r   r   r   r   rN   rO   s   @r#   r   r      s2    /U5$;%7 RcId ps r$   r   )#rY   	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   rQ   rc   rM   rn   r2   r5   r   rS   r$   r#   <module>r      s       - - % ; m m X _ _-I( -I`v v>4 40# #  1j4Xc](:#; j j 4( (C (D ( (V r$   