
    ^h'                     d   S SK r S SKrS SKJr  S SKJrJrJrJr  S SK	J
r
  S SKJr  S SKJr  S SKJrJrJr  S SKJrJr  S S	KJrJr  S S
KJr  \" \5      rSr " S S\\5      r " S S\\5      r " S S\5      r  " S S\5      r! " S S\5      r" " S S\5      r# " S S\5      r$ " S S\5      r%g)    N)ABC)AnyDictOptionalUnion)urlparse)	constants)InferenceProviderMapping)RequestParameters_as_dict_as_url)TaskProviderHelperfilter_none)get_sessionhf_raise_for_status)
get_loggerg      ?c                   l   ^  \ rS rSrS\4U 4S jjrS\S\S\\\4   4U 4S jjrS\S\S\4S	 jr	S
r
U =r$ )	FalAITask   taskc                 $   > [         TU ]  SSUS9  g )Nfal-aizhttps://fal.runproviderbase_urlr   super__init__selfr   	__class__s     e/home/james-whalen/.local/lib/python3.13/site-packages/huggingface_hub/inference/_providers/fal_ai.pyr   FalAITask.__init__   s    (5FTR    headersapi_keyreturnc                 b   > [         TU ]  X5      nUR                  S5      (       d  SU 3US'   U$ Nhf_zKey authorizationr   _prepare_headers
startswithr    r%   r&   r!   s      r"   r-   FalAITask._prepare_headers   9    '*7<!!%(()-gY'7GO$r$   mapped_modelc                     SU 3$ )N/ r    r2   r&   s      r"   _prepare_routeFalAITask._prepare_route   s    <.!!r$   r5   )__name__
__module____qualname____firstlineno__strr   r   r   r-   r7   __static_attributes____classcell__r!   s   @r"   r   r      sR    SS S s tCH~ "3 " " " "r$   r   c                      ^  \ rS rSrS\4U 4S jjrS\S\S\\\4   4U 4S jjrS\S\S\4S	 jr	 SS
\
\\4   S\\   S\4S jjrSrU =r$ )FalAIQueueTask#   r   c                 $   > [         TU ]  SSUS9  g )Nr   zhttps://queue.fal.runr   r   r   s     r"   r   FalAIQueueTask.__init__$   s    (5LSWXr$   r%   r&   r'   c                 b   > [         TU ]  X5      nUR                  S5      (       d  SU 3US'   U$ r)   r,   r/   s      r"   r-   FalAIQueueTask._prepare_headers'   r1   r$   r2   c                 D    UR                  S5      (       a  SU S3$ SU 3$ )Nr*   r4   z?_subdomain=queue)r.   r6   s      r"   r7   FalAIQueueTask._prepare_route-   s0    e$$|n$566<.!!r$   responserequest_paramsc                    [        U5      nUR                  S5      nU(       d  [        S5      eUc  [        SU R                   S35      e[	        UR
                  5      nUR                   SUR                   UR                  S:X  a  SOS 3nUR                  (       a  S	UR                   3OSn[	        UR                  S
5      5      R                  nU [        U5       SU 3n	U [        U5       U 3n
UR                  S5      n[        R                  S5        US:w  am  [        R                  " [        5        [!        5       R                  XR"                  S9n[%        U5        UR'                  5       R                  S5      nUS:w  a  Mm  [!        5       R                  XR"                  S9R'                  5       $ )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pathr=   loggerinfotimesleep_POLLING_INTERVALr   r%   r   json)r    rJ   rK   response_dictrM   
parsed_urlr   query_parammodel_id
status_url
result_urlrQ   status_responses                r"   get_responseFalAIQueueTask.get_response3   s   
 !*"&&|4
BCC!I$))Tkl 
 n001
 ''(J,=,=+>JL]L]axLxy  A  ?B  C0:0@0@***+,b M--n=>CC z#h-}E
 z#h->
""8,LM#JJ())m//
DZDZ/[O0$))+//9F	 # }  5K5K LQQSSr$   r5   N)r9   r:   r;   r<   r=   r   r   r   r-   r7   r   bytesr   r   rg   r>   r?   r@   s   @r"   rB   rB   #   s    YS Y s tCH~ "3 " " " 7;#Tt$#T !!23#T 
	#T #Tr$   rB   c            	       r   ^  \ rS rSrU 4S jrS\S\S\S\\   4S jr	SS\
\\4   S	\\   S\4S
 jjrSrU =r$ )#FalAIAutomaticSpeechRecognitionTaskY   c                 $   > [         TU ]  S5        g )Nzautomatic-speech-recognitionr   r    r!   s    r"   r   ,FalAIAutomaticSpeechRecognitionTask.__init__Z   s    78r$   inputs
parametersprovider_mapping_infor'   c                 n   [        U[        5      (       a  UR                  S5      (       a  UnOh[        U[        5      (       a%  [        US5       nUR	                  5       nS S S 5        [
        R                  " U5      R                  5       nSnSU SU 3nSU0[        U5      E$ ! , (       d  f       NK= f)N)zhttp://zhttps://rbz
audio/mpegzdata:z;base64,	audio_url)	
isinstancer=   r.   openreadbase64	b64encodedecoder   )r    rq   rr   rs   rv   f	audio_b64content_types           r"   _prepare_payload_as_dict<FalAIAutomaticSpeechRecognitionTask._prepare_payload_as_dict]   s     fc""v'8'89P'Q'QI &#&&&$'1VVXF ( ((0779I'L~Xi[AIYB+j*ABB ('s   B&&
B4rJ   rK   c                 |    [        U5      S   n[        U[        5      (       d  [        S[	        U5       S35      eU$ )Ntextz>Unexpected output format from FalAI API. Expected string, got .)r   rw   r=   rT   type)r    rJ   rK   r   s       r"   rg   0FalAIAutomaticSpeechRecognitionTask.get_responseo   sA    !&)$$$]^bcg^h]iijkllr$   r5   ri   r9   r:   r;   r<   r   r   r   r
   r   r   r   rj   r   rg   r>   r?   r@   s   @r"   rl   rl   Y   se    9CC'+CD\C	$C$U5$;%7 RcId ps  r$   rl   c            	       r   ^  \ rS rSrU 4S jrS\S\S\S\\   4S jr	SS\
\\4   S	\\   S\4S
 jjrSrU =r$ )FalAITextToImageTaskv   c                 $   > [         TU ]  S5        g )Nztext-to-imager   ro   s    r"   r   FalAITextToImageTask.__init__w       )r$   rq   rr   rs   r'   c                 D   SU0[        U5      EnSU;   a,  SU;   a&  UR                  S5      UR                  S5      S.US'   UR                  bQ  [        R                  R                  UR                  SUR                  S9nUSS	./US
'   UR                  S:X  a  SUS'   U$ )Npromptwidthheight)r   r   
image_sizemainrepo_idrevisionfilename   rY   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    rq   rr   rs   payload	lora_paths         r"   r   -FalAITextToImageTask._prepare_payload_as_dictz   s     f#
*%#
 g(g"5 W-!++h/%GL! !55A!==DD-99.CC E I
 *3Q ?@GG$00MA )S%r$   rJ   rK   c                 p    [        U5      S   S   S   n[        5       R                  U5      R                  $ Nimagesr   rU   r   r   rS   contentr    rJ   rK   rU   s       r"   rg   !FalAITextToImageTask.get_response   s4    x *1-e4}  %---r$   r5   ri   r   r@   s   @r"   r   r   v   s`    *'+D\	$4.U5$;%7 .RcId .ps . .r$   r   c            	       r   ^  \ rS rSrU 4S jrS\S\S\S\\   4S jr	SS\
\\4   S	\\   S\4S
 jjrSrU =r$ )FalAITextToSpeechTask   c                 $   > [         TU ]  S5        g )Nztext-to-speechr   ro   s    r"   r   FalAITextToSpeechTask.__init__       )*r$   rq   rr   rs   r'   c                      SU0[        U5      E$ )Nr   r   r    rq   rr   rs   s       r"   r   .FalAITextToSpeechTask._prepare_payload_as_dict   s     :+j"9::r$   rJ   rK   c                 j    [        U5      S   S   n[        5       R                  U5      R                  $ )NaudiorU   r   r   s       r"   rg   "FalAITextToSpeechTask.get_response   s/    x )%0}  %---r$   r5   ri   r   r@   s   @r"   r   r      s`    +;;'+;D\;	$;
.U5$;%7 .RcId .ps . .r$   r   c            	       z   ^  \ rS rSrU 4S jrS\S\S\S\\   4S jr	 SS\
\\4   S	\\   S\4U 4S
 jjjrSrU =r$ )FalAITextToVideoTask   c                 $   > [         TU ]  S5        g )Nztext-to-videor   ro   s    r"   r   FalAITextToVideoTask.__init__   r   r$   rq   rr   rs   r'   c                      SU0[        U5      E$ )Nr   r   r   s       r"   r   -FalAITextToVideoTask._prepare_payload_as_dict   s     &<K
$;<<r$   rJ   rK   c                    > [         TU ]  X5      n[        U5      S   S   n[        5       R	                  U5      R
                  $ NvideorU   r   rg   r   r   rS   r   r    rJ   rK   outputrU   r!   s        r"   rg   !FalAITextToVideoTask.get_response   A    
 %h?vw'.}  %---r$   r5   ri   r   r@   s   @r"   r   r      sk    *=='+=D\=	$= 7;.t$. !!23. 
	. .r$   r   c            	       z   ^  \ rS rSrU 4S jrS\S\S\S\\   4S jr	 SS\
\\4   S	\\   S\4U 4S
 jjjrSrU =r$ )FalAIImageToImageTask   c                 $   > [         TU ]  S5        g )Nzimage-to-imager   ro   s    r"   r   FalAIImageToImageTask.__init__   r   r$   rq   rr   rs   r'   c                     [        USS9nSU;   a  UR                  S5      US'   SU0[        U5      EnUR                  b<  [        R
                  R                  UR                  SUR                  S9nUSS	./US
'   U$ )N
image/jpegdefault_mime_typetarget_sizer   	image_urlr   r   r   r   r   )r   r   r   r   r	   r   r   r   r    rq   rr   rs   r   r   r   s          r"   r   .FalAIImageToImageTask._prepare_payload_as_dict   s     FlC	J&'1~~m'DJ|$#
*%#
 !55A!==DD-99.CC E I
 *3Q ?@GGr$   rJ   rK   c                    > [         TU ]  X5      n[        U5      S   S   S   n[        5       R	                  U5      R
                  $ r   r   r   s        r"   rg   "FalAIImageToImageTask.get_response   sF    
 %h?vx(+E2}  %---r$   r5   ri   r   r@   s   @r"   r   r      sk    +'+D\	$. 7;.t$. !!23. 
	. .r$   r   c            	       z   ^  \ rS rSrU 4S jrS\S\S\S\\   4S jr	 SS\
\\4   S	\\   S\4U 4S
 jjjrSrU =r$ )FalAIImageToVideoTask   c                 $   > [         TU ]  S5        g )Nzimage-to-videor   ro   s    r"   r   FalAIImageToVideoTask.__init__   r   r$   rq   rr   rs   r'   c                     [        USS9nSU0[        U5      EnUR                  b<  [        R                  R                  UR                  SUR                  S9nUSS./US'   U$ )	Nr   r   r   r   r   r   r   r   )r   r   r   r	   r   r   r   r   s          r"   r   .FalAIImageToVideoTask._prepare_payload_as_dict   s     FlC	#
*%#
 !55A!==DD-99.CC E I
 *3Q ?@GGr$   rJ   rK   c                    > [         TU ]  X5      n[        U5      S   S   n[        5       R	                  U5      R
                  $ r   r   r   s        r"   rg   "FalAIImageToVideoTask.get_response   r   r$   r5   ri   r   r@   s   @r"   r   r      sk    +'+D\	$( 7;.t$. !!23. 
	. .r$   r   )&rz   r\   abcr   typingr   r   r   r   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   r9   rZ   r^   r   rB   rl   r   r   r   r   r   r5   r$   r"   <module>r      s       - - ! % ; R R X B 4 
H	  ""C "3T' 3Tl) : .9  .F.I ..> .&.N .D.N .r$   