Ë
    Q^(hú  ã                   ó  — d dl Z d dlZd dlmZ d dlmZmZmZ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ee«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z!y)é    N)ÚABC)ÚAnyÚDictÚOptionalÚUnion)Úurlparse)Ú	constants)ÚInferenceProviderMapping)ÚRequestParametersÚ_as_dict)ÚTaskProviderHelperÚfilter_none)Úget_sessionÚhf_raise_for_status)Ú
get_loggerg      à?c                   óP   ‡ — e Zd Zdefˆ fd„Zdededefˆ fd„Zdededefd„Zˆ xZS )	Ú	FalAITaskÚtaskc                 ó*   •— t         ‰| �  dd|¬«       y )Nzfal-aizhttps://fal.run)ÚproviderÚbase_urlr   ©ÚsuperÚ__init__)Úselfr   Ú	__class__s     €úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/huggingface_hub/inference/_providers/fal_ai.pyr   zFalAITask.__init__   s   ø€ Ü‰Ñ (Ð5FÈTÐÕRó    ÚheadersÚapi_keyÚreturnc                 óZ   •— t         ‰| �  ||«      }|j                  d«      sd|› �|d<   |S )NÚhf_zKey Úauthorization)r   Ú_prepare_headersÚ
startswith)r   r   r    r   s      €r   r%   zFalAITask._prepare_headers   s8   ø€ Ü‘'Ñ*¨7°GÓ<ˆØ×!Ñ! %Ô(Ø)-¨g¨YÐ'7ˆG�OÑ$Øˆr   Úmapped_modelc                 ó   — d|› �S )Nú/© ©r   r'   r    s      r   Ú_prepare_routezFalAITask._prepare_route   s   € Ø�<�.Ð!Ð!r   )	Ú__name__Ú
__module__Ú__qualname__Ústrr   r   r%   r,   Ú__classcell__©r   s   @r   r   r      sE   ø„ ðS˜Sõ Sð¨ð °sð ¸tõ ð"¨3ð "¸ð "À÷ "r   r   c            	       ób   ‡ — 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 )Ú#FalAIAutomaticSpeechRecognitionTaskc                 ó$   •— t         ‰| �  d«       y )Nzautomatic-speech-recognitionr   ©r   r   s    €r   r   z,FalAIAutomaticSpeechRecognitionTask.__init__$   s   ø€ Ü‰ÑÐ7Õ8r   ÚinputsÚ
parametersÚprovider_mapping_infor!   c                 óD  — t        |t        «      r|j                  d«      r|}nbt        |t        «      r%t        |d«      5 }|j	                  «       }d d d «       t        j                  |«      j                  «       }d}d|› d|› �}d|it        |«      ¥S # 1 sw Y   ŒExY w)N)zhttp://zhttps://Úrbz
audio/mpegzdata:z;base64,Ú	audio_url)	Ú
isinstancer0   r&   ÚopenÚreadÚbase64Ú	b64encodeÚdecoder   )r   r7   r8   r9   r<   ÚfÚ	audio_b64Úcontent_types           r   Ú_prepare_payload_as_dictz<FalAIAutomaticSpeechRecognitionTask._prepare_payload_as_dict'   s    € ô �fœcÔ" v×'8Ñ'8Ð9PÔ'Qà‰Iô ˜&¤#Ô&Ü˜& $Ó'ð &¨1ØŸV™V›X�F÷&ô ×(Ñ(¨Ó0×7Ñ7Ó9ˆIØ'ˆLØ ˜~¨X°i°[ÐAˆIà˜YÐB¬+°jÓ*AÐBÐB÷&ð &ús   ÁBÂBÚresponseÚrequest_paramsc                 ór   — t        |«      d   }t        |t        «      st        dt	        |«      › d�«      ‚|S )NÚtextz>Unexpected output format from FalAI API. Expected string, got ú.)r   r=   r0   Ú
ValueErrorÚtype)r   rG   rH   rJ   s       r   Úget_responsez0FalAIAutomaticSpeechRecognitionTask.get_response9   s>   € Ü˜Ó! &Ñ)ˆÜ˜$¤Ô$ÜÐ]Ô^bÐcgÓ^hÐ]iÐijÐkÓlÐlØˆr   ©N©r-   r.   r/   r   r   r   r
   r   rF   r   Úbytesr   rN   r1   r2   s   @r   r4   r4   #   s`   ø„ ô9ðCØðCØ'+ðCØD\ðCà	�$‰óCñ$ U¨5°$¨;Ñ%7ð ÈÐRcÑIdð Ðps÷ r   r4   c            	       ób   ‡ — 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 )ÚFalAITextToImageTaskc                 ó$   •— t         ‰| �  d«       y )Nztext-to-imager   r6   s    €r   r   zFalAITextToImageTask.__init__A   ó   ø€ Ü‰Ñ˜Õ)r   r7   r8   r9   r!   c                 ó>  — d|it        |«      ¥}d|v r*d|v r&|j                  d«      |j                  d«      dœ|d<   |j                  �St        j                  j                  |j                  d|j                  ¬«      }|dd	œg|d
<   |j                  dk(  rd|d<   |S )NÚpromptÚwidthÚheight)rX   rY   Ú
image_sizeÚmain)Úrepo_idÚrevisionÚfilenameé   )ÚpathÚscaleÚloraszfal-ai/loraz(stabilityai/stable-diffusion-xl-base-1.0Ú
model_name)r   ÚpopÚadapter_weights_pathr	   ÚHUGGINGFACE_CO_URL_TEMPLATEÚformatÚhf_model_idÚprovider_id)r   r7   r8   r9   ÚpayloadÚ	lora_paths         r   rF   z-FalAITextToImageTask._prepare_payload_as_dictD   sÅ   € ð �fð#
ä˜*Ó%ð#
ˆð �gÑ (¨gÑ"5à Ÿ™ WÓ-Ø!Ÿ+™+ hÓ/ñ%ˆG�LÑ!ð !×5Ñ5ÐAÜ!×=Ñ=×DÑDØ-×9Ñ9ØØ.×CÑCð Eó ˆIð
 *3¸QÑ ?Ð@ˆG�GÑØ$×0Ñ0°MÒAð )S�˜Ñ%àˆr   rG   rH   c                 óp   — t        |«      d   d   d   }t        «       j                  |«      j                  S )NÚimagesr   Úurl©r   r   ÚgetÚcontent©r   rG   rH   rn   s       r   rN   z!FalAITextToImageTask.get_response^   s4   € Ü�xÓ  Ñ*¨1Ñ-¨eÑ4ˆÜ‹}× Ñ  Ó%×-Ñ-Ð-r   rO   rP   r2   s   @r   rS   rS   @   s[   ø„ ô*ðØðØ'+ðØD\ðà	�$‰óñ4. U¨5°$¨;Ñ%7ð .ÈÐRcÑIdð .Ðps÷ .r   rS   c            	       ób   ‡ — 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 )ÚFalAITextToSpeechTaskc                 ó$   •— t         ‰| �  d«       y )Nztext-to-speechr   r6   s    €r   r   zFalAITextToSpeechTask.__init__d   s   ø€ Ü‰ÑÐ)Õ*r   r7   r8   r9   r!   c                 ó    — d|it        |«      ¥S )NrJ   ©r   ©r   r7   r8   r9   s       r   rF   z.FalAITextToSpeechTask._prepare_payload_as_dictg   s   € ð ˜Ð:¤+¨jÓ"9Ð:Ð:r   rG   rH   c                 ój   — t        |«      d   d   }t        «       j                  |«      j                  S )NÚaudiorn   ro   rr   s       r   rN   z"FalAITextToSpeechTask.get_responsel   s/   € Ü�xÓ  Ñ)¨%Ñ0ˆÜ‹}× Ñ  Ó%×-Ñ-Ð-r   rO   rP   r2   s   @r   rt   rt   c   s[   ø„ ô+ð;Øð;Ø'+ð;ØD\ð;à	�$‰ó;ñ
. U¨5°$¨;Ñ%7ð .ÈÐRcÑIdð .Ðps÷ .r   rt   c            	       óŒ   ‡ — e Zd Zˆ fd„Zdedefˆ fd„Zdedede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 )ÚFalAITextToVideoTaskc                 ó$   •— t         ‰| �  d«       y )Nztext-to-videor   r6   s    €r   r   zFalAITextToVideoTask.__init__r   rU   r   r    r!   c                 óŒ   •— |j                  d«      rt        ‰| �	  |«      S t        j	                  d| j
                  › d�«       y)Nr#   z	Calling 'z' provider directly.zhttps://queue.fal.run)r&   r   Ú_prepare_base_urlÚloggerÚinfor   )r   r    r   s     €r   r   z&FalAITextToVideoTask._prepare_base_urlu   s>   ø€ Ø×Ñ˜eÔ$Ü‘7Ñ,¨WÓ5Ð5ä�K‰K˜) D§M¡M ?Ð2FÐGÔHØ*r   r'   c                 ó:   — |j                  d«      rd|› d�S d|› �S )Nr#   r)   z?_subdomain=queue)r&   r+   s      r   r,   z#FalAITextToVideoTask._prepare_route|   s-   € Ø×Ñ˜eÔ$à�|�nÐ$5Ð6Ð6Ø�<�.Ð!Ð!r   r7   r8   r9   c                 ó    — d|it        |«      ¥S )NrW   rw   rx   s       r   rF   z-FalAITextToVideoTask._prepare_payload_as_dict‚   s   € ð ˜&Ð<¤K°
Ó$;Ð<Ð<r   rG   rH   c                 ó¼  — t        |«      }|j                  d«      }|st        d«      ‚|€t        d«      ‚t        |j                  «      }|j
                  › d|j                  › |j                  dk(  rdnd› �}|j                  rd|j                  › �nd}t        |j                  d	«      «      j                  }|› t        |«      › d
|› �}	|› t        |«      › |› �}
|j                  d«      }t        j                  d«       |dk7  rnt        j                  t        «       t        «       j                  |	|j                   ¬«      }t#        |«       |j%                  «       j                  d«      }|dk7  rŒnt        «       j                  |
|j                   ¬«      j%                  «       }t        |«      d   d   }t        «       j                  |«      j&                  S )NÚ
request_idz#No request ID found in the responsez[A `RequestParameters` object should be provided to get text-to-video responses with Fal AI.z://zrouter.huggingface.coz/fal-aiÚ ú?Úresponse_urlz/statusÚstatusz5Generating the video.. this can take several minutes.Ú	COMPLETED)r   Úvideorn   )r   rp   rL   r   rn   ÚschemeÚnetlocÚqueryr`   r0   r€   r�   ÚtimeÚsleepÚ_POLLING_INTERVALr   r   r   Újsonrq   )r   rG   rH   Úresponse_dictr…   Ú
parsed_urlr   Úquery_paramÚmodel_idÚ
status_urlÚ
result_urlr‰   Ústatus_responsern   s                 r   rN   z!FalAITextToVideoTask.get_response‡   sÊ  € ô
 ! Ó*ˆà"×&Ñ& |Ó4ˆ
ÙÜÐBÓCÐCØÐ!ÜØmóð ô
 ˜n×0Ñ0Ó1ˆ
à ×'Ñ'Ð(¨¨J×,=Ñ,=Ð+>ÈJ×L]ÑL]ÐaxÒLx¹yð  Að  ?Bð  CˆØ0:×0@Ò0@˜˜*×*Ñ*Ð+Ñ,Àbˆô ˜M×-Ñ-¨nÓ=Ó>×CÑCˆØ �z¤# h£- °¸°}ÐEˆ
Ø �z¤# h£- °°Ð>ˆ
à×"Ñ" 8Ó,ˆÜ�‰ÐKÔLØ˜Ò#Ü�J‰JÔ(Ô)Ü)›m×/Ñ/°
ÀN×DZÑDZÐ/Ó[ˆOÜ Ô0Ø$×)Ñ)Ó+×/Ñ/°Ó9ˆFð	 ˜Ó#ô “=×$Ñ$ Z¸×9OÑ9OÐ$ÓP×UÑUÓWˆÜ�xÓ  Ñ)¨%Ñ0ˆÜ‹}× Ñ  Ó%×-Ñ-Ð-r   rO   )r-   r.   r/   r   r0   r   r,   r   r   r
   r   rF   r   rQ   r   rN   r1   r2   s   @r   r|   r|   q   s“   ø„ ô*ð+¨ð +°õ +ð"¨3ð "¸ð "Àó "ð=Øð=Ø'+ð=ØD\ð=à	�$‰ó=ð 7;ñ%.à˜˜t˜Ñ$ð%.ð !Ð!2Ñ3ð%.ð 
÷	%.r   r|   )"r@   r�   Úabcr   Útypingr   r   r   r   Úurllib.parser   Úhuggingface_hubr	   Úhuggingface_hub.hf_apir
   Ú!huggingface_hub.inference._commonr   r   Ú,huggingface_hub.inference._providers._commonr   r   Úhuggingface_hub.utilsr   r   Úhuggingface_hub.utils.loggingr   r-   r€   r‘   r   r4   rS   rt   r|   r*   r   r   ú<module>r£      s}   ðÛ Û Ý ß -Ó -Ý !å %Ý ;ß Iß Xß BÝ 4ñ 
�HÓ	€ð Ð ô"Ð" Cô "ô¨)ô ô: .˜9ô  .ôF.˜Iô .ô;.˜9õ ;.r   