
    iq5                   ,   U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZ d dlmZmZ d dlmZmZ d dlmZmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d d	l(m)Z) d dl*Z*d dl+Z+d d
l,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= e#rd dl>m?Z? d dl@mAZA  ejB        eC          ZDe#rd dlEmFZF e!eGef         ZHe%d         ZIde2 dZJde1 dZKde2 dZLdZMdZNejO        P                    dd          ZQdZRdeSd<   ddgZTdeSd<   d e6 d!ZUd"ZVejW        X                    d#$          ZYe G d% d&                      ZZ G d' d(          Z[ G d) d*          Z\d+Z]d,Z^d-Z_ G d. d/          Z` G d0 d1          Za G d2 d3eb          Zce G d4 d5ec                      Zde G d6 d7ecee                      Zfdd<Zge G d= d>                      Zhe G d? d@eh                      Zie G dA dBeh                      Zje G dC dDeh                      Zk edEF           G dG dH                      ZldIdJgZmddMZn edEF           G dN dO                      ZodPZpdQZqdRZrddTZsddXZtdYddZdd_Zud`daddbZvddeZw G df dgex          ZyddjZzddkZ{ddoZ|ddsZ}e G dt du                      Z~e G dv dw                      Ze	 ddd|            Ze	 ddd~            ZddZddZd-ZdZdZg dZg dZ e+j        dd          ZddZg fddZg fddZ	 	 dddZg dddZg dddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZ edEF           G d del                      Z edEF           G d del                      Z edEF           G dÄ dĦ                      Z edEF           G dń dƦ                      ZddȄZddʄZdddτZdS )    )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REQUEST_TIMEOUT_TYPE_HEADERREQUEST_TIMEOUT_HEADER)WebSocketClientProtocol)
Connection)Image)fal_v3cdnfalz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_prefixc                  @    e Zd ZU ded<   ded<   ded<   ded<   dd	Zd
S )CDNTokenstrtoken
token_typebase_upload_urlr   
expires_atreturnboolc                P    t          j        t          j                  | j        k    S N)r   nowr   utcr;   selfs    [/home/agentuser/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fal_client/client.py
is_expiredzCDNToken.is_expired]   s    |HL))T_<<    N)r<   r=   )__name__
__module____qualname____annotations__rE    rF   rD   r6   r6   V   sT         JJJOOO= = = = = =rF   r6   c                  &    e Zd Zd
dZddZddZd	S )CDNTokenManagerauthr   r<   Nonec                   || _         t          dddt          j                            t
          j                            | _        t          j	                    | _
        t           d| _        | j         j        ddd| _        d S N )tzinfor8   r9   r:   r;   z+/storage/auth/token?storage_type=fal-cdn-v3application/jsonAuthorizationAcceptContent-Type)_authr6   r   minreplacer   rA   _token	threadingLock_lockREST_URL_urlheader_value_headersrC   rN   s     rD   __init__zCDNTokenManager.__init__b   s    
 (|++8<+@@	!
 !
 !
 &/^%5%5
LLL	!Z4(.
 
rF   r6   c           	     f   t          j                    5 }|                    | j        | j        i           }|                                 |                                }d d d            n# 1 swxY w Y   t          |d         |d         |d         t          j	        |d                             S Nheadersjsonr8   r9   base_urlr;   rT   )
httpxClientpostrb   rd   raise_for_statusrk   r6   r   fromisoformatrC   clientresponsedatas       rD   _refresh_tokenzCDNTokenManager._refresh_tokenr   s    \^^ 	#v{{49dm"{MMH%%'''==??D	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#
 w-L) ,-d<.@AA	
 
 
 	
s   AA++A/2A/c                    | j         5  | j                                        r|                                 | _        | j        cd d d            S # 1 swxY w Y   d S r?   r`   r]   rE   rv   rB   s    rD   	get_tokenzCDNTokenManager.get_token   s    Z 	 	{%%'' 4"1133;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   9AAANrN   r   r<   rO   r<   r6   rG   rH   rI   rf   rv   ry   rK   rF   rD   rM   rM   a   P        
 
 
 
 
 
 
 
     rF   rM   c                  &    e Zd Zd
dZddZddZd	S )AsyncCDNTokenManagerrN   r   r<   rO   c                   || _         t          dddt          j                            t
          j                            | _        t          j	                    | _
        t           d| _        | j         j        ddd| _        d S rQ   )rZ   r6   r   r[   r\   r   rA   r]   asyncior_   r`   ra   rb   rc   rd   re   s     rD   rf   zAsyncCDNTokenManager.__init__   s    
 (|++8<+@@	!
 !
 !
 $+<>>
LLL	!Z4(.
 
rF   r6   c           	       K   t          j                    4 d {V }|                    | j        | j        i            d {V }|                                 |                                }d d d           d {V  n# 1 d {V swxY w Y   t          |d         |d         |d         t          j	        |d                             S rh   )
rm   AsyncClientro   rb   rd   rp   rk   r6   r   rq   rr   s       rD   rv   z#AsyncCDNTokenManager._refresh_token   sQ     $&& 	# 	# 	# 	# 	# 	# 	#&#[[DMPR[SSSSSSSSH%%'''==??D	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#
 w-L) ,-d<.@AA	
 
 
 	
s   AA??
B	B	c                   K   | j         4 d {V  | j                                        r|                                  d {V | _        | j        cd d d           d {V  S # 1 d {V swxY w Y   d S r?   rx   rB   s    rD   ry   zAsyncCDNTokenManager.get_token   s     : 	 	 	 	 	 	 	 	{%%'' :$($7$7$9$9999999;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ?A""
A,/A,Nrz   r{   r|   rK   rF   rD   r   r      r}   rF   r   i  @i   
   c                      e Zd Zddddd!dZed"d            Zed"d            Zed#d            Zd Zd$dZ	d"dZ
eddddd%d            Zeddddd&d             ZdS )'MultipartUploadN
chunk_sizecontent_typemax_concurrency	file_namer7   rs   httpx.Clienttoken_managerrM   r   
int | Noner   
str | Noner   r<   rO   c                   || _         || _        || _        |pt          | _        |pd| _        |pt          | _        d | _        d | _	        g | _
        d S Napplication/octet-streamr   _client_token_managerMULTIPART_CHUNK_SIZEr   r   MULTIPART_MAX_CONCURRENCYr   _access_url
_upload_id_partsrC   r   rs   r   r   r   r   s          rD   rf   zMultipartUpload.__init__   ]     #+$<(<(F,F.K2K'+&*"$rF   c                <    | j         st          d          | j         S NzUpload not initiatedr   
ValueErrorrB   s    rD   
access_urlzMultipartUpload.access_url   %     	53444rF   c                <    | j         st          d          | j         S r   r   r   rB   s    rD   	upload_idzMultipartUpload.upload_id   #     	53444rF   dict[str, str]c                \    | j                                         }|j         d|j         ddS N z	fal/0.1.0rW   z
User-Agentr   ry   r9   r8   rC   r8   s     rD   auth_headerszMultipartUpload.auth_headers   s>    #--// % 0@@5;@@%
 
 	
rF   c           
        | j                                         }|j         d}t          | j        d|i | j        d| j        | j        d          }|                                }|d         | _	        |d         | _
        d S Nz/files/upload/multipartPOSTrU   )rX   rY   X-Fal-File-Namerj   r   uploadId)r   ry   r:   _maybe_retry_requestr   r   r   r   rk   r   r   )rC   r8   urlrt   results        rD   createzMultipartUpload.create   s    #--//&???'L#, $ 1#'>	  	

 

 

 !,/ ,rF   part_numberintru   bytesc           	         | j          d| j         d| }t          | j        d|i | j        | j        dd|d           }|j        d         }| j                            ||d           d S 	N/multipart/r,   PUTidentity)rY   zAccept-Encoding)rj   contenttimeoutetag)
partNumberr   )	r   r   _requestr   r   r   rj   r   append)rC   r   ru   r   rt   r   s         rD   upload_partzMultipartUpload.upload_part   s    KKT^KKkKKL# $ 1#-  
 
 
 
 ') 	
 	
 	
 	
 	
rF   c                ~    | j          d| j         d}t          | j        d|| j        d| j        i           | j         S Nr   z	/completer   partsri   )r   r   r   r   r   r   )rC   r   s     rD   completezMultipartUpload.complete  sX    FFT^FFFL%4;'	
 	
 	
 	
 rF   r   r   r   c          	     n   dd l } | ||||||          }	|	                                 t          j        t	          |          |	j        z            }
|j                            |	j                  5 }g }t          d|
dz             D ]P}|dz
  |	j        z  }||||	j        z            }|
                    |                    |	j        ||                     Q|j                            |          D ]}|                                 	 d d d            n# 1 swxY w Y   |	                                S )Nr   r   rs   r   r   r   r   max_workersr2   )concurrent.futuresr   mathceillenr   futuresThreadPoolExecutorr   ranger   submitr   as_completedr   r   )clsrs   r   r   ru   r   r   r   
concurrent	multipartr   executorr   r   startfutures                   rD   savezMultipartUpload.save  s    	"!!!C'!%+
 
 
	 		#d))i&::;;22!1 3 
 
 	 G$Q	22  $qI,@@EEI,@$@@AOOI$9;MM    %,99'BB     	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  !!###s   3BDDD	file_path
str | Pathc                  dd l }t          j                                      }t          j                                      }	 | ||||||                                           t          j        |	j        z            }
|j	        
                    j                  5 }g }t          d|
dz             D ]2}d
fd	}|                    |                    ||                     3|j	                            |          D ]}|                                 	 d d d            n# 1 swxY w Y                                   S )Nr   r   r   r2   pnr   r<   rO   c                    t          d          5 }| dz
  j        z  }|                    |           |                    j                  }                    | |           d d d            d S # 1 swxY w Y   d S Nrbr2   openr   seekreadr   )r   fr   ru   r   r   s       rD   _upload_partz/MultipartUpload.save_file.<locals>._upload_partS  s    i.. 8!!#a9+? ?u vvi&:;;!--b$777	8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   AA22A69A6)r   r   r<   rO   )r   ospathbasenamegetsizer   r   r   r   r   r   r   r   r   r   r   r   r   )r   rs   r   r   r   r   r   r   r   sizer   r   r   r   r   r   r   s      `            @rD   	save_filezMultipartUpload.save_file4  s    	"!!!G$$Y//	wy))C'!%+
 
 
	 		$!556622!1 3 
 
 	 G$Q	22 	K 	K8 8 8 8 8 8 8 x|[IIJJJJ$,99'BB     	  	  	  	  	  	  	  	  	  	  	  	  	  	  	   !!###s   &A:D--D14D1)r   r7   rs   r   r   rM   r   r   r   r   r   r   r<   rO   r<   r7   r<   r   r   r   ru   r   r<   rO   )rs   r   r   rM   r   r7   ru   r   r   r   r   r   r   r   )rs   r   r   rM   r   r   r   r   r   r   r   r   r<   r7   rG   rH   rI   rf   propertyr   r   r   r   r   r   classmethodr   r   rK   rF   rD   r   r      s?        "&#'&*% % % % % %(       X 
    X
 
 
 
 X
- - -$
 
 
 
0	 	 	 	  $(!%&*#$ #$ #$ #$ #$ [#$J  "&#'&*($ ($ ($ ($ ($ [($ ($ ($rF   r   c                      e Zd Zddddd!dZed"d            Zed"d            Zed#d            Zd Zd$dZ	d"dZ
eddddd%d            Zeddddd&d             ZdS )'AsyncMultipartUploadNr   r   r7   rs   httpx.AsyncClientr   r   r   r   r   r   r   r<   rO   c                   || _         || _        || _        |pt          | _        |pd| _        |pt          | _        d | _        d | _	        g | _
        d S r   r   r   s          rD   rf   zAsyncMultipartUpload.__init__a  r   rF   c                <    | j         st          d          | j         S r   r   rB   s    rD   r   zAsyncMultipartUpload.access_urlu  r   rF   c                <    | j         st          d          | j         S r   r   rB   s    rD   r   zAsyncMultipartUpload.upload_id{  r   rF   r   c                l   K   | j                                          d {V }|j         d|j         ddS r   r   r   s     rD   r   z!AsyncMultipartUpload.auth_headers  sT      )3355555555 % 0@@5;@@%
 
 	
rF   c           
     2  K   | j                                          d {V }|j         d}| j         d {V }t	          | j        d|i |d| j        | j        d           d {V }|                                }|d         | _	        |d         | _
        d S r   )r   ry   r:   r   _async_maybe_retry_requestr   r   r   rk   r   r   )rC   r8   r   rj   rt   r   s         rD   r   zAsyncMultipartUpload.create  s      )3355555555&???)))))))3L, $ 1#'>	  	

 

 

 

 

 

 

 

 

 !,/ ,rF   r   r   ru   r   c           	        K   | j          d| j         d| }| j         d {V }t          | j        d|i || j        dd|d            d {V }|j        d         }| j                            ||d           d S r   )	r   r   r   _async_requestr   r   rj   r   r   )rC   r   ru   r   rj   rt   r   s          rD   r   z AsyncMultipartUpload.upload_part  s      KKT^KKkKK)))))))'L $ 1#-  
 
 
 
 
 
 
 
 
 
 ') 	
 	
 	
 	
 	
rF   c                   K   | j          d| j         d}| j         d {V }t          | j        d||d| j        i           d {V  | j         S r   )r   r   r   r  r   r   )rC   r   rj   s      rD   r   zAsyncMultipartUpload.complete  s      FFT^FFF)))))))(L4;'
 
 
 	
 	
 	
 	
 	
 	
 	
 rF   r   c                 
K    | ||||||                                            d {V  t          j        t                    j        z            }dfdfdt          d|dz             D             }	t          j        j                  fd	
t          j	        
fd
|	D               d {V  
                                 d {V S )Nr   r   r   r<   rO   c                   K   | dz
  j         z  }||j         z            }                    | |           d {V  d S )Nr2   )r   r   )r   r   chunkru   r   s      rD   r   z.AsyncMultipartUpload.save.<locals>.upload_part  s]       1_	(<<E)=!==>E''U;;;;;;;;;;;rF   c                J    g | ]}t          j         |                     S rK   r   create_task.0r   r   s     rD   
<listcomp>z-AsyncMultipartUpload.save.<locals>.<listcomp>  >     
 
 
 K 8 899
 
 
rF   r2   c                v   K   4 d {V  |  d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S r?   rK   tasksems    rD   bounded_uploadz1AsyncMultipartUpload.save.<locals>.bounded_upload                






                                	(
22c                &    g | ]} |          S rK   rK   r  r  r  s     rD   r  z-AsyncMultipartUpload.save.<locals>.<listcomp>  #    FFF~~d33FFFrF   r   r   r<   rO   )r   r   r   r   r   r   r   	Semaphorer   gatherr   )r   rs   r   r   ru   r   r   r   r   tasksr  r   r  r   s       `     @@@@rD   r   zAsyncMultipartUpload.save  sY      C'!%+
 
 
	          	#d))i&::;;	< 	< 	< 	< 	< 	< 	<

 
 
 
$Q	22
 
 
 	 9::	 	 	 	 	 nFFFFFFFGGGGGGGG'')))))))))rF   r   r   c                 K   t           j                                      }t           j                                      } | ||||||                                           d {V  t          j        |j        z            }	dfdfdt          d|	dz             D             }
t          j
        j                  fd	t          j        fd
|
D               d {V                                   d {V S )Nr   r   r   r<   rO   c                  K   t          d          5 }| dz
  j        z  }|                    |           |                    j                  }                    | |           d {V  d d d            d S # 1 swxY w Y   d S r   r   )r   r   r   ru   r   r   s       rD   r   z3AsyncMultipartUpload.save_file.<locals>.upload_part  s      i&& ?!$qI,@@uvvi233++K>>>>>>>>>	? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   AA::A>A>c                J    g | ]}t          j         |                     S rK   r  r  s     rD   r  z2AsyncMultipartUpload.save_file.<locals>.<listcomp>  r  rF   r2   c                v   K   4 d {V  |  d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S r?   rK   r  s    rD   r  z6AsyncMultipartUpload.save_file.<locals>.bounded_upload  r  r  c                &    g | ]} |          S rK   rK   r  s     rD   r  z2AsyncMultipartUpload.save_file.<locals>.<listcomp>  r  rF   r  )r   r   r   r   r   r   r   r   r   r   r  r   r  r   )r   rs   r   r   r   r   r   r   r   r   r  r  r   r  r   s      `       @@@@rD   r   zAsyncMultipartUpload.save_file  s{      G$$Y//	wy))C'!%+
 
 
	          	$!5566	? 	? 	? 	? 	? 	? 	?
 
 
 
$Q	22
 
 
 	 9::	 	 	 	 	 nFFFFFFFGGGGGGGG'')))))))))rF   )r   r7   rs   r   r   r   r   r   r   r   r   r   r<   rO   r   r   r   )rs   r   r   r   r   r7   ru   r   r   r   r   r   r   r   r<   r7   )rs   r   r   r   r   r   r   r   r   r   r   r   r<   r7   r   rK   rF   rD   r   r   `  s?        "&#'&*% % % % % %(       X 
    X
 
 
 
 X
- - -&
 
 
 
2
 
 
 
  $(!%&*(* (* (* (* (* [(*T  "&#'&*+* +* +* +* +* [+* +* +*rF   r   c                      e Zd ZdS )FalClientErrorNrG   rH   rI   rK   rF   rD   r%  r%    s        DrF   r%  c                  N    e Zd ZU ded<   ded<   ded<   ded<   d	Zd
ed<   ddZd	S )FalClientHTTPErrorr7   messager   status_coder   response_headershttpx.Responsert   Nr   
error_typer<   c                    | j          S r?   )r)  rB   s    rD   __str__zFalClientHTTPError.__str__'  s    ,  rF   r   )rG   rH   rI   rJ   r-  r/  rK   rF   rD   r(  r(    sh         LLL$$$$!J!!!!! ! ! ! ! !rF   r(  c                  0    e Zd ZU ded<   dZded<   d	dZdS )
FalClientTimeoutErrorfloatr   NOptional[str]
request_idr<   r7   c                L    | j         d| j         dS d| j          d| j         dS )NzRequest timed out after z secondszRequest z timed out after )r4  r   rB   s    rD   r/  zFalClientTimeoutError.__str__0  s:    ?"DdlDDDDVdoVVVVVVrF   r   )rG   rH   rI   rJ   r4  r/  rK   rF   rD   r1  r1  +  sJ         NNN $J$$$$W W W W W WrF   r1  rt   r,  r<   rO   c                   	 |                                   d S # t          j        $ r}d }| j        }	 |                                 }n# t
          $ r d }Y nw xY wt          |t                    r0|                    d| j                  }|                    d          }|| j	                            d          }t          || j        t          | j	                  | |          |d }~ww xY w)Ndetailr-  zx-fal-error-type)rt   r-  )rp   rm   HTTPStatusErrortextrk   r   
isinstancedictgetrj   r(  r*  )rt   excr-  msgbodys        rD   _raise_for_statusr@  7  s   !!#####    
m	==??DD 	 	 	DDD	 dD!! 	0((8X]33C,//J!)--.@AAJ   !""!
 
 
 	!s8    C*	C%AC%AC%ABC%%C*c                      e Zd ZdS )StatusNr&  rK   rF   rD   rB  rB  U  s        crF   rB  c                      e Zd ZU dZded<   dS )QueuedzIndicates the request is enqueued and waiting to be processed. The position
    field indicates the relative position in the queue (0-indexed).r   positionN)rG   rH   rI   __doc__rJ   rK   rF   rD   rD  rD  Y  s'         G G MMMMMrF   rD  c                  2    e Zd ZU dZ e            Zded<   dS )
InProgresszIndicates 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logsN)rG   rH   rI   rF  r
   rJ  rJ   rK   rF   rD   rH  rH  a  s5          
 ).D//////rF   rH  c                      e Zd ZU dZ e            Zded<    e            Zded<    ed          Zded	<    ed          Z	ded
<   dS )	Completeda2  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.).rI  rJ  dict[str, Any]metricsN)defaultr   errorr-  )
rG   rH   rI   rF  r
   rJ  rJ   rN  rP  r-  rK   rF   rD   rL  rL  k  s          
 ).D////#eggG%%%%d+++E++++"U4000J000000rF   rL  T)frozenc                      e Zd ZU ded<    ed          Zded<    ed          Zded<    ed          Zded<   ddZdS )_BaseRequestHandler7   r4  Freprresponse_url
status_url
cancel_urlru   AnyJSONr<   rB  c                |   |d         dk    rt          |d                   S |d         dk    rt          |d                   S |d         dk    rU|                    d	i           }t          |d         ||                    d
          |                    d                    S t	          d|d                    )NstatusIN_QUEUEqueue_position)rE  IN_PROGRESSrJ  )rJ  	COMPLETEDrN  rP  r-  )rJ  rN  rP  r-  zUnknown status: )rD  rH  r<  rL  r   )rC   ru   rN  s      rD   _parse_statusz _BaseRequestHandle._parse_status  s    >Z''4(8#9::::(^},,4<0000(^{**hhy"--G&\hhw''88L11	    @X@@AAArF   N)ru   rY  r<   rB  )	rG   rH   rI   rJ   r
   rV  rW  rX  r`  rK   rF   rD   rS  rS  x  s         OOO5)))L))))e'''J''''e'''J''''B B B B B BrF   rS  	workflowscomfyidr7   c                    dd l }|                     d          }t          |          dk    r| S |                    d|           }|r|                                \  }}| d| S t          d|  d          )Nr   r,   r2   z^([0-9]+)-([a-zA-Z0-9-]+)$zInvalid app id: z*. Must be in the format <appOwner>/<appId>)resplitr   matchgroupsr   )rc  re  r   rg  	app_ownerapp_ids         rD   _ensure_app_id_formatrk    s    IIIHHSMME
5zzA~~	HH2B77E '!LLNN	6&&f&&&
VVVV
W
WWrF   c                  P    e Zd ZU ded<   ded<   ded<   ded<   edd	            Zd
S )AppIdr7   owneraliasr3  r   	namespaceendpoint_idr<   c           	     T   t          |          }|                    d          }|d         t          v r> | |d         |d         d                    |dd                    pd |d                   S  | |d         |d         d                    |dd                    pd d           S )Nr,   r   r2         )rn  ro  r   rp  )rk  rf  APP_NAMESPACESjoin)r   rq  normalized_idr   s       rD   from_endpoint_idzAppId.from_endpoint_id  s    -k::##C((8~%%3AhAhXXeABBi((0D(	    s((%)$$,	
 
 
 	
rF   N)rq  r7   r<   rm  )rG   rH   rI   rJ   r   rx  rK   rF   rD   rm  rm    s^         JJJJJJ
 
 
 [
 
 
rF   rm  x   g     V@)r2   <   rj  c                x    | j         r
| j          dnd}| j        r
d| j         nd}| | j         d| j         | S )Nr,   rR   )rp  r   rn  ro  )rj  prefixsuffixs      rD   _format_app_pathr~    s^    '-'7? ####RF"(+52F;fl;;V\;6;;;rF   valuer   r   c                    | d S t           \  }}|| cxk    r|k    sn t          d| d| d          t          |           S )Nzmax_buffering must be between z and z (inclusive))REALTIME_MAX_BUFFERINGr   r7   )r  	min_value	max_values      rD   _serialize_max_bufferingr    sk    }t1Iy++++)++++TYTTYTTT
 
 	
 u::rF   rR   r   max_bufferingapplicationr8   r   r  c                  t                               |           }t          |          }t           | }|r|d|                    d          z   z  }i }|r||d<   t          |          }|||d<   |r| dt          |           S |S )Nr,   fal_jwt_tokenr  ?)rm  rx  r~  REALTIME_URL_FORMATlstripr  r   )	r  r8   r   r  rj  app_pathr   queryserialized_bufferings	            rD   _build_runner_ws_urlr    s     ##K00F''H 
,(
,
,C &sT[[%%%%E '!&o3MBB'!5o +**	%((***JrF   realtimer   c               (    t          | |||          S )Nr  )r  )r  r8   r  r   s       rD   _build_realtime_urlr    s'      #	   rF   ru   r   c                8   t          | t                    r| S t          | t                    r`t          |                     d          t                    r| d         S t          |                     d          t                    r| d         S t	          d          )Nr8   r7  z)Unexpected realtime token response format)r:  r7   r;  r<  RuntimeError)ru   s    rD   _parse_token_responser    s    $ $ "dhhw''-- 	!= dhhx((#.. 	">!
B
C
CCrF   c                  *     e Zd ZdZ	 	 d
d fd	Z xZS )RealtimeErrorz9Raised when the realtime endpoint sends an error payload.NrP  r7   reasonr   payloadOptional[dict[str, Any]]c                    || _         |pd| _        |pi | _        | j        s|n| d| j         }t                                          |           d S )NrR   z: )rP  r  r  superrf   )rC   rP  r  r  r)  	__class__s        rD   rf   zRealtimeError.__init__
  s`     
l}"#{I%%50I0IDK0I0I!!!!!rF   )NN)rP  r7   r  r   r  r  )rG   rH   rI   rF  rf   __classcell__)r  s   @rD   r  r    sP        CC
 ",0	
" 
" 
" 
" 
" 
" 
" 
" 
" 
" 
"rF   r  r)  r   c                8    dd l }|                    | d          S )Nr   F)raw)msgpackunpackbr)  r  s     rD   msgpack_decode_messager    s!    NNN??7?...rF   c                8    dd l }|                    | d          S )Nr   T)use_bin_type)r  packbr  s     rD   msgpack_encode_messager    s!    NNN==t=444rF   decode_messageCallable[[bytes], Any] | Nonedict[str, Any] | Nonec                    t          | t                    r|                                 } t          | t          t          f          r|pt
          } ||           S t          | t                    r	 t          j        |           }n# t          j	        $ r d| dcY S w xY w|
                    d          }|dk    r8t          |
                    dd          |
                    d          |          |dk    rd S |S d	| iS )
Nr9  )typer  r  zx-fal-errorrP  UNKNOWN_ERRORr  zx-fal-messager  )r:  
memoryviewtobytesr   	bytearrayr  r7   rk   loadsJSONDecodeErrorr<  r  )r)  r  decoder  msg_types        rD   _decode_realtime_messager  #  s$    ':&& $//##'E9-.. 9#9vg'3 	8j))GG# 	8 	8 	8"w77777	8 ;;v&&}$$G_55H%%  
 &&4ws   0B BBrM  encode_messageCallable[[Any], bytes] | Nonec                *    |pt           } ||           S r?   )r  )r)  r  encodes      rD   _encode_realtime_messager  B  s     55F6'??rF   c                  b    e Zd ZU dZded<   dZded<   dZded<   ddZddZddZ	ddZ
ddZdS )RealtimeConnectionz(Synchronous realtime connection wrapper.z'Connection'_wsNr  _encode_messager  _decode_message	argumentsrM  r<   rO   c                d    t          || j                  }| j                            |           d S r?   r  r  r  sendrC   r  r  s      rD   r  zRealtimeConnection.sendR  s.    *9d6JKKgrF   r  c                ,   	 	 | j                                         }n_# t          $ rR}ddlm}m} t          ||          rY d }~d S t          ||          rt          dt          |                    | d }~ww xY wt          || j
                  }||S NTr   )ConnectionClosedConnectionClosedOKCONNECTION_CLOSEDr  recv	Exceptionwebsockets.exceptionsr  r  r:  r  r7   r  r  rC   rt   r=  r  r  decodeds         rD   r  zRealtimeConnection.recvV  s    	8==?? 
 
 
       
 c#566  44444c#344 P'(;SXXFFCO
 /x9MNNGNs    
A9A4/A44A9c                h    t          | j        dd           }t          |          r |             d S d S Nclosegetattrr  callablerC   r  s     rD   r  zRealtimeConnection.closej  s<    '400E?? 	EGGGGG	 	rF   c                    | S r?   rK   rB   s    rD   	__enter__zRealtimeConnection.__enter__o  s    rF   c                .    |                                   d S r?   r  rC   exc_typer=  tbs       rD   __exit__zRealtimeConnection.__exit__r  s    

rF   r  rM  r<   rO   r<   r  r<   rO   )r<   r  )rG   rH   rI   rF  rJ   r  r  r  r  r  r  r  rK   rF   rD   r  r  J  s         2259O999959O9999      (   
        rF   r  c                  b    e Zd ZU dZded<   dZded<   dZded<   ddZddZddZ	ddZ
ddZdS )AsyncRealtimeConnectionz)Asynchronous realtime connection wrapper.z'WebSocketClientProtocol'r  Nr  r  r  r  r  rM  r<   rO   c                t   K   t          || j                  }| j                            |           d {V  d S r?   r  r  s      rD   r  zAsyncRealtimeConnection.send~  sD      *9d6JKKhmmG$$$$$$$$$$$rF   r  c                <  K   	 	 | j                                          d {V }n_# t          $ rR}ddlm}m} t          ||          rY d }~d S t          ||          rt          dt          |                    | d }~ww xY wt          || j
                  }||S r  r  r  s         rD   r  zAsyncRealtimeConnection.recv  s      	!%000000 
 
 
       
 c#566  44444c#344 P'(;SXXFFCO
 /x9MNNGNs   % 
BA</A<<Bc                x   K   t          | j        dd           }t          |          r |             d {V  d S d S r  r  r  s     rD   r  zAsyncRealtimeConnection.close  sL      '400E?? 	%''MMMMMMMMM	 	rF   c                
   K   | S r?   rK   rB   s    rD   
__aenter__z"AsyncRealtimeConnection.__aenter__  s      rF   c                >   K   |                                   d {V  d S r?   r  r  s       rD   	__aexit__z!AsyncRealtimeConnection.__aexit__  s,      jjllrF   r  r  r  )r<   r  )rG   rH   rI   rF  rJ   r  r  r  r  r  r  r  rK   rF   rD   r  r  v  s         33""""59O999959O9999% % % %   (   
        rF   r  r   rj   dict[str, str] | NoneIterator['Connection']c              #     K   ddl m} |                    | |t          d           5 }|V  d d d            d S # 1 swxY w Y   d S )Nr   )rs   additional_headersopen_timeoutmax_size)websockets.syncrs   connectREALTIME_OPEN_TIMEOUT)r   rj   rs   wss       rD   _connect_sync_wsr    s       '&&&&&	"*	 
 
 
 
 
                 s   9= =(AsyncIterator['WebSocketClientProtocol']c                  K   dd l }|                    | |t          d           4 d {V 	 }|W V  d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   r  )
websocketsr  r  )r   rj   r  r  s       rD   _connect_async_wsr    s	      !!"*	 "          
 
                             s   A
AArs   r   methodkwargsc                B     | j         ||fi |}t          |           |S r?   requestr@  rs   r  r   r  rt   s        rD   r   r     s2     v~fc44V44HhOrF   r   c                R   K    | j         ||fi | d {V }t          |           |S r?   r  r  s        rD   r  r    sH       $V^FC::6::::::::HhOrF   皙?   )i  i  i  )i  i          ^@g      >@)r  r=   c                R    | j         t          vrdS d| j        v rdS d| j        v rdS dS )z-Tell apart ingress errors from client errors.Fzx-fal-request-idnginxT)r*  INGRESS_ERROR_CODESrj   r9  )rt   s    rD   _is_ingress_errorr    sD     #666uX---u (-t5rF   extra_retry_codes	list[int]c                    | j         dk    r!| j                            t                    rdS t	          |           rdS | j         t
          v s	| j         |v rdS dS )Nr  FT)r*  rj   r<  r$   r  RETRY_CODES)rt   r  s     rD   _should_retry_responser    so    
 s""x'7';';#( (" u"" t{**h.BFW.W.Wt5rF   r=  r  c                h   t          | t          j                  rE	 | j        }t          |t          j                  rt
          |j        v rdS n# t          $ r Y nw xY wdS t          | t          j                  rdS t          | t          j	        t          f          rt          | j        |          S dS )NFT)r:  rm   TimeoutExceptionr  Requestr%   rj   r  TransportErrorr8  r(  r  rt   )r=  r  r  s      rD   _should_retryr    s    #u-.. 		kG'5=11 !)W_<< 5 	 	 	D	t#u+,, t#-/ABCC G%cl4EFFF5s   /A 
AAexponentialF	num_retryr   
base_delayr2  	max_delaybackoff_typeLiteral['exponential', 'fixed']jitterc                    |dk    rt          |d| dz
  z  z  |          }nt          ||          }|r|t          j        dd          z  }t          ||          S )Nr  rs  r2   g      ?g      ?)r[   randomuniform)r  r  r  r  r  delays         rD   _get_retry_delayr"    sk     }$$J!	A"67CCJ	** *S)))ui   rF   )r  c                  t          dt          dz             D ]}	 t          | ||fi |c S # t          j        t
          f$ r}t          ||          rm|t          k     rbt          |t          t          dd          }t                              d| d| dt          |z
   d           t          j        |           Y d }~ d }~ww xY wt          d          )	Nr2   r  TRetrying request to  due to  ( attempts left)Failed to perform request)r   MAX_ATTEMPTSr   rm   	HTTPErrorr(  r  r"  
BASE_DELAY	MAX_DELAYloggerdebugtimesleepr  rs   r  r   r  r  attemptr=  r!  s           rD   r   r   )  s    L1,--  	FFC::6:::::!34 
	 
	 
	S"344 <9O9O(ZM4  f3ffff|g?Ufff   
5!!!
	 2
3
33s   -CA8C CCc                 K   t          dt          dz             D ]}	 t          | ||fi | d {V c S # t          j        t
          f$ r}t          ||          ri|t          k     r^t          |dddd          }t          	                    d| d| dt          |z
   d	           t          j        |           d {V  Y d }~ d }~ww xY wt          d
          )Nr2   r  r   r  Tr$  r%  r&  r'  r(  )r   r)  r  rm   r*  r(  r  r"  r-  r.  r   r0  r  r1  s           rD   r  r  C  s2      L1,--  
	'FFvFFFFFFFFFFF!34 	 	 	S"344 <9O9O(#r=$OOf3ffff|g?Ufff   mE*********	 2
3
33s   5C
A4CCC
rN   r   c                ^    | j                                         dk    r
d| j         S | j        S )NkeyzBearer )schemelowerr8   rc   rN   s    rD   _cdn_auth_headerr9  [  s4    {e##%%%%rF   r   r   r   c                8    |t          |           d}|||d<   |S )N)rY   rW   r   )r9  )rN   r   r   rj   s       rD   _cdn_upload_headersr;  a  s0      ,>Nt>T>TUUG%.!"NrF   c                    | j         dddS )NrU   rV   )rc   r8  s    rD   _storage_upload_headersr=  j  s    *$*  rF   
repositoryUploadRepositoryId | Nonefallback_repository4UploadRepositoryId | list[UploadRepositoryId] | Nonec                    h d}| t           } |t          }nt          |t                    s|g}| g|}g }|D ]2}||vrt	          d| d          ||vr|                    |           3|S )N>   r*   r+   r)   zUnsupported upload repository '')r/   r1   r:  listr   r   )r>  r@  allowedordereddedupedentrys         rD   _normalize_upload_repositoriesrI  r  s     '&&G.
"@+T22 4230/0G(*G " "GuGGGHHHNN5!!!NrF   c                    | pd|dS )N
upload.binr   r   rK   rL  s     rD   _storage_upload_payloadrM    s    .,$  rF   c          	         t          | dt           dt          ||          t          |                    }|                                }|d         }|d         }t          | d||d|id            |S 	Nr   z)/storage/upload/initiate?storage_type=gcs)rk   rj   
upload_urlfile_urlr   rY   )r   rj   r   )r   ra   rM  r=  rk   	rs   rN   ru   r   r   init_responseinit_resultrP  rQ  s	            rD   _upload_via_storagerU    s     )>>>$Y=='--  M  $$&&K\*J:&H.    OrF   c          	       K   t          | dt           dt          ||          t          |                     d {V }|                                }|d         }|d         }t          | d||d|id            d {V  |S rO  )r  ra   rM  r=  rk   rR  s	            rD   _async_upload_via_storagerW    s       5>>>$Y=='--        M  $$&&K\*J:&H
$.          OrF   c               n    t          | dt          dz   ||          }|                                d         S Nr   z/files/upload)r   rj   r   )r   CDN_URLrk   rs   ru   rj   rt   s       rD   
_upload_v3r\    sA     $/!  H ==??<((rF   c                   t          | dt          dz   |t          |||                    }|                                d         S rY  )r   FAL_CDN_FALLBACK_URLr;  rk   rs   rN   ru   r   r   rt   s         rD   _upload_cdnr`    sM     $.#D,	BB  H ==??<((rF   c               ~   K   t          | dt          dz   ||           d {V }|                                d         S rY  )r  rZ  rk   r[  s       rD   _async_upload_v3rb    sc       0/!        H ==??<((rF   c                  K   t          | dt          dz   |t          |||                     d {V }|                                d         S rY  )r  r^  r;  rk   r_  s         rD   _async_upload_cdnrd    so       0.#D,	BB        H ==??<((rF   attempts#list[tuple[str, Callable[[], str]]]c           	        t          |           D ]n\  }\  }}	  |            c S # t          $ rM}|t          |           dz
  k    r t                              d|| |dz            d         |           Y d }~gd }~ww xY wt          d          Nr2   z+Upload failed to %s, falling back to %s: %sr   zUpload attempts were exhausted)	enumerater  r   r-  warningr  )re  idxlabelr2  r=  s        rD   _try_upload_with_fallbackrm    s     "+8!4!4  eW
	799 	 	 	c(mma'''NN=q!!$	       	 7
8
88s   	%
A<AA77A<#list[tuple[str, Callable[[], Any]]]c           	     `  K   t          |           D ]\  }\  }}	  |            }t          j        |          r
| d {V c S |c S # t          $ rM}|t	          |           dz
  k    r t
                              d|| |dz            d         |           Y d }~d }~ww xY wt          d          rh  )ri  r   iscoroutiner  r   r-  rj  r  )re  rk  rl  r2  r   r=  s         rD   _async_try_upload_with_fallbackrq     s       "+8!4!4  eW	WYYF"6** $#||||||###MMM 	 	 	c(mma'''NN=q!!$	       	 7
8
88s   %AA
BABBhandleSyncRequestHandlec                R    	 |                                   d S # t          $ r Y d S w xY wr?   cancelr  rr  s    rD   _maybe_cancel_requestrx  5  s:       s    
&&AsyncRequestHandlec                b   K   	 |                                   d {V  d S # t          $ r Y d S w xY wr?   ru  rw  s    rD   _async_maybe_cancel_requestr{  <  sS      mmoo   s     
..c                  x    e Zd ZU  ed          Zded<   edd	            Zdd
ddZdddddZ	ddZ
ddZdS )rs  FrT  r   rs   r  r7   r4  r<   c                    t                               |          }|j        r
|j         dnd}t           | |j         d|j         d| } | |||dz   |dz   |          S Nr,   rR   z
/requests/z/statusz/cancelr4  rV  rW  rX  rs   rm  rx  rp  QUEUE_URL_FORMATrn  ro  r   rs   r  r4  rj  r|  rl   s          rD   from_request_idz!SyncRequestHandle.from_request_idG       ''44+1+;CF$''''&ccccv|ccWaccs!!)+)+
 
 
 	
rF   	with_logsr  r=   rB  c                   t          | j        d| j        d|it                    }t	          |           |                     |                                          S )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.GETrJ  paramsr   )r   rs   rW  QUEUE_POLL_TIMEOUTr@  r`  rk   rC   r  rt   s      rD   r[  zSyncRequestHandle.statusY  s`    
 (KO	 '
 
 
 	(###!!(--//222rF   r  r  intervalr  r2  Iterator[Status]c             #     K   	 |                      |          }|V  t          |t                    rdS t          j        |           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.
        Tr  N)r[  r:  rL  r/  r0  rC   r  r  r[  s       rD   iter_eventszSyncRequestHandle.iter_eventsk  sS      	![[9[55FLLL&),, Jx   	!rF   rY  c                    |                      d          D ]}t          | j        d| j        t                    }t          |           |                                S )zOWait till the request is completed and return the result of the inference call.Fr  r  r   )r  r   rs   rV  r  r@  rk   rC   _rt   s      rD   r<  zSyncRequestHandle.getz  sf    !!E!22 	 	A'K 1;M
 
 
 	(###}}rF   rO   c                h    t          | j        d| j        t                    }t	          |           dS zCancel the request.r   r  N)r   rs   rX  r  r@  rC   rt   s     rD   rv  zSyncRequestHandle.cancel  s<    'KO&	
 
 
 	(#####rF   N)rs   r   r  r7   r4  r7   r<   rs  r  r=   r<   rB  )r  r=   r  r2  r<   r  r<   rY  r  rG   rH   rI   r
   rs   rJ   r   r  r[  r  r<  rv  rK   rF   rD   rs  rs  C  s          5e,,,F,,,,
 
 
 [
" +0 3 3 3 3 3 3& $)C! ! ! ! ! !	 	 	 	$ $ $ $ $ $rF   c                  x    e Zd ZU  ed          Zded<   edd	            Zdd
ddZdddddZ	ddZ
ddZdS )ry  FrT  r   rs   r  r7   r4  r<   c                    t                               |          }|j        r
|j         dnd}t           | |j         d|j         d| } | |||dz   |dz   |          S r~  r  r  s          rD   r  z"AsyncRequestHandle.from_request_id  r  rF   r  r  r=   rB  c                  K   t          | j        d| j        d|it                     d{V }t	          |           |                     |                                          S )r  r  rJ  r  N)r  rs   rW  r  r@  r`  rk   r  s      rD   r[  zAsyncRequestHandle.status  s      
 4KO	 '
 
 
 
 
 
 
 
 
 	(###!!(--//222rF   r  r  r  r2  AsyncIterator[Status]c                 K   	 |                      |           d{V }|W V  t          |t                    rdS t          j        |           d{V  Sr  )r[  r:  rL  r   r0  r  s       rD   r  zAsyncRequestHandle.iter_events  sy      	*;;;;;;;;;;;FLLLL&),, -)))))))))	*rF   rY  c                   K   |                      d          2 3 d{V }6 t          | j        d| j        t                     d{V }t          |           |                                S )z9Wait till the request is completed and return the result.Fr  Nr  r  )r  r  rs   rV  r  r@  rk   r  s      rD   r<  zAsyncRequestHandle.get  s      ''%'88 	 	 	 	 	 	 	! 9 4K&	
 
 
 
 
 
 
 
 
 	(###}}s   !rO   c                x   K   t          | j        d| j        t                     d{V }t	          |           dS r  )r  rs   rX  r  r@  r  s     rD   rv  zAsyncRequestHandle.cancel  s^      3KO&	
 
 
 
 
 
 
 
 
 	(#####rF   N)rs   r   r  r7   r4  r7   r<   ry  r  )r  r=   r  r2  r<   r  r  r  r  rK   rF   rD   ry  ry    s          %5 1 1 1F1111
 
 
 [
" 16 3 3 3 3 3 3& $)C* * * * * *   $ $ $ $ $ $rF   c            
         e Zd ZU  edd          Zded<   dZded<   edad            ZdadZ	dbdZ
edcd            Zeddd            ZdddZeddedZddddi ddfd$Zddddi dd%dgd*Zddddddi ddd+	dhd3Zdid5Zdd6djd8Zdkd9Zdld;Zd<dd=dmd@Z	 dndddAdodJZdddAdpdLZ	 dqdddAdrdQZedRdSdedddTdsd]            ZedRdded^dtd`            ZdS )ur   NFrO  rU  r   r5  r  r2  default_timeoutr<   r   c                V    | j         t                      S t          d| j                   S NKeyr5  r   r   rB   s    rD   rZ   zAsyncClient._auth  (    8)+++udh///rF   c                    | j         S r?   rZ   rB   s    rD   	_get_authzAsyncClient._get_auth  
    zrF   r7   c                    |                                  }|j                                        dk    rt          d          |j        S Nr5  zZKey credentials are required for this operation. Set FAL_KEY or FAL_KEY_ID/FAL_KEY_SECRET.r  r6  r7  r   r8   re   s     rD   _get_keyzAsyncClient._get_key  I    ~~;%'')l   zrF   r   c                D    t          |                                           S r?   )r   r  rB   s    rD   r   zAsyncClient._token_manager  s    #DNN$4$4555rF   r   c                z    |                                  }t          j        |j        t          d| j                  S )Nr   rj   r   )r  rm   r   rc   
USER_AGENTr  re   s     rD   r   zAsyncClient._client  sF    ~~ !%!2(  (
 
 
 	
rF   c                   K   | j                                          d {V }t          j        |j         d|j         t          d| j                  S Nr   r   r  )r   ry   rm   r   r9   r8   r  r  r   s     rD   _get_cdn_clientzAsyncClient._get_cdn_client  sq      )3355555555 $)$4!D!Du{!D!D(  (
 
 
 	
rF   token_expirationr  r  r   c                  K   t                               |          j        g|d}t          | j        dt
           d|           d {V }t          |                                          S N)allowed_appsr  r   z/tokens/)rk   )rm  rx  ro  r  r   ra   r  rk   rC   r  r  r  rt   s        rD   _get_realtime_tokenzAsyncClient._get_realtime_token  s       #33K@@FG 0
 
 4L!!!	
 
 
 
 
 
 
 
 
 %X]]__555rF   rR   r   r   start_timeouthintrj   r  rY  r   r   Optional[Union[int, float]]r  r  rj   r   c               *  K   t           |z   }|r|d|                    d          z   z  }i |}	|t          ||	           |t          ||	           t	          | j        d||||	           d{V }
t          |
           |
                                S )ad  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.
        r,   Nr   rk   r   rj   )RUN_URL_FORMATr  r#   r"   r  r   r@  rk   rC   r  r  r   r   r  r  rj   r   rd   rt   s              rD   runzAsyncClient.run!  s      * {* 	*3S))))C#.g; D(+++$}h7773L
 
 
 
 
 
 
 
 
 	(###}}rF   r   r  webhook_urlpriorityrj   r  r  r  Optional[Priority]ry  c                 K   t           |z   }	|r|	d|                    d          z   z  }	||	dt          d|i          z   z  }	i |}
|t          ||
           |t	          ||
           |t          ||
           t          | j        d|	|| j        |
           d{V }t          |           |
                                }t          |d         |d         |d	         |d
         | j                  S )aP  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.
        r,   Nr  fal_webhookr   r  r4  rV  rW  rX  r  )r  r  r   r#   r!   r"   r  r   r  r@  rk   ry  rC   r  r  r   r  r  r  rj   r  r   rd   rt   ru   s                rD   r   zAsyncClient.submitO  sF     , , 	*3S))))C"3M;#?@@@@C#.g; D(+++(333$}h7773L(
 
 
 
 
 
 
 
 
 	(###}}!L)n-L)L)<
 
 
 	
rF   	r   r  r  
on_enqueueon_queue_updater  rj   r  client_timeoutr  r=   r  1Optional[Callable[[str], None | Awaitable[None]]]r  4Optional[Callable[[Status], None | Awaitable[None]]]r  c       	           	
K   |.
|
n)
|k    r#t          j        d
 d| dt          d           dgd	 
fd	}| |             d{V S 	 t          j         |            |
           d{V S # t          j        $ r?}d}d         }||j        }t          |           d{V  t          ||          |d}~ww xY w)<  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.rs  
stacklevelr<   rY  c            	     v  K                        
           d {V } | d<   , | j                  }t          j        |          r| d {V  	F|                               2 3 d {V } 	|          }t          j        |          r| d {V  /6 |                                  d {V S N)r   r  r  rj   r  r   r  )r   r4  inspectisawaitabler  r<  )rr  r   eventr  r  
handle_refrj   r  r  r  r   r  rC   r  r  s      rD   _do_subscribez,AsyncClient.subscribe.<locals>._do_subscribe  s4     ;;!+ '        F #JqM%#F$566&v.. ! LLLLLLL*#)#5#5	#5#J#J % % % % % % %%,_U33F*622 %$ $K
  %%%%%%%s   1B r  r   r   r4  r  )	warningswarnUserWarningr   wait_forTimeoutErrorr4  r{  r1  )rC   r  r  r   r  r  r  r  r  rj   r  r  r  er4  rr  r  s   ```````````     @rD   	subscribezAsyncClient.subscribe  s     2 %$ .//gm g gWe g g g 	    ;?
	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&2 !&(((((((	 )--//>RRRRRRRRRR# 
	 
	 
	J]F!#.
1&999999999'&%   
	s   &#B
 
C:CCr4  c                D    t                               | j        ||          S r?   )ry  r  r   rC   r  r4  s      rD   
get_handlezAsyncClient.get_handle  s    !11$,ZXXXrF   r  rB  c               j   K   |                      ||          }|                    |           d {V S Nr  r  r[  rC   r  r4  r  rr  s        rD   r[  zAsyncClient.status  sA       j99]]Y]777777777rF   c                f   K   |                      ||          }|                                 d {V S r?   r  r<  rC   r  r4  rr  s       rD   r   zAsyncClient.result  s9      j99ZZ\\!!!!!!!rF   rO   c                j   K   |                      ||          }|                                 d {V  d S r?   r  rv  r  s       rD   rv  zAsyncClient.cancel  s?      j99mmoorF   /streamr   r   float | NoneAsyncIterator[dict[str, Any]]c              L  K   t           |z   }|r|d|                    d          z   z  }t          | j        d|||          4 d{V 	 }|                                2 3 d{V }|                                W V  6 	 ddd          d{V  dS # 1 d{V swxY w Y   dS 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.
        r,   r   )rk   r   N)r  r  r   r   	aiter_sserk   rC   r  r  r   r   r   eventsr  s           rD   streamzAsyncClient.stream  st      {* 	*3S))))CL
 
 
 	# 	# 	# 	# 	# 	# 	# 	# %//11 # # # # # # #ejjll"""""  21	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   
BA>%B
B Br>  r@  ru   str | bytesr   r   r>  r?  r@  rA  c               N  K   |                                  }t          |t                    r|                    d          }t	          ||          }t          |          t          k    rT|d         dk    rH|d}|                                  d{V }t          	                    || j
        |||           d{V S d|i}	|||	d<   g }
|D ]}|dk    rH|                                  d{V }|
                    dt          t          |||		          f           P|d
k    r5|
                    d
t          t          | j        ||||          f           |dk    r4|
                    dt          t           | j        ||||          f           t#          |
           d{V S zUpload the given data blob to the CDN and return the access URL. The content type should be specified
        as the second argument. Use upload_file or upload_image for convenience.utf-8r   r)   NrK  )rs   r   r   ru   r   rY   r   )ru   rj   r*   )ru   r   r   r+   )r  r:  r7   r  rI  r   MULTIPART_THRESHOLDr  r   r   r   r   r   rb  rd  r   rW  rq  rC   ru   r   r   r>  r@  rN   repository_chainrs   rj   re  repos               rD   uploadzAsyncClient.upload	  sL      ~~dC   	(;;w''D9+
 
 t99***/?/Bh/N/N (	//11111111F-22"1#) 3          "<0 )2G%&8:$ $	 $	Dx#3355555555  0&tWUUU    - L !%)5&/  
    5 L !%)5&/  
   5X>>>>>>>>>rF   os.PathLikec               V  K   t          j        |          \  }}|d}t          ||          }t          j                            |          t          k    r\|d         dk    rP|                                  d{V }t          	                    t          |          || j        |           d{V S t          |d          5 }|                     |                                |t          j                            |          ||           d{V cddd           S # 1 swxY w Y   dS zMUpload a file from the local filesystem to the CDN and return the access URL.Nr   r   r)   )r   rs   r   r   r   )r   r>  r@  )	mimetypes
guess_typerI  r   r   r   r  r  r   r   r7   r   r   r  r   r   	rC   r   r>  r@  	mime_typer  r  rs   files	            rD   upload_filezAsyncClient.upload_fileX  s      !+D11	12I9+
 
 GOOD!!$777 #x////11111111F-77d))"1&	 8          $ 			'**400%$7 %        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ADD"%D"jpegimageImage.Imageformatc                  K   t          j                    5 }|                    ||           |                     |                                d| ||           d{V cddd           S # 1 swxY w Y   dS zBUpload a pillow image object to the CDN and return the access URL.r  image/r  NioBytesIOr   r  getvaluerC   r  r  r>  r@  buffers         rD   upload_imagezAsyncClient.upload_image  s       Z\\ 	VJJvfJ---!!!!!%$7	 %        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA..A25A2T	/realtimeuse_jwtr   r  r  r  r  r+  r  r   r  r  r  r  &AsyncIterator[AsyncRealtimeConnection]c              `  K   d }d }	|r|                      ||           d {V }	n#|                                 }
|
j        t          d}t	          ||	||          }t          ||          4 d {V }t          |||          W V  d d d           d {V  d S # 1 d {V swxY w Y   d S Nr  r   r  r   )r  r  )r  r  rc   r  r  r  r  rC   r  r+  r   r  r  r  r  rj   r8   rN   r   r  s                rD   r  zAsyncClient.realtime  s      *.  	U22.> 3        EE >>##D(,(9TTG!+um$OOO$S'::: 	 	 	 	 	 	 	b)NN      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   4B
B'*B'r+  r   r  r  r  c              @  K   d }d }|r|                      ||           d {V }n#|                                 }|j        t          d}t	          ||||          }	t          |	|          4 d {V }
|
W V  d d d           d {V  d S # 1 d {V swxY w Y   d S Nr  r   r  r   )r  r  rc   r  r  r  rC   r  r+  r   r  r  rj   r8   rN   r   r  s              rD   
ws_connectzAsyncClient.ws_connect  sw      *.  	U22.> 3        EE >>##D(,(9TTG"'	
 
 
 %S'::: 	 	 	 	 	 	 	bHHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   4B
BBr<   r   r   )r<   r   )r<   r   r  r7   r  r   r<   r7   r  r7   r  rY  r   r7   r   r  r  r  r  r   rj   r   r<   rY  )r  r7   r  rY  r   r7   r  r   r  r   r  r  rj   r   r  r  r<   ry  )r  r7   r  rY  r   r7   r  r   r  r=   r  r  r  r  r  r  rj   r   r  r  r  r  r<   rY  )r  r7   r4  r7   r<   ry  r  r7   r4  r7   r  r=   r<   rB  r  r7   r4  r7   r<   rY  r  r7   r4  r7   r<   rO   )
r  r7   r  rY  r   r7   r   r  r<   r   r?   ru   r  r   r7   r   r   r>  r?  r@  rA  r<   r7   r   r  r>  r?  r@  rA  r<   r7   r  
r  r  r  r7   r>  r?  r@  rA  r<   r7   )r  r7   r+  r=   r   r7   r  r   r  r   r  r  r  r  r<   r,  )r  r7   r+  r=   r   r7   r  r   r  r   r<   r  )rG   rH   rI   r
   r5  rJ   r  r   rZ   r  r  r   r   r  !REALTIME_TOKEN_EXPIRATION_SECONDSr  r  r   r  r  r[  r   rv  r  r  r  r(  r   r  r4  rK   rF   rD   r   r     sC        eDu555C5555"O""""0 0 0 _0
       6 6 6 _6 
 
 
 _

 
 
 
 !B	6 6 6 6 6 6. /359"$, , , , , ,f "&'+"$59:
 :
 :
 :
 :
 :
B HLPT'+"$596:N N N N N N`Y Y Y Y GL8 8 8 8 8 8" " " "     $# # # # # #B !%	M? 15 M? M? M? M? M? M?f 15 % % % % % %T 
 15      * 
 $( A8<8<     6 
 $( A       rF   r   c            
         e Zd ZU  edd          Zded<   dZded<   edcd            ZdcdZ	dddZ
eded            Zedfd            Zedgd            ZdedZeddhdZddddi ddid&Zddddi dd'djd,Zddddddi ddd-	dkd5Zdld7Zdd8dmd:Zdnd;Zdod=Zd>dd?dpdBZ	 dqdddCdrdLZdddCdsdNZ	 dtdddCdudSZedTdUdedddVdvd_            ZedTdded`dwdb            ZdS )x
SyncClientNFr  r   r5  r  r2  r  r<   r   c                V    | j         t                      S t          d| j                   S r  r  rB   s    rD   rZ   zSyncClient._auth  r  rF   c                    | j         S r?   r  rB   s    rD   r  zSyncClient._get_auth  r  rF   r7   c                    |                                  }|j                                        dk    rt          d          |j        S r  r  re   s     rD   r  zSyncClient._get_key  r  rF   r   c                |    |                                  }t          j        |j        t          d| j        d          S )Nr   T)rj   r   follow_redirects)r  rm   rn   rc   r  r  re   s     rD   r   zSyncClient._client  sH    ~~|!%!2(  (!
 
 
 	
rF   rM   c                D    t          |                                           S r?   )rM   r  rB   s    rD   r   zSyncClient._token_manager  s    t~~//000rF   %concurrent.futures.ThreadPoolExecutorc                    t           S r?   )EXECUTORrB   s    rD   	_executorzSyncClient._executor  s    rF   c                    | j                                         }t          j        |j         d|j         t          d| j                  S r  )r   ry   rm   rn   r9   r8   r  r  r   s     rD   r  zSyncClient._get_cdn_client  sZ    #--//|$)$4!D!Du{!D!D(  (
 
 
 	
rF   r  r  r  r   c                   t                               |          j        g|d}t          | j        dt
           d|          }t          |                                          S r  )rm  rx  ro  r   r   ra   r  rk   r  s        rD   r  zSyncClient._get_realtime_token  so     #33K@@FG 0
 
 (L!!!	
 
 
 %X]]__555rF   rR   r  r  rY  r   r   r  r  r  rj   r   c                  t           |z   }|r|d|                    d          z   z  }i |}	|t          ||	           |t          ||	           t	          | j        d||||	          }
t          |
           |
                                S )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.
        r,   Nr   r  )r  r  r#   r"   r   r   r@  rk   r  s              rD   r  zSyncClient.run  s    ( {* 	*3S))))C#.g;D(+++$}h777'L
 
 
 	(###}}rF   r  r  r  r  rs  c                  t           |z   }	|r|	d|                    d          z   z  }	||	dt          d|i          z   z  }	i |}
|t          ||
           |t	          ||
           |t          ||
           t          | j        d|	|| j        |
          }t          |           |
                                }t          |d         |d         |d	         |d
         | j                  S )ag  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.
        r,   Nr  r  r   r  r4  rV  rW  rX  r  )r  r  r   r#   r!   r"   r   r   r  r@  rk   rs  r  s                rD   r   zSyncClient.submit>  s"   ( , 	*3S))))C"3M;#?@@@@C#.g;D(+++(333$}h777'L(
 
 
 	(###}} L)n-L)L)<
 
 
 	
rF   r  r  r=   r  Optional[Callable[[str], None]]r  "Optional[Callable[[Status], None]]r  c       	           	
 |.
|
n)
|k    r#t          j        d
 d| dt          d           dgd	 
fd	}|
 |            S  j                            |          }	 |                    |
          S # t          j        j        $ r9}d}d         }||j	        }t          |           t          ||          |d}~ww xY w)r  Nr  r  r  rs  r  r<   rY  c            	                              	
          } | d<    | j                   $|                               D ]} |           |                                 S r  )r   r4  r  r<  )rr  r  r  r  r  rj   r  r  r  r   r  rC   r  r  s     rD   r  z+SyncClient.subscribe.<locals>._do_subscribe  s    [[!+ !  F #JqM%
6,---*#//)/DD + +E#OE****::<<rF   r  r   r  r  )r  r  r  rK  r   r   r   r   r  r4  rx  r1  )rC   r  r  r   r  r  r  r  r  rj   r  r  r  r   r  r4  rr  r  s   ```````````      @rD   r  zSyncClient.subscribew  s   2 %$ .//gm g gWe g g g 	    :>
	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 * ! =??"&&}55	===888!. 
	 
	 
	J]F!#.
%f---'&%   
	s   8B C"4CCr4  c                D    t                               | j        ||          S r?   )rs  r  r   r  s      rD   r  zSyncClient.get_handle  s     00{JWWWrF   r  rB  c               Z    |                      ||          }|                    |          S r  r  r  s        rD   r[  zSyncClient.status  s+     j99}}y}111rF   c                V    |                      ||          }|                                S r?   r  r  s       rD   r   zSyncClient.result  s#    j99zz||rF   rO   c                Z    |                      ||          }|                                 d S r?   r  r  s       rD   rv  zSyncClient.cancel  s&    j99rF   r  r  r  Iterator[dict[str, Any]]c             #    K   t           |z   }|r|d|                    d          z   z  }t          | j        d|||          5 }|                                D ]}|                                V  	 ddd           dS # 1 swxY w Y   dS r  )r  r  r   r   iter_sserk   r  s           rD   r  zSyncClient.stream  s       {* 	*3S))))CL&#Iw
 
 
 	#** # #jjll""""#	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   .A??BBr  ru   r  r   r   r>  r?  r@  rA  c                  |                                  }t          |t                    r|                    d          }t	          ||          }t          |          t          k    rH|d         dk    r<|d}|                                 }t          	                    || j
        |||          S d|i}	|||	d<   g }
|D ]}|dk    rB|                                 }|
                    dt          t          |||		          f           J|d
k    r5|
                    d
t          t          | j        ||||          f           |dk    r4|
                    dt          t           | j        ||||          f           t#          |
          S r
  )r  r:  r7   r  rI  r   r  r  r   r   r   r   r   r\  r`  r   rU  rm  r  s               rD   r  zSyncClient.upload  s    ~~dC   	(;;w''D9+
 
 t99***/?/Bh/N/N (	))++F"''"1#) (    "<0 )2G%&8:$ $	 $	Dx--// 
FwOOO    ' L !%)5&/  
    / L !%)5&/  
   )222rF   r  c               .   t          j        |          \  }}|d}t          ||          }t          j                            |          t          k    rP|d         dk    rD|                                 }t          	                    t          |          || j        |          S t          |d          5 }|                     |                                |t          j                            |          ||          cddd           S # 1 swxY w Y   dS r  )r  r  rI  r   r   r   r  r  r   r   r7   r   r   r  r   r   r  s	            rD   r  zSyncClient.upload_file=	  sX    !+D11	12I9+
 
 GOOD!!$777 #x//))++F",,d))"1&	 -    $ 	;;		'**400%$7   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   4A	D

DDr  r  r  r  c                   t          j                    5 }|                    ||           |                     |                                d| ||          cddd           S # 1 swxY w Y   dS r  r"  r&  s         rD   r(  zSyncClient.upload_imaged	  s     Z\\ 	VJJvfJ---;;!!!!!%$7	   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA&&A*-A*Tr)  r*  r+  r  r   r  r  r  r  Iterator[RealtimeConnection]c             #  .  K   d }d }	|r|                      ||          }	n#|                                 }
|
j        t          d}t	          ||	||          }t          ||          5 }t          |||          V  d d d            d S # 1 swxY w Y   d S r.  )r  r  rc   r  r  r  r  r/  s                rD   r  zSyncClient.realtimey	  s      *.  	U,,.> -  EE >>##D(,(9TTG!+um$OOOc7333 	r$NN     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   (B

BBr0  r  c             #    K   d }d }|r|                      ||          }n#|                                 }|j        t          d}t	          ||||          }	t          |	|          5 }
|
V  d d d            d S # 1 swxY w Y   d S r2  )r  r  rc   r  r  r  r3  s              rD   r4  zSyncClient.ws_connect	  s       *.  	U,,.> -  EE >>##D(,(9TTG"'	
 
 
 c7333 	rHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   (A::A>A>r5  r   )r<   r   )r<   rM   )r<   rH  r6  r7  )r  r7   r  rY  r   r7   r  r   r  r   r  r  rj   r   r  r  r<   rs  )r  r7   r  rY  r   r7   r  r   r  r=   r  rP  r  rQ  r  r  rj   r   r  r  r  r  r<   rY  )r  r7   r4  r7   r<   rs  r8  r9  r:  )
r  r7   r  rY  r   r7   r   r  r<   rX  r?   r;  r<  r=  r>  )r  r7   r+  r=   r   r7   r  r   r  r   r  r  r  r  r<   r^  )r  r7   r+  r=   r   r7   r  r   r  r   r<   r  ) rG   rH   rI   r
   r5  rJ   r  r   rZ   r  r  r   r   r   rK  r  r?  r  r  r   r  r  r[  r   rv  r  r  r  r(  r   r  r4  rK   rF   rD   rA  rA    s`        eDu555C5555"O""""0 0 0 _0
       	
 	
 	
 _	
 1 1 1 _1    X
 
 
 
 !B	6 6 6 6 6 6. /359"$( ( ( ( ( (^ "&'+"$597
 7
 7
 7
 7
 7
| 6:>B'+"$596:K K K K K KZX X X X GL2 2 2 2 2 2        $# # # # # #: !%	M3 15 M3 M3 M3 M3 M3 M3f 15 % % % % % %T 
 15      * 
 $( A8<8<     ^6 
 $( A     ^  rF   rA  r  c                    t          | t                    r|                     d          } d| dt          j        |                                            S )zIEncode the given data blob to a data URL with the specified content type.r  zdata:z;base64,)r:  r7   r  base64	b64encoder  )ru   r   s     rD   r  r  	  sR    $ ${{7##J<JJ)9$)?)?)F)F)H)HJJJrF   r  c                    t          j        |           \  }}|d}t          | d          5 }t          |                                |          cddd           S # 1 swxY w Y   dS )zUEncode a file from the local filesystem to a data URL with the inferred content type.Nr   r   )r  r  r   r  r   )r   r  r  r  s       rD   encode_filere  	  s    '--LIq.		dD		 .Tdiikk9--. . . . . . . . . . . . . . . . . .s   "AA"Ar  r  r  r  c                    t          j                    5 }|                     ||           t          |                                d|           cddd           S # 1 swxY w Y   dS )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      rD   encode_imagerg  	  s    	 <

6&
)))foo''):&):):;;< < < < < < < < < < < < < < < < < <s   <AA!$A!)rt   r,  r<   rO   )rc  r7   r<   r7   )rj  rm  r<   r7   )r  r   r<   r   )
r  r7   r8   r   r   r7   r  r   r<   r7   )
r  r7   r8   r   r  r   r   r7   r<   r7   )ru   r   r<   r7   )r)  r   r<   r   )r)  r   r<   r   )r)  r   r  r  r<   r  )r)  rM  r  r  r<   r   r?   )r   r7   rj   r  r<   r  )r   r7   rj   r  r<   r  )
rs   r   r  r7   r   r7   r  r   r<   r,  )
rs   r   r  r7   r   r7   r  r   r<   r,  )rt   r,  r<   r=   )rt   r,  r  r  r<   r=   )r=  r  r  r  r<   r=   )r  F)r  r   r  r2  r  r2  r  r  r  r=   r<   r2  )rs   r   r  r7   r   r7   r  r  r  r   r<   r,  )rs   r   r  r7   r   r7   r  r  r  r   r<   r,  )rN   r   r<   r7   )rN   r   r   r7   r   r   r<   r   )rN   r   r<   r   )r>  r?  r@  rA  r<   r0   )r   r   r   r7   r<   r   )rs   r   rN   r   ru   r   r   r7   r   r   r<   r7   )rs   r   rN   r   ru   r   r   r7   r   r   r<   r7   )rs   r   ru   r   rj   r   r<   r7   )rs   r   ru   r   rj   r   r<   r7   )re  rf  r<   r7   )re  rn  r<   r7   )rr  rs  r<   rO   )rr  ry  r<   rO   )ru   r  r   r7   r<   r7   )r   r  r<   r7   r=  )r  r  r  r7   r<   r7   )
__future__r   r  r#  rk   r   r   r  r   pathlibr   r  r/  rb  r^   loggingr   r   
contextlibr   r   r   r   dataclassesr	   r
   	functoolsr   r   typingr   r   r   r   r   r   r   r   r   r   urllib.parser   r  rm   	httpx_sser   r   fal_client.authr   r   r   r   r   fal_client._versionr   fal_client._headersr    r!   r"   r#   r$   r%   websockets.clientr&   websockets.sync.connectionr'   	getLoggerrG   r-  PILr(   r7   rY  r.   r  r  r  ra   rZ  environr<  r^  r/   rJ   r1   r  MIN_REQUEST_TIMEOUT_SECONDSr   r   rJ  r6   rM   r   r  r   r   r   r   r  r%  r(  r  r1  r@  rB  rD  rH  rL  rS  ru  rk  rm  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  Timeoutr  r  r  r  r"  r   r  r9  r;  r=  rI  rM  rU  rW  r\  r`  rb  rd  rm  rq  rx  r{  rs  ry  r   rA  r  re  rg  rK   rF   rD   <module>r{     sU   " " " " " " "  				   				                        : : : : : : : : ' ' ' ' ' ' ' ' ( ( ( ( ( ( ( ( . . . . . . . .                        # " " " " "   / / / / / / / /              , + + + + +                 6999999555555		8	$	$ 
sCx.34 +L+++30333 .|...  
 z~~n6IJJ 08  8 8 8 8@Eu~ " M M M M1;111
  00, 1  
 = = = = = = = =" " " " " " " "J" " " " " " " "J ( '  m$ m$ m$ m$ m$ m$ m$ m$`x* x* x* x* x* x* x* x*v	 	 	 	 	Y 	 	 	 ! ! ! ! ! ! ! ! W W W W WNL W W W   <               V    0 0 0 0 0 0 0 0 	1 	1 	1 	1 	1 	1 	1 	1 $B B B B B B B B0 w'X X X X $
 
 
 
 
 
 
 
6 %( !   < < < <	 	 	 	   $     8      D D D D" " " " "L " " " / / / /5 5 5 5       >    ( ( ( ( ( ( ( (V ( ( ( ( ( ( ( (V /3     /3           
	oo%oo  #U]5$777    & $&    & BD     4 5B! ! ! ! !. $&4 4 4 4 4 4> $&4 4 4 4 4 40            .      :   :) ) ) ) ) ) ) )$) ) ) ) ) ) ) )$9 9 9 9$9 9 9 9*       $I$ I$ I$ I$ I$* I$ I$ I$X $L$ L$ L$ L$ L$+ L$ L$ L$^ $j j j j j j j jZ $a a a a a a a aHK K K K. . . .< < < < < < <rF   