o
    0j-                     @   s0  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZmZ d d	lmZmZ d d
lmZ eeZdZG dd deeZG dd deeZG dd deZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd deZ#dS )    N)ABC)Any)urlparse)	constants)InferenceProviderMapping)RequestParameters_as_dict_as_url)TaskProviderHelperfilter_none)get_sessionhf_raise_for_status)
get_loggerg      ?c                       sZ   e Zd Zdef fddZdededeeef f fddZd	ededefd
dZ  Z	S )	FalAITasktaskc                       t  jdd|d d S )Nfal-aizhttps://fal.runproviderbase_urlr   super__init__selfr   	__class__ l/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/huggingface_hub/inference/_providers/fal_ai.pyr         zFalAITask.__init__headersapi_keyreturnc                    *   t  ||}|dsd| |d< |S Nhf_zKey authorizationr   _prepare_headers
startswithr   r    r!   r   r   r   r(         
zFalAITask._prepare_headersmapped_modelc                 C   s
   d| S )N/r   r   r,   r!   r   r   r   _prepare_route   s   
zFalAITask._prepare_route)
__name__
__module____qualname__strr   dictr   r(   r/   __classcell__r   r   r   r   r      s    "r   c                       s|   e Zd Zdef fddZdededeeef f fddZd	ededefd
dZ	dde	eB de
dB defddZ  ZS )FalAIQueueTaskr   c                    r   )Nr   zhttps://queue.fal.runr   r   r   r   r   r   r   $   r   zFalAIQueueTask.__init__r    r!   r"   c                    r#   r$   r'   r*   r   r   r   r(   '   r+   zFalAIQueueTask._prepare_headersr,   c                 C   s    | drd| dS d| S )Nr%   r-   z?_subdomain=queue)r)   r.   r   r   r   r/   -   s   

zFalAIQueueTask._prepare_routeNresponserequest_paramsc                 C   s"  t |}|d}|std|d u rtd| j dt|j}|j d|j |jdkr/dnd }|jr<d	|j nd}t|d
j	}| t
| d| }	| t
| | }
|d}td |dkrtt t j|	|jd}t| | d}|dksit j|
|jd S )N
request_idz#No request ID found in the responsez7A `RequestParameters` object should be provided to get z responses with Fal AI.z://zrouter.huggingface.coz/fal-ai ?Zresponse_urlz/statusstatusz6Generating the output.. this can take several minutes.Z	COMPLETED)r    )r   get
ValueErrorr   r   urlschemenetlocquerypathr3   loggerinfotimesleep_POLLING_INTERVALr   r    r   json)r   r7   r8   Zresponse_dictr9   
parsed_urlr   Zquery_paramZmodel_idZ
status_urlZ
result_urlr<   Zstatus_responser   r   r   get_response3   s.   

$


zFalAIQueueTask.get_responseN)r0   r1   r2   r3   r   r4   r   r(   r/   bytesr   rK   r5   r   r   r   r   r6   #   s    "	r6   c                	       Z   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 )#FalAIAutomaticSpeechRecognitionTaskc                       t  d d S )Nzautomatic-speech-recognitionr   r   r   r   r   r   Z      z,FalAIAutomaticSpeechRecognitionTask.__init__inputs
parametersprovider_mapping_infor"   Nc                 C   s   t |tr|dr|}n/t |tr+t|d}| }W d    n1 s&w   Y  t| }d}d| d| }d|it|S )N)zhttp://zhttps://rbz
audio/mpegdata:z;base64,	audio_url)	
isinstancer3   r)   openreadbase64	b64encodedecoder   )r   rS   rT   rU   rX   fZ	audio_b64content_typer   r   r   _prepare_payload_as_dict]   s   

z<FalAIAutomaticSpeechRecognitionTask._prepare_payload_as_dictr7   r8   c                 C   s2   t |d }t|tstdt| dd|iS )Ntextz>Unexpected output format from FalAI API. Expected string, got .)r   rY   r3   r>   type)r   r7   r8   rb   r   r   r   rK   o   s   
z0FalAIAutomaticSpeechRecognitionTask.get_responserL   r0   r1   r2   r   r   r4   r   ra   rM   r   rK   r5   r   r   r   r   rO   Y   s    
(rO   c                	       rN   )FalAITextToImageTaskc                    rP   )Nztext-to-imager   rQ   r   r   r   r   w   rR   zFalAITextToImageTask.__init__rS   rT   rU   r"   Nc                 C   s   d|it |}d|v rd|v r|d|dd|d< |jd ur>tjj|jd|jd}|dd	g|d
< |jdkr>d|d< |S )Npromptwidthheight)rh   ri   
image_sizemainZrepo_idrevisionfilename   rC   scaleloraszfal-ai/loraz(stabilityai/stable-diffusion-xl-base-1.0Z
model_name)r   popadapter_weights_pathr   HUGGINGFACE_CO_URL_TEMPLATEformathf_model_idZprovider_id)r   rS   rT   rU   payload	lora_pathr   r   r   ra   z   s$   


z-FalAITextToImageTask._prepare_payload_as_dictr7   r8   c                 C   s"   t |d d d }t |jS NZimagesr   r?   r   r   r=   contentr   r7   r8   r?   r   r   r   rK      s   z!FalAITextToImageTask.get_responserL   re   r   r   r   r   rf   v   s    
(rf   c                	       rN   )FalAITextToSpeechTaskc                    rP   )Nztext-to-speechr   rQ   r   r   r   r      rR   zFalAITextToSpeechTask.__init__rS   rT   rU   r"   Nc                 C      d|it |S )Nrb   r   r   rS   rT   rU   r   r   r   ra         z.FalAITextToSpeechTask._prepare_payload_as_dictr7   r8   c                 C   s   t |d d }t |jS )NZaudior?   r{   r}   r   r   r   rK      s   z"FalAITextToSpeechTask.get_responserL   re   r   r   r   r   r~      s    
(r~   c                	       `   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 fddZ
  ZS )FalAITextToVideoTaskc                    rP   )Nztext-to-videor   rQ   r   r   r   r      rR   zFalAITextToVideoTask.__init__rS   rT   rU   r"   Nc                 C   r   )Nrg   r   r   r   r   r   ra      r   z-FalAITextToVideoTask._prepare_payload_as_dictr7   r8   c                    ,   t  ||}t|d d }t |jS NZvideor?   r   rK   r   r   r=   r|   r   r7   r8   outputr?   r   r   r   rK         z!FalAITextToVideoTask.get_responserL   re   r   r   r   r   r      s&    
r   c                	       r   )FalAIImageToImageTaskc                    rP   )Nzimage-to-imager   rQ   r   r   r   r      rR   zFalAIImageToImageTask.__init__rS   rT   rU   r"   Nc                 C   sj   t |dd}d|v r|d|d< ||gdt|}|jd ur3tjj|jd|jd}|dd	g|d
< |S )N
image/jpegZdefault_mime_typeZtarget_sizerj   )	image_urlZ
image_urlsrk   rl   ro   rp   rr   )r	   rs   r   rt   r   ru   rv   rw   r   rS   rT   rU   r   rx   ry   r   r   r   ra      s    
z.FalAIImageToImageTask._prepare_payload_as_dictr7   r8   c                    s0   t  ||}t|d d d }t |jS rz   r   r   r   r   r   rK      s   z"FalAIImageToImageTask.get_responserL   re   r   r   r   r   r      s&    
r   c                	       r   )FalAIImageToVideoTaskc                    rP   )Nzimage-to-videor   rQ   r   r   r   r      rR   zFalAIImageToVideoTask.__init__rS   rT   rU   r"   Nc                 C   sP   t |dd}d|it|}|jd ur&tjj|jd|jd}|ddg|d< |S )	Nr   r   r   rk   rl   ro   rp   rr   )r	   r   rt   r   ru   rv   rw   r   r   r   r   ra      s   
z.FalAIImageToVideoTask._prepare_payload_as_dictr7   r8   c                    r   r   r   r   r   r   r   rK      r   z"FalAIImageToVideoTask.get_responserL   re   r   r   r   r   r      s&    
r   c                	       r   )FalAIImageSegmentationTaskc                    rP   )Nzimage-segmentationr   rQ   r   r   r   r      rR   z#FalAIImageSegmentationTask.__init__rS   rT   rU   r"   Nc                 C   s(   t |dd}d|it|ddi}|S )Nz	image/pngr   r   Z	sync_modeT)r	   r   )r   rS   rT   rU   r   rx   r   r   r   ra      s   z3FalAIImageSegmentationTask._prepare_payload_as_dictr7   r8   c           	         s   t  ||}t|}d|vrtd| |d }d|vr%td| |d }t|trG|drGd|v r@|ddd }ntd| t 	|}t
| t|j }d	|d
gS )NimagezGResponse from fal ai image-segmentation API does not contain an image: r?   zFImage data from fal ai image-segmentation API does not contain a URL: rW   ,ro   zInvalid data URL format: mask)labelr   )r   rK   r   r>   rY   r3   r)   splitr   r=   r   r\   r]   r|   r^   )	r   r7   r8   resultZresult_dictZ
image_datar   Zmask_base64Zmask_responser   r   r   rK     s&   z'FalAIImageSegmentationTask.get_responserL   re   r   r   r   r   r      s&    
r   )$r\   rF   abcr   typingr   urllib.parser   Zhuggingface_hubr   Zhuggingface_hub.hf_apir   Z!huggingface_hub.inference._commonr   r   r	   Z,huggingface_hub.inference._providers._commonr
   r   Zhuggingface_hub.utilsr   r   Zhuggingface_hub.utils.loggingr   r0   rD   rH   r   r6   rO   rf   r~   r   r   r   r   r   r   r   r   <module>   s,    6##