o
     
j                     @   s   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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)urlparse)InferenceProviderMapping)RequestParameters_as_dict)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fddZ		dd
eeB ded	B de	fddZ
  ZS )WavespeedAITasktaskc                    s   t  jdd|d d S )N	wavespeedzhttps://api.wavespeed.ai)providerbase_urlr   super__init__)selfr   	__class__ a/home/kuhnn/.local/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	completed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   response_dictr    result_path
parsed_urlr   result_url_path
result_urlresult_responseresulttask_resultr$   
output_url	error_msgr   r   r   get_response   sD   





zWavespeedAITask.get_response)N)__name__
__module____qualname__r0   r   r   bytesdictr   r   rD   __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dB 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   Nc                 C   s   d|it |S )Nprompt)r	   )r   rP   rQ   rR   r   r   r   _prepare_payload_as_dictY   s   z3WavespeedAITextToImageTask._prepare_payload_as_dict	rE   rF   rG   r   r   rI   r   rT   rJ   r   r   r   r   rL   U       rL   c                   @      e Zd Zdd ZdS )WavespeedAITextToVideoTaskc                 C      t | d d S )Nztext-to-videor   r   rN   r   r   r   r   c   rO   z#WavespeedAITextToVideoTask.__init__NrE   rF   rG   r   r   r   r   r   rX   b       rX   c                	       rK   )
WavespeedAIImageToImageTaskc                    rM   )Nzimage-to-imager   rN   r   r   r   r   h   rO   z$WavespeedAIImageToImageTask.__init__rP   rQ   rR   r   Nc           
      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,rS   image)
r/   r0   
startswithopenreadbase64	b64encodedecodepopr	   )
r   rP   rQ   rR   r_   ffile_content	image_b64rS   payloadr   r   r   rT   k   s   


z4WavespeedAIImageToImageTask._prepare_payload_as_dictrU   r   r   r   r   r]   g   rV   r]   c                   @   rW   )WavespeedAIImageToVideoTaskc                 C   rY   )Nzimage-to-videorZ   rN   r   r   r   r      rO   z$WavespeedAIImageToVideoTask.__init__Nr[   r   r   r   r   rk      r\   rk   )rc   r4   abcr   typingr   urllib.parser   huggingface_hub.hf_apir   !huggingface_hub.inference._commonr   r   ,huggingface_hub.inference._providers._commonr   r	   huggingface_hub.utilsr
   r   huggingface_hub.utils.loggingr   rE   r2   r6   r   rL   rX   r]   rk   r   r   r   r   <module>   s"    A!