
    wiD%                        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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e"         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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            	            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                     t                                          dt          j                            d          |           d S )Nhf-inferenceprovider)r   base_urlr   )super__init__r   INFERENCE_PROXY_TEMPLATEformat)selfr   	__class__s     /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/huggingface_hub/inference/_providers/hf_inference.pyr!   zHFInferenceTask.__init__   sK    #7>>>WW 	 	
 	
 	
 	
 	
    api_key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/)r4   r   r   )r$   r(   r;   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 )rA   rB   
isinstancebytesr7   r   r   r   r$   rA   rB   rC   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,   r   r:   r@   r   r   rO   __classcell__r%   s   @r&   r   r      s       00
S 
 
 
 
 
 
& &# & & & &
8C= 
=U 
 
 
 
 

C 

s 

s 

 

 

 

II'+ID\I	$I I I I I I I Ir'   r   c                   f    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	dS )	HFInferenceBinaryInputTaskrA   rB   rC   r)   c                     d S r+    rN   s       r&   rO   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 rJ   zutf-8zapplication/json)	mime_type)r   lenrL   rM   r   rT   r7   r   r   jsondumpsr   encode)r$   rA   rB   rC   r[   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'   N)
rP   rQ   rR   r   r   r   r   rO   r   rc   rZ   r'   r&   rX   rX   H   s        '+D\	$   


 
  8	

  ~
 
)	
 
 
 
 
 
r'   rX   c            	       V     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                 J    t                                          d           d S )Nconversationalr    r!   r$   r%   s    r&   r!   z"HFInferenceConversational.__init__i   s"    )*****r'   rA   rB   rC   r)   c                 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)rm   value)r-   messages)r   provider_idr6   r4   rL   dict)r$   rA   rB   rC   payloadr;   payload_modelrl   s           r&   rO   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(   r;   c                     |                     d          r|n$t          j                            d           d| }t	          |          S )Nr/   r   r   r?   )r4   r   r"   r#   _build_chat_completion_url)r$   r(   r;   r   s       r&   r@   z&HFInferenceConversational._prepare_url~   s[     &&'>??oLL6==~=VVnn`lnn 	
 *(333r'   )rP   rQ   rR   r!   r   r   r   r   rO   rT   r@   rU   rV   s   @r&   re   re   h   s        + + + + +GG'+GD\G	$G G G G$4C 4s 4s 4 4 4 4 4 4 4 4r'   re   	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	   r|   rstripendswith_replacerT   r
   )ry   parsedr|   new_path
new_parseds        r&   rx   rx      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   r6   r   ENDPOINTr   r   r_   items)responses    r&   r5   r5      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   )HfApirg   )text-generationrg   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tagsr7   )r-   r   r   r   r   r   is_conversationals          r&   r8   r8      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            	       t     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                 J    t                                          d           d S )Nr>   rh   ri   s    r&   r!   z)HFInferenceFeatureExtractionTask.__init__   s"    -.....r'   rA   rB   rC   r)   c                     t          |t                    rt          d| j         d          t          |t                    rt          d| j         d| d          d|it          |          S )NrE   rF   rG   rH   rI   rA   rK   rN   s       r&   rO   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'   Nr   request_paramsc                 N    t          |t                    rt          |          S |S r+   )rL   rM   r   )r$   r   r   s      r&   get_responsez-HFInferenceFeatureExtractionTask.get_response   s'    h&& 	,!(+++r'   r+   )rP   rQ   rR   r!   r   r   r   r   rO   r   rM   r   r   rU   rV   s   @r&   r   r      s        / / / / /
=
='+
=D\
=	$
= 
= 
= 
= U5$;%7 RcId ps        r'   r   )'r_   	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   rX   re   rT   rx   r5   r8   r   rZ   r'   r&   <module>r      s                - - - - - - - - - - - - - - - - - - - - % % % % % % ; ; ; ; ; ;              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Xc](:#; j j j j 4( (C (D ( ( ( (V         r'   