o
    0j$                     @   s2  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 deZG dd deZG dd deZdedefddZ eddde!eedB f fddZ"edddededdfddZ#G d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                	       s   e Zd ZdZdef fddZdedB defdd	Zd
edB defddZdededefddZ	de
dedededB fddZ  ZS )HFInferenceTaskz&Base class for HF Inference API tasks.taskc                    s    t  jdtjjdd|d d S )Nhf-inferenceprovider)r   base_urlr   )super__init__r   INFERENCE_PROXY_TEMPLATEformat)selfr   	__class__ r/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/huggingface_hub/inference/_providers/hf_inference.pyr      s
   
zHFInferenceTask.__init__api_keyNreturnc                 C   s
   |pt  S N)r   )r   r#   r!   r!   r"   _prepare_api_key   s   
z HFInferenceTask._prepare_api_keymodelc                 C   sz   |d ur| drtd||| jddS |d ur|nt | j}|d u r-td| j dt|| j td||| jddS )Nzhttp://zhttps://r   live)r   Z
providerIdZ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'   Zmodel_idr!   r!   r"   _prepare_mapping_info"   s   z%HFInferenceTask._prepare_mapping_infomapped_modelc                 C   s@   | dr|S | jdv r| j d| d| j S | j d| S )Nr(   feature-extractionzsentence-similarity/models/z
/pipeline/)r+   r   r   )r   r#   r1   r!   r!   r"   _prepare_url2   s   

zHFInferenceTask._prepare_urlinputs
parametersprovider_mapping_infoc                 C   sL   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 )r6   r7   
isinstancebytesr.   r   r   r   r   r6   r7   r8   r!   r!   r"   _prepare_payload_as_dict>   s
   

z(HFInferenceTask._prepare_payload_as_dict)__name__
__module____qualname____doc__strr   r&   r   r0   r5   r   dictrC   __classcell__r!   r!   r   r"   r      s    r   c                   @   sP   e Zd ZdededededB fddZdededededB dedB f
d	d
ZdS )HFInferenceBinaryInputTaskr6   r7   r8   r$   Nc                 C   s   d S r%   r!   rB   r!   r!   r"   rC   I   s   z3HFInferenceBinaryInputTask._prepare_payload_as_dictextra_payloadc                 C   s   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	
t||d|dddS )Nr   z5Expected binary inputs or a local path or a URL. Got r>   zutf-8zapplication/json)Z	mime_type)r   lenr@   rA   r   rH   r.   r   r	   jsondumpsr   encode)r   r6   r7   r8   rL   Zhas_parametersr!   r!   r"   _prepare_payload_as_bytesN   s   z4HFInferenceBinaryInputTask._prepare_payload_as_bytes)	rD   rE   rF   r   rI   r   rC   r	   rQ   r!   r!   r!   r"   rK   H   s*    
rK   c                	       sP   e Zd Z fddZdededededB fdd	Zd
ededefddZ	  Z
S )HFInferenceConversationalc                       t  d d S )Nconversationalr   r   r   r   r!   r"   r   i      z"HFInferenceConversational.__init__r6   r7   r8   r$   Nc                 C   s|   t |}|j}|dp|}|d u s|drd}|d}t|tr5|ddkr5d|d d d	|d< i |||d
S )Nr'   r(   dummyresponse_formattypeZjson_schemaZjson_objectZschema)rZ   value)r'   messages)r   Zprovider_idr-   r+   r@   rI   )r   r6   r7   r8   payloadr1   Zpayload_modelrY   r!   r!   r"   rC   l   s   


z2HFInferenceConversational._prepare_payload_as_dictr#   r1   c                 C   s.   | dr|ntjjdd d| }t|S )Nr(   r   r   r4   )r+   r   r   r   _build_chat_completion_url)r   r#   r1   r   r!   r!   r"   r5   ~   s
   z&HFInferenceConversational._prepare_url)rD   rE   rF   r   r   rI   r   rC   rH   r5   rJ   r!   r!   r   r"   rR   h   s    
rR   	model_urlr$   c                 C   s`   t | }|jd}|dr| S |dr|d }n	|s d}n|d }|j|d}tt|S )N/z/chat/completionsz/v1z/v1/chat/completions)path)r   ra   rstripendswith_replacerH   r   )r_   parsedra   new_path
new_parsedr!   r!   r"   r^      s   


r^      )maxsizec                  C   s8   t  jtj dt d} t|  dd |   D S )Nz
/api/tasks)headersc                 S   s$   i | ]\}}|t t|d  dqS )ZwidgetModelsN)nextiter).0r   detailsr!   r!   r"   
<dictcomp>   s   $ z-_fetch_recommended_models.<locals>.<dictcomp>)r   r-   r   ZENDPOINTr   r   rN   items)responser!   r!   r"   r,      s   r,   r'   r   c              
   C   s   ddl m} | | }|j}|jpg }d|v }|dv r5|dkr5|r$d S |dkr*d S td|  d| d|d	krJ|dkr?d S td|  d| d|d
krZ|rV|dkrVd S td|dv rh|dv rh||v rhd S ||kr}td|  d| d| d| d	d S )Nr   )HfApirT   )text-generationrT   rs   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.r2   z'. Supported tasks: 'z	', got: '')huggingface_hub.hf_apirr   
model_infopipeline_tagtagsr.   )r'   r   rr   rv   rw   rx   Zis_conversationalr!   r!   r"   r/      s:   
r/   c                	       sZ   e Zd Z fddZdededededB fdd	Zdd
eeB de	dB defddZ
  ZS ) HFInferenceFeatureExtractionTaskc                    rS   )Nr3   rU   rV   r   r!   r"   r      rW   z)HFInferenceFeatureExtractionTask.__init__r6   r7   r8   r$   Nc                 C   sN   t |trtd| j dt |trtd| j d| dd|it|S )Nr9   r:   r;   r<   r=   r6   r?   rB   r!   r!   r"   rC      s
   

z9HFInferenceFeatureExtractionTask._prepare_payload_as_dictrq   request_paramsc                 C   s   t |tr	t|S |S r%   )r@   rA   r   )r   rq   rz   r!   r!   r"   get_response   s   
z-HFInferenceFeatureExtractionTask.get_responser%   )rD   rE   rF   r   r   rI   r   rC   rA   r
   r{   rJ   r!   r!   r   r"   ry      s    
(ry   )%rN   	functoolsr   pathlibr   typingr   urllib.parser   r   Zhuggingface_hubr   ru   r   Z!huggingface_hub.inference._commonr	   r
   r   r   r   Z,huggingface_hub.inference._providers._commonr   r   Zhuggingface_hub.utilsr   r   r   r   r   rK   rR   rH   r^   rI   r,   r/   ry   r!   r!   r!   r"   <module>   s&    4 +