o
    ٷi                     @  s  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
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 d dlmZ d dlmZ d dlmZ d d	lmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(Z)d dl*Z*d dl+Z+d d
l+m,Z, d dl-m.Z. erd dl/m0Z0 dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAe,jBe,jCe,jDe,jEe,jFgZGG dd de#ddZHdd!d"ZIeI ZJG d#d$ d$eKZLG d%d& d&eKZMG d'd( d(eKZNG d)d* d*eKZOG d+d, d,ePeZQG d-d. d.eZReG d/d0 d0ZSeG d1d2 d2ZTeG d3d4 d4ZUe"d5eTeUB ZVd6d7 ZWeG d8d9 d9ZXeG d:d; d;ZYdd=d>ZZdd@dAZ[ddBdCZ\	dddKdLZ]ddZd[Z^ddadbZ_ddcddZ`ddedfZaddhdiZbdjdk ZcdddodpZd	dddsdtZeddvdwZfddydzZgdd}d~ZhdddZidddZjdddZkddddZldddZmddddZndddZo			ddddZpddddZqdddZr		ddddZsdddZtG dd deuZvdddZwg dZxexd ZydddZzdddZ{d ddZ|d ddZ}dddZ~dddZdddńZdddǄZdddɄZddd˄Zddd̈́Zh dΣZdddфZdddӄZdddۄZddd߄ZdS (      )annotationsN)Callable	Coroutine)	dataclassfield)datetime)Enum)Path)Lock)	TYPE_CHECKINGAnyLiteralNewType	TypedDictUnionget_args
get_originget_type_hints)
SpaceStage)ClientConnection)ParameterInfozapi/predict/z
queue/joinz
queue/datauploadloginconfigzinfo?all_endpoints=Truezinfo?serialize=Falsez0https://gradio-space-api-fetcher-v2.hf.space/apiresetzhttps://hf.space/{}zheartbeat/{session_hash}cancelstatec                   @  s^   e Zd ZU ded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< dS )Messagestrmsgdict[str, Any]outputevent_idintrankfloatrank_eta
queue_sizeboolsuccess
list[dict]progress_dataloglevelN)__name__
__module____qualname____annotations__ r2   r2   G/home/ubuntu/.local/lib/python3.10/site-packages/gradio_client/utils.pyr   G   s   
 r   F)totalreturnr   c                  C  sH   zt tdd } t| }|dd}|W S  ty#   Y dS w )Nzpackage.jsonutf-8version )	pkgutilget_datar.   decodestripjsonloadsget	Exception)package_json_datapackage_datar7   r2   r2   r3   get_package_versionT   s   
rC   c                   @     e Zd ZdZdS )TooManyRequestsErrorz.Raised when the API returns a 429 status code.Nr.   r/   r0   __doc__r2   r2   r2   r3   rE   c       rE   c                   @  rD   )
QueueErrorzMRaised when the queue is full or there is an issue adding a job to the queue.NrF   r2   r2   r2   r3   rI   i   rH   rI   c                   @  rD   )InvalidAPIEndpointErrorz(Raised when the API endpoint is invalid.NrF   r2   r2   r2   r3   rJ   o   rH   rJ   c                   @  rD   )SpaceDuplicationErrorz:Raised when something goes wrong with a Space Duplication.NrF   r2   r2   r2   r3   rK   u   rH   rK   c                   @  sD   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdS )ServerMessage	send_hash
queue_full
estimation	send_dataprocess_startsprocess_generatingprocess_completedr,   progress	heartbeatzServer stopped unexpectedly.unexpected_errorclose_streamprocess_streamingN)r.   r/   r0   rM   rN   rO   rP   rQ   rR   rS   r,   rT   rU   server_stoppedrV   rW   rX   r2   r2   r2   r3   rL   {   s    rL   c                   @  sb   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZedddZdddZedddZdS )Statusz'Status codes presented to client users.STARTINGJOINING_QUEUE
QUEUE_FULLIN_QUEUESENDING_DATA
PROCESSING	ITERATINGPROGRESSFINISHED	CANCELLEDLOGstatusr5   r#   c              
   C  s6   t jt jt jt jt jt jt jt jt j	t j
g
}|| S )z'Order of messages. Helpful for testing.)rZ   r[   r\   r]   r^   r_   r`   rb   ra   rc   rd   index)rf   orderr2   r2   r3   ordering   s   
zStatus.orderingotherc                 C  s   |  | |  |k S N)ri   )selfrj   r2   r2   r3   __lt__   s   zStatus.__lt__r   r   c                 C  sX   t jtjt jtjt jtjt jtj	t j
tjt jtjt jtjt jtjt jtjt jtji
|  S )zKMap the raw message from the backend to the status code presented to users.)rL   rM   rZ   r\   rN   r]   rO   r^   rP   r_   rQ   r`   rR   ra   rS   rc   rT   rb   r,   re   rY   )r   r2   r2   r3   msg_to_status   s   zStatus.msg_to_statusN)rf   rZ   r5   r#   )rj   rZ   )r   r   r5   rZ   )r.   r/   r0   rG   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   staticmethodri   rm   rn   r2   r2   r2   r3   rZ      s$    
rZ   c                   @  sD   e Zd ZU ded< ded< ded< ded< ded< edddZdS )ProgressUnit
int | Nonerg   length
str | Noneunitfloat | NonerT   descdatar*   r5   list[ProgressUnit]c                   s    fdd|D S )Nc              
     s<   g | ]} | d | d| d| d| ddqS )rg   rr   rt   rT   rv   )rg   rr   rt   rT   rv   r?   ).0dclsr2   r3   
<listcomp>   s    z)ProgressUnit.from_msg.<locals>.<listcomp>r2   )r}   rw   r2   r|   r3   from_msg   s   
zProgressUnit.from_msgN)rw   r*   r5   rx   )r.   r/   r0   r1   classmethodr   r2   r2   r2   r3   rp      s   
 rp   c                   @  sb   e Zd ZU dZded< ded< ded< ded< d	ed
< ded< ded< dZded< dZded< dS )StatusUpdateIUpdate message sent from the worker thread to the Job on the main thread.rZ   coderq   r$   r'   ru   etazbool | Noner)   zdatetime | Nonetimezlist[ProgressUnit] | Noner+   Nztuple[str, str] | Noner,   rf   zLiteral['status', 'output']type)r.   r/   r0   rG   r1   r,   r   r2   r2   r2   r3   r      s   
 r   c                   @  s:   e Zd ZU dZded< ded< dZded< d	Zded
< dS )OutputUpdater   	list[Any]outputsr(   r)   r!   zLiteral['output']r   FfinalN)r.   r/   r0   rG   r1   r   r   r2   r2   r2   r3   r      s   
 r   Updatec                	   C  s   t tjd d d d t d dS )N)r   r$   r'   r   r)   r   r+   )r   rZ   r[   r   nowr2   r2   r2   r3   create_initial_status_update   s   r   c                   @  s6   e Zd ZU dZeedZded< eedZ	ded< dS )	JobStatuszpThe job status.

    Keeps track of the latest status update and intermediate outputs (not yet implements).
    default_factoryr   latest_statusr   r   N)
r.   r/   r0   rG   r   r   r   r1   listr   r2   r2   r2   r3   r      s   
 r   c                   @  sv   e Zd ZU dZded< ded< ded< ded	< d
Zded< dZded< d
Zded< dZded< e	e
jdZded< dS )CommunicatorzKHelper class to help communicate between the worker thread and main thread.r
   lockr   jobzCallable[..., tuple]prediction_processorr   	reset_urlFr(   should_cancelNrs   r"   thread_completedict[str, str] | Nonerequest_headersr   zasyncio.Queue[Update]updates)r.   r/   r0   rG   r1   r   r"   r   r   r   asyncioQueuer   r2   r2   r2   r3   r   	  s   
 r   r(   c                 C  s   t | tsdS | dS )zN
    Check if the given value is a string that looks like an HTTP(S) URL.
    F)zhttp://zhttps://)
isinstancer   
startswithpossible_urlr2   r2   r3   is_http_url_like  s   

r   r   c                 C  s   ddi}z7t  (}t j| |d}|jdkr&|j| |djW  d   W S |jW  d   W S 1 s4w   Y  W dS  tyE   Y dS w )zb
    Probe the given URL to see if it responds with a 200 status code (to HEAD, then to GET).
    z
User-Agentz8gradio (https://gradio.app/; gradio-team@huggingface.co)headersi  NF)httpxClientheadstatus_coder?   
is_successr@   )r   r   clienthead_requestr2   r2   r3   	probe_url&  s   

(r   c                 C  s   t d t| ot| S )z3
    Check if the given string is a valid URL.
    z^is_valid_url should not be used. Use is_http_url_like() and probe_url(), as suitable, instead.)warningswarnr   r   r   r2   r2   r3   is_valid_url5  s   r   	websocketr   rw   	hash_datahelperCommunicator | Noner    c                   s\  d}i }|s*t |  }| st|rh|jH |jrYt 4 I d H %}|j|j	t
|d}|  t j||ddI d H  W d   I d H  n1 I d H sOw   Y  tj W d    n1 scw   Y  t dI d H  | r| }	t
|	}|r|jn d|v }
tt|d |d|d	d |d
t |d|
rt|d nd d}|di dg }|r|jtjkrz|j| }W n ty } z	|g}W Y d }~nd }~ww |jj !| ||j_"W d    n1 sw   Y  |d dkrt#d|d dkr| $|I d H  n|d dkr"| $|I d H  |d dk}|r|d S )NF)r=   T)return_exceptionsg{Gz?r+   r   r'   r$   r)   r&   r   r'   r$   r)   r   r   r+   r!   rw   rN    Queue is full! Please try again.rM   rP   rS   )%r   create_taskrecvdoner   r   r   AsyncClientpostr   r=   r>   r   gather
concurrentfuturesCancelledErrorsleepresultr   rZ   rn   r?   r   r   rp   r   r   rc   r   r@   r   r   appendr   rI   send)r   rw   r   r   	completedresptaskhttpr   r   has_progressstatus_updater!   r   er2   r2   r3   get_pred_from_ws@  sr   (



4r   r   httpx.Clientdictsse_urlsse_data_urlr   dict[str, str]cookiesr   
ssl_verifyexecutor%concurrent.futures.ThreadPoolExecutordict[str, Any] | Nonec
                 C  s   d|_ |	t||||}
|	t| |||||||	}tjj|
|gtjjd\}}d|_ t|dkr:t	dt| d|D ]}|
   S d S NF)return_whenT   zDid not expect z tasks to be done.)r   submitcheck_for_cancelstream_sse_v0r   r   waitFIRST_COMPLETEDlen
ValueErrorr   )r   rw   r   r   r   r   r   r   r   r   future_cancel
future_sser   _futurer2   r2   r3   get_pred_from_sse_v0  s2   

r   pending_messages_per_eventdict[str, list[Message | None]]r"   protocol'Literal['sse_v1', 'sse_v2', 'sse_v2.1']c                 C  s   d| _ |t| |||}|t| |||}	tjj||	gtjjd\}
}d| _ t|
dkr6t	dt|
 d|
D ]}|
 }|rB||   S d S r   )r   r   r   stream_sse_v1plusr   r   r   r   r   r   	exceptionr   )r   r   r   r   r"   r   r   r   r   r   r   r   r   r   r2   r2   r3   get_pred_from_sse_v1plus  s(   



r   c                 C  s   	 t d | j | jr	 W d    n| jrtj W d    n1 s'w   Y  q| jr>t	j
| jd| ji|||d tj )NT皙?r"   )r=   r   r   verify)r   r   r   r   r   r   r   r   r"   r   r   r   )r   r   r   r   r2   r2   r3   r     s(   


r   c                 C  sD  z| j d||||d}| D ]}	|	d}	t|	dkrq|	drt|	dd  }
|
d tjtj	fv r8q|j
n d|
v }tt|
d |
d	|
d
d |
dt |
d|rdt|
d nd d}|
di dg }|r|jtjkrz|j| }W n ty } z	|g}W Y d }~nd }~ww |jj| ||j_W d    n1 sw   Y  |jrtj |
d dkrtd|
d dkr|
d }||_ | j!|d|i||||d}|"  q|
d dkr|
d   W  d    W S qt#d|	 W d    t#d1 sw   Y  t#d tjjy!    w )NGET)paramsr   r   
r   data:   r   r+   r'   r$   r)   r&   r   r!   rw   rN   r   rP   r"   )r=   r   r   rS   zUnexpected message: z*Did not receive process_completed message.)$stream
iter_linesrstripr   r   r=   r>   rL   r,   rU   r   r   rZ   rn   r?   r   r   rp   r   r   rc   r   r@   r   r   r   r   r   r   r   r   rI   r"   r   raise_for_statusr   )r   rw   r   r   r   r   r   r   responseliner   r   r   r!   r   r   r"   reqr2   r2   r3   r     s   







2
66r   1Literal['sse_v1', 'sse_v2', 'sse_v2.1', 'sse_v3']c                 C  s  z:|| }d }	 t |dkr|d}ntd q|d u s"| jr'tj | j d }|d t	j
krF|d}|d}	|rF|	rF||	f}tt|d |d|dd |d	t |d
d|v rlt|d nd |d}
|di dg }|d t	jkr|dv r|d u rt|}nt|D ]\}}|| }t||}|||< |||< q|r|
jtjkrz| j| }W n ty } z	|g}W Y d }~nd }~ww | jj| | jt ||d	dd |
| j_!| j|
 W d    n1 sw   Y  |d t	j"kr/||= |d	dst#|d $ }n|d }| jt |d|d	dd |d W S |d t	j%kr;t&dq	 tjjyF    w )NTr   r   r   r,   r-   r'   r$   r)   r&   r+   )r   r'   r$   r)   r   r   r+   r,   r!   rw   )sse_v2zsse_v2.1sse_v3)r   r)   )r   r   r)   zServer stopped.)'r   popr   r   r   r   r   r   r   rL   r,   r?   r   rZ   rn   r   r   rp   r   rR   r   	enumerate
apply_diffr   rc   r   r@   r   r   r   r   
put_nowaitr   r   rS   r   itemsrY   r   )r   r   r"   r   pending_messagespending_responses_for_diffsr   log_messager,   r-   r   r!   ivalueprev_output
new_outputr   r   r2   r2   r3   r   $  s   







-

Jr   c                 C  s4   t | } dd }|D ]\}}}|| |||} q| S )Nc                 S  s   t |dkr|dkr|S |dkr| | S td| | }tt |d D ]}|||  }q%|d }|dkr<|||< | S |dkrJ||  |7  < | S |dkrct|tr]|t|| | S |||< | S |dkrxt|trs|t|= | S ||= | S td	| )
Nr   replacer   zUnsupported action: r   adddeletezUnknown action: )r   r   ranger   r   insertr#   )targetpathactionr  currentr  	last_pathr2   r2   r3   
apply_edit  s:   
	

zapply_diff.<locals>.apply_edit)copydeepcopy)objdiffr  r  r  r  r2   r2   r3   r   |  s
   
!r   	file_pathdirrs   c                 C  sN   t |pt td }|jddd |t | j }t| | t	|
 S )N   Texist_okparents)r	   tempfile
gettempdirsecrets	token_hexmkdirnameshutilcopy2r   resolve)r  r  	directorydestr2   r2   r3   create_tmp_copy_of_file  s
   r+  url_pathhf_tokenc           	   	   C  s   |durt j|dd |rdd| ini }t|pt td }|jddd |t| j }t	j
d| |dd	-}|  t|d
}| D ]}|| qHW d   n1 sZw   Y  W d   n1 siw   Y  t| S )z0Kept for backwards compatibility for 3.x spaces.NTr  AuthorizationBearer r  r  r   )r   follow_redirectswb)osmakedirsr	   r   r!  r"  r#  r$  r%  r   r   r   openiter_rawwriter   r(  )	r,  r-  r  r   r)  r  r   fchunkr2   r2   r3   download_tmp_copy_of_file  s&   r:  filenamec                 C  s<   |  drdS t| d }|d ur|dddd}|S )Nz.vttztext/vttr   zx-wavwavzx-flacflac)endswith	mimetypes
guess_typer
  )r;  mimetyper2   r2   r3   get_mimetype  s   
rB  encodingc                 C  s^   |  dd} t| d }|dkrdS |d u rd S t|}|d ur-|dr-|dd  }|S )Nz	audio/wavzaudio/x-wavr   z
audio/flacr=  .r   )r
  r?  r@  guess_extensionr   )rC  r   	extensionr2   r2   r3   get_extension  s   
rG  
file_types	list[str]c                 C  s~   t | }|D ]6}|dkr dS |dr-|d }t| jd }||kr, dS q|d ur<|| dr< dS qdS )NfileTrD  /F)rB  r   lstriplowerr	   suffix)r  rH  	mime_type	file_typefile_extr2   r2   r3   is_valid_file  s   
rR  r8  
str | Pathc                 C  sp   t | d)}t| }t|d}tt| }d|d ur|nd d | 	 W  d    S 1 s1w   Y  d S )Nrbr6   r   r8   ;base64,)r5  base64	b64encodereadr   rB  )r8  rJ  encoded_string
base64_strrA  r2   r2   r3   encode_file_to_base64  s   
$r[  urlc                 C  sL   t | }|  t|j}t|d}t| }d|d ur|nd d | S )Nr6   r   r8   rU  )r   r?   r   rV  rW  contentr   rB  )r\  r   rY  rZ  rA  r2   r2   r3   encode_url_to_base64  s   

r^  r  c                 C  s    t | } t| rt| S t| S rk   )r   r   r^  r[  )r  r2   r2   r3   encode_url_or_file_to_base64  s   r_  c                 c  sr    t  }|rdd| ini }tjd| |d}| D ]	}||7 }|V  qW d    n1 s/w   Y  |V  d S )Nr/  r0  r   r   )	bytearrayr   r   
iter_bytes)r\  r-  arrr   rrw   r2   r2   r3   download_byte_stream  s   
rd  tuple[bytes, str | None]c                 C  s&   t | }| ddd }t||fS )N,r   r  )rG  rsplitrV  	b64decode)rC  rF  rw   r2   r2   r3   decode_base64_to_binary  s   ri     	max_bytesr#   c                 C  s   t j| \}}ddd |D }|| } t|  }||krA||krAt|dkr-	 | S |dd }|| } t|  }||ks$| S )aV  
    Strips invalid characters from a filename and ensures it does not exceed the maximum byte length
    Invalid characters are any characters that are not alphanumeric or one of the following: . _ - ,
    The filename may include an extension (in which case it is preserved exactly as is), or could be just a name without an extension.
    r8   c                 S      g | ]}|  s|d v r|qS )z._-, isalnumrz   charr2   r2   r3   r~   #       z5strip_invalid_filename_characters.<locals>.<listcomp>r   Nr  )r3  r  splitextjoinr   encode)r;  rk  r%  extfilename_lenr2   r2   r3   !strip_invalid_filename_characters  s   rw  original_namec                 C  s    d dd | D dd S )zECleans up a Python parameter name to make the API info more readable.r8   c                 S  rl  )z _rm  ro  r2   r2   r3   r~   3  rq  z,sanitize_parameter_names.<locals>.<listcomp> r   )rs  r
  rM  )rx  r2   r2   r3   sanitize_parameter_names0  s   rz  str | Path | Noneprefixc           	      C  s   t |pt td }|jddd t| \}}|d urA|d u rAt |j}|}d|v rA|d|d }||dd d  }|d urIt	|}|d u rVtj
d||d}ntj
d|d| |d	}|| |  |S )
Nr  Tr  rD  r   r   F)r  r|  r  )r  r|  rN  r  )r	   r   r!  r"  r#  r$  ri  r%  rg   rw  NamedTemporaryFiler7  flush)	rC  r  r  r|  r)  rw   rF  r;  file_objr2   r2   r3   decode_base64_to_file9  s0   

r  jsnstr | dict | listc                 C  sT   |d urt j|dd tjdd|dd}t| trt| } t| | |	  |S )NTr.  Fz.jsonzw+)r  rN  r  mode)
r3  r4  r   r}  r   r   r=   r>   dumpr~  )r  r  r  r2   r2   r3   dict_or_str_to_json_file\  s   

r  dict | listc                 C  s6   t | }t|W  d    S 1 sw   Y  d S rk   )r5  r=   load)r  r8  r2   r2   r3   file_to_jsonj  s   
$r  ,  space_idtimeout_in_secondsc              
   C  sh   t jj|dtd}ztjd|  dd|i|d W d S  tjy3 } ztdt	|  d|d }~ww )	Ngradio_client)tokenlibrary_namelibrary_versionz"https://huggingface.co/api/spaces/z
/sleeptimeseconds)r=   r   z>Could not set sleep timeout on duplicated Space. Please visit z5 to set a timeout manually to reduce billing charges.)
huggingface_hubutilsbuild_hf_headers__version__r   r   HTTPStatusErrorrK   	SPACE_URLformat)r  r-  r  r   r   r2   r2   r3   set_space_timeoutr  s&   
r  funcr   r   c                 O  s"   t jjt j | g|R i |S )a  
    Runs async functions in sync scopes. Can be used in any scope.

    Example:
        if inspect.iscoroutinefunction(block_fn.fn):
            predictions = utils.synchronize_async(block_fn.fn, *processed_input)

    Args:
        func:
        *args:
        **kwargs:
    )fsspecasynsyncget_loop)r  argskwargsr2   r2   r3   synchronize_async  s   "r  c                   @  s   e Zd ZdS )APIInfoParseErrorN)r.   r/   r0   r2   r2   r2   r3   r    s    r  schemac                 C  sz   d| v rdS d| v rdS d| v r| d S |  drdS |  dr"dS |  dr)dS |  dr0dS d| vr6i S td|  )	Nconstenumr   $refoneOfanyOfallOfzCannot parse type for )r?   r  )r  r2   r2   r3   get_type  s"   



r  )a-  Dict(path: str | None (Path to a local file), url: str | None (Publicly available url or base64 encoded image), size: int | None (Size of image in bytes), orig_name: str | None (Original filename), mime_type: str | None (mime type of image), is_stream: bool (Can always be set to False), meta: Dict())a-  dict(path: str | None (Path to a local file), url: str | None (Publicly available url or base64 encoded image), size: int | None (Size of image in bytes), orig_name: str | None (Original filename), mime_type: str | None (mime type of image), is_stream: bool (Can always be set to False), meta: dict())z`Dict(path: str, url: str | None, size: int | None, orig_name: str | None, mime_type: str | None)zqDict(path: str, url: str | None, size: int | None, orig_name: str | None, mime_type: str | None, is_stream: bool)zDict(path: str, url: str | None, size: int | None, orig_name: str | None, mime_type: str | None, is_stream: bool, meta: Dict())zdict(path: str, url: str | None, size: int | None, orig_name: str | None, mime_type: str | None, is_stream: bool, meta: dict())zdict(path: str, url: str | None, size: int | None, orig_name: str | None, mime_type: str | None, is_stream: bool, meta: dict(_type: Literal[gradio.FileData]))r  c                 C  s   t | | d}|tdS )N$defsfilepath)_json_schema_to_python_typer?   r
  CURRENT_FILE_DATA_FORMAT)r  type_r2   r2   r3   json_schema_to_python_type  s   r  c           
        sV  | i krdS t | }|i krd| di v rdS dS |dkr,t | d dd   S |dkr2d	S |d
kr>d| d
  dS |dkrRdddd | d D  d S |dkrXdS |dkr^dS |dkrddS |dkrjdS |dkr| dg }d|v rd fdd|d D }d| dS d| v rd fdd| d D }d| dS t| }d| dS |d krd!d" | d#i } fd$d| D }d%| v r| d% }t|tr|r|d&g7 }n|d't|  g7 }d|}d(| d)S |d*v r	d+ fd,d| | D }|S |d-kr$d fd.d/| | D }	d0|	 d}|S td1|  )2z/Convert the json schema into a python type hintr   r=   descriptionz str | float | bool | list | dictr  rK  r  nullNoner  zLiteral[]r  z, c                 S  s   g | ]
}d t | d  qS )')r   )rz   vr2   r2   r3   r~     s    z/_json_schema_to_python_type.<locals>.<listcomp>integerr#   stringr   booleanr(   numberr%   arrayr  prefixItemsc                      g | ]}t | qS r2   r  rz   r  defsr2   r3   r~         ztuple[c                   r  r2   r  r  r  r2   r3   r~     r  zlist[objectc                 S  s    |  drd|  d dS dS )Nr  z ()r8   ry   )r  r2   r2   r3   get_desc  s    z-_json_schema_to_python_type.<locals>.get_desc
propertiesc                   s4   g | ]\}}|d kr| dt |  | qS )r  : r  )rz   nr  r  r  r2   r3   r~     s
    additionalPropertieszstr, Anyzstr, zdict(r  )r  r  z | c                   r  r2   r  r  r  r2   r3   r~     r  r  c                 3  s    | ]}t | V  qd S rk   r  r  r  r2   r3   	<genexpr>  s    z._json_schema_to_python_type.<locals>.<genexpr>zAll[zCannot parse schema )	r  r?   r  splitrs  r  r   r(   r  )
r  r  r  r  elementspropsdesadditional_propertiesrv   rw   r2   r  r3   r    sz   



r  	type_hintc                 C  s"   zt | W S  ty   i  Y S w rk   )_python_type_to_json_schemar@   )r  r2   r2   r3   python_type_to_json_schema  s
   
r  c                 C  s  | t du r
ddiS | tu ri S | tu rddiS | tu r ddiS | tu r(ddiS | tu r0ddiS | tu r9di d	S | tu rBd
i dS | tu rJdd
iS | t	u sR| t
u rWd
ddS | tu s_| tu rddddS t| }|tu rt| }t|dkr|d|d iS dt|iS |tu st|dr|jdkst|dkrt| }t|dkrt d|v rtdd |D }t|}dddi|giS ddd |D iS |tu rt| }|sd
i dS |d }d
t|dS |tu rt| }|sdd
iS t|dkr|d du rd
t|d dS d
dd |D t|t|d S |t	u s|t
u r6t| }|s*d
ddS |d }d
dt|d!S |tu r]t| }|sGdi d	S |\}}	|turTtd"dt|	d	}|S t| rtt| trtd#d | D }
d|
iS t| rt| d$ri }g }t| }| D ].\}}t|||< t| d%r| jr|| qt| d&r| j| j s|| qd|d'}|r||d(< |S i S ))z,Convert a Python type hint to a JSON schema.Nr   r  r  r  r  r  r  )r   r  r  )r   r  T)r   uniqueItemsbyte)r   r  r   r  r   r  r.   	UnionType|   c                 s  s     | ]}|t d ur|V  qd S rk   )r   rz   tr2   r2   r3   r  E  s    z._python_type_to_json_schema.<locals>.<genexpr>r  r  c                 S     g | ]}t |qS r2   r  r  r2   r2   r3   r~   H      z/_python_type_to_json_schema.<locals>.<listcomp>.c                 S  r  r2   r  r  r2   r2   r3   r~   X  r  )r   r  minItemsmaxItems)r   r  r  z0JSON Schema only supports string keys in objectsc                 S  s   g | ]}|j qS r2   )r  )rz   itemr2   r2   r3   r~   u  s    r1   	__total____dataclass_fields__)r   r  required)!r   r   r   r#   r%   r(   r   r   tupleset	frozensetbytesr`  r   r   r   r   r   hasattrr.   nextr  r   inspectisclass
issubclassr   r   r  r  r   r  default)r  originliteral_valuestypes
other_typer  r  	item_typekey_type
value_typeenum_valuesr  r  hints
field_name
field_typer2   r2   r3   r    s   














r  json_objis_rootCallable[..., bool]c                 C  sz   || r|| S t | tr"i }|  D ]\}}t|||||< q|S t | ttfr;g }| D ]}|t||| q-|S | S )zk
    Traverse a JSON object and apply a function to each element that satisfies the is_root condition.
    )r   r   r  traverser   r  r   r  r  r  new_objkeyr  r  r2   r2   r3   r    s   
r  'Callable[..., Coroutine[Any, Any, Any]]c                   s   || r|| I dH S t | tr)i }|  D ]\}}t|||I dH ||< q|S t | ttfrEg }| D ]}|t|||I dH  q4|S | S )zq
    Traverse a JSON object and apply a async function to each element that satisfies the is_root condition.
    N)r   r   r  async_traverser   r  r   r  r2   r2   r3   r     s   
r   api_infoc                   s&   t | | d t fddtD S )Nr  c                 3  s    | ]}| v V  qd S rk   r2   )rz   file_data_formatinfor2   r3   r    s    z value_is_file.<locals>.<genexpr>)r  r?   anyFILE_DATA_FORMATS)r  r2   r  r3   value_is_file  s   r  c                 C  s&   t | ttfot|  ot|  S )zp
    Check if the given value is a valid str or Path filepath on the local filesystem, e.g. "path/to/file".
    )r   r   r	   existsis_file)sr2   r2   r3   is_filepath  s   &r  c                 C  s    t | tod| v ot | d tS )z
    Check if the given value is a valid FileData object dictionary in versions of Gradio<=4.20, e.g.
    {
        "path": "path/to/file",
    }
    r  )r   r   r   r{   r2   r2   r3   is_file_obj  s    r  c                 C  s<   t | tod| v ot | d tod| v o| d dddkS )z
    Check if the given value is a valid FileData object dictionary in newer versions of Gradio
    where the file objects include a specific "meta" key, e.g.
    {
        "path": "path/to/file",
        "meta": {"_type: "gradio.FileData"}
    }
    r  meta_typer8   gradio.FileData)r   r   r   r?   r  r2   r2   r3   is_file_obj_with_meta  s   

r  c                 C  s   t | od| v ot| d tS )a>  
    Check if the given value is a valid FileData object dictionary in newer versions of Gradio
    where the file objects include a specific "meta" key, and ALSO include a "url" key, e.g.
    {
        "path": "path/to/file",
        "url": "/file=path/to/file",
        "meta": {"_type: "gradio.FileData"}
    }
    r\  )r  r   r   r  r2   r2   r3   is_file_obj_with_url  s   
r  >   boxrowtabformtabsgroupr   columndatasetsidebartabitem	accordioninterpretationfilepath_or_urlc                 C  sl   t | }|ddid}t|ri ||dd |dS t| r.i |dt|jiS td| d	)
Nr  r  )r  r  rK  r  )	orig_namer\  r   zFile z; does not exist on local filesystem and is not a valid URL.)r   r   r  r	   r  r%  r   )r  r
  rw   r2   r2   r3   handle_file  s   
r!  c                 C  s   t d t| S )NzXfile() is deprecated and will be removed in a future version. Use handle_file() instead.)r   r   r!  )r  r2   r2   r3   rJ    s   rJ  parameters_infolist[ParameterInfo] | Noner  r  r  r   c                 C  s@  G dd dt }t|}| d u r|rtd|S t|}||jgt| |   }i }g }t| D ]2\}}	d|	v rF|||	d < ||	d  n|d|  |	ddrb|| |jkrb|	d||< q0| D ]$\}
}|
|v r||
 |k r}t	d	|
 d
||||
 < qgt	d	|
 d|j|v rt	d||
|j  |S )Nc                   @  rD   )z!construct_args.<locals>._KeywordsNO_VALUEN)r.   r/   r0   r$  r2   r2   r2   r3   	_Keywords  s    r%  zzThis endpoint does not support key-word arguments Please click on 'view API' in the footer of the Gradio app to see usage.parameter_namez	argument parameter_has_defaultFparameter_defaultzParameter `zs` is already set as a positional argument. Please click on 'view API' in the footer of the Gradio app to see usage.zl` is not a valid key-word argument. Please click on 'view API' in the footer of the Gradio app to see usage.z)No value provided for required argument: )r   r   r   r   r$  r   r   r?   r  	TypeErrorrg   )r"  r  r  r%  _argsnum_argskwarg_arg_mappingkwarg_namesrg   
param_infor  r  r2   r2   r3   construct_args  sJ   



r/  r   httpx.Responsec              
   C  s   | j dkrQ|  dg }g }t|D ]+\}}|dddkr>|ddu r>|dd	| }|d
| d|dd  q|dt| d |rSd|S dS dS )z
    If the request is a 422 error and the detail contains a validation error message, return the message. Otherwise, return None.
    i  detail__type__r8   validateis_validFr&  
parameter_z- r  messager   z  parameter(s) failed validation:r   N)r   r=   r?   r   r   r  r   rs  )r   r1  validation_messagesrg   
error_info
param_namer2   r2   r3   extract_validation_messageI  s$   

r:  )r5   r   )r5   r(   )r   r   r5   r(   rk   )
r   r   rw   r   r   r   r   r   r5   r    )r   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(   r   r   r5   r   )r   r   r   r   r   r   r   r   r"   r   r   r   r   r(   r   r   r5   r   )r   r   r   r   r   r   r   r(   )r   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r    )
r   r   r   r   r"   r   r   r   r5   r    )r  r   r  rs   r5   r   )NN)r,  r   r-  rs   r  rs   r5   r   )r;  r   r5   rs   )rC  r   r5   rs   )r  r   rH  rI  r5   r(   )r8  rS  )r\  r   )r  rS  )rC  r   r5   re  )rj  )r;  r   rk  r#   r5   r   )rx  r   r5   r   )NNN)rC  r   r  rs   r  r{  r|  rs   )r  r  r  r{  )r  rS  r5   r  )Nr  )r  r   r-  rs   r  r#   )r  r   r5   r   )r  r   )r  r   r5   r   )r  r   r5   r   )r  r   r  r   r  r  r5   r   )r  r   r  r  r  r  r5   r   )r  r   r5   r(   )r  rS  )r"  r#  r  r  r  r   r5   r   )r   r0  r5   rs   )
__future__r   r   rV  concurrent.futuresr   r  r  r=   r?  r3  r9   r"  r&  r   r   r   collections.abcr   r   dataclassesr   r   r   r  r   pathlibr	   	threadingr
   typingr   r   r   r   r   r   r   r   r   fsspec.asynr  r   r  r   websockets.asyncio.clientr   gradio_client.data_classesr   API_URL
SSE_URL_V0SSE_DATA_URL_V0SSE_URLSSE_DATA_URLWS_URL
UPLOAD_URL	LOGIN_URL
CONFIG_URLAPI_INFO_URLRAW_API_INFO_URLSPACE_FETCHER_URL	RESET_URLr  HEARTBEAT_URL
CANCEL_URLSTATE_COMPONENTNO_APP_FILECONFIG_ERRORBUILD_ERRORRUNTIME_ERRORPAUSEDINVALID_RUNTIMEr   rC   r  r@   rE   rI   rJ   rK   r   rL   rZ   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+  r:  rB  rG  rR  r[  r^  r_  rd  ri  rw  rz  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  SKIP_COMPONENTSr!  rJ  r/  r:  r2   r2   r2   r3   <module>   s    ,	
4	


	

?
'
 

FX/	

	






#






Ms




3