
    Y j-                     n   S SK r S SKrS SKJr  S SK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" " S S\5      r#g)    N)ABC)Any)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     |/root/GenerationalWealth/GenerationalWealth/venv/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   r/   r#   s      r   _prepare_routeFalAITask._prepare_route   s    <.!!r!   r2   )__name__
__module____qualname____firstlineno__strr   dictr   r*   r4   __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\
\-  S\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'   r.   r!   r/   c                 D    UR                  S5      (       a  SU S3$ SU 3$ )Nr'   r1   z?_subdomain=queue)r+   r3   s      r   r4   FalAIQueueTask._prepare_route-   s0    e$$|n$566<.!!r!   N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   rH   rI   response_dictrK   
parsed_urlr   query_parammodel_id
status_url
result_urlrO   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!   r2   N)r6   r7   r8   r9   r:   r   r;   r   r*   r4   bytesr   re   r<   r=   r>   s   @r   r@   r@   #   s    YS Y s tCH~ "3 " " " 48#T$,#T *D0#T 
	#T #Tr!   r@   c            	       n   ^  \ rS rSrU 4S jrS\S\S\S\S-  4S jrSS	\	\-  S
\
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$   Nc                 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/mpegdata:z;base64,	audio_url)	
isinstancer:   r+   openreadbase64	b64encodedecoder   )r   ro   rp   rq   ru   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rH   rI   c                     [        U5      S   n[        U[        5      (       d  [        S[	        U5       S35      eSU0$ )Ntextz>Unexpected output format from FalAI API. Expected string, got .)r	   rv   r:   rR   type)r   rH   rI   r   s       r   re   0FalAIAutomaticSpeechRecognitionTask.get_responseo   sF    !&)$$$]^bcg^h]iijkll~r!   r2   rg   r6   r7   r8   r9   r   r   r;   r   r   rh   r   re   r<   r=   r>   s   @r   rj   rj   Y   sa    9CC'+CD\C	C$UT\ CTW[C[ gj  r!   rj   c            	       n   ^  \ rS rSrU 4S jrS\S\S\S\S-  4S jrSS	\	\-  S
\
S-  S\4S jjrSrU =r$ )FalAITextToImageTaskv   c                 $   > [         TU ]  S5        g )Nztext-to-imager   rm   s    r   r   FalAITextToImageTask.__init__w       )r!   ro   rp   rq   r$   Nc                 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   rW   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   ro   rp   rq   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!   rH   rI   c                 p    [        U5      S   S   S   n[        5       R                  U5      R                  $ Nimagesr   rS   r	   r   rQ   contentr   rH   rI   rS   s       r   re   !FalAITextToImageTask.get_response   s4    x *1-e4}  %---r!   r2   rg   r   r>   s   @r   r   r   v   s\    *'+D\	4.UT\ .CTW[C[ .gj . .r!   r   c            	       n   ^  \ rS rSrU 4S jrS\S\S\S\S-  4S jrSS	\	\-  S
\
S-  S\4S jjrSrU =r$ )FalAITextToSpeechTask   c                 $   > [         TU ]  S5        g )Nztext-to-speechr   rm   s    r   r   FalAITextToSpeechTask.__init__       )*r!   ro   rp   rq   r$   Nc                      SU0[        U5      E$ )Nr   r   r   ro   rp   rq   s       r   r   .FalAITextToSpeechTask._prepare_payload_as_dict   s     :+j"9::r!   rH   rI   c                 j    [        U5      S   S   n[        5       R                  U5      R                  $ )NaudiorS   r   r   s       r   re   "FalAITextToSpeechTask.get_response   s/    x )%0}  %---r!   r2   rg   r   r>   s   @r   r   r      s\    +;;'+;D\;	;
.UT\ .CTW[C[ .gj . .r!   r   c            	       v   ^  \ rS rSrU 4S jrS\S\S\S\S-  4S jr SS	\	\-  S
\
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   rm   s    r   r   FalAITextToVideoTask.__init__   r   r!   ro   rp   rq   r$   Nc                      SU0[        U5      E$ )Nr   r   r   s       r   r   -FalAITextToVideoTask._prepare_payload_as_dict   s     &<K
$;<<r!   rH   rI   c                    > [         TU ]  X5      n[        U5      S   S   n[        5       R	                  U5      R
                  $ NvideorS   r   re   r	   r   rQ   r   r   rH   rI   outputrS   r   s        r   re   !FalAITextToVideoTask.get_response   A    
 %h?vw'.}  %---r!   r2   rg   r   r>   s   @r   r   r      se    *=='+=D\=	= 48.$,. *D0. 
	. .r!   r   c            	       v   ^  \ rS rSrU 4S jrS\S\S\S\S-  4S jr SS	\	\-  S
\
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   rm   s    r   r   FalAIImageToImageTask.__init__   r   r!   ro   rp   rq   r$   Nc                    [        USS9nSU;   a  UR                  S5      US'   UU/S.[        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_url
image_urlsr   r   r   r   r   )r
   r   r   r   r   r   r   r   r   ro   rp   rq   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!   rH   rI   c                    > [         TU ]  X5      n[        U5      S   S   S   n[        5       R	                  U5      R
                  $ r   r   r   s        r   re   "FalAIImageToImageTask.get_response   sF    
 %h?vx(+E2}  %---r!   r2   rg   r   r>   s   @r   r   r      se    +'+D\	0 48.$,. *D0. 
	. .r!   r   c            	       v   ^  \ rS rSrU 4S jrS\S\S\S\S-  4S jr SS	\	\-  S
\
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   rm   s    r   r   FalAIImageToVideoTask.__init__   r   r!   ro   rp   rq   r$   Nc                     [        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!   rH   rI   c                    > [         TU ]  X5      n[        U5      S   S   n[        5       R	                  U5      R
                  $ r   r   r   s        r   re   "FalAIImageToVideoTask.get_response   r   r!   r2   rg   r   r>   s   @r   r   r      se    +'+D\	( 48.$,. *D0. 
	. .r!   r   c            	       v   ^  \ rS rSrU 4S jrS\S\S\S\S-  4S jr SS	\	\-  S
\
S-  S\4U 4S jjjrSrU =r$ )FalAIImageSegmentationTask   c                 $   > [         TU ]  S5        g )Nzimage-segmentationr   rm   s    r   r   #FalAIImageSegmentationTask.__init__   s    -.r!   ro   rp   rq   r$   Nc                 @    [        USS9nSU0[        U5      ESS0EnU$ )Nz	image/pngr   r   	sync_modeT)r
   r   )r   ro   rp   rq   r   r   s         r   r   3FalAIImageSegmentationTask._prepare_payload_as_dict   s<     FkB	#
*%#
 #

 r!   rH   rI   c                   > [         T	U ]  X5      n[        U5      nSU;  a  [        SU 35      eUS   nSU;  a  [        SU 35      eUS   n[	        U[
        5      (       a@  UR                  S5      (       a*  SU;   a  UR                  SS5      S   nO`[        SU 35      e[        5       R                  U5      n[        U5        [        R                  " UR                  5      R                  5       nS	US
./$ )NimagezGResponse from fal ai image-segmentation API does not contain an image: rS   zFImage data from fal ai image-segmentation API does not contain a URL: rt   ,r   zInvalid data URL format: mask)labelr   )r   re   r	   rR   rv   r:   r+   splitr   rQ   r   ry   rz   r   r{   )
r   rH   rI   resultresult_dict
image_datar   mask_base64mask_responser   s
            r   re   'FalAIImageSegmentationTask.get_response  s   
 %h?v&+%fgrfstuu )

"efpeqrssu%	i%%)*>*>w*G*Gi'ooc15a8 #<YK!HII (M--i8M. **=+@+@AHHJK  #
 	
r!   r2   rg   r   r>   s   @r   r   r      se    /		'+	D\			 48!
$,!
 *D0!
 
	!
 !
r!   r   )$ry   rZ   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   r6   rX   r\   r   r@   rj   r   r   r   r   r   r   r2   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!   