
    _j$                        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$dS )    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                     t                                          dt          j                            d          |           d S )Nhf-inferenceprovider)r   base_urlr   )super__init__r   INFERENCE_PROXY_TEMPLATEformat)selfr   	__class__s     n/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/huggingface_hub/inference/_providers/hf_inference.pyr   zHFInferenceTask.__init__   sK    #7>>>WW 	 	
 	
 	
 	
 	
    api_keyNreturnc                 "    |pt                      S N)r   )r!   r%   s     r#   _prepare_api_keyz HFInferenceTask._prepare_api_key   s    %)++%r$   modelc                 F   |.|                     d          rt          d||| j        d          S ||n%t                                          | 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!J+'EuSWS\ek    "-553L3N3N3R3RSWS\3]3]Q	 Q Q Q   	h	222'#hUYU^gm
 
 
 	
r$   mapped_modelc                     |                     d          r|S | j        dv r| j         d| d| j         n| j         d| S )Nr,   feature-extractionzsentence-similarity/models/z
/pipeline/)r1   r   r   )r!   r%   r8   s      r#   _prepare_urlzHFInferenceTask._prepare_url2   sk    ""#:;; 	  yIII }IIlIIdiIII M99<9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>   s     fe$$ 	OMMMMNNNfd## 	[YtyYYPVYYYZZZfJGGHHHr$   )__name__
__module____qualname____doc__strr   r)   r	   r7   r=   r   dictrL   __classcell__r"   s   @r#   r   r      s       00
S 
 
 
 
 
 
&d
 &s & & & &
3: 
:R 
 
 
 
 

C 

s 

s 

 

 

 

II'+ID\I	I I I I I I I Ir$   r   c                   T    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dS )	HFInferenceBinaryInputTaskr>   r?   r@   r&   Nc                     d S r(    rK   s       r#   rL   z3HFInferenceBinaryInputTask._prepare_payload_as_dictI   s	     tr$   extra_payloadc                    t          |          }|pi }t          |          dk    pt          |          dk    }t          |t          t          f          s't          |t
                    st          d|           |st          |          S t          t          j
        t          |          |d|                              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M0B0BQ0F &5$-00 	_FC9P9P 	_]U[]]^^^  	/&v... J+f"5"5ZaaS`abbiijqrr(
 
 
 	
r$   )	rM   rN   rO   r   rR   r	   rL   r
   ra   rX   r$   r#   rV   rV   H   s        '+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                 J    t                                          d           d S )Nconversationalr   r   r!   r"   s    r#   r   z"HFInferenceConversational.__init__i   s"    )*****r$   r>   r?   r@   r&   Nc                 N   t          |          }|j        }|                    d          p|}||                    d          rd}|                    d          }t	          |t
                    r-|                    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"w//?< M$<$<=T$U$U #M$..):;;ot,, 	1D1DV1L1LP]1]1]%(7A* *G%& G'FMvFFFFr$   r%   r8   c                     |                     d          r|n$t          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~   s[     &&'>??oLL6==~=VVnn`lnn 	
 *(333r$   )rM   rN   rO   r   r   rR   r	   rL   rQ   r=   rS   rT   s   @r#   rc   rc   h   s        + + + + +GG'+GD\G	G G G G$4C 4s 4s 4 4 4 4 4 4 4 4r$   rc   	model_urlr&   c                 0   t          |           }|j                            d          }|                    d          r| S |                    d          r|dz   }n
|sd}n|dz   }|                    |          }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 1-- 1) 00 h//Jz*%%&&&r$      )maxsizec                      t                                          t          j         dt	                                } t          |            d |                                                                 D             S )Nz
/api/tasks)headersc           	      \    i | ])\  }}|t          t          |d                    d          *S )widgetModelsN)nextiter).0r   detailss      r#   
<dictcomp>z-_fetch_recommended_models.<locals>.<dictcomp>   s5    iiigD$tGN344d;;iiir$   )r   r3   r   ENDPOINTr   r   r]   items)responses    r#   r2   r2      sl    }}  I$6!B!B!BL\L^L^ __H!!!iiQYQ^Q^Q`Q`QfQfQhQhiiiir$   r*   r   c                    ddl m}  |                                |           }|j        }|j        pg }d|v }|dv r(|dk    r"|rd S |dk    rd S t          d|  d| d          |d	k    r|dk    rd S t          d|  d| d          |d
k    r|r|dk    rd S t          d          |dv r
|dv r||v rd S ||k    rt          d|  d| d| d| d	          d S )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4,,,  (((NuNNdNNNOOO---$$$FJ5JJ$JJJKKK+++ 	)9!9!9FWXXX 	===IIIDLL 	 tnennTnnP\nngknnn
 
 	
 Fr$   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                 J    t                                          d           d S )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   s     fe$$ 	OMMMMNNNfd## 	[YtyYYPVYYYZZZ &<K
$;$;<<r$   r   request_paramsc                 N    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      s        / / / / /
=
='+
=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      so                      - - - - - - - - % % % % % % ; ; ; ; ; ;              Y X X X X X X X _ _ _ _ _ _ _ _ _ _ _ _1I 1I 1I 1I 1I( 1I 1I 1Ih
 
 
 
 
 
 
 
@4 4 4 4 4 4 4 4>'# '# ' ' ' '. 1j4S4Z#8 j j j j 4( (C (D ( ( ( (V         r$   