o
    0i                     @   s   d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dl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ZG dd deZG dd deZG dd deZdS )    N)ABC)AnyOptionalUnion)urlparse)InferenceProviderMapping)RequestParameters_as_dict)TaskProviderHelperfilter_none)get_sessionhf_raise_for_status)
get_loggerg      ?c                       s^   e Zd Zdef fddZdededefddZ		dd
eeef de	e
 defddZ  ZS )WavespeedAITasktaskc                    s   t  jdd|d d S )NZ	wavespeedzhttps://api.wavespeed.ai)providerbase_urlr   super__init__)selfr   	__class__ h/home/kim/smarthome/.venv/lib/python3.10/site-packages/huggingface_hub/inference/_providers/wavespeed.pyr      s   zWavespeedAITask.__init__mapped_modelapi_keyreturnc                 C   s
   d| S )Nz/api/v3/r   )r   r   r   r   r   r   _prepare_route   s   
zWavespeedAITask._prepare_routeNresponserequest_paramsc                 C   sp  t |}|di }|di d}|std|d u r!tdt|j}|jdkr6|j d|j d}n	|j d|j }t|trJt|j	}n|}| | }	t
d	 	 tt t j|	|jd}
t|
 |
 }|di }|d}|dkr|drt|d dkrtd|d d }t |jS |dkr|dd}td| |dv rqWtd| )Ndataurlsgetz#No result URL found in the responsezSA `RequestParameters` object should be provided to get responses with WaveSpeed AI.zrouter.huggingface.coz://z
/wavespeedz*Processing request, polling for results...T)headersstatus	completedZoutputsr   z#No output URL in completed responsefailederrorz*Task failed with no specific error messagezWaveSpeed AI task failed: )
processingcreatedzUnknown status: )r	   r#   
ValueErrorr   urlnetlocscheme
isinstancestrpathloggerinfotimesleep_POLLING_INTERVALr   r$   r   jsonlencontent)r   r   r    Zresponse_dictr!   result_path
parsed_urlr   Zresult_url_pathZ
result_urlZresult_responseresultZtask_resultr%   Z
output_url	error_msgr   r   r   get_response   sD   





zWavespeedAITask.get_response)N)__name__
__module____qualname__r0   r   r   r   bytesdictr   r   r   r>   __classcell__r   r   r   r   r      s    
r   c                	       :   e Zd Z fddZdedededee fddZ  Z	S )	WavespeedAITextToImageTaskc                       t  d d S )Nztext-to-imager   r   r   r   r   r   V      z#WavespeedAITextToImageTask.__init__inputs
parametersprovider_mapping_infor   c                 C   s   d|it |S )Nprompt)r   )r   rJ   rK   rL   r   r   r   _prepare_payload_as_dictY   s   z3WavespeedAITextToImageTask._prepare_payload_as_dict
r?   r@   rA   r   r   rC   r   r   rN   rD   r   r   r   r   rF   U       rF   c                   @      e Zd Zdd ZdS )WavespeedAITextToVideoTaskc                 C      t | d d S )Nztext-to-videor   r   rH   r   r   r   r   c   rI   z#WavespeedAITextToVideoTask.__init__Nr?   r@   rA   r   r   r   r   r   rR   b       rR   c                	       rE   )	WavespeedAIImageToImageTaskc                    rG   )Nzimage-to-imager   rH   r   r   r   r   h   rI   z$WavespeedAIImageToImageTask.__init__rJ   rK   rL   r   c           
      C   s   t |tr|dr|}n9t |tr9t|d}| }W d    n1 s&w   Y  t|d}d| }nt|d}d| }|dd }d|it	|}	|d ur\||	d< |	S )N)zhttp://zhttps://rbzutf-8zdata:image/jpeg;base64,rM   image)
r/   r0   
startswithopenreadbase64	b64encodedecodepopr   )
r   rJ   rK   rL   rY   fZfile_contentZ	image_b64rM   payloadr   r   r   rN   k   s   


z4WavespeedAIImageToImageTask._prepare_payload_as_dictrO   r   r   r   r   rW   g   rP   rW   c                   @   rQ   )WavespeedAIImageToVideoTaskc                 C   rS   )Nzimage-to-videorT   rH   r   r   r   r      rI   z$WavespeedAIImageToVideoTask.__init__NrU   r   r   r   r   rc      rV   rc   )r]   r4   abcr   typingr   r   r   urllib.parser   Zhuggingface_hub.hf_apir   Z!huggingface_hub.inference._commonr   r	   Z,huggingface_hub.inference._providers._commonr
   r   Zhuggingface_hub.utilsr   r   Zhuggingface_hub.utils.loggingr   r?   r2   r6   r   rF   rR   rW   rc   r   r   r   r   <module>   s"    A!