Ë
    ÂÓ^j¹-  ã                   ón  — 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ee«      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  G d„ de«      Z! G d„ de«      Z" G d„ de«      Z#y)é    N)ÚABC)ÚAny)Úurlparse)Ú	constants)ÚInferenceProviderMapping)ÚRequestParametersÚ_as_dictÚ_as_url)ÚTaskProviderHelperÚfilter_none)Úget_sessionÚhf_raise_for_status)Ú
get_loggerg      à?c                   óZ   ‡ — e Zd Zdefˆ fd„Zdededeeef   fˆ fd„Zdededefd„Zˆ xZ	S )	Ú	FalAITaskÚtaskc                 ó*   •— t         ‰| �  dd|¬«       y )Núfal-aizhttps://fal.run©ÚproviderÚbase_urlr   ©ÚsuperÚ__init__©Úselfr   Ú	__class__s     €úv/var/www/ramen.bs-engineer-server.com/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   ó8   ø€ Ü‘'Ñ*¨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   Údictr   r(   r1   Ú__classcell__©r   s   @r   r   r      sM   ø„ ðS˜Sõ Sð¨ð °sð ¸tÀCÈÀH¹~õ ð"¨3ð "¸ð "À÷ "r   r   c                   ó~   ‡ — e Zd Zdefˆ fd„Zdededeeef   fˆ fd„Zdededefd„Z	 dd
e	ez  de
d	z  defd„Zˆ xZS )ÚFalAIQueueTaskr   c                 ó*   •— t         ‰| �  dd|¬«       y )Nr   zhttps://queue.fal.runr   r   r   s     €r   r   zFalAIQueueTask.__init__$   s   ø€ Ü‰Ñ (Ð5LÐSWÐÕXr   r    r!   r"   c                 óZ   •— t         ‰| �  ||«      }|j                  d«      sd|› �|d<   |S r$   r'   r*   s      €r   r(   zFalAIQueueTask._prepare_headers'   r+   r   r,   c                 ó:   — |j                  d«      rd|› d�S d|› �S )Nr%   r.   z?_subdomain=queue)r)   r0   s      r   r1   zFalAIQueueTask._prepare_route-   s-   € Ø×Ñ˜eÔ$à�|�nÐ$5Ð6Ð6Ø�<�.Ð!Ð!r   NÚresponseÚrequest_paramsc                 óp  — t        |«      }|j                  d«      }|st        d«      ‚|€t        d| j                  › 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'                  «       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Ú ú?Úresponse_urlz/statusÚstatusz6Generating the output.. this can take several minutes.Ú	COMPLETED)r    )r	   ÚgetÚ
ValueErrorr   r   ÚurlÚschemeÚnetlocÚqueryÚpathr5   ÚloggerÚinfoÚtimeÚsleepÚ_POLLING_INTERVALr   r    r   Újson)r   r>   r?   Úresponse_dictrA   Ú
parsed_urlr   Úquery_paramÚmodel_idÚ
status_urlÚ
result_urlrE   Ústatus_responses                r   Úget_responsezFalAIQueueTask.get_response3   s¬  € ô
 ! Ó*ˆà"×&Ñ& |Ó4ˆ
ÙÜÐBÓCÐCØÐ!ÜØIÈ$Ï)É)ÈÐTkÐlóð ô
 ˜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Ó,ˆÜ�‰ÐLÔMØ˜Ò#Ü�J‰JÔ(Ô)Ü)›m×/Ñ/°
ÀN×DZÑDZÐ/Ó[ˆOÜ Ô0Ø$×)Ñ)Ó+×/Ñ/°Ó9ˆFð	 ˜Ó#ô ‹}× Ñ  °^×5KÑ5KÐ ÓL×QÑQÓSÐSr   ©N)r2   r3   r4   r5   r   r6   r   r(   r1   Úbytesr   r[   r7   r8   s   @r   r:   r:   #   s€   ø„ ðY˜Sõ Yð¨ð °sð ¸tÀCÈÀH¹~õ ð"¨3ð "¸ð "Àó "ð 48ñ#Tà˜$‘,ð#Tð *¨DÑ0ð#Tð 
÷	#Tr   r:   c            	       ó^   ‡ — e Zd Zˆ fd„Zdededededz  fd„Zddeez  d	e	dz  defd
„Z
ˆ xZS )Ú#FalAIAutomaticSpeechRecognitionTaskc                 ó$   •— t         ‰| �  d«       y )Nzautomatic-speech-recognitionr   ©r   r   s    €r   r   z,FalAIAutomaticSpeechRecognitionTask.__init__Z   s   ø€ Ü‰ÑÐ7Õ8r   ÚinputsÚ
parametersÚprovider_mapping_infor"   Nc                 ó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/mpegúdata:z;base64,Ú	audio_url)	Ú
isinstancer5   r)   ÚopenÚreadÚbase64Ú	b64encodeÚdecoder   )r   rb   rc   rd   rh   Ú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r>   r?   c                 óv   — t        |«      d   }t        |t        «      st        dt	        |«      › d�«      ‚d|iS )NÚtextz>Unexpected output format from FalAI API. Expected string, got ú.)r	   ri   r5   rH   Útype)r   r>   r?   rt   s       r   r[   z0FalAIAutomaticSpeechRecognitionTask.get_responseo   sC   € Ü˜Ó! &Ñ)ˆÜ˜$¤Ô$ÜÐ]Ô^bÐcgÓ^hÐ]iÐijÐkÓlÐlØ˜ˆ~Ðr   r\   ©r2   r3   r4   r   r   r6   r   rr   r]   r   r[   r7   r8   s   @r   r_   r_   Y   s\   ø„ ô9ðCØðCØ'+ðCØD\ðCà	�‰óCñ$ U¨T¡\ð ÐCTÐW[ÑC[ð Ðgj÷ r   r_   c            	       ó^   ‡ — e Zd Zˆ fd„Zdededededz  fd„Zddeez  d	e	dz  defd
„Z
ˆ xZS )ÚFalAITextToImageTaskc                 ó$   •— t         ‰| �  d«       y )Nztext-to-imager   ra   s    €r   r   zFalAITextToImageTask.__init__w   ó   ø€ Ü‰Ñ˜Õ)r   rb   rc   rd   r"   Nc                 ó>  — 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)r~   r   Ú
image_sizeÚmain©Úrepo_idÚrevisionÚfilenameé   ©rM   Ú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   rb   rc   rd   ÚpayloadÚ	lora_paths         r   rr   z-FalAITextToImageTask._prepare_payload_as_dictz   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   r>   r?   c                 óp   — t        |«      d   d   d   }t        «       j                  |«      j                  S ©NÚimagesr   rI   ©r	   r   rG   Úcontent©r   r>   r?   rI   s       r   r[   z!FalAITextToImageTask.get_response”   s4   € Ü�xÓ  Ñ*¨1Ñ-¨eÑ4ˆÜ‹}× Ñ  Ó%×-Ñ-Ð-r   r\   rw   r8   s   @r   ry   ry   v   sW   ø„ ô*ðØðØ'+ðØD\ðà	�‰óñ4. U¨T¡\ð .ÐCTÐW[ÑC[ð .Ðgj÷ .r   ry   c            	       ó^   ‡ — e Zd Zˆ fd„Zdededededz  fd„Zddeez  d	e	dz  defd
„Z
ˆ xZS )ÚFalAITextToSpeechTaskc                 ó$   •— t         ‰| �  d«       y )Nztext-to-speechr   ra   s    €r   r   zFalAITextToSpeechTask.__init__š   ó   ø€ Ü‰ÑÐ)Õ*r   rb   rc   rd   r"   Nc                 ó    — d|it        |«      ¥S )Nrt   ©r   ©r   rb   rc   rd   s       r   rr   z.FalAITextToSpeechTask._prepare_payload_as_dict�   s   € ð ˜Ð:¤+¨jÓ"9Ð:Ð:r   r>   r?   c                 ój   — t        |«      d   d   }t        «       j                  |«      j                  S )NÚaudiorI   r–   r˜   s       r   r[   z"FalAITextToSpeechTask.get_response¢   s/   € Ü�xÓ  Ñ)¨%Ñ0ˆÜ‹}× Ñ  Ó%×-Ñ-Ð-r   r\   rw   r8   s   @r   rš   rš   ™   sW   ø„ ô+ð;Øð;Ø'+ð;ØD\ð;à	�‰ó;ñ
. U¨T¡\ð .ÐCTÐW[ÑC[ð .Ðgj÷ .r   rš   c            	       ód   ‡ — e Zd Zˆ fd„Zdededededz  fd„Z	 ddeez  d	e	dz  defˆ fd
„Z
ˆ xZS )ÚFalAITextToVideoTaskc                 ó$   •— t         ‰| �  d«       y )Nztext-to-videor   ra   s    €r   r   zFalAITextToVideoTask.__init__¨   r{   r   rb   rc   rd   r"   Nc                 ó    — d|it        |«      ¥S )Nr}   rž   rŸ   s       r   rr   z-FalAITextToVideoTask._prepare_payload_as_dict«   s   € ð ˜&Ð<¤K°
Ó$;Ð<Ð<r   r>   r?   c                 óŒ   •— t         ‰| �  ||«      }t        |«      d   d   }t        «       j	                  |«      j
                  S ©NÚvideorI   ©r   r[   r	   r   rG   r—   ©r   r>   r?   ÚoutputrI   r   s        €r   r[   z!FalAITextToVideoTask.get_response°   óC   ø€ ô
 ‘Ñ% h°Ó?ˆÜ�vÓ˜wÑ'¨Ñ.ˆÜ‹}× Ñ  Ó%×-Ñ-Ð-r   r\   rw   r8   s   @r   r£   r£   §   se   ø„ ô*ð=Øð=Ø'+ð=ØD\ð=à	�‰ó=ð 48ñ.à˜$‘,ð.ð *¨DÑ0ð.ð 
÷	.ñ .r   r£   c            	       ód   ‡ — e Zd Zˆ fd„Zdededededz  fd„Z	 ddeez  d	e	dz  defˆ fd
„Z
ˆ xZS )ÚFalAIImageToImageTaskc                 ó$   •— t         ‰| �  d«       y )Nzimage-to-imager   ra   s    €r   r   zFalAIImageToImageTask.__init__»   rœ   r   rb   rc   rd   r"   Nc                 ó  — t        |d¬«      }d|v r|j                  d«      |d<   ||gdœt        |«      ¥}|j                  �?t        j
                  j                  |j                  d|j                  ¬«      }|dd	œg|d
<   |S )Nú
image/jpeg©Údefault_mime_typeÚtarget_sizer€   )Ú	image_urlÚ
image_urlsr�   r‚   r†   r‡   r‰   )r
   r‹   r   rŒ   r   r�   rŽ   r�   ©r   rb   rc   rd   rµ   r‘   r’   s          r   rr   z.FalAIImageToImageTask._prepare_payload_as_dict¾   s¡   € ô ˜F°lÔCˆ	Ø˜JÑ&Ø'1§~¡~°mÓ'DˆJ�|Ñ$à"Ø$˜+ñ#
ô ˜*Ó%ð#
ˆð
 !×5Ñ5ÐAÜ!×=Ñ=×DÑDØ-×9Ñ9ØØ.×CÑCð Eó ˆIð
 *3¸QÑ ?Ð@ˆG�GÑàˆr   r>   r?   c                 ó’   •— t         ‰| �  ||«      }t        |«      d   d   d   }t        «       j	                  |«      j
                  S r”   r©   rª   s        €r   r[   z"FalAIImageToImageTask.get_responseÓ   sH   ø€ ô
 ‘Ñ% h°Ó?ˆÜ�vÓ˜xÑ(¨Ñ+¨EÑ2ˆÜ‹}× Ñ  Ó%×-Ñ-Ð-r   r\   rw   r8   s   @r   r®   r®   º   se   ø„ ô+ðØðØ'+ðØD\ðà	�‰óð0 48ñ.à˜$‘,ð.ð *¨DÑ0ð.ð 
÷	.ñ .r   r®   c            	       ód   ‡ — e Zd Zˆ fd„Zdededededz  fd„Z	 ddeez  d	e	dz  defˆ fd
„Z
ˆ xZS )ÚFalAIImageToVideoTaskc                 ó$   •— t         ‰| �  d«       y )Nzimage-to-videor   ra   s    €r   r   zFalAIImageToVideoTask.__init__Þ   rœ   r   rb   rc   rd   r"   Nc                 óÔ   — t        |d¬«      }d|it        |«      ¥}|j                  �?t        j                  j                  |j                  d|j                  ¬«      }|ddœg|d<   |S )	Nr±   r²   rµ   r�   r‚   r†   r‡   r‰   )r
   r   rŒ   r   r�   rŽ   r�   r·   s          r   rr   z.FalAIImageToVideoTask._prepare_payload_as_dictá   s�   € ô ˜F°lÔCˆ	à˜ð#
ä˜*Ó%ð#
ˆð !×5Ñ5ÐAÜ!×=Ñ=×DÑDØ-×9Ñ9ØØ.×CÑCð Eó ˆIð
 *3¸QÑ ?Ð@ˆG�GÑØˆr   r>   r?   c                 óŒ   •— t         ‰| �  ||«      }t        |«      d   d   }t        «       j	                  |«      j
                  S r§   r©   rª   s        €r   r[   z"FalAIImageToVideoTask.get_responseò   r¬   r   r\   rw   r8   s   @r   rº   rº   Ý   se   ø„ ô+ðØðØ'+ðØD\ðà	�‰óð( 48ñ.à˜$‘,ð.ð *¨DÑ0ð.ð 
÷	.ñ .r   rº   c            	       ód   ‡ — e Zd Zˆ fd„Zdededededz  fd„Z	 ddeez  d	e	dz  defˆ fd
„Z
ˆ xZS )ÚFalAIImageSegmentationTaskc                 ó$   •— t         ‰| �  d«       y )Nzimage-segmentationr   ra   s    €r   r   z#FalAIImageSegmentationTask.__init__ý   s   ø€ Ü‰ÑÐ-Õ.r   rb   rc   rd   r"   Nc                 óF   — t        |d¬«      }d|it        |«      ¥ddi¥}|S )Nz	image/pngr²   rµ   Ú	sync_modeT)r
   r   )r   rb   rc   rd   rµ   r‘   s         r   rr   z3FalAIImageSegmentationTask._prepare_payload_as_dict   s<   € ô ˜F°kÔBˆ	à˜ð#
ä˜*Ó%ð#
ð ˜ñ#
ˆð
 ˆr   r>   r?   c                 óÖ  •— t         ‰	| �  ||«      }t        |«      }d|vrt        d|› �«      ‚|d   }d|vrt        d|› �«      ‚|d   }t	        |t
        «      r9|j                  d«      r(d|v r|j                  dd«      d   }n_t        d|› �«      ‚t        «       j                  |«      }t        |«       t        j                  |j                  «      j                  «       }d	|d
œgS )NÚimagezGResponse from fal ai image-segmentation API does not contain an image: rI   zFImage data from fal ai image-segmentation API does not contain a URL: rg   ú,r†   zInvalid data URL format: Úmask)ÚlabelrÆ   )r   r[   r	   rH   ri   r5   r)   Úsplitr   rG   r   rl   rm   r—   rn   )
r   r>   r?   ÚresultÚresult_dictÚ
image_datarµ   Úmask_base64Úmask_responser   s
            €r   r[   z'FalAIImageSegmentationTask.get_response  s  ø€ ô
 ‘Ñ% h°Ó?ˆÜ˜vÓ&ˆà˜+Ñ%ÜÐfÐgrÐfsÐtÓuÐuà  Ñ)ˆ
Ø˜
Ñ"ÜÐeÐfpÐeqÐrÓsÐsà˜uÑ%ˆ	ä�i¤Ô%¨)×*>Ñ*>¸wÔ*GØ�iÑØ'Ÿo™o¨c°1Ó5°aÑ8‘ä Ð#<¸Y¸KÐ!HÓIÐIô (›M×-Ñ-¨iÓ8ˆMÜ Ô.Ü ×*Ñ*¨=×+@Ñ+@ÓA×HÑHÓJˆKð  Ø#ñð
ð 	
r   r\   rw   r8   s   @r   r¿   r¿   ü   se   ø„ ô/ð	Øð	Ø'+ð	ØD\ð	à	�‰ó	ð 48ñ!
à˜$‘,ð!
ð *¨DÑ0ð!
ð 
÷	!
ñ !
r   r¿   )$rl   rP   Úabcr   Útypingr   Úurllib.parser   Úhuggingface_hubr   Úhuggingface_hub.hf_apir   Ú!huggingface_hub.inference._commonr   r	   r
   Ú,huggingface_hub.inference._providers._commonr   r   Úhuggingface_hub.utilsr   r   Úhuggingface_hub.utils.loggingr   r2   rN   rR   r   r:   r_   ry   rš   r£   r®   rº   r¿   r/   r   r   ú<module>r×      s´   ðÛ Û Ý Ý Ý !å %Ý ;ß RÑ Rß Xß BÝ 4ñ 
�HÓ	€ð Ð ô"Ð" Cô "ô3TÐ'¨ô 3Tôl¨)ô ô: .˜9ô  .ôF.˜Iô .ô.˜>ô .ô& .˜Nô  .ôF.˜Nô .ô>0
 õ 0
r   