
    ;3h                       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rd 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,j                  e,j                  e,j                  e,j                  e,j                  gZG G d de#d      ZHdddZI eI       ZJ G d  d!eK      ZL G d" d#eK      ZM G d$ d%eK      ZN G d& d'eK      ZO G d( d)ePe      ZQ G d* d+e      ZRe G d, d-             ZSe G d. d/             ZTd0 ZUe G d1 d2             ZVe G d3 d4             ZWded5ZXdfd6ZYdfd7ZZ	 dg	 	 	 	 	 	 	 	 	 dhd8Z[	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 did9Z\	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 djd:Z]	 	 	 	 	 	 	 	 dkd;Z^	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dld<Z_	 	 	 	 	 	 	 	 	 	 dmd=Z`d> Zadgdnd?Zb	 do	 	 	 	 	 	 	 dpd@ZcdqdAZddrdBZedsdCZfdtdDZgdudEZhdvdFZidgdudGZjdwdHZkdxdydIZldzdJZm	 	 	 d{	 	 	 	 	 	 	 d|dKZndgd}dLZod~dMZp	 	 d	 	 	 	 	 ddNZqddOZr G dP dQes      ZtddRZug dSZvevdT   ZwddUZxddVZyddWZzddXZ{ddYZ|	 	 	 	 	 	 	 	 ddZZ}dd[Z~ded\Zded]Zded^Zded_Zh d`ZddaZddbZ	 	 	 	 	 	 	 	 ddcZy)    )annotationsN)Callable	Coroutine)	dataclassfield)datetime)Enum)Path)Lock)	TYPE_CHECKINGAnyLiteralOptional	TypedDictUnionget_args
get_originget_type_hints)
SpaceStage)WebSocketCommonProtocol)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                  r    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<   y)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__     S/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/gradio_client/utils.pyr   r   G   s6    	HM
IOOM	HJr5   r   F)totalc                     	 t        j                  t        d      j                  d      j	                         } t        j                  |       }|j                  dd      }|S # t        $ r Y yw xY w)Nzpackage.jsonutf-8version )	pkgutilget_datar0   decodestripjsonloadsget	Exception)package_json_datapackage_datar:   s      r6   get_package_versionrF   T   sj    X~6==gFLLN 	 zz"34""9b1 s   AA" "	A.-A.c                      e Zd ZdZy)TooManyRequestsErrorz.Raised when the API returns a 429 status code.Nr0   r1   r2   __doc__r4   r5   r6   rH   rH   c   s    8r5   rH   c                      e Zd ZdZy)
QueueErrorzMRaised when the queue is full or there is an issue adding a job to the queue.NrI   r4   r5   r6   rL   rL   i   s    Wr5   rL   c                      e Zd ZdZy)InvalidAPIEndpointErrorz(Raised when the API endpoint is invalid.NrI   r4   r5   r6   rN   rN   o   s    2r5   rN   c                      e Zd ZdZy)SpaceDuplicationErrorz:Raised when something goes wrong with a Space Duplication.NrI   r4   r5   r6   rP   rP   u   s    Dr5   rP   c                  D    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y)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)r0   r1   r2   rS   rT   rU   rV   rW   rX   rY   r.   rZ   r[   server_stoppedr\   r]   r^   r4   r5   r6   rR   rR   {   sL    IJJI%N-+
CHI3N)!L+r5   rR   c                  h    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       ZddZedd       Zy)Statusz'Status codes presented to client users.STARTINGJOINING_QUEUE
QUEUE_FULLIN_QUEUESENDING_DATA
PROCESSING	ITERATINGPROGRESSFINISHED	CANCELLEDLOGc           
     T   t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  g
}|j                  |       S )z'Order of messages. Helpful for testing.)ra   rb   rc   rd   re   rf   rg   ri   rh   rj   rk   index)statusorders     r6   orderingzStatus.ordering   sn     OO  OOOOOO
 {{6""r5   c                H    | j                  |       | j                  |      k  S N)rq   )selfothers     r6   __lt__zStatus.__lt__   s    }}T"T]]5%999r5   c                d   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.)rR   rS   ra   rc   rT   rd   rU   re   rV   rf   rW   rg   rX   rh   rY   rj   rZ   ri   r.   rl   r_   )r!   s    r6   msg_to_statuszStatus.msg_to_status   s     ##V%9%9$$f&7&7$$foo##V%8%8((&*;*;,,f.>.>++V__""FOOvzz((&//
  	r5   N)ro   ra   returnr%   )ru   ra   )r!   r    ry   ra   )r0   r1   r2   rJ   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   staticmethodrq   rv   rx   r4   r5   r6   ra   ra      sg    1H#MJH!LJIHHI
C# # :  r5   ra   c                  R    e Zd ZU ded<   ded<   ded<   ded<   ded<   edd	       Zy
)ProgressUnitzOptional[int]rn   lengthzOptional[str]unitzOptional[float]rZ   descc                    |D cg c]Z  } | |j                  d      |j                  d      |j                  d      |j                  d      |j                  d            \ c}S c c}w )Nrn   r}   r~   rZ   r   )rn   r}   r~   rZ   r   rB   )clsdatads      r6   from_msgzProgressUnit.from_msg   sc     	
  eeGnuuXUU6]z*UU6]	
 		
 	
s   AA'N)r   r,   ry   zlist[ProgressUnit])r0   r1   r2   r3   classmethodr   r4   r5   r6   r|   r|      s2    



 

r5   r|   c                  f    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<   y)StatusUpdatezIUpdate message sent from the worker thread to the Job on the main thread.ra   codez
int | Noner&   r)   zfloat | Noneetazbool | Noner+   zdatetime | Nonetimezlist[ProgressUnit] | Noner-   Nztuple[str, str] | Noner.   )r0   r1   r2   rJ   r3   r.   r4   r5   r6   r   r      s9    S
L
	
,,"&C	&r5   r   c            	     f    t        t        j                  d d d d t        j                         d       S )N)r   r&   r)   r   r+   r   r-   )r   ra   rb   r   nowr4   r5   r6   create_initial_status_updater      s.    __\\^ r5   c                  J    e Zd ZU dZ ee      Zded<    ee      Z	ded<   y)	JobStatuszpThe job status.

    Keeps track of the latest status update and intermediate outputs (not yet implements).
    )default_factoryr   latest_statusz	list[Any]outputsN)
r0   r1   r2   rJ   r   r   r   r3   listr   r4   r5   r6   r   r      s(    
 #(8T"UM<Ut4GY4r5   r   c                  d    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<   y)CommunicatorzKHelper class to help communicate between the worker thread and main thread.r   lockr   jobzCallable[..., tuple]prediction_processorr    	reset_urlFr*   should_cancelN
str | Noner$   thread_complete)r0   r1   r2   rJ   r3   r   r$   r   r4   r5   r6   r   r      s8    U
J	N..NM4Hj!OT!r5   r   c                F    t        | t              sy| j                  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_urls    r6   is_http_url_liker     s#     lC(""#:;;r5   c                .   ddi}	 t        j                         5 }t        j                  | |      }|j                  dk(  r&|j	                  | |      j
                  cddd       S |j
                  cddd       S # 1 sw Y   yxY w# t        $ r Y yw xY 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_coderB   
is_successrC   )r   r   clienthead_requests       r6   	probe_urlr     s     WXG\\^ 	+v ::lGDL''3.zz,z@KK	+ 	+  **		+ 	+ 	+
  s;   B AA<	B 'A<2	B <BB B 	BBc                \    t        j                  d       t        |       xr 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   s    r6   is_valid_urlr   %  s-     MM	H L)Ei.EEr5   c                  K   d}i }|st        j                  | j                               }|j                         s|r|j                  5  |j
                  rt        j                         4 d {   }|j                  |j                  t        j                  |            }|j                          t        j                  ||d       d {    d d d       d {    t        j                  j!                         	 d d d        t        j"                  d       d {    |j                         s|j%                         }	t        j                  |	      }|r1|j                  5  d|v }
t'        t(        j+                  |d         |j-                  d      |j-                  d	d       |j-                  d
      t/        j0                         |j-                  d      |
rt2        j5                  |d         nd       }|j-                  di       j-                  dg       }|rR|j6                  t(        j8                  k7  r5	  |j:                  | }|j>                  j@                  jC                  |       ||j>                  _"        d d d        |d   dk(  rtG        d      |d   dk(  r| jI                  |       d {    n!|d   dk(  r| jI                  |       d {    |d   dk(  }|s|d   S 7 7 -7  # 1 d {  7  sw Y   1xY w# 1 sw Y   xY w7 # t<        $ r}|g}Y d }~d }~ww xY w# 1 sw Y   xY w7 7 kw)NF)r@   T)return_exceptionsg{Gz?r-   r!   r)   r&   r+   r(   r   r)   r&   r+   r   r   r-   r#   r   rT    Queue is full! Please try again.rS   rV   rY   )%asynciocreate_taskrecvdoner   r   r   AsyncClientpostr   r@   rA   r   gather
concurrentfuturesCancelledErrorsleepresultr   ra   rx   rB   r   r   r|   r   r   rj   r   rC   r   r   appendr   rL   send)	websocketr   	hash_datahelper	completedresptaskhttpr   r!   has_progressstatus_updater#   r   es                  r6   get_pred_from_wsr   0  s     ID ""9>>#34))+[[ B++ $)#4#4#6 V V$$(II & 0 0tzz)7L %. %E
 !KKM")..uPT"UUUV V )00??AA ,B --%%%! ))+" kkmzz# 9.$6 ,--d5k:#xx5&$/ HHY/!,# #/"7"7_8M"N
! (B/33FB?m00FOOC%!<!<!<f!E JJ&&--f5+8

()9* ;,&?@@;+%..+++%[K'..&&&K#66	g h >UV VV V V V	B B &* % %"#%#9 90 ,&s   A	M%L0K:1L4ALK=LL L !"L M$L&%M:4M.CML)6M7MM!M$M%M5M:L=L LL		L
L	LL#	M)	L?2L:5M:L??MMMMc
                   d|_         |	j                  t        ||||      }
|	j                  t        | |||||||	      }t        j
                  j                  |
|gt        j
                  j                        \  }}d|_         t        |      dk7  rt        dt        |       d      |D ]  }|j                         c S  y 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   r   r   r   sse_urlsse_data_urlr   cookies
ssl_verifyexecutorfuture_cancel
future_sser   _futures                  r6   get_pred_from_sse_v0r   o  s     #FOO&'7JM 
J   %%	
#&&66 & GD! "F
4yA~?3t9+5GHII }}r5   c                   d| _         |j                  t        | |||      }|j                  t        | |||      }	t        j
                  j                  ||	gt        j
                  j                        \  }
}d| _         t        |
      dk7  rt        dt        |
       d      |
D ]'  }|j                         }|r||j                         c S  y r   )r   r   r   stream_sse_v1plusr   r   r   r   r   r   	exceptionr   )r   r   r   pending_messages_per_eventr$   protocolr   r   r   r   r   r   r   r   s                 r6   get_pred_from_sse_v1plusr     s     #FOO&'7JM 6#=xJ   %%	
#&&66 & GD! "F
4yA~?3t9+5GHII $$&	O}}	r5   c                   	 t        j                  d       | j                  5  | j                  r
	 d d d        n4| j                  rt
        j                  j                         	 d d d        l| j                  r0t        j                  | j                  d| j                  i|||       t
        j                  j                         # 1 sw Y   dxY w)N皙?r$   )r@   r   r   verify)r   r   r   r   r   r   r   r   r$   r   r   r   )r   r   r   r   s       r6   r   r     s     

4[[ 	:##	: 	: %% ((7799 &	:  

foo.	
 


+
+
--	: 	:s   C*CCc                   	 | j                  d||||      5 }|j                         D ]H  }	|	j                  d      }	t        |	      dk(  r$|	j	                  d      rt        j                  |	dd        }
|
d   t        j                  t        j                  fv rt|j                  5  d|
v }t        t        j                  |
d         |
j                  d	      |
j                  d
d       |
j                  d      t        j                          |
j                  d      |rt"        j%                  |
d         nd       }|
j                  di       j                  dg       }|rR|j&                  t        j(                  k7  r5	  |j*                  | }|j.                  j0                  j3                  |       ||j.                  _        d d d        |j6                  rt8        j:                  j=                         |
d   dk(  rt?        d      |
d   dk(  r9|
d   }||_         | jC                  |d|i||||      }|jE                          #|
d   dk(  s-|
d   c cd d d        S tG        d|	        	 d d d        tG        d      # t,        $ r}|g}Y d }~d }~ww xY w# 1 sw Y   xY w# 1 sw Y   tG        d      xY w# t8        j:                  j<                  $ r  w xY w)NGET)paramsr   r   
r   data:   r!   r-   r)   r&   r+   r(   r   r#   r   rT   r   rV   r$   )r@   r   r   rY   zUnexpected message: z*Did not receive process_completed message.)$stream
iter_linesrstripr   r   r@   rA   rR   r.   r[   r   r   ra   rx   rB   r   r   r|   r   r   rj   r   rC   r   r   r   r   r   r   r   r   rL   r$   r   raise_for_statusr   )r   r   r   r   r   r   r   r   responseliner   r   r   r#   r   r   r$   reqs                     r6   r   r     s   9]]  
 5	D  ++- .D{{4(t9>??7+::d12h/DE{}'8'8-:Q:Q&RR  A'6$'>(4!'!5!5d5k!B'+xx'=!%&$!7$(HHY$7!) $ 4+ +7*?*?_@U*V!%
) "&(B!7!;!;FB!G!m&8&8FOO&K-)D)D)Df)M #JJ..55f=3@

0)A* --(00??AAE{l2()KLLe3#'
#3*2$kk(",h!L$!L)!L$+$+	 *  ,,.e(;;#H~-g5	D 5	Dj %';D6%BCC].D5	Dl EFF- $- -*+-#A A5	Dl EFF,, sy   K BJ/)CJ#J	6J#BJ/J/	K &J/6K 		J 	J	J#J 	 J##J,(J//K4K K$c                x   	 ||   }d }	 t        |      dkD  r|j                  d      }nt        j                  d       7|| j                  rt
        j                  j                         | j                  5  d }|d   t        j                  k(  r*|j                  d      }|j                  d      }	|r|	r||	f}t        t        j                  |d         |j                  d      |j                  dd       |j                  d      t        j                          |j                  d	      d
|v rt"        j%                  |d
         nd |      }
|j                  di       j                  dg       }|d   t        j&                  k(  r@|dv r<|t)        |      }n.t+        |      D ]   \  }}||   }t-        ||      }|||<   |||<   " |rR|
j.                  t        j0                  k7  r5	  | j2                  | }| j6                  j8                  j;                  |       |
| j6                  _        d d d        |d   t        j>                  k(  r||= |d   S |d   t        j@                  k(  rtC        d      k# t4        $ r}|g}Y d }~d }~ww xY w# 1 sw Y   cxY w# t
        j                  j                  $ r  w xY w)Nr   r   r!   r.   r/   r)   r&   r+   r(   r-   )r   r)   r&   r+   r   r   r-   r.   r#   r   )sse_v2zsse_v2.1sse_v3zServer stopped.)"r   popr   r   r   r   r   r   r   rR   r.   rB   r   ra   rx   r   r   r|   r   rX   r   	enumerate
apply_diffr   rj   r   rC   r   r   r   r   rY   r_   r   )r   r   r$   r   pending_messagespending_responses_for_diffsr!   log_messager.   r/   r   r#   ivalueprev_output
new_outputr   r   s                     r6   r   r     s   >5h?&*##$q(&**1-

4 {f44 ((7799 (9"u:!2!22''%.CGGG,Eu'*El ,--c%j9"ww|4.GGI.!
+&#- #/"7"7O8L"M#! 2.2262>u:!A!AAh S G
 3:6:6l3(1&(9 3HAu*Ea*HK)3K)GJ=G7:(2F1I	3 m00FOOC%!<!<!<f!E JJ&&--f5+8

(Q(9R 5z]<<<.x88}$U};;; !233o ^ % %"#%K(9 (9^ ,, sU   A6J 8E.J'I566J,%J #J 5	J>JJJJJJ J9c                b    t        j                  |       } d }|D ]  \  }}} || |||      }  | S )Nc                   t        |      dk(  r|dk(  r|S |dk(  r| |z   S t        d|       | }t        t        |      dz
        D ]
  }|||      } |d   }|dk(  r|||<   | S |dk(  r||xx   |z  cc<   | S |dk(  r4t        |t              r|j                  t        |      |       | S |||<   | S |dk(  r#t        |t              r|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_paths          r6   
apply_editzapply_diff.<locals>.apply_edit^  s?   t9>"8#~% #7x!@AAs4y1}% 	'Ad1g&G	' H	Y!&GI   xI%'  u_'4(s9~u5  &+	"  x'4(C	N+ 	 I&  /x899r5   )copydeepcopy)objdiffr  r  r  r  s         r6   r   r   [  sE    
--
CB  $ 3edFE23 Jr5   c                $   t        |xs t        j                               t        j                  d      z  }|j                  dd       |t        |       j                  z  }t        j                  | |       t        |j                               S )N   Texist_okparents)r
   tempfile
gettempdirsecrets	token_hexmkdirnameshutilcopy2r    resolve)	file_pathdir	directorydests       r6   create_tmp_copy_of_filer,    sm    S1H//12W5F5Fr5JJIOOT4O0tI+++D
LLD!t||~r5   c                L   |t        j                  |d       |rdd|z   ini }t        |xs t        j                               t        j                  d      z  }|j                  dd       |t        |       j                  z  }t        j                  d| |d	      5 }|j                          t        |d
      5 }|j                         D ]  }|j                  |        	 ddd       ddd       t        |j!                               S # 1 sw Y   *xY w# 1 sw Y   .xY w)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'  )	url_pathhf_tokenr)  r   r*  r(  r   fchunks	            r6   download_tmp_copy_of_filer<    s	    
C$'9A	H 45rGS1H//12W5F5Fr5JJIOOT4O0DN///I	x4
 	!!#)T" 	a!**, 		 y  "##	 		 s$    D='D%DD	DD#c                    | j                  d      ryt        j                  |       d   }|"|j                  dd      j                  dd      }|S )Nz.vttztext/vttr   zx-wavwavzx-flacflac)endswith	mimetypes
guess_typer
  )filenamemimetypes     r6   get_mimetyperE    sR     ##H-a0H##GU3;;HfMOr5   c                    | j                  dd      } t        j                  |       d   }|dk(  ry|y t        j                  |      }||j	                  d      r|dd  }|S )Nz	audio/wavzaudio/x-wavr   z
audio/flacr?  .r   )r
  rA  rB  guess_extensionr   )encodingtype	extensions      r6   get_extensionrL    sp    ];H)!,D|	))$/I!5!5c!:abM	r5   c                <   t        |       }|D ]  }|dk(  r y|j                  d      rY|j                  d      j                         }t	        |       j
                  j                  d      j                         }||k(  sr y|w|j                  | d      s y y)NfileTrG  /F)rE  r   lstriplowerr
   suffix)r(  
file_types	mime_type	file_typefile_exts        r6   is_valid_filerW    s    Y'I 		$!((-335II--44S9??AHH$"y';';ykO'L	 r5   c                    t        | d      5 }t        j                  |j                               }t	        |d      }t        t	        |             }d||ndz   dz   |z   	 cd d d        S # 1 sw Y   y xY w)Nrbr9   r   r;   ;base64,)r5  base64	b64encodereadr    rE  )r:  rN  encoded_string
base64_strrD  s        r6   encode_file_to_base64r`    s{    	a 	
$))$))+61
A'#/xR9 	
		
 	
 	
s   AA**A3c                    t        j                  |       }|j                          t        j                  |j
                        }t        |d      }t        |       }d||ndz   dz   |z   S )Nr9   r   r;   rZ  )r   rB   r   r[  r\  contentr    rE  )urlr   r^  r_  rD  s        r6   encode_url_to_base64rd    sc    99S>D%%dll3N^W-JC Hx38<zIJVr5   c                Z    t        |       } t        |       rt        |       S t        |       S rs   )r    r   rd  r`  )r  s    r6   encode_url_or_file_to_base64rf    s)    t9D#D)) &&r5   c              #     K   t               }|rdd|z   ini }t        j                  d| |      5 }|j                         D ]  }||z  }|  	 d d d        | y # 1 sw Y   xY ww)Nr/  r0  r   r   )	bytearrayr   r   
iter_bytes)rc  r9  arrr   rr   s         r6   download_byte_streamrl    sp     
+C9A	H 45rG	eS'	2 aLLN 	D4KCJ	 I	 s   .A)AA)A&"A)c                p    t        |       }| j                  dd      d   }t        j                  |      |fS )N,r   r  )rL  rsplitr[  	b64decode)rI  rK  r   s      r6   decode_base64_to_binaryrq    s7    h'I??3"2&DD!9,,r5   c                   t         j                  j                  |       \  }}dj                  |D cg c]  }|j	                         s|dv s| c}      }||z   } t        | j                               }||kD  r?||kD  r:t        |      dk(  r	 | S |dd }||z   } t        | j                               }||kD  r:| S c c}w )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.
    r;   z._-, r   Nr  )r3  r  splitextjoinisalnumr   encode)rC  	max_bytesr$  extcharfilename_lens         r6   !strip_invalid_filename_charactersr{    s       *ID#77TOTT\\^twDOPDczHx()LiY&4yA~ O 9DczHx01L Y& O Ps   B;B;c                    dj                  | D cg c]  }|j                         s|dv s| c}      j                  dd      j                         S c c}w )zECleans up a Python parameter name to make the API info more readable.r;   z _ r   )rt  ru  r
  rQ  )original_namery  s     r6   sanitize_parameter_namesr    sD     	-R$4<<>TT\RS	c		Rs
   AAc                   t        |xs t        j                               t        j                  d      z  }|j                  dd       t        |       \  }}|H|Ft        |      j                  }|}d|v r+|d|j                  d       }||j                  d      dz   d  }|t        |      }|t        j                  d||      }nt        j                  d|d|z   |	      }|j                  |       |j                          |S )
Nr  Tr  rG  r   r   F)r  prefixr)  )r  r  rR  r)  )r
   r  r   r!  r"  r#  rq  r$  rn   r{  NamedTemporaryFiler7  flush)	rI  r(  r)  r  r*  r   rK  rC  file_objs	            r6   decode_base64_to_filer    s    S1H//12W5F5Fr5JJIOOT4O0-h7OD)	?''(?a(.."56F !4q!8!:;I26:..Y
 ..?	
 NN4NNOr5   c                    |t        j                  |d       t        j                  dd|d      }t	        | t
              rt        j                  |       } t        j                  | |       |j                          |S )NTr.  Fz.jsonzw+)r  rR  r)  mode)
r3  r4  r  r  r   r    r@   rA   dumpr  )jsnr)  r  s      r6   dict_or_str_to_json_filer  ;  sd    

C$'**W#DH #sjjoIIc8NNOr5   c                n    t        |       5 }t        j                  |      cd d d        S # 1 sw Y   y xY wrs   )r5  r@   load)r(  r:  s     r6   file_to_jsonr  I  s+    	i Ayy|  s   +4c                
   t         j                  j                  |dt              }	 t	        j
                  d|  dd|i|       y # t        j                  $ r(}t        dt        j                  |        d      |d }~ww xY 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   HTTPStatusErrorrP   	SPACE_URLformat)space_idr9  timeout_in_secondsr   r   s        r6   set_space_timeoutr  Q  s    
 ##44$# 5 G



0
*E/0	

    #LYM]M]^fMgLh iC C
 	s   A B#A==Bc                    t        j                  j                  t         j                  j                         | g|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)funcargskwargss      r6   synchronize_asyncr  m  s2     ;;FKK002DJ4J6JJr5   c                      e Zd Zy)APIInfoParseErrorN)r0   r1   r2   r4   r5   r6   r  r  }  s    r5   r  c                    d| v ryd| v ryd| v r| d   S | j                  d      ry| j                  d      ry| j                  d      ry| j                  d      ryd| vri S t        d|        )	NconstenumrJ  $refoneOfanyOfallOfzCannot parse type for )rB   r  )schemas    r6   get_typer    s    &	6	f~	F		G		G		G		v		"8 ABBr5   )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                d    t        | | j                  d            }|j                  t        d      S )N$defsfilepath)_json_schema_to_python_typerB   r
  CURRENT_FILE_DATA_FORMAT)r  type_s     r6   json_schema_to_python_typer    s)    '

70CDE==1:>>r5   c           
        | i k(  ryt        |       }|i k(  rd| j                  di       v ryy|dk(  r$t        | d   j                  d      d            S |dk(  ry	|d
k(  r	d| d
    dS |dk(  r7ddj	                  | d   D cg c]  }dt        |      z   dz    c}      z   dz   S |dk(  ry|dk(  ry|dk(  ry|dk(  ry|dk(  r| j                  dg       }d|v r2dj	                  |d   D cg c]  }t        |       c}      }d| dS d| v r2dj	                  | d   D cg c]  }t        |       c}      }d| dS t        |      }d| dS |dk(  rd }| j                  di       }|j                         D 	cg c]#  \  }	}|	d k7  r|	 d!t        |        ||       % }
}	}d"| v r1| d"   }t        |t              r	|r|
d#gz  }
n|
d$t        |       gz  }
dj	                  |
      }
d%|
 d&S |d'v r.d(j	                  | |   D cg c]  }t        |       c}      }|S |d)k(  r%dj	                  fd*| |   D              }d+| d}|S t        d,|        c c}w c c}w c c}w c c}}	w c c}w )-z/Convert the json schema into a python type hintr   r@   descriptionz str | float | bool | list | dictr  rO  r  nullNoner  zLiteral[]r  z, 'integerr%   stringr    booleanr*   numberr'   arrayitemsprefixItemsztuple[zlist[objectc                R    | j                  d      rd| j                  d       dS dS )Nr  z ()r;   r   )vs    r6   get_descz-_json_schema_to_python_type.<locals>.get_desc  s+    34553GRm,-Q/OROr5   
propertiesr  z: additionalPropertieszstr, Anyzstr, zdict(r  )r  r  z | r  c              3  6   K   | ]  }t        |        y wrs   )r  ).0r  defss     r6   	<genexpr>z._json_schema_to_python_type.<locals>.<genexpr>  s     U!4Q=Us   zAll[zCannot parse schema )
r  rB   r  splitrt  r    r  r   r*   r  )r  r  r  r  r  r  elementsr  propsndesadditional_propertiesr   r   s    `            r6   r  r    s"   |VE{VZZr225	&*4v0D0DS0I"0M+NPTUU	&	'	&/*!,,	&v#O1C#a&L3$6#OPPSVV	
 
)		(		)		(		'	

7B'E!yy?D]?ST!,Q5TH H:Q''f$yy?Em?TU!,Q5UH H:Q''25$?H8*A&&	(		P 

<, 
1G| c/489(1+G
 
 "V+$*+A$B!/6;P
|#78MtTUV  iinse1~	$	$zzPUWA6q$?WX	'	yyUve}UUdV1~"6vh ?@@q $P U
 V
" Xs   I"
,I'"I,(I1I7c                <    	 t        |       S # t        $ r i cY S w xY wrs   )_python_type_to_json_schemarC   )	type_hints    r6   python_type_to_json_schemar    s&    *955 	s   
 c                   | t        d      u rdd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 rddiS t        |       }|t        u r-t        |       }t        |      dk(  rd	|d
   iS dt        |      iS |t        u st        |      dk(  ryt        |       }t        |      dk(  rEt        d      |v r8t        d |D              }t        |      }d|v r|d   dg|d<   |S ddi|g|d<   |S d|D cg c]  }t        |       c}iS |t        u rt        |       d
   }dt        |      dS |t        u r;t        |       }d|D cg c]  }t        |       c}t        |      t        |      dS |t        u r1t        |       \  }}	|t        urt        d      dt        |	      d}|S t!        j"                  |       rt%        | d      ri }
g }t'        |       }|j)                         D ]u  \  }}t        |      |
|<   t%        | d      r| j*                  s-|j-                  |       ?t%        | d      r| j.                  |   j0                  re|j-                  |       w d|
d}|r||d<   |S | t2        u ri S yc c}w c c}w )z,Convert a Python type hint to a JSON schema.NrJ  r  r  r  r  r  r   r  r   r  |   c              3  <   K   | ]  }|t        d       us|  y wrs   )rJ  )r  ts     r6   r  z._python_type_to_json_schema.<locals>.<genexpr>  s     FA!4:2EaFs   r  r  r  )rJ  r  )rJ  r  minItemsmaxItemsz0JSON Schema only supports string keys in objectsr  )rJ  r  r3   	__total____dataclass_fields__)rJ  r  required)rJ  r    r%   r'   r*   r   r   r   r   r   r   nextr  tupledictr   inspectisclasshasattrr   r  r  r   r  defaultr   )r  originliteral_valuestypes
other_typer  r  	item_typekey_type
value_typer  r  hints
field_name
field_types                  r6   r  r    s   DJC!!C	""E!!D	""	"F!),~!#^A.//^,--#f+,#u:?tDzU2FFFJ0<F"(.&!9v M %+F#3V"<wM%HQ5a8HII~Y'*	*Ei*PQQ#DIJq7:JE
E
	
 	
 ~'	2*3OPP$?
$K
 y!gi9J&K
y)&+kkm 		,"J
%@%LJz"y+.&&OOJ/I'=> 55jAII
+		, #*=!)F:C	 [ I Ks   ;JJc                    ||       r ||       S t        | t              r,i }| j                         D ]  \  }}t        |||      ||<    |S t        | t        t
        f      r'g }| D ]  }|j                  t        |||               |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   json_objr  is_rootnew_objkeyr  items          r6   r  r  L  s     xH~	Hd	#"..* 	:JC#E49GCL	:	HtUm	, 	:DNN8D$89	:r5   c                \  K    ||       r ||        d{   S t        | t              r4i }| j                         D ]  \  }}t        |||       d{   ||<    |S t        | t        t
        f      r/g }| D ]&  }|j                  t        |||       d{          ( |S | S 7 7 T7 w)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  s          r6   r  r  `  s      x(^##	Hd	#"..* 	FJC!/tW!EEGCL	F	HtUm	, 	FDNNdG!DDE	F $ F
 Es4   B,B&<B,B(AB,B*
B,(B,*B,c                j    t        | | j                  d            t        fdt        D              S )Nr  c              3  &   K   | ]  }|v  
 y wrs   r4   )r  file_data_formatinfos     r6   r  z value_is_file.<locals>.<genexpr>z  s     R,<4'Rs   )r  rB   anyFILE_DATA_FORMATS)api_infor  s    @r6   value_is_filer  x  s*    &xg1FGDR@QRRRr5   c                    t        | t        t        f      xr4 t        |       j                         xr t        |       j	                         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)ss    r6   is_filepathr  }  s5     a#t%P$q'..*:PtAw?PPr5   c                X    t        | t              xr d| v xr 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   s    r6   is_file_objr    s*     aM6Q;M:ai3MMr5   c                    t        | t              xr9 d| v xr3 t        | d   t              xr d| v xr | d   j                  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_typer;   gradio.FileData)r   r  r    rB   r  s    r6   is_file_obj_with_metar    s_     	1d 	<aK	<qy#&	< aK	< fIMM'2&*;;r5   c                N    t        |       xr d| v xr 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"}
    }
    rc  )r  r   r    r  s    r6   is_file_obj_with_urlr    s(     !#P
Pz!E(C7PPr5   >   boxrowtabformtabsgroupr   columndatasetsidebartabitem	accordioninterpretationc                    t        |       }|ddid}t        |      ri ||j                  d      d   |dS t        |      j	                         ri |dt        |      j
                  iS t        d| d	      )
Nr  r  )r  r  rO  r  )	orig_namerc  r$  zFile z; does not exist on local filesystem and is not a valid URL.)r    r   r  r
   r	  r$  r   )filepath_or_urlr  r   s      r6   handle_filer&    s    OA):;<D@$@QWWS\"%5a@@	a	2$2T!W\\22A3QR
 	
r5   c                B    t        j                  d       t        |       S )NzXfile() is deprecated and will be removed in a future version. Use handle_file() instead.)r   r   r&  )r%  s    r6   rN  rN    s    MMb ''r5   c                    G d dt               }t        |      }| |rt        d      |S t        |      }||j                  gt        |       |z
  z  z   }i }g }t        |       D ]t  \  }}	d|	v r|||	d   <   |j                  |	d          n|j                  d|        |	j                  dd      sN||   |j                  k(  sa|	j                  d      ||<   v |j                         D ]7  \  }
}|
|v r ||
   |k  rt        d	|
 d
      ||||
   <   *t        d	|
 d       |j                  |v r*t        d||j                  |j                                  |S )Nc                      e Zd ZdZy)!construct_args.<locals>._KeywordsNO_VALUEN)r0   r1   r2   r+  r4   r5   r6   	_Keywordsr*    s    r5   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   rB   r  	TypeErrorrn   )parameters_infor  r  r,  _argsnum_argskwarg_arg_mappingkwarg_namesrn   
param_infor  r  s               r6   construct_argsr7    s   D  JE M  4yHY''(C,@8,KLLEK&7 
?zz)>Cj)9:;z*:;<5'23NN2E:e	 2 22%>>*=>E%L
? lln 
U## %0!#  'Z  [  16',-cU  #O  P  U"7EKKPYPbPbDc8d7ef
 	
 Lr5   )ry   r    )ry   r*   )r   r    ry   r*   rs   )
r   r   r   r    r   r    r   zCommunicator | Nonery   r"   )r   httpx.Clientr   r  r   r  r   r   r   r    r   r    r   dict[str, str]r   dict[str, str] | Noner   r*   r   %concurrent.futures.ThreadPoolExecutorry   dict[str, Any] | None)r   r   r   r9  r   r:  r   dict[str, list[Message | None]]r$   r    r   z'Literal['sse_v1', 'sse_v2', 'sse_v2.1']r   r*   r   r;  ry   r<  )r   r   r   r9  r   r:  r   r*   )r   r8  r   r  r   r  r   r   r   r    r   r    r   r9  r   r:  ry   r"   )
r   r   r   r=  r$   r    r   z1Literal['sse_v1', 'sse_v2', 'sse_v2.1', 'sse_v3']ry   r"   )r(  r    r)  r   ry   r    )NN)r8  r    r9  r   r)  r   ry   r    )rC  r    ry   r   )rI  r    ry   r   )r(  r    rS  z	list[str]ry   r*   )r:  
str | Path)rc  r    )r  r>  )rI  r    ry   ztuple[bytes, str | None])   )rC  r    rw  r%   ry   r    )r~  r    ry   r    )NNN)rI  r    r(  r   r)  str | Path | Noner  r   )r  zstr | dict | listr)  r@  )r(  r>  ry   zdict | list)Ni,  )r  r    r9  r   r  r%   )r  r   ry   r   )r  r  )r  r   ry   r    )r  r   ry   r  )r  r   r  r   r  Callable[..., bool]ry   r   )r  r   r  z'Callable[..., Coroutine[Any, Any, Any]]r  rA  ry   r   )r  r  ry   r*   )r%  r>  )r1  zlist[ParameterInfo] | Noner  r  r  r  ry   r   )
__future__r   r   r[  concurrent.futuresr   r  r  r@   rA  r3  r<   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.legacy.protocolr   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   rF   r  rC   rH   rL   rN   rP   r    rR   ra   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,  r<  rE  rL  rW  r`  rd  rf  rl  rq  r{  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  SKIP_COMPONENTSr&  rN  r7  r4   r5   r6   <module>rc     s<   "        	       / (    
 
 
    & >8


	
	
() F 	!	*

iu 
	 "#	9 		 		i 		I 	,C ,"1T 1h 
 
 
* 
' 
' 
'	 5 5 5 	" 	" 	""<F #'	<&<
< <  	<
 <~$$
$ $ 	$
 $ $ $ #$ $ 4$ $N # !@	
  6  4 @... #. 	.0CC
C C 	C
 C C C #C CLDD ?D D @	D
 DN'^ CG$$'$5?$$*


'-( !!	    
  	 F  ! 8K 	
 	C*  -R0 ?
JAZM`(
1 ! 		0S
QN$
Q"

(0/07<0FJ0	0r5   