
    _jS                   
   % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
  S SKrS SKrS SKrS SKrS SKrS SKrS SKJrJr  S SKJrJr  S SKJrJr  S SKJrJr  S SKJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'  S S	K(J)r)  S SK*r*S SK+r+S S
K,J-r-J.r.  S SK/J0r0J1r1J2r2J3r3J4r4  S SK5J6r6  S SK7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?  \#(       a  S SK@JArA  S SKBJCrC  \R                  " \E5      rF\#(       a  S SKGJHrH  \!\I\4   rJ\%S   rK\!\I\4   rL\'\%S   \M4   rN\%S   rOS\2 S3rPS\1 S3rQS\2 S3rRSrSSrT\R                  R                  SS5      rWSrXS\YS'   SS/rZS \YS!'   S"\6 S#3r[S$r\\R                  R                  S%S&9r_S'r`S\`S(S)S*S+S,S.raS-\YS.'   \" S/S09 " S1 S25      5       rb\" S/S09 " S3 S45      5       rc\" S/S09 " S5 S65      5       rd\ " S7 S85      5       re " S9 S:5      rf " S; S<5      rgS=rhS>riS?rj " S@ SA5      rk " SB SC5      rl " SD SE\m5      rn\ " SF SG\n5      5       ro\ " SH SI\n\p5      5       rqSSJ jrr\ " SK SL5      5       rs\ " SM SN\s5      5       rt\ " SO SP\s5      5       ru\ " SQ SR\s5      5       rv\" S/S09 " SS ST5      5       rwSUSV/rxSSW jry\" S/S09 " SX SY5      5       rzSZr{S[r|S\r}SS] jr~SS^ jrS_SS`.         SSa jjrSbSc.         SSd jjrSSe jr " Sf Sg\5      rSSh jrSSi jr      SSj jr      SSk jr\ " Sl Sm5      5       r\ " Sn So5      5       r\ S     SSp jj5       r\ S     SSq jj5       r          SSr jr          SSs jrS?rStrSur/ SvQr/ SwQr\+GR(                  " SxSySz9rSS{ jr/ 4     SS| jjr/ 4SS} jjr  S           SS~ jjr/ S.           SS jjr/ S.           SS jjrSS jr      SS jrSS jr    SS jr          SS jr      SS jr      SS jrSS jrSS.             SS jjrSS.             SS jjr        SS jrSS.             SS jjr        SS jrSS.             SS jjr    SS jr    SS jrSS jrSS jr\" S/S09 " S S\w5      5       r\" S/S09 " S S\w5      5       r\" S/S09 " S S5      5       r\" S/S09 " S S5      5       rSS jrSS jrSSS jjrg)    )annotationsN)Path)asynccontextmanagercontextmanager)datetimetimezone)	dataclassfield)cached_propertypartial)
AnyAsyncIterator	AwaitableDictIteratorTYPE_CHECKINGOptionalLiteralCallableUnion)	urlencode)aconnect_sseconnect_sse)AuthCredentialsFAL_QUEUE_RUN_HOSTFAL_RUN_HOSTMissingCredentialsErrorfetch_auth_credentials)__version__)Priorityadd_priority_headeradd_timeout_headeradd_hint_headeradd_fal_app_context_headershandle_response_headersREQUEST_TIMEOUT_TYPE_HEADERREQUEST_TIMEOUT_HEADER)WebSocketClientProtocol)
Connection)Image)fal_v3cdnfal)never	immediate1h1d7d30d1y)hideforbidallowzhttps:///zwss://zhttps://rest.fal.aizhttps://v3.fal.mediaFAL_CDN_HOSTzhttps://fal.mediar+   UploadRepositoryIdDEFAULT_UPLOAD_REPOSITORYr,   r-   list[UploadRepositoryId]"DEFAULT_UPLOAD_FALLBACK_REPOSITORYzfal-client/z	 (python)   FAL_CLIENT_EXECUTOR)thread_name_prefix<   i  iQ i:	 i ' i3zdict[str, int | None]#_UPLOAD_LIFECYCLE_EXPIRATION_VALUEST)frozenc                  *    \ rS rSr% S\S'   S\S'   Srg)StorageACLRulel   struserStorageACLDecisiondecision N)__name__
__module____qualname____firstlineno____annotations____static_attributes__rK       F/home/rurouni/.local/lib/python3.13/site-packages/fal_client/client.pyrE   rE   l   s    
I  rR   rE   c                  2    \ rS rSr% SrS\S'   SrS\S'   Srg)
StorageACLr   NzStorageACLDecision | Nonedefaultzlist[StorageACLRule] | NonerulesrK   )rL   rM   rN   rO   rW   rP   rX   rQ   rK   rR   rS   rU   rU   r   s    )-G&-)-E&-rR   rU   c                  @    \ rS rSr% SrSrS\S'   SrS\S'   S
S jrS	r	g)StorageSettingsx   zLifecycle configuration for uploaded files.

Use `expires_in="never"` (or omit `expires_in`) to keep the backend's
default retention policy. `expires_in="immediate"` maps to approximately
60 seconds because the backend treats `0` as no expiration.
NzObjectExpiration | None
expires_inzStorageACL | Noneinitial_aclc                J    U R                   b  [        U R                   5        g g N)r\   '_get_upload_expiration_duration_secondsselfs    rS   __post_init__StorageSettings.__post_init__   s    ??&3DOOD 'rR   rK   returnNone)
rL   rM   rN   rO   __doc__r\   rP   r]   rc   rQ   rK   rR   rS   rZ   rZ   x   s%     +/J'.%)K")ErR   rZ   c                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   SS jrS	rg
)CDNToken   rG   token
token_typebase_upload_urlr   
expires_atc                d    [         R                  " [        R                  5      U R                  :  $ r_   )r   nowr   utcro   ra   s    rS   
is_expiredCDNToken.is_expired   s    ||HLL)T__<<rR   rK   N)rf   bool)rL   rM   rN   rO   rP   rs   rQ   rK   rR   rS   rj   rj      s    JO=rR   rj   c                  2    \ rS rSrSS jrSS jrSS jrSrg)	CDNTokenManager   c           	        Xl         [        SSS[        R                  R	                  [
        R                  S9S9U l        [        R                  " 5       U l
        [         S3U l        U R                   R                  SSS.U l        g N )tzinforl   rm   rn   ro   z+/storage/auth/token?storage_type=fal-cdn-v3application/jsonAuthorizationAcceptContent-Type)_authrj   r   minreplacer   rr   _token	threadingLock_lockREST_URL_urlheader_value_headersrb   auths     rS   __init__CDNTokenManager.__init__   sp    
 (||++8<<+@	!
 &/^^%5
j KL	!ZZ44(.
rR   c           	     B   [         R                  " 5        nUR                  U R                  U R                  0 S9nUR                  5         UR                  5       nS S S 5        [        WS   US   US   [        R                  " US   5      S9$ ! , (       d  f       N:= fNheadersjsonrl   rm   base_urlro   r}   )
httpxClientpostr   r   raise_for_statusr   rj   r   fromisoformatrb   clientresponsedatas       rS   _refresh_tokenCDNTokenManager._refresh_token   s    \\^v{{499dmm"{MH%%'==?D 
 w-L) ,--d<.@A	
 	
 ^s   AB
Bc                    U R                      U R                  R                  5       (       a  U R                  5       U l        U R                  sS S S 5        $ ! , (       d  f       g = fr_   r   r   rs   r   ra   s    rS   	get_tokenCDNTokenManager.get_token   s=    ZZ{{%%''"113;; ZZs   A A
A%r   r   r   r   r   Nr   r   rf   rg   rf   rj   rL   rM   rN   rO   r   r   r   rQ   rK   rR   rS   rw   rw          
 
rR   rw   c                  2    \ rS rSrSS jrSS jrSS jrSrg)	AsyncCDNTokenManager   c           	        Xl         [        SSS[        R                  R	                  [
        R                  S9S9U l        [        R                  " 5       U l
        [         S3U l        U R                   R                  SSS.U l        g rz   )r   rj   r   r   r   r   rr   r   asyncior   r   r   r   r   r   r   s     rS   r   AsyncCDNTokenManager.__init__   so    
 (||++8<<+@	!
 $+<<>
j KL	!ZZ44(.
rR   c           	       #    [         R                  " 5        IS h  vN nUR                  U R                  U R                  0 S9I S h  vN nUR                  5         UR                  5       nS S S 5      IS h  vN   [        WS   US   US   [        R                  " US   5      S9$  N Nb N4! , IS h  vN  (       d  f       NI= f7fr   )
r   AsyncClientr   r   r   r   r   rj   r   r   r   s       rS   r   #AsyncCDNTokenManager._refresh_token   s     $$&&&#[[DMMPR[SSH%%'==?D '&
 w-L) ,--d<.@A	
 	
 'S '&&&sV   C
B*C
)B0	B,
$B0.C
9B.:1C
,B0.C
0C6B97CC
c                &  #    U R                    IS h  vN   U R                  R                  5       (       a  U R                  5       I S h  vN U l        U R                  sS S S 5      IS h  vN   $  N] N( N	! , IS h  vN  (       d  f       g = f7fr_   r   ra   s    rS   r   AsyncCDNTokenManager.get_token   sR     :::{{%%''$($7$7$99;; ::9 :::sV   BA1B3A7
A3A7B+A5,B3A75B7B=B >B
Br   Nr   r   r   rK   rR   rS   r   r      r   rR   r   i  @i   
   c                  &   \ rS rSrSSSS.             SS jjr\SS j5       r\SS j5       r\SS j5       r S SS jjr	SS	 jr
SS
 jr\SSSSS.               SS jj5       r\SSSSS.               SS jj5       rSrg)MultipartUpload   N
chunk_sizecontent_typemax_concurrencyc                   Xl         X l        X0l        U=(       d    [        U l        U=(       d    SU l        U=(       d    [        U l        S U l        S U l	        / U l
        g Napplication/octet-stream	file_name_client_token_managerMULTIPART_CHUNK_SIZEr   r   MULTIPART_MAX_CONCURRENCYr   _access_url
_upload_id_partsrb   r   r   token_managerr   r   r   s          rS   r   MultipartUpload.__init__   S     #+$<(<(F,F.K2K'+&*"$rR   c                R    U R                   (       d  [        S5      eU R                   $ NzUpload not initiatedr   
ValueErrorra   s    rS   
access_urlMultipartUpload.access_url   #    344rR   c                R    U R                   (       d  [        S5      eU R                   $ r   r   r   ra   s    rS   	upload_idMultipartUpload.upload_id       344rR   c                z    U R                   R                  5       nUR                   SUR                   3[        S.$ N r   z
User-Agentr   r   rm   rl   
USER_AGENTrb   rl   s     rS   auth_headersMultipartUpload.auth_headers  s<    ##--/ % 0 015;;-@$
 	
rR   c                0   U R                   R                  5       nUR                   S3n0 U R                  ESU R                  U R
                  S.En[        XA5        [        U R                  SUUS9nUR                  5       nUS   U l
        US   U l        g Nz/files/upload/multipartr~   )r   r   X-Fal-File-NamePOSTr   r   uploadId)r   r   rn   r   r   r   _object_lifecycle_headers_maybe_retry_requestr   r   r   r   )rb   object_lifecycle_preferencerl   urlr   r   results          rS   createMultipartUpload.create  s     ##--/&&''>?

( --#~~	
 	"'G'LL	
 !,/ ,rR   c           	         U R                    SU R                   SU 3n[        U R                  SU0 U R                  EU R
                  SS.EUS S9nUR                  S   nU R                  R                  UUS.5        g 	N/multipart/r8   PUTidentity)r   zAccept-Encoding)r   contenttimeoutetag)
partNumberr   )	r   r   _requestr   r   r   r   r   append)rb   part_numberr   r   r   r   s         rS   upload_partMultipartUpload.upload_part"  s    !T^^,<Ak]KLL## $ 1 1#-
 
 ')	
rR   c                    U R                    SU R                   S3n[        U R                  SUU R                  SU R
                  0S9  U R                   $ Nr   z	/completer   partsr   )r   r   r   r   r   r   )rb   r   s     rS   completeMultipartUpload.complete:  sT    !T^^,<IFLL%%4;;'	
 rR   r   r   r   r   c          	     |   SS K n	U " UUUUUUS9n
U
R                  US9  [        R                  " [	        U5      U
R
                  -  5      nU	R                  R                  U
R                  S9 n/ n[        SUS-   5       HP  nUS-
  U
R
                  -  nXOXR
                  -    nUR                  UR                  U
R                  X5      5        MR     U	R                  R                  U5       H  nUR                  5         M     S S S 5        U
R                  5       $ ! , (       d  f       U
R                  5       $ = f)Nr   r   r   r   r   r   r   r   max_workersr>   )concurrent.futuresr   mathceillenr   futuresThreadPoolExecutorr   ranger   submitr   as_completedr   r  )clsr   r   r   r   r   r   r   r   
concurrent	multipartr  executorr  r   startfutures                    rS   saveMultipartUpload.saveE  s3    	"'!%+
	 	5PQ		#d)i&:&::;22!11 3 
G$Q	2$qI,@,@@E,@,@$@AOOI$9$9;M  3 %,,99'B C
 !!##
 
 !!##s   .BD
D;r   r   r   r   c          	       ^^ SS K n[        R                  R                  T5      n	[        R                  R	                  T5      n
U " U	UUUUUS9mTR                  US9  [        R                  " U
TR                  -  5      nUR                  R                  TR                  S9 n/ n[        SUS-   5       H,  nSUU4S jjnUR                  UR                  X5      5        M.     UR                  R                  U5       H  nUR!                  5         M     S S S 5        TR#                  5       $ ! , (       d  f       TR#                  5       $ = f)Nr   r  r  r  r>   c                   > [        TS5       nU S-
  TR                  -  nUR                  U5        UR                  TR                  5      nTR	                  X5        S S S 5        g ! , (       d  f       g = fNrbr>   openr   seekreadr   )pnfr  r   	file_pathr  s       rS   _upload_part/MultipartUpload.save_file.<locals>._upload_part  s\    i.!!#a9+?+? ?u vvi&:&:;!--b7	 /..s   AA''
A5)r$  intrf   rg   )r
  ospathbasenamegetsizer   r  r  r   r  r  r   r  r   r  r  r   r  )r  r   r   r&  r   r   r   r   r  r   sizer  r  r  r   r'  r  r  s      `             @rS   	save_fileMultipartUpload.save_filel  s0    	"GG$$Y/	wwy)'!%+
	 	5PQ		$!5!55622!11 3 
G$Q	28 8 x|IJ  3 %,,99'B C
  !!##!
 
  !!##s   %A4D11
E	r   r   r   r   r   r   r   r   r   )r   rG   r   httpx.Clientr   rw   r   
int | Noner   
str | Noner   r3  rf   rg   rf   rG   rf   dict[str, str]r_   r   !LifecyclePreferencePayload | Noner   r)  r   bytesrf   rg   )r   r2  r   rw   r   rG   r   r;  r   r4  r   r3  r   r3  r   r9  )r   r2  r   rw   r&  
str | Pathr   r3  r   r4  r   r3  r   r9  rf   rG   rL   rM   rN   rO   r   propertyr   r   r   r   r   r  classmethodr  r/  rQ   rK   rR   rS   r   r      s    "&#'&*% % 	%
 '% % !% $% 
%(    
  
 
 
 PT-+L-,
0	  $(!%&*IM$$ $$ '	$$
 $$ $$ !$$ $$ $$$ &G$$ $$L  "&#'&*IM)$ )$ '	)$
 )$ )$ !)$ $)$ &G)$ 
)$ )$rR   r   c                  *   \ rS rSrSSSS.             SS jjr\SS j5       r\SS j5       r\SS j5       r S SS jjr	SS	 jr
SS
 jr\SSSSS.                 SS jj5       r\SSSSS.               SS jj5       rSrg)AsyncMultipartUpload  Nr   c                   Xl         X l        X0l        U=(       d    [        U l        U=(       d    SU l        U=(       d    [        U l        S U l        S U l	        / U l
        g r   r   r   s          rS   r   AsyncMultipartUpload.__init__  r   rR   c                R    U R                   (       d  [        S5      eU R                   $ r   r   ra   s    rS   r   AsyncMultipartUpload.access_url  r   rR   c                R    U R                   (       d  [        S5      eU R                   $ r   r   ra   s    rS   r   AsyncMultipartUpload.upload_id  r   rR   c                   #    U R                   R                  5       I S h  vN nUR                   SUR                   3[        S.$  N&7fr   r   r   s     rS   r   !AsyncMultipartUpload.auth_headers  sG     ))3355 % 0 015;;-@$
 	
 6s   A	A'A	c                x  #    U R                   R                  5       I S h  vN nUR                   S3nU R                  I S h  vN n0 UESU R                  U R
                  S.En[        XQ5        [        U R                  SUUS9I S h  vN nUR                  5       nUS   U l
        US   U l        g  N Nr N-7fr   )r   r   rn   r   r   r   r   _async_maybe_retry_requestr   r   r   r   )rb   r   rl   r   r   request_headersr   r   s           rS   r   AsyncMultipartUpload.create  s      ))3355&&''>?)))

( --#~~	
 	"/O3LL#	
 
 !,/ ,% 6)
s4   B:B4"B:B6AB:
B8*B:6B:8B:c           	     4  #    U R                    SU R                   SU 3nU R                  I S h  vN n[        U R                  SU0 UEU R
                  SS.EUS S9I S h  vN nUR                  S   nU R                  R                  UUS.5        g  Nc N47fr   )	r   r   r   _async_requestr   r   r   r   r   )rb   r   r   r   r   r   r   s          rS   r    AsyncMultipartUpload.upload_part  s     !T^^,<Ak]K)))'LL $ 1 1#-
 
 
 ')	
! *
s!   .BB0B!B"3BBc                   #    U R                    SU R                   S3nU R                  I S h  vN n[        U R                  SUUSU R
                  0S9I S h  vN   U R                   $  N; N7fr   )r   r   r   rL  r   r   )rb   r   r   s      rS   r  AsyncMultipartUpload.complete  ss     !T^^,<IF)))(LL4;;'
 	
 	
  *	
s!   ,A.A**A.A,A.,A.r  c          	     .  ^^^#    U " UUUUUUS9mTR                  US9I S h  vN   [        R                  " [        T5      TR                  -  5      n	SUU4S jjn
[        SU	S-   5       Vs/ s H  n[        R                  " U
" U5      5      PM!     nn[        R                  " TR                  5      mU4S jn[        R                  " U Vs/ s H
  o" U5      PM     sn6 I S h  vN   TR                  5       I S h  vN $  Ns  snf s  snf  N( N7f)Nr  r  c                   >#    U S-
  TR                   -  nTXTR                   -    nTR                  X5      I S h  vN   g  N7f)Nr>   )r   r   )r   r  chunkr   r  s      rS   r   .AsyncMultipartUpload.save.<locals>.upload_part  sC      1_	(<(<<E)=)=!=>E'';;;s   8AAAr>   c                   >#    T IS h  vN   U I S h  vN   S S S 5      IS h  vN   g  N N N	! , IS h  vN  (       d  f       g = f7fr_   rK   tasksems    rS   bounded_upload1AsyncMultipartUpload.save.<locals>.bounded_upload#  )     s

 ss sssE   A
*A
0,0A
.A
0A
A9AA
r   r)  rf   rg   )r   r  r  r  r   r  r   create_task	Semaphorer   gatherr  )r  r   r   r   r   r   r   r   r   r  r   r   tasksr\  rZ  r  r[  s       `          @@rS   r  AsyncMultipartUpload.save  s     '!%+
	 ;VWWW		#d)i&:&::;	< 	<  %Q	2
2 K 892 	 
 	 9 9:	 nnF~d3FGGG'')))+ 	X
 GG)sL   DDA
D.&D<DD!D(D)D DDDDr  c          	       ^^^#    [         R                  R                  T5      n[         R                  R                  T5      n	U " UUUUUUS9mTR	                  US9I S h  vN   [
        R                  " U	TR                  -  5      n
SUU4S jjn[        SU
S-   5       Vs/ s H  n[        R                  " U" U5      5      PM!     nn[        R                  " TR                  5      mU4S jn[        R                  " U Vs/ s H
  o" U5      PM     sn6 I S h  vN   TR                  5       I S h  vN $  Ns  snf s  snf  N( N7f)Nr  r  c                  >#    [        TS5       nU S-
  TR                  -  nUR                  U5        UR                  TR                  5      nTR	                  X5      I S h  vN   S S S 5        g  N! , (       d  f       g = f7fr  r   )r   r%  r  r   r&  r  s       rS   r   3AsyncMultipartUpload.save_file.<locals>.upload_partC  sn     i&!$qI,@,@@uvvi223++K>>>	 '& ?	 '&s/   BAA3#A1$A3(	B1A33
B=Br>   c                   >#    T IS h  vN   U I S h  vN   S S S 5      IS h  vN   g  N N N	! , IS h  vN  (       d  f       g = f7fr_   rK   rY  s    rS   r\  6AsyncMultipartUpload.save_file.<locals>.bounded_uploadR  r^  r_  r`  )r*  r+  r,  r-  r   r  r  r   r  r   ra  rb  r   rc  r  )r  r   r   r&  r   r   r   r   r   r.  r  r   r   rd  r\  rZ  r  r[  s      `            @@rS   r/  AsyncMultipartUpload.save_file*  s2     GG$$Y/	wwy)'!%+
	 ;VWWW		$!5!556	? 	?  %Q	2
2 K 892 	 
 	 9 9:	 nnF~d3FGGG'')))/ 	X
 GG)sO   AE
!D:"AE
#&D<	<E
EE
EE
5E6E
<E
E
r1  )r   rG   r   httpx.AsyncClientr   r   r   r3  r   r4  r   r3  rf   rg   r5  r6  r_   r8  r:  )r   rl  r   r   r   rG   r   r;  r   r4  r   r3  r   r3  r   r9  rf   rG   )r   rl  r   r   r&  r<  r   r3  r   r4  r   r3  r   r9  rf   rG   r=  rK   rR   rS   rA  rA    s    "&#'&*% % "	%
 ,% % !% $% 
%(    
  
 
 
 PT-+L-.
2
  $(!%&*IM)* ")* ,	)*
 )* )* !)* )* $)* &G)* 
)* )*V  "&#'&*IM,* ",* ,	,*
 ,* ,* !,* $,* &G,* 
,* ,*rR   rA  c                      \ rS rSrSrg)FalClientErroriZ  rK   NrL   rM   rN   rO   rQ   rK   rR   rS   rn  rn  Z  s    rR   rn  c                  V    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
rS\S'   SS jrSrg
)FalClientHTTPErrori^  rG   messager)  status_coder7  response_headershttpx.Responser   Nr4  
error_typec                    U R                    $ r_   )rr  ra   s    rS   __str__FalClientHTTPError.__str__f  s    ,, rR   rK   r5  )rL   rM   rN   rO   rP   rv  rx  rQ   rK   rR   rS   rq  rq  ^  s(    L$$!J
!!rR   rq  c                  8    \ rS rSr% S\S'   SrS\S'   S	S jrSrg)
FalClientTimeoutErrorij  floatr   NOptional[str]
request_idc                v    U R                   c  SU R                   S3$ SU R                    SU R                   S3$ )NzRequest timed out after z secondszRequest z timed out after )r~  r   ra   s    rS   rx  FalClientTimeoutError.__str__o  s>    ??"-dll^8DDdoo..?~XVVrR   rK   r5  )rL   rM   rN   rO   rP   r~  rx  rQ   rK   rR   rS   r{  r{  j  s    N $J$WrR   r{  c           	         U R                  5         g ! [        R                   a  nS nU R                  n U R	                  5       nO! [
         a    S n Of = f[        U[        5      (       a-  UR                  SU R                  5      nUR                  S5      nUc  U R                  R                  S5      n[        UU R                  [        U R                  5      U US9UeS nAff = f)Ndetailrv  zx-fal-error-type)r   rv  )r   r   HTTPStatusErrortextr   r   
isinstancedictgetr   rq  rs  )r   excrv  msgbodys        rS   _raise_for_statusr  v  s    !!#   
mm	==?D 	D	 dD!!((8X]]3C,/J!))--.@AJ    !!"!
 	!s8    C)C$AC$AC$ABC$$C)c                      \ rS rSrSrg)Statusi  rK   Nro  rK   rR   rS   r  r    s    rR   r  c                  $    \ rS rSr% SrS\S'   Srg)Queuedi  zIndicates the request is enqueued and waiting to be processed. The position
field indicates the relative position in the queue (0-indexed).r)  positionrK   N)rL   rM   rN   rO   rh   rP   rQ   rK   rR   rS   r  r    s    G MrR   r  c                  2    \ rS rSr% Sr\" 5       rS\S'   Srg)
InProgressi  zIndicates the request is currently being processed. If the status operation called
with the `with_logs` parameter set to True, the logs field will be a list of
log objects.list[dict[str, Any]] | NonelogsrK   N)	rL   rM   rN   rO   rh   r
   r  rP   rQ   rK   rR   rS   r  r    s    
 ).D
%/rR   r  c                  v    \ rS rSr% Sr\" 5       rS\S'   \" 5       rS\S'   \" SS9r	S	\S
'   \" SS9r
S	\S'   Srg)	Completedi  a&  Indicates the request has been completed and the result can be gathered. The logs field will
contain the logs if the status operation was called with the `with_logs` parameter set to True. Metrics
might contain the inference time, and other internal metadata (number of tokens
processed, etc.).r  r  dict[str, Any]metricsN)rW   r4  errorrv  rK   )rL   rM   rN   rO   rh   r
   r  rP   r  r  rv  rQ   rK   rR   rS   r  r    s@    
 ).D
%/#gG^%d+E:+"40J
0rR   r  c                  l    \ rS rSr% S\S'   \" SS9rS\S'   \" SS9rS\S'   \" SS9rS\S'   SS	 jr	S
r
g)_BaseRequestHandlei  rG   r~  Freprresponse_url
status_url
cancel_urlc                   US   S:X  a  [        US   S9$ US   S:X  a  [        US   S9$ US   S:X  a?  UR                  S	0 5      n[        US   UUR                  S
5      UR                  S5      S9$ [	        SUS    35      e)NstatusIN_QUEUEqueue_position)r  IN_PROGRESSr  )r  	COMPLETEDr  r  rv  )r  r  r  rv  zUnknown status: )r  r  r  r  r   )rb   r   r  s      rS   _parse_status _BaseRequestHandle._parse_status  s    >Z'4(8#9::(^},4<00(^{*hhy"-G&\hhw'88L1	  /X/?@AArR   rK   N)r   AnyJSONrf   r  )rL   rM   rN   rO   rP   r
   r  r  r  r  rQ   rK   rR   rS   r  r    s:    O5)L#)'J''J'BrR   r  	workflowscomfyc                    SS K nU R                  S5      n[        U5      S:  a  U $ UR                  SU 5      nU(       a  UR	                  5       u  pEU SU 3$ [        SU  S35      e)Nr   r8   r>   z^([0-9]+)-([a-zA-Z0-9-]+)$zInvalid app id: z*. Must be in the format <appOwner>/<appId>)resplitr  matchgroupsr   )idr  r  r  	app_ownerapp_ids         rS   _ensure_app_id_formatr    sk    HHSME
5zA~	HH2B7E!LLN	AfX&&
't+UV
WWrR   c                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   \SS j5       rS	rg
)AppIdi  rG   owneraliasr}  r+  	namespacec           	        [        U5      nUR                  S5      nUS   [        ;   a-  U " US   US   SR                  USS  5      =(       d    S US   S9$ U " US   US   SR                  USS  5      =(       d    S S S9$ )Nr8   r   r>         )r  r  r+  r  )r  r  APP_NAMESPACESjoin)r  endpoint_idnormalized_idr  s       rS   from_endpoint_idAppId.from_endpoint_id  s    -k:##C(8~%AhAhXXeABi(0D(	  ((%)$,	
 	
rR   rK   N)r  rG   rf   r  )rL   rM   rN   rO   rP   r?  r  rQ   rK   rR   rS   r  r    s*    JJ

 
rR   r  r[   g     V@)r>   rA   c                    U R                   (       a  U R                    S3OSnU R                  (       a  SU R                   3OSnU U R                   SU R                   U 3$ )Nr8   r{   )r  r+  r  r  )r  prefixsuffixs      rS   _format_app_pathr    sX    '-'7'7  !#RF"(++q2FXfll^1V\\N6(;;rR   c                p    U c  g [         u  pXs=::  a  U::  d  O  [        SU SU S35      e[        U 5      $ )Nzmax_buffering must be between z and z (inclusive))REALTIME_MAX_BUFFERINGr   rG   )value	min_value	max_values      rS   _serialize_max_bufferingr  	  sH    }1I+)+,YKuYK|T
 	
 u:rR   r{   r+  max_bufferingc                  [         R                  U 5      n[        U5      n[         U 3nU(       a  USUR	                  S5      -   -  n0 nU(       a  XS'   [        U5      nUb  XS'   U(       a  U S[        U5       3$ U$ )Nr8   fal_jwt_tokenr  ?)r  r  r  REALTIME_URL_FORMATlstripr  r   )	applicationrl   r+  r  r  app_pathr   queryserialized_bufferings	            rS   _build_runner_ws_urlr    s     ##K0F'H !(
,CsT[[%%%E!&o3MB'!5oa	%()**JrR   realtimer+  c                   [        U UUUS9$ )Nr  )r  )r  rl   r  r+  s       rS   _build_realtime_urlr  ,  s      #	 rR   c                   [        U [        5      (       a  U $ [        U [        5      (       aR  [        U R                  S5      [        5      (       a  U S   $ [        U R                  S5      [        5      (       a  U S   $ [	        S5      e)Nrl   r  z)Unexpected realtime token response format)r  rG   r  r  RuntimeError)r   s    rS   _parse_token_responser  ;  sm    $$dhhw'--= dhhx(#..>!
B
CCrR   c                  B   ^  \ rS rSrSr  S     SU 4S jjjrSrU =r$ )RealtimeErroriF  z9Raised when the realtime endpoint sends an error payload.c                   > Xl         U=(       d    SU l        U=(       d    0 U l        U R                  (       d  UOU SU R                   3n[        TU ]  U5        g )Nr{   z: )r  reasonpayloadsuperr   )rb   r  r  r  rr  	__class__s        rS   r   RealtimeError.__init__I  sI     
l}"#{{%5'DKK=0I!rR   )r  r  r  )NN)r  rG   r  r4  r  zOptional[dict[str, Any]])rL   rM   rN   rO   rh   r   rQ   __classcell__)r  s   @rS   r  r  F  s4    C
 ",0	
"
" 
" *	
" 
"rR   r  c                *    SS K nUR                  U SS9$ )Nr   F)raw)msgpackunpackbrr  r  s     rS   msgpack_decode_messager  V  s    ??7?..rR   c                *    SS K nUR                  U SS9$ )Nr   T)use_bin_type)r  packbr  s     rS   msgpack_encode_messager  \  s    ==t=44rR   c                   [        U [        5      (       a  U R                  5       n [        U [        [        45      (       a  U=(       d    [
        nU" U 5      $ [        U [        5      (       ac   [        R                  " U 5      nUR                  S5      nUS:X  a,  [        UR                  SS5      UR                  S5      U5      eUS:X  a  g U$ S	U 0$ ! [        R                   a    SU S.s $ f = f)
Nr  )typer  r  zx-fal-errorr  UNKNOWN_ERRORr  zx-fal-messager  )r  
memoryviewtobytesr;  	bytearrayr  rG   r   loadsJSONDecodeErrorr  r  )rr  decode_messagedecoder  msg_types        rS   _decode_realtime_messager  b  s     ':&&//#'E9-..9#9g'3	8jj)G ;;v&}$G_5H% 
 &w ## 	8"w77	8s   .C C0/C0c                0    U=(       d    [         nU" U 5      $ r_   )r  )rr  encode_messageencodes      rS   _encode_realtime_messager    s     55F'?rR   c                  r    \ rS rSr% SrS\S'   SrS\S'   SrS\S	'   SS
 jrSS jr	SS jr
SS jrSS jrSrg)RealtimeConnectioni  z(Synchronous realtime connection wrapper.z'Connection'_wsNCallable[[Any], bytes] | None_encode_messageCallable[[bytes], Any] | None_decode_messagec                d    [        XR                  5      nU R                  R                  U5        g r_   r  r  r  sendrb   	argumentsr  s      rS   r  RealtimeConnection.send  s"    *96J6JKgrR   c                     U R                   R                  5       n[        XR                  5      nUc  M6  U$ ! [         aI  nSSKJnJn  [        X$5      (       a   S nAg [        X#5      (       a  [        S[        U5      5      Uee S nAff = fNr   )ConnectionClosedConnectionClosedOKCONNECTION_CLOSEDr  recv	Exceptionwebsockets.exceptionsr  r  r  r  rG   r  r	  rb   r   r  r  r  decodeds         rS   r  RealtimeConnection.recv  s    88==? /x9M9MNGN  

 c66c44'(;SXFCO
s   9 
BB 'BBc                b    [        U R                  SS 5      n[        U5      (       a  U" 5         g g Nclosegetattrr  callablerb   r  s     rS   r  RealtimeConnection.close  s'    '40E??G rR   c                    U $ r_   rK   ra   s    rS   	__enter__RealtimeConnection.__enter__  s    rR   c                $    U R                  5         g r_   r  rb   exc_typer  tbs       rS   __exit__RealtimeConnection.__exit__  s    

rR   rK   r  r  rf   rg   rf   dict[str, Any] | Nonere   )rf   r  )rL   rM   rN   rO   rh   rP   r  r	  r  r  r  r%  r,  rQ   rK   rR   rS   r  r    s:    2	59O2959O29(
rR   r  c                  r    \ rS rSr% SrS\S'   SrS\S'   SrS\S	'   SS
 jrSS jr	SS jr
SS jrSS jrSrg)AsyncRealtimeConnectioni  z)Asynchronous realtime connection wrapper.z'WebSocketClientProtocol'r  Nr  r  r  r	  c                   #    [        XR                  5      nU R                  R                  U5      I S h  vN   g  N7fr_   r  r  s      rS   r  AsyncRealtimeConnection.send  s+     *96J6JKhhmmG$$$s   4><>c                :  #      U R                   R                  5       I S h  vN n[        XR                  5      nUc  M>  U$  N ! [         aI  nSSKJnJn  [        X$5      (       a   S nAg [        X#5      (       a  [        S[        U5      5      Uee S nAff = f7fr  r  r  s         rS   r  AsyncRealtimeConnection.recv  s     !%0 /x9M9MNGN 1 

 c66c44'(;SXFCO
sC   BA AA BA 
BB'B,'BBBc                ~   #    [        U R                  SS 5      n[        U5      (       a  U" 5       I S h  vN   g g  N7fr  r  r"  s     rS   r  AsyncRealtimeConnection.close  s1     '40E??'MM s   2=;=c                   #    U $ 7fr_   rK   ra   s    rS   
__aenter__"AsyncRealtimeConnection.__aenter__  s
     s   c                @   #    U R                  5       I S h  vN   g  N7fr_   r(  r)  s       rS   	__aexit__!AsyncRealtimeConnection.__aexit__  s     jjls   rK   r.  r/  re   )rf   r2  )rL   rM   rN   rO   rh   rP   r  r	  r  r  r  r:  r=  rQ   rK   rR   rS   r2  r2    s:    3	""59O2959O29%(
rR   r2  c              #     #    SSK Jn  UR                  U U[        S S9 nUv   S S S 5        g ! , (       d  f       g = f7f)Nr   )r   additional_headersopen_timeoutmax_size)websockets.syncr   connectREALTIME_OPEN_TIMEOUT)r   r   r   wss       rS   _connect_sync_wsrH    s@      '	"*	 
 

 

 
 
s   >-	>
;>c                  #    SS K nUR                  U U[        S S9 IS h  vN nU7v   S S S 5      IS h  vN   g  N N! , IS h  vN  (       d  f       g = f7f)Nr   r@  )
websocketsrE  rF  )r   r   rJ  rG  s       rS   _connect_async_wsrK    sV      !!"*	 "  
 
     s>   A<AA A>AA AA	AAc                B    U R                   " X40 UD6n[        U5        U$ r_   requestr  r   methodr   kwargsr   s        rS   r   r     s$     ~~f4V4HhOrR   c                ^   #    U R                   " X40 UD6I S h  vN n[        U5        U$  N7fr_   rM  rO  s        rS   rP  rP    s/      ^^F:6::HhO ;s   -+-皙?   )i  rB  i  )i  i          ^@g      >@)rE  c                r    U R                   [        ;  a  gSU R                  ;   a  gSU R                  ;   a  gg)z-Tell apart ingress errors from client errors.Fzx-fal-request-idnginxT)rs  INGRESS_ERROR_CODESr   r  )r   s    rS   _is_ingress_errorrZ    s;     #66X--- (--rR   c                    U R                   S:X  a%  U R                  R                  [        5      (       a  g[	        U 5      (       a  gU R                   [
        ;   d  U R                   U;   a  gg)NrU  FT)rs  r   r  r&   rZ  RETRY_CODES)r   extra_retry_codess     rS   _should_retry_responser^  -  sb    
 s"x'7'7';';#( ( ""{*h.B.BFW.WrR   c                   [        U [        R                  5      (       aB   U R                  n[        U[        R                  5      (       a  [
        UR                  ;   a  gg[        U [        R                  5      (       a  g[        U [        R                  [        45      (       a  [        U R                  U5      $ g! [         a     gf = f)NFT)r  r   TimeoutExceptionrN  Requestr'   r   r  TransportErrorr  rq  r^  r   )r  r]  rN  s      rS   _should_retryrc  @  s    #u--..	kkG'5==11)W__<  #u++,,#--/ABCC%cll4EFF  		s   ?B> >
C
Cc                    US:X  a  [        USU S-
  -  -  U5      nO[        X5      nU(       a  U[        R                  " SS5      -  n[        XR5      $ )Nexponentialr  r>   g      ?g      ?)r   randomuniform)	num_retry
base_delay	max_delaybackoff_typejitterdelays         rS   _get_retry_delayrn  V  sS     }$J!	A"67CJ*S))u  rR   )r]  c                  [        S[        S-   5       H  n [        XU40 UD6s  $    [        S5      e! [        R                  [
        4 ay  n[        Xc5      (       ac  U[        :  aY  [        U[        [        SS5      n[        R                  SU SU S[        U-
   S35        [        R                  " U5         S nAM  e S nAff = f)	Nr>   re  TRetrying request to  due to  ( attempts left)Failed to perform request)r  MAX_ATTEMPTSr   r   	HTTPErrorrq  rc  rn  
BASE_DELAY	MAX_DELAYloggerdebugtimesleepr  r   rP  r   r]  rQ  attemptr  rm  s           rS   r   r   h  s     L1,-	FC:6:: . 2
33 !34 
	S44<9O(ZM4 *3%xuB|g?U>VVef 

5!
	s   4CA-CCCc                 #    [        S[        S-   5       H  n [        XU40 UD6I S h  vN s  $    [        S
5      e N! [        R                  [
        4 az  n[        Xc5      (       ad  U[        :  aZ  [        USSSS5      n[        R                  SU SU S[        U-
   S	35        [        R                  " U5      I S h  vN     S nAM  e S nAff = f7f)Nr>   rS  r   re  Trp  rq  rr  rs  rt  )r  ru  rP  r   rv  rq  rc  rn  ry  rz  r   r|  r  r}  s           rS   rL  rL    s      L1,-
	'FvFFF . 2
33 G!34 	S44<9O(#r=$O*3%xuB|g?U>VVef mmE***	sN   CA >A CA  CA(CCCCCCCc                t    U R                   R                  5       S:X  a  SU R                   3$ U R                  $ )NkeyzBearer )schemelowerrl   r   )r   s    rS   _cdn_auth_headerr    s4    {{e#%%rR   c                H    Ub  [         R                  " U5      nX S'   X S'   g g )NzX-Fal-Object-Lifecyclez!X-Fal-Object-Lifecycle-Preference)r   dumps)r   r   lifecycle_jsons      rS   r   r     s2     #.$?@ -;()7E34 /rR   c                    [        U [        5      (       a  [        S5      e[        U [        5      (       a  U S::  a  [        S5      eU $ U [        ;   a	  [        U    $ [        S5      e)Nz9Boolean values are not valid lifecycle expires_in values.r   zBInteger lifecycle expires_in value must be greater than 0 seconds.zwUnsupported lifecycle expires_in value. Use one of: never, immediate, 1h, 1d, 7d, 30d, 1y, or an integer seconds value.)r  ru   r   r)  rB   )r\   s    rS   r`   r`     sn    *d##TUU*c""?T  882:>>
	Z rR   c                   U c  g 0 nU R                   b  [        U R                   5      nUb  X!S'   U R                  b  0 nU R                  R                  b  U R                  R                  US'   U R                  R                  (       aA  U R                  R                   Vs/ s H  nUR
                  UR                  S.PM     snUS'   U(       a  X1S'   U=(       d    S $ s  snf )Nexpiration_duration_secondsrW   )rH   rJ   rX   r]   )r\   r`   r]   rW   rX   rH   rJ   )	lifecycle
normalizedr  acl_payloadrules        rS   _normalize_upload_lifecycler    s     -/J'&M  '
# '28S45(24  ((4%.%:%:%B%BK	"  && &1177$7D >7$K  (3}%$s   "#C!c                F    U[        U 5      S.nUb  X$S'   [        XC5        U$ )N)r   r   r   )r  r   )r   r   r   r   r   s        rS   _cdn_upload_headersr    s0      ,>Nt>TUG%.!"gCNrR   c                <    U R                   SSS.n[        X!5        U$ )Nr~   r   )r   r   )r   r   r   s      rS   _storage_upload_headersr    s)    
 **$*G
 gCNrR   c                    1 SknU c  [         n Uc  [        nO[        U[        5      (       d  U/nU /UQn/ nU H/  nXR;  a  [	        SU S35      eXT;  d  M  UR                  U5        M1     U$ )N>   r,   r-   r+   zUnsupported upload repository '')r;   r=   r  listr   r   )
repositoryfallback_repositoryallowedordereddedupedentrys         rS   _normalize_upload_repositoriesr    s     'G.
"@+T22230/0G(*G>ugQGHHNN5!	 
 NrR   c                    U =(       d    SUS.$ )N
upload.binr   r   rK   r  s     rS   _storage_upload_payloadr    s    .,$ rR   r  c          
         [        U S[         S3[        XC5      [        X5      S9nUR	                  5       nUS   nUS   n	[        U SUUSU0S S9  U	$ 	Nr   z)/storage/upload/initiate?storage_type=gcs)r   r   
upload_urlfile_urlr   r   )r   r   r   )r   r   r  r  r   
r   r   r   r   r   r   init_responseinit_resultr  r  s
             rS   _upload_via_storager    sy     )*=>$Y='JM  $$&K\*J:&H. OrR   c          
        #    [        U S[         S3[        XC5      [        X5      S9I S h  vN nUR	                  5       nUS   nUS   n	[        U SUUSU0S S9I S h  vN   U	$  N8 N7fr  )rL  r   r  r  r   r  s
             rS   _async_upload_via_storager  0  s      5*=>$Y='J M  $$&K\*J:&H
$.   O%s!   *A)A%1A)A'A)'A)c               P    [        U S[        S-   UUS9nUR                  5       S   $ Nr   z/files/upload)r   r   r   )r   CDN_URLr   r   r   r   r   s       rS   
_upload_v3r  N  s5     $/!H ==?<((rR   c               d    [        U S[        S-   U[        XXE5      S9nUR                  5       S   $ r  )r   FAL_CDN_FALLBACK_URLr  r   r   r   r   r   r   r   r   s          rS   _upload_cdnr  ^  s?     $.#	
H ==?<((rR   c               l   #    [        U S[        S-   UUS9I S h  vN nUR                  5       S   $  N7fr  )rL  r  r   r  s       rS   _async_upload_v3r  s  sB      0/! H ==?<((s   424c                  #    [        U S[        S-   U[        XXE5      S9I S h  vN nUR                  5       S   $  N7fr  )rL  r  r  r   r  s          rS   _async_upload_cdnr    sL      0.#	
 H ==?<((s   "><>c           	         [        U 5       H  u  nu  p# U" 5       s  $    [        S5      e! [         a>  nU[        U 5      S-
  :  a  e [        R	                  SUXS-      S   U5         S nAMb  S nAff = fNr>   z+Upload failed to %s, falling back to %s: %sr   zUpload attempts were exhausted)	enumerater  r  ry  warningr  )attemptsidxlabelr~  r  s        rS   _try_upload_with_fallbackr    s     "+8!4e
	9 "5 7
88  	c(ma''NN=q!!$	 	s   +
A33A..A3c           	     J  #    [        U 5       H9  u  nu  p# U" 5       n[        R                  " U5      (       a  UI S h  vN s  $ Us  $    [        S5      e N! [         a>  nU[	        U 5      S-
  :  a  e [
        R                  SUXS-      S   U5         S nAM  S nAff = f7fr  )r  r   iscoroutiner  r  ry  r  r  )r  r  r  r~  r   r  s         rS   _async_try_upload_with_fallbackr    s      "+8!4e	YF""6**#|#M "5 7
88 $ 	c(ma''NN=q!!$	 	sJ   B#'AAAB#AB#A
B "3BB#B  B#SyncRequestHandlec                F     U R                  5         g ! [         a     g f = fr_   cancelr  handles    rS   _maybe_cancel_requestr    s"     s    
  AsyncRequestHandlec                b   #     U R                  5       I S h  vN   g  N! [         a     g f = f7fr_   r  r  s    rS   _async_maybe_cancel_requestr    s*     mmo s(   /  / 
,/,/c                      \ rS rSr% \" SS9rS\S'   \        SS j5       rSS.SS jjr	SS	S
.     SS jjr
SS jrSS jrSrg)r  i  Fr  r2  r   c                    [         R                  U5      nUR                  (       a  UR                   S3OSn[         U UR                   SUR
                   SU 3nU " UUUS-   US-   US9$ Nr8   r{   z
/requests/z/statusz/cancelr~  r  r  r  r   r  r  r  QUEUE_URL_FORMATr  r  r  r   r  r~  r  r  r   s          rS   from_request_id!SyncRequestHandle.from_request_id       ''4+1+;+;F$$%Q'&'x~Qv||nJWaVbc!!)+)+
 	
rR   	with_logsc                   [        U R                  SU R                  SU0[        S9n[	        U5        U R                  UR                  5       5      $ )Returns the status of the request (which can be one of the following:
Queued, InProgress, Completed). If `with_logs` is True, logs will be included
for InProgress and Completed statuses.GETr  paramsr   )r   r   r  QUEUE_POLL_TIMEOUTr  r  r   rb   r  r   s      rS   r  SyncRequestHandle.status  sO    
 (KKOO	 '
 	(#!!(--/22rR   rS  r  intervalc             #     #     U R                  US9nUv   [        U[        5      (       a  g[        R                  " U5        MA  7fzContinuously poll for the status of the request and yield it at each interval till
the request is completed. If `with_logs` is True, logs will be included in the response.
r  N)r  r  r  r{  r|  rb   r  r  r  s       rS   iter_eventsSyncRequestHandle.iter_events  s@      [[9[5FL&),,JJx  s   AAc                    U R                  SS9 H  nM     [        U R                  SU R                  [        S9n[        U5        UR                  5       $ )zOWait till the request is completed and return the result of the inference call.Fr  r  r   )r  r   r   r  r  r  r   rb   _r   s      rS   r  SyncRequestHandle.get  sS    !!E!2A 3 (KK 1 1;M
 	(#}}rR   c                b    [        U R                  SU R                  [        S9n[	        U5        gzCancel the request.r   r  N)r   r   r  r  r  rb   r   s     rS   r  SyncRequestHandle.cancel  s*    'KKOO&	
 	(#rR   rK   N)r   r2  r  rG   r~  rG   rf   r  r  ru   rf   r  )r  ru   r  r|  rf   zIterator[Status]rf   r  re   rL   rM   rN   rO   r
   r   rP   r?  r  r  r  r  r  rQ   rK   rR   rS   r  r    s     e,FL,

 
 	

 

 
" +0 3& $)C! !49!	!	$rR   c                      \ rS rSr% \" SS9rS\S'   \        SS j5       rSS.SS jjr	SS	S
.     SS jjr
SS jrSS jrSrg)r  i  Fr  rl  r   c                    [         R                  U5      nUR                  (       a  UR                   S3OSn[         U UR                   SUR
                   SU 3nU " UUUS-   US-   US9$ r  r  r  s          rS   r  "AsyncRequestHandle.from_request_id  r  rR   r  c                  #    [        U R                  SU R                  SU0[        S9I Sh  vN n[	        U5        U R                  UR                  5       5      $  N.7f)r  r  r  r  N)rL  r   r  r  r  r  r   r  s      rS   r  AsyncRequestHandle.status0  s\     
 4KKOO	 '
 
 	(#!!(--/22
s   +AA/ArS  r  c                 #     U R                  US9I Sh  vN nU7v   [        U[        5      (       a  g[        R                  " U5      I Sh  vN   MR   N? N7fr  )r  r  r  r   r|  r  s       rS   r  AsyncRequestHandle.iter_eventsB  sQ      ;;;;;FL&),,--))) ;
 *s!   AA8AAAAc                   #    U R                  SS9  Sh  vN nM   N
 [        U R                  SU R                  [        S9I Sh  vN  n[        U5        UR                  5       $ 7f)z9Wait till the request is completed and return the result.Fr  Nr  r  )r  rL  r   r  r  r  r   r  s      rS   r  AsyncRequestHandle.getQ  sj     ''%'8 	!	8 4KK&	
 
 
 	(#}}s+   A(A((A(A
 A(c                ~   #    [        U R                  SU R                  [        S9I Sh  vN n[	        U5        g N7fr  )rL  r   r  r  r  r  s     rS   r  AsyncRequestHandle.cancel_  s7     3KKOO&	
 
 	(#
s   (=;=rK   N)r   rl  r  rG   r~  rG   rf   r  r  )r  ru   r  r|  rf   zAsyncIterator[Status]r  re   r  rK   rR   rS   r  r    s     %5 1F1
!
 
 	

 

 
" 16 3& $)C* *49*	*$rR   c            
         \ rS rSr% \" SSS9rS\S'   SrS\S	'   \S,S
 j5       r	S,S jr
S-S jr\S.S j5       r\S/S j5       rS/S jr\S.     S0S jjrSSSS0 S.               S1S jjrSSSS0 SS.                 S2S jjrSSSSSS0 SSS.	                       S3S jjrS4S jrSS.       S5S jjrS6S jrS7S jrSSS.         S8S  jjr S9SSSS!.             S:S" jjjrSSSS!.         S;S# jjr S<SSSS!.           S=S$ jjjr\S%S&S\SSS'.               S>S( jj5       r\S%SS\S).           S?S* jj5       rS+rg)@r   ij  NFrW   r  r4  r  rV  r|  default_timeoutc                \    U R                   c
  [        5       $ [        SU R                   5      $ NKeyr  r   r   ra   s    rS   r   AsyncClient._autho  &    88)++udhh//rR   c                    U R                   $ r_   r   ra   s    rS   	_get_authAsyncClient._get_authu      zzrR   c                    U R                  5       nUR                  R                  5       S:w  a  [        S5      eUR                  $ Nr  zZKey credentials are required for this operation. Set FAL_KEY or FAL_KEY_ID/FAL_KEY_SECRET.r  r  r  r   rl   r   s     rS   _get_keyAsyncClient._get_keyx  ?    ~~;;%')l  zzrR   c                4    [        U R                  5       5      $ r_   )r   r  ra   s    rS   r   AsyncClient._token_manager  s    #DNN$455rR   c                    U R                  5       n[        R                  " UR                  [        S.U R
                  S9$ )Nr   r   r   )r  r   r   r   r   r  r   s     rS   r   AsyncClient._client  s=    ~~  !%!2!2( ((
 	
rR   c                   #    U R                   R                  5       I S h  vN n[        R                  " UR                   SUR
                   3[        S.U R                  S9$  NC7fNr   r   r  )r   r   r   r   rm   rl   r   r  r   s     rS   _get_cdn_clientAsyncClient._get_cdn_client  s`     ))3355  $)$4$4#5Qu{{m!D( ((
 	
 6s   A&A$AA&token_expirationc                  #    [         R                  U5      R                  /US.n[        U R                  S[
         S3US9I S h  vN n[        UR                  5       5      $  N7fN)allowed_appsr  r   z/tokens/)r   )r  r  r  rL  r   r   r  r   rb   r  r  r  r   s        rS   _get_realtime_tokenAsyncClient._get_realtime_token  sh      #33K@FFG 0
 4LLj!	
 
 %X]]_55
s   AA&A$A&r{   r+  r   start_timeouthintr   c          	     R  #    [         U-   nU(       a  USUR                  S5      -   -  n0 UEn	Ub  [        Xi5        Ub  [        XY5        [	        U	5        [        U R                  SUUUU	S9I Sh  vN n
[        U
5        [        U
R                  5        U
R                  5       $  N47f)a,  Run an application with the given arguments (which will be JSON serialized). The path parameter can be used to
specify a subpath when applicable. This method will return the result of the inference call directly.

Args:
    timeout: Client-side HTTP timeout in seconds. Controls how long the HTTP
        client waits for a response. Defaults to the client's default_timeout.
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts. Does not apply once the application begins processing.
r8   Nr   r   r   r   )RUN_URL_FORMATr  r#   r"   r$   rL  r   r  r%   r   r   rb   r  r  r+  r   r&  r'  r   r   r   r   s              rS   runAsyncClient.run  s     * {*3S)))C#.g; D+$}7#H-3LL
 
 	(# 0 01}}
s   A.B'0B%15B'r+  r'  webhook_urlpriorityr   r&  c          	       #    [         U-   n	U(       a  U	SUR                  S5      -   -  n	Ub  U	S[        SU05      -   -  n	0 UEn
Ub  [        XJ5        Ub  [	        Xj5        Ub  [        X5        [        U
5        [        U R                  SU	UU R                  U
S9I Sh  vN n[        U5        [        UR                  5        UR                  5       n[        US   US   US	   US
   U R                  S9$  NW7f)a  Submit an application with the given arguments (which will be JSON serialized). The path parameter can be used to
specify a subpath when applicable. This method will return a handle to the request that can be used to check the status
and retrieve the result of the inference call when it is done.

Args:
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts (includes queue wait, retries, and
        routing). Does not apply once the application begins processing.
r8   Nr  fal_webhookr   r)  r~  r  r  r  r  )r  r  r   r#   r!   r"   r$   rL  r   r  r  r%   r   r   r  rb   r  r  r+  r'  r/  r0  r   r&  r   r   r   r   s                rS   r  AsyncClient.submit  s    , ,3S)))C"3M;#?@@@C#.g; D+3$}7#H-3LL((
 
 	(# 0 01}}!L)n-L)L)<<
 	

s   BC8C6AC8	r+  r'  r  
on_enqueueon_queue_updater0  r   r&  client_timeoutc       	          ^ ^^^^^^^^^	^
^#    Ub-  T
c  Um
O'T
U:  a!  [         R                  " ST
 SU S3[        SS9  S/mSUUUU	UUUUUU U
U4S jjnUc  U" 5       I Sh  vN $  [        R                  " U" 5       US9I Sh  vN $  N' N! [        R
                   a:  nSnTS	   nUb   UR                  n[        U5      I Sh  vN    [        UUS
9UeSnAff = f7f)  Subscribe to an application and wait for the result.

Args:
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts (includes queue wait, retries, and
        routing). Does not apply once the application begins processing.
    client_timeout: Client-side total timeout in seconds. Limits the total time
        spent waiting for the entire request to complete (including queue wait
        and processing). If not set, waits indefinitely.
Nstart_timeout ("s) is larger than client_timeout (Ts). The request may timeout on the client before the server-side timeout is reached.r  
stacklevelc            
       >#    TR                  TTT
TTTTS9I S h  vN n U TS'   Tb7  T" U R                  5      n[        R                  " U5      (       a
  UI S h  vN   T	bI  U R	                  TS9  S h  vN nT	" U5      n[        R                  " U5      (       d  M.  UI S h  vN   M:  U R                  5       I S h  vN $  N Nj NQ N$
 N" N7fN)r+  r'  r0  r   r&  r   r  )r  r~  inspectisawaitabler  r  )r  r   eventr  r  
handle_refr   r'  r6  r7  r+  r0  rb   r&  r  s      rS   _do_subscribe,AsyncClient.subscribe.<locals>._do_subscribeA  s     ;;!+ '  F #JqM%#F$5$56&&v.. LL*#)#5#5	#5#J %%,U3F**622$%%- !% % $K
 &so   CC>CCC2C6C7C:"C C%C
&C?C CCC
CCCr  r   r   r~  r  )	warningswarnUserWarningr   wait_forTimeoutErrorr~  r  r{  )rb   r  r  r+  r'  r  r6  r7  r0  r   r&  r8  rF  er~  r  rE  s   ```````````     @rS   	subscribeAsyncClient.subscribe  s     2 %$ ./%m_4VWeVf gg g 	 ;?
	& 	& 	&2 !&((	 ))-/>RRR ) S## 
	J]F!#..
1&999'&% 
	sT   AC"B
#C(B BB 	CB C"$CC	CCCc                B    [         R                  U R                  X5      $ r_   )r  r  r   rb   r  r~  s      rS   
get_handleAsyncClient.get_handlek  s    !11$,,XXrR   r  c               ^   #    U R                  X5      nUR                  US9I S h  vN $  N7fNr  rS  r  rb   r  r~  r  r  s        rS   r  AsyncClient.statusn  s,      9]]Y]7777s   $-+-c                `   #    U R                  X5      nUR                  5       I S h  vN $  N7fr_   rS  r  rb   r  r~  r  s       rS   r   AsyncClient.resultt  s%     9ZZ\!!!s   %.,.c                b   #    U R                  X5      nUR                  5       I S h  vN   g  N7fr_   rS  r  r\  s       rS   r  AsyncClient.cancelx  s"     9mmos   %/-//streamr+  r   c              V  #    [         U-   nU(       a  USUR                  S5      -   -  n[        U R                  SUUUS9 ISh  vN nUR	                  5         Sh  vN nUR                  5       7v   M   N2 N
 SSS5      ISh  vN    g! , ISh  vN  (       d  f       g= f7faY  Stream the output of an application with the given arguments (which will be JSON serialized). This is only supported
at a few select applications at the moment, so be sure to first consult with the documentation of individual applications
to see if this is supported.

The function will iterate over each event that is streamed from the server.
r8   r   )r   r   N)r*  r  r   r   	aiter_sser   rb   r  r  r+  r   r   eventsrD  s           rS   streamAsyncClient.stream|  s      {*3S)))CLL
 
 %//1 #ejjl"
#1
 
 
 
 
 
sl   AB)A8B)	BA<A:A<"B8B):A<<B=B)B	B)B&BB&"B)r  r  r  c               :  #    U R                  5       n[        U[        5      (       a  UR                  S5      n[	        U5      n[        XE5      n	[        U5      [        :  aP  U	S   S:X  aG  Uc  SnU R                  5       I Sh  vN n
[        R                  U
U R                  UUUUS9I Sh  vN $ SU0nUb  X;S'   [        X5        / nU	 H  nUS:X  a:  U R                  5       I Sh  vN n
UR                  S[        [        XUS	945        MC  US
:X  a0  UR                  S
[        [         U R"                  UUUUUS945        My  US:X  d  M  UR                  S[        [$        U R"                  UUUUUS945        M     ['        U5      I Sh  vN $  GN N N N7f)Upload the given data blob and return the access URL.

The content type should be specified as the second argument. Use
`upload_file()` or `upload_image()` for convenience. Pass `lifecycle` to
control uploaded object expiration and initial ACL settings.
utf-8r   r+   Nr  r   r   r   r   r   r   r   r   r   r   r,   r   r   r   r   r-   )r  r  rG   r  r  r  r  MULTIPART_THRESHOLDr  rA  r  r   r   r   r   r  r  r   r  r  rb   r   r   r   r  r  r  r   resolved_lifecyclerepository_chainr   r   r  repos                 rS   uploadAsyncClient.upload  s    & ~~dC  ;;w'D8C9
 t9**/?/Bh/N (	//11F-22"11#),> 3    "<0 )2%&!'>8:$Dx#3355  0&WU - LL !%)5&/8J 5 LL !%)5&/8J3 %P 5X>>>q 2" 6L ?sP   BFF)F-F.:F(F)A FA FFFFFFc          
     L  #    [         R                  " U5      u  pVUc  Sn[        X#5      n[        R                  R                  U5      [        :  a^  US   S:X  aU  [        U5      nU R                  5       I Sh  vN n	[        R                  [        U5      U	U R                  UUS9I Sh  vN $ [        US5       n
U R                  U
R                  5       U[        R                  R!                  U5      UUUS9I Sh  vN sSSS5        $  N Nc N! , (       d  f       g= f7fzUpload a local file and return the access URL.

Pass `lifecycle` to control uploaded object expiration and initial ACL
settings.
Nr   r   r+   )r&  r   r   r   r   r  )r   r  r  r  )	mimetypes
guess_typer  r*  r+  r-  rq  r  r  rA  r/  rG   r   r!  rv  r#  r,  rb   r+  r  r  r  	mime_typer  rt  rs  r   files              rS   upload_fileAsyncClient.upload_file  s      !++D1	2I9
 GGOOD!$77 #x/!<Y!G//11F-77d)"11&,> 8    $		''**40%$7# %    2 sO   A7D$9D:1D$+D,D$<AD?D DD$D$D
D!D$c          	        #    [         R                  " 5        nUR                  XbS9  U R                  UR	                  5       SU 3UUUS9I Sh  vN sSSS5        $  N! , (       d  f       g= f7fzUpload a Pillow image object and return the access URL.

Pass `lifecycle` to control uploaded object expiration and initial ACL
settings.
formatimage/rj  NioBytesIOr  rv  getvaluerb   imager  r  r  r  buffers          rS   upload_imageAsyncClient.upload_image"  sf     " ZZ\VJJvJ-!!%$7# %   \ \s.   A07AAA
A0A
A-)A0T	/realtimeuse_jwtr+  r  r  r   r  c              J  #    S nS n	U(       a  U R                  XS9I S h  vN n	O#U R                  5       n
U
R                  [        S.n[	        XXCS9n[        XS9 IS h  vN n[        XUS97v   S S S 5      IS h  vN   g  Nb N$ N	! , IS h  vN  (       d  f       g = f7fNr  r   r  r   )r  r	  )r#  r  r   r   r  rK  r2  rb   r  r  r+  r  r  r   r  r   rl   r   r   rG  s                rS   r  AsyncClient.realtime=  s      *. 22 3  E >>#D(,(9(9TG!+mO$S::b)N  ;:: ;:::sW   B#B?B# B!B#$B	2B#=B>B#B#B#	B BB B#r  r+  r  r  c              >  #    S nS nU(       a  U R                  XS9I S h  vN nO#U R                  5       nUR                  [        S.n[	        UUUUS9n	[        XS9 IS h  vN n
U
7v   S S S 5      IS h  vN   g  N\ N N	! , IS h  vN  (       d  f       g = f7fNr  r   r  r   )r#  r  r   r   r  rK  rb   r  r  r+  r  r  r   rl   r   r   rG  s              rS   
ws_connectAsyncClient.ws_connectY  s      *. 22 3  E >>#D(,(9(9TG"'	
 %S::bH ;:: ;:::sX   BA=AB"A?#B&B,B7B8B?BBB	B
BBrK   rf   r   r5  )rf   r   )rf   rl  r  rG   r  r)  rf   rG   r  rG   r  r  r+  rG   r   Optional[Union[int, float]]r&  r  r'  r4  r   r7  rf   r  )r  rG   r  r  r+  rG   r'  r4  r/  r4  r0  Optional[Priority]r   r7  r&  r  rf   r  )r  rG   r  r  r+  rG   r'  r4  r  ru   r6  z1Optional[Callable[[str], None | Awaitable[None]]]r7  z4Optional[Callable[[Status], None | Awaitable[None]]]r0  r  r   r7  r&  r  r8  r  rf   r  )r  rG   r~  rG   rf   r  r  rG   r~  rG   r  ru   rf   r  r  rG   r~  rG   rf   r  r  rG   r~  rG   rf   rg   )
r  rG   r  r  r+  rG   r   float | Nonerf   zAsyncIterator[dict[str, Any]]r_   r   str | bytesr   rG   r   r4  r  UploadRepositoryId | Noner  4UploadRepositoryId | list[UploadRepositoryId] | Noner  StorageSettings | Nonerf   rG   
r+  os.PathLiker  r  r  r  r  r  rf   rG   jpegr  Image.Imager  rG   r  r  r  r  r  r  rf   rG   )r  rG   r  ru   r+  rG   r  r3  r  r)  r   r  r  r  rf   z&AsyncIterator[AsyncRealtimeConnection])r  rG   r  ru   r+  rG   r  r3  r  r)  rf   (AsyncIterator['WebSocketClientProtocol']) rL   rM   rN   rO   r
   r  rP   r  r   r   r  r  r   r   r  !REALTIME_TOKEN_EXPIRATION_SECONDSr#  r,  r  rO  rS  r  r   r  rh  rv  r  r  r   r  r  rQ   rK   rR   rS   r   r   j  s[   Du5C5"OU"0 0
 6 6 
 

 !B	66 	6
 
6. /359"$// /
 / -/ 3/ /  / 
/l "&'+"$59=
=
 =

 =
 =
  =
 %=
  =
 3=
 
=
H HLPT'+"$596:NN N
 N N N FN NN %N  N 3N 4N 
N`Y GL88,/8?C8	8"  $## #
 # # 
'#B !%	X? 15 ,0X?X? X? 	X? .X?X? *X? 
X?| 15 ,0-- .	-
- *- 
-d 
 15 ,0 
 . * 
6 
 $( A8<8< 	
  "  6 6 
0 6 
 $( A 	
  "  
2 rR   r   c            
         \ rS rSr% \" SSS9rS\S'   SrS\S	'   \S-S
 j5       r	S-S jr
S.S jr\S/S j5       r\S0S j5       r\S1S j5       rS/S jr\S.     S2S jjrSSSS0 S.               S3S jjrSSSS0 SS.                 S4S jjrSSSSSS0 SSS.	                       S5S jjrS6S jrSS.       S7S jjrS8S jrS9S jrSSS .         S:S! jjr S;SSSS".             S<S# jjjrSSSS".         S=S$ jjr S>SSSS".           S?S% jjjr\S&S'S\SSS(.               S@S) jj5       r\S&SS\S*.           SAS+ jj5       r S,r!g)B
SyncClientiw  NFr  r4  r  rV  r|  r  c                \    U R                   c
  [        5       $ [        SU R                   5      $ r  r  ra   s    rS   r   SyncClient._auth|  r  rR   c                    U R                   $ r_   r
  ra   s    rS   r  SyncClient._get_auth  r  rR   c                    U R                  5       nUR                  R                  5       S:w  a  [        S5      eUR                  $ r  r  r   s     rS   r  SyncClient._get_key  r  rR   c                    U R                  5       n[        R                  " UR                  [        S.U R
                  SS9$ )Nr   T)r   r   follow_redirects)r  r   r   r   r   r  r   s     rS   r   SyncClient._client  s>    ~~||!%!2!2( ((!
 	
rR   c                4    [        U R                  5       5      $ r_   )rw   r  ra   s    rS   r   SyncClient._token_manager  s    t~~/00rR   c                    [         $ r_   )EXECUTORra   s    rS   	_executorSyncClient._executor  s    rR   c                    U R                   R                  5       n[        R                  " UR                   SUR
                   3[        S.U R                  S9$ r  )r   r   r   r   rm   rl   r   r  r   s     rS   r  SyncClient._get_cdn_client  sS    ##--/||$)$4$4#5Qu{{m!D( ((
 	
rR   r  c                   [         R                  U5      R                  /US.n[        U R                  S[
         S3US9n[        UR                  5       5      $ r   )r  r  r  r   r   r   r  r   r"  s        rS   r#  SyncClient._get_realtime_token  s[     #33K@FFG 0
 (LLj!	
 %X]]_55rR   r{   r%  c          	     6   [         U-   nU(       a  USUR                  S5      -   -  n0 UEn	Ub  [        Xi5        Ub  [        XY5        [	        U	5        [        U R                  SUUUU	S9n
[        U
5        [        U
R                  5        U
R                  5       $ )a  Run an application with the given arguments (which will be JSON serialized).

Args:
    timeout: Client-side HTTP timeout in seconds. Controls how long the HTTP
        client waits for a response. Defaults to the client's default_timeout.
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts. Does not apply once the application begins processing.
r8   r   r)  )r*  r  r#   r"   r$   r   r   r  r%   r   r   r+  s              rS   r,  SyncClient.run  s    ( {*3S)))C#.g;D+$}7#H-'LL
 	(# 0 01}}rR   r.  c          	        [         U-   n	U(       a  U	SUR                  S5      -   -  n	Ub  U	S[        SU05      -   -  n	0 UEn
Ub  [        XJ5        Ub  [	        Xj5        Ub  [        X5        [        U
5        [        U R                  SU	UU R                  U
S9n[        U5        [        UR                  5        UR                  5       n[        US   US   US   US	   U R                  S
9$ )a?  Submit an application with the given arguments (which will be JSON serialized).

Args:
    start_timeout: Server-side request timeout in seconds. Limits total time spent
        waiting before processing starts (includes queue wait, retries, and
        routing). Does not apply once the application begins processing.
r8   r  r2  r   r)  r~  r  r  r  r  )r  r  r   r#   r!   r"   r$   r   r   r  r  r%   r   r   r  r3  s                rS   r  SyncClient.submit  s    ( ,3S)))C"3M;#?@@@C#.g;D+3$}7#H-'LL((
 	(# 0 01}} L)n-L)L)<<
 	
rR   r5  c       	          ^ ^^^^^^^^^	^
^ Ub-  T
c  Um
O'T
U:  a!  [         R                  " ST
 SU S3[        SS9  S/mSUUUU	UUUUUU U
U4S jjnUc  U" 5       $ T R                  R	                  U5      n UR                  US9$ ! [        R                  R                   a1  nSnTS	   nUb  UR                  n[        U5        [        UUS
9UeSnAff = f)r:  Nr;  r<  r=  r  r>  c            
        > TR                  TTT	TT
TTS9n U TS'   Tb  T" U R                  5        Tb  U R                  TS9 H  nT" U5        M     U R                  5       $ rA  )r  r~  r  r  )r  rD  r  r  rE  r   r'  r6  r7  r+  r0  rb   r&  r  s     rS   rF  +SyncClient.subscribe.<locals>._do_subscribeM	  s    [[!+ ! F #JqM%6,,-*#//)/DE#E* E ::<rR   r  r   rH  r  )rI  rJ  rK  r  r  r   r  r  rM  r~  r  r{  )rb   r  r  r+  r'  r  r6  r7  r0  r   r&  r8  rF  r  rN  r~  r  rE  s   ```````````      @rS   rO  SyncClient.subscribe'	  s    2 %$ ./%m_4VWeVf gg g 	 :>
	  	  	 * ! ?"&&}5	===88!!.. 
	J]F!#..
%f-'&% 
	s   9B C&,CCc                B    [         R                  U R                  X5      $ r_   )r  r  r   rR  s      rS   rS  SyncClient.get_handlet	  s     00{WWrR   r  c               B    U R                  X5      nUR                  US9$ rV  rW  rX  s        rS   r  SyncClient.statusw	  s#     9}}y}11rR   c                D    U R                  X5      nUR                  5       $ r_   r[  r\  s       rS   r   SyncClient.result}	  s    9zz|rR   c                F    U R                  X5      nUR                  5         g r_   r_  r\  s       rS   r  SyncClient.cancel	  s    9rR   ra  rb  c             #    #    [         U-   nU(       a  USUR                  S5      -   -  n[        U R                  SXRUS9 nUR	                  5        H  nUR                  5       v   M     SSS5        g! , (       d  f       g= f7frd  )r*  r  r   r   iter_sser   rf  s           rS   rh  SyncClient.stream	  sp      {*3S)))CLL&#w
*jjl" +
 
 
s   >B *A3*	B3
B=Brj  c                  U R                  5       n[        U[        5      (       a  UR                  S5      n[	        U5      n[        XE5      n	[        U5      [        :  a@  U	S   S:X  a7  Uc  SnU R                  5       n
[        R                  U
U R                  UUUUS9$ SU0nUb  X;S'   [        X5        / nU	 H  nUS:X  a2  U R                  5       n
UR                  S[        [        XUS945        M;  US	:X  a0  UR                  S	[        [         U R"                  UUUUUS
945        Mq  US:X  d  My  UR                  S[        [$        U R"                  UUUUUS
945        M     ['        U5      $ )rl  rm  r   r+   r  rn  r   r   ro  r,   rp  r-   )r  r  rG   r  r  r  r  rq  r  r   r  r   r   r   r   r  r  r   r  r  rr  s                 rS   rv  SyncClient.upload	  s   & ~~dC  ;;w'D8C9
 t9**/?/Bh/N (	))+F"''"11#),> (   "<0 )2%&!'>8:$Dx--/ 
FwO ' LL !%)5&/8J / LL !%)5&/8J3 %P )22rR   c          
        [         R                  " U5      u  pVUc  Sn[        X#5      n[        R                  R                  U5      [        :  aN  US   S:X  aE  [        U5      nU R                  5       n	[        R                  [        U5      U	U R                  UUS9$ [        US5       n
U R                  U
R                  5       U[        R                  R!                  U5      UUUS9sSSS5        $ ! , (       d  f       g= fry  )rz  r{  r  r*  r+  r-  rq  r  r  r   r/  rG   r   r!  rv  r#  r,  r|  s              rS   r  SyncClient.upload_file	  s      !++D1	2I9
 GGOOD!$77 #x/!<Y!G))+F",,d)"11&,> -   $;;		''**40%$7#   s   *?C33
Dc          	         [         R                  " 5        nUR                  XbS9  U R                  UR	                  5       SU 3UUUS9sSSS5        $ ! , (       d  f       g= fr  r  r  s          rS   r  SyncClient.upload_image'
  sU    " ZZ\VJJvJ-;;!!%$7#   \\s   3A
A!Tr  r  c             #     #    S nS n	U(       a  U R                  XS9n	O#U R                  5       n
U
R                  [        S.n[	        XXCS9n[        XS9 n[        XUS9v   S S S 5        g ! , (       d  f       g = f7fr  )r#  r  r   r   r  rH  r  r  s                rS   r  SyncClient.realtimeB
  s}      *. ,, - E >>#D(,(9(9TG!+mOc3r$N  433s   AA;A*!	A;*
A84A;r  c             #     #    S nS nU(       a  U R                  XS9nO#U R                  5       nUR                  [        S.n[	        UUUUS9n	[        XS9 n
U
v   S S S 5        g ! , (       d  f       g = f7fr  )r#  r  r   r   r  rH  r  s              rS   r  SyncClient.ws_connect^
  s|      *. ,, - E >>#D(,(9(9TG"'	
 c3rH 433s   AA5A$	A5$
A2.A5rK   r  r5  )rf   r2  )rf   rw   )rf   z%concurrent.futures.ThreadPoolExecutorr  r  )r  rG   r  r  r+  rG   r'  r4  r/  r4  r0  r  r   r7  r&  r  rf   r  )r  rG   r  r  r+  rG   r'  r4  r  ru   r6  zOptional[Callable[[str], None]]r7  z"Optional[Callable[[Status], None]]r0  r  r   r7  r&  r  r8  r  rf   r  )r  rG   r~  rG   rf   r  r  r  r  )
r  rG   r  r  r+  rG   r   r  rf   zIterator[dict[str, Any]]r_   r  r  r  r  )r  rG   r  ru   r+  rG   r  r3  r  r)  r   r  r  r  rf   zIterator[RealtimeConnection])r  rG   r  ru   r+  rG   r  r3  r  r)  rf   Iterator['Connection'])"rL   rM   rN   rO   r
   r  rP   r  r   r   r  r  r   r   r>  r  r  r  r#  r,  r  rO  rS  r  r   r  rh  rv  r  r  r   r  r  rQ   rK   rR   rS   r  r  w  sl   Du5C5"OU"0 0
 	
 	
 1 1  
 !B	66 	6
 
6. /359"$,, ,
 , -, 3, ,  , 
,f "&'+"$59:
:
 :

 :
 :
  :
 %:
  :
 3:
 
:
B 6:>B'+"$596:KK K
 K K K 4K <K %K  K 3K 4K 
KZX GL22,/2?C2	2  $## #
 # # 
"#: !%	X3 15 ,0X3X3 X3 	X3 .X3X3 *X3 
X3| 15 ,0-- .	-
- *- 
-d 
 15 ,0 
 . * 
6 
 $( A8<8< 	
  "  6 6 
& 6 
 $( A 	
  "  
  rR   r  c                    [        U [        5      (       a  U R                  S5      n SU S[        R                  " U 5      R                  5        3$ )zIEncode the given data blob to a data URL with the specified content type.rm  zdata:z;base64,)r  rG   r  base64	b64encoder  )r   r   s     rS   r  r  |
  sE    ${{7#<.)9)9$)?)F)F)H(IJJrR   c                    [         R                  " U 5      u  pUc  Sn[        U S5       n[        UR	                  5       U5      sSSS5        $ ! , (       d  f       g= f)zUEncode a file from the local filesystem to a data URL with the inferred content type.Nr   r  )rz  r{  r!  r  r#  )r+  r}  r  r~  s       rS   encode_filer  
  sG    ''-LI.		dD	Tdiik9- 
		s   A
Ac                    [         R                  " 5        nU R                  X!S9  [        UR	                  5       SU 35      sSSS5        $ ! , (       d  f       g= f)zEEncode a pillow image object to a data URL with the specified format.r  r  N)r  r  r  r  r  )r  r  r  s      rS   encode_imager  
  s=    	

6
)foo'6&):; 
s   ,A
A)r   ru  rf   rg   )r  rG   rf   rG   )r  r  rf   rG   )r  r3  rf   r4  )
r  rG   rl   r4  r+  rG   r  r3  rf   rG   )
r  rG   rl   r4  r  r3  r+  rG   rf   rG   )r   r   rf   rG   )rr  r;  rf   r   )rr  r   rf   r;  )rr  r   r  r  rf   r0  )rr  r  r   r  rf   r;  r_   )r   rG   r   dict[str, str] | Nonerf   r  )r   rG   r   r  rf   r  )
r   r2  rP  rG   r   rG   rQ  r   rf   ru  )
r   rl  rP  rG   r   rG   rQ  r   rf   ru  )r   ru  rf   ru   )r   ru  r]  	list[int]rf   ru   )r  r  r]  r  rf   ru   )re  F)rh  r)  ri  r|  rj  r|  rk  zLiteral['exponential', 'fixed']rl  ru   rf   r|  )r   r2  rP  rG   r   rG   r]  r  rQ  r   rf   ru  )r   rl  rP  rG   r   rG   r]  r  rQ  r   rf   ru  )r   r   rf   rG   )r   r7  r   r9  rf   rg   )r\   ObjectExpirationrf   r3  )r  r  rf   r9  )
r   r   r   rG   r   r4  r   r9  rf   r7  )r   r   r   r9  rf   r7  )r  r  r  r  rf   r<   )r   r4  r   rG   rf   r7  )r   r2  r   r   r   r;  r   rG   r   r4  r   r9  rf   rG   )r   rl  r   r   r   r;  r   rG   r   r4  r   r9  rf   rG   )r   r2  r   r;  r   r7  rf   rG   )r   rl  r   r;  r   r7  rf   rG   )r  z#list[tuple[str, Callable[[], str]]]rf   rG   )r  z#list[tuple[str, Callable[[], Any]]]rf   rG   )r  r  rf   rg   )r  r  rf   rg   )r   r  r   rG   rf   rG   )r+  r  rf   rG   r  )r  r  r  rG   rf   rG   )
__future__r   rB  r  r   r  r*  rz  r   pathlibr   rf  r{  r  r   loggingr
  r  
contextlibr   r   r   r   dataclassesr	   r
   	functoolsr   r   typingr   r   r   r   r   r   r   r   r   r   urllib.parser   rI  r   	httpx_sser   r   fal_client.authr   r   r   r   r   fal_client._versionr   fal_client._headersr    r!   r"   r#   r$   r%   r&   r'   websockets.clientr(   websockets.sync.connectionr)   	getLoggerrL   ry  PILr*   rG   r  r:   LifecyclePreferencePayloadr)  r  rI   r*  r  r  r   r  environr  r  r;   rP   r=   r   MIN_REQUEST_TIMEOUT_SECONDSr  r  r  _IMMEDIATE_EXPIRATION_SECONDSrB   rE   rU   rZ   rj   rw   r   rq  r   r   r   rA  r  rn  rq  rM  r{  r  r  r  r  r  r  r  r  r  r  rF  r  r  r  r  r  r  r  r  r  r  r  r  r  r2  rH  rK  r   rP  ru  rw  rx  r\  rY  Timeoutr  rZ  r^  rc  rn  r   rL  r  r   r`   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  rK   rR   rS   <module>r     s	   "  	   	          : ' ( .   #   /  ,	 	 	 95			8	$
sCx.34 !#s(^ ?@	  67 L>+013 |nA.  
 zz~~n6IJ 08 - 8@Eu~ "$< M;-y1
  00, 1  !#   /




> #%: 
 $! ! !
 $. . .
 $E E E  = = =" "J" "J ( '  s$ s$l~* ~*B	Y 	 ! ! ! WNL W W<      V   0 0 0 	1 	1 	1 $B B B0 w'X $
 
 
6 %( !   <	   $ 	
  	8  
  	D"L " /5  "?  >1  ( ( (V ( ( (V /3	,  /3	,- "%,/;>'*14@C 
	%  ]]5$7 & $&  
& BD 4 5B!!! ! 2	!
 ! !. $&444 
4
 !4 4 4> $&444 
4
 !4 4 40	F	F!B	F 
	F"%&:



 
 "C	

 



!B
 
)M . FJ
 	
   "C 	J FJ
 	
   "C 	<)) ) 	)
 	). FJ))
) 	)
 ) ) "C) 	)*)) ) 	)
 	). FJ))
) 	)
 ) ) "C) 	)*9199$9199* $I$* I$ I$X $L$+ L$ L$^ $I I IX $A A AHK.<rR   