
    wiX                    F   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,jB        e,jC        e,jD        e,jE        e,jF        gZG G d de#d          ZHdd!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 d0 d1                      ZTe G d2 d3                      ZU e"d4eTeUz            ZVd5 ZWe G d6 d7                      ZXe G d8 d9                      ZYdd;ZZdd=Z[dd>Z\	 dddFZ]ddTZ^ddZZ_dd[Z`dd\Zadd^Zbd_ ZcdddcZd	 dddfZeddhZfddjZgddmZhddpZiddrZjddtZkddduZlddwZmddd{Zndd}Zo	 	 	 dddZpdddZqddZr	 	 dddZsddZt G d deu          ZvddZwg dZxexd         ZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZddZddZddZh dZddZddZdd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)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                  t    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__     c/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/gradio_client/utils.pyr   r   G   sp         HHHMMMIIIOOOOOOMMMHHHJJJJJr5   r   F)totalreturnr    c                     	 t          j        t          d                              d                                          } t          j        |           }|                    dd          }|S # t          $ r Y dS 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_versionrG   T   s    X~66==gFFLLNN 	 z"344""9b11   rrs   A*A- -
A;:A;c                      e Zd ZdZdS )TooManyRequestsErrorz.Raised when the API returns a 429 status code.Nr0   r1   r2   __doc__r4   r5   r6   rI   rI   c   s        88Dr5   rI   c                      e Zd ZdZdS )
QueueErrorzMRaised when the queue is full or there is an issue adding a job to the queue.NrJ   r4   r5   r6   rM   rM   i   s        WWDr5   rM   c                      e Zd ZdZdS )InvalidAPIEndpointErrorz(Raised when the API endpoint is invalid.NrJ   r4   r5   r6   rO   rO   o   s        22Dr5   rO   c                      e Zd ZdZdS )SpaceDuplicationErrorz:Raised when something goes wrong with a Space Duplication.NrJ   r4   r5   r6   rQ   rQ   u   s        DDDr5   rQ   c                  F    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)r0   r1   r2   rT   rU   rV   rW   rX   rY   rZ   r.   r[   r\   server_stoppedr]   r^   r_   r4   r5   r6   rS   rS   {   sZ        IJJI%N-+
CHI3N)!L+r5   rS   c                  v    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dS )Statusz'Status codes presented to client users.STARTINGJOINING_QUEUE
QUEUE_FULLIN_QUEUESENDING_DATA
PROCESSING	ITERATINGPROGRESSFINISHED	CANCELLEDLOGstatusr8   r%   c           
        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.)rb   rc   rd   re   rf   rg   rh   rj   ri   rk   rl   index)rn   orders     r6   orderingzStatus.ordering   sW     O OOO
 {{6"""r5   otherc                Z    |                      |           |                      |          k     S N)rr   )selfrs   s     r6   __lt__zStatus.__lt__   s%    }}T""T]]5%9%999r5   r!   r    c                   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.)rS   rT   rb   rd   rU   re   rV   rf   rW   rg   rX   rh   rY   ri   rZ   rk   r[   rj   r.   rm   r`   )r!   s    r6   msg_to_statuszStatus.msg_to_status   s     #V%9$f&7$fo#V%8(&*;,f.>+V_"FOvz(&/
  	r5   N)rn   rb   r8   r%   )rs   rb   )r!   r    r8   rb   )r0   r1   r2   rK   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   staticmethodrr   rw   ry   r4   r5   r6   rb   rb      s        11H#MJH!LJIHHI
C# # # \# : : : :    \  r5   rb   c                  Z    e Zd ZU ded<   ded<   ded<   ded<   ded<   edd            ZdS )ProgressUnit
int | Nonerp   length
str | Noneunitfloat | Noner[   descdatar,   r8   list[ProgressUnit]c                       fd|D             S )Nc                    g | ]q} |                     d           |                     d          |                     d          |                     d          |                     d                    rS )rp   r~   r   r[   r   )rp   r~   r   r[   r   rC   ).0dclss     r6   
<listcomp>z)ProgressUnit.from_msg.<locals>.<listcomp>   s     	
 	
 	
  CeeGnnuuXUU6]]z**UU6]]  	
 	
 	
r5   r4   )r   r   s   ` r6   from_msgzProgressUnit.from_msg   s0    	
 	
 	
 	
 	
 	
 	
 		
r5   N)r   r,   r8   r   )r0   r1   r2   r3   classmethodr   r4   r5   r6   r|   r|      sp         

 

 

 [

 

 

r5   r|   c                  v    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.rb   coder}   r&   r)   r   etazbool | Noner+   zdatetime | Nonetimezlist[ProgressUnit] | Noner-   Nztuple[str, str] | Noner.   rn   zLiteral['status', 'output']type)r0   r1   r2   rK   r3   r.   r   r4   r5   r6   r   r      s         SSLLL,,,,"&C&&&&(0D000000r5   r   c                  D    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)r0   r1   r2   rK   r3   r   r   r4   r5   r6   r   r      sO         SSMMM&D&&&&Er5   r   Updatec            	     d    t          t          j        d d d d t          j                    d           S )N)r   r&   r)   r   r+   r   r-   )r   rb   rc   r   nowr4   r5   r6   create_initial_status_updater      s6    _\^^   r5   c                  X    e Zd ZU dZ ee          Zded<    ee          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)
r0   r1   r2   rK   r   r   r   r3   listr   r4   r5   r6   r   r      s[          
 #(%8T"U"U"UMUUUUt444G444444r5   r   c                      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                  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_cancelNr   r$   thread_completedict[str, str] | Nonerequest_headersr   zasyncio.Queue[Update]updates)r0   r1   r2   rK   r3   r   r$   r   r   r   asyncioQueuer   r4   r5   r6   r   r   	  s         UUJJJNNN....NNNMH!O!!!!-1O1111%*U7=%I%I%IGIIIIIIr5   r   r*   c                Z    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_urls    r6   is_http_url_liker     s0     lC(( u""#:;;;r5   r   c                (   ddi}	 t          j                    5 }t          j        | |          }|j        dk    r(|                    | |          j        cddd           S |j        cddd           S # 1 swxY w Y   dS # t          $ r Y dS 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_coderC   
is_successrD   )r   r   clienthead_requests       r6   	probe_urlr   &  s    WXG\^^ 	+v :lGDDDL'3..zz,z@@K	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+  *		+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+
    uus@   B =A6B #A6)B 6A::B =A:>B 
BBc                f    t          j        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   s    r6   is_valid_urlr   5  s;     M	H   L))Ei.E.EEr5   	websocketr   r   	hash_datahelperCommunicator | Noner"   c                  K   d}i }|sZt          j        |                                           }|                                s|r|j        5  |j        rt          j                    4 d {V }|                    |j	        t          j        |                    }|                                 t          j        ||d           d {V  d d d           d {V  n# 1 d {V swxY w Y   t          j                                        	 d d d            n# 1 swxY w Y   t          j        d           d {V  |                                |                                }	t          j        |	          }|ri|j        5  d|v }
t'          t(                              |d                   |                    d          |                    d	d           |                    d
          t/          j                    |                    d          |
r t2                              |d                   nd           }|                    di                               dg           }|rZ|j        t(          j        k    rE	  |j        | }n# t<          $ r}|g}Y d }~nd }~ww xY w|j        j         !                    |           ||j        _"        d d d            n# 1 swxY w Y   |d         dk    rtG          d          |d         dk    r| $                    |           d {V  n'|d         dk    r| $                    |           d {V  |d         dk    }|Z|d         S )NF)rA   T)return_exceptionsg{Gz?r-   r!   r)   r&   r+   r(   r   r)   r&   r+   r   r   r-   r#   r   rU    Queue is full! Please try again.rT   rW   rZ   )%r   create_taskrecvdoner   r   r   AsyncClientpostr   rA   rB   r   gather
concurrentfuturesCancelledErrorsleepresultr   rb   ry   rC   r   r   r|   r   r   rk   r   rD   r   r   appendr   rM   send)r   r   r   r   	completedresptaskhttpr   r!   has_progressstatus_updater#   r   es                  r6   get_pred_from_wsr   @  s      ID 37 "9>>#3#344))++ 	& B[ B B+ B $)#4#6#6 V V V V V V V$$(II & 0tz)7L7L %. % %E
 !KKMMM").uPT"U"U"UUUUUUUUV V V V V V V V V V V V V V V V V V V V V V V V V V V )0??AAABB B B B B B B B B B B B B B B -%%%%%%%%%! ))++ 	&" kkmmz# 	9 9 9.$6 ,--d5k::#xx55&$// HHY//!,,##,"7"7_8M"N"N"N
! 
! 
! (B//33FB?? 6m0FOCC%!<!<f!E$ % % %"#%J&--f555+8
()9 9 9 9 9 9 9 9 9 9 9 9 9 9 9* ;,&&?@@@;+%%..++++++++++%[K''..&&&&&&&&&K#66	g  37h >st   !D/A C!D!
C+	+D.C+	/!DD!$D!	C:K 
JK 
J&J!K !J&&.K  K$'K$r   httpx.Clientdictsse_urlsse_data_urlr   dict[str, str]cookiesr   
ssl_verifyexecutor%concurrent.futures.ThreadPoolExecutordict[str, Any] | Nonec
                   d|_         |	                    t          ||||          }
|	                    t          | |||||||	  	        }t          j                            |
|gt          j        j                  \  }}d|_         t          |          dk    r t          dt          |           d          |D ]}|
                                c 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   r   r   r   r   r   r   r   r   r   future_cancel
future_sser   _futures                  r6   get_pred_from_sse_v0r     s     #FOO&'7J M 
 
J  %%	
#&6 &  GD! "F
4yyA~~H3t99HHHIII  }} r5   pending_messages_per_eventdict[str, list[Message | None]]r$   protocol'Literal['sse_v1', 'sse_v2', 'sse_v2.1']c                   d| _         |                    t          | |||          }|                    t          | |||          }	t          j                            ||	gt          j        j                  \  }
}d| _         t          |
          dk    r t          dt          |
           d          |
D ]/}|
                                }|r||                                c 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  s                 r6   get_pred_from_sse_v1plusr    s    #FOO&'7J M 6#=x J  %%	
#&6 &  GD! "F
4yyA~~H3t99HHHIII  $$&&	 	O}}	 r5   c                t   	 t          j        d           | j        5  | j        r	 d d d            n>| j        rt
          j                                        	 d d d            n# 1 swxY w Y   n| j        r%t          j
        | j        d| j        i|||           t
          j                                        )NT皙?r$   )rA   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9:	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	::  

fo.	
 	
 	
 	
 

+
+
-
--s   	A$%A$$A(+A(c                >   	 |                      d||||          5 }|                                D ]}	|	                    d          }	t          |	          dk    r,|	                    d          rZt          j        |	dd                    }
|
d         t          j        t          j	        fv r|j
        5  d|
v }t          t                              |
d                   |
                    d	          |
                    d
d           |
                    d          t          j                    |
                    d          |r t"                              |
d                   nd           }|
                    di                               dg           }|rZ|j        t          j        k    rE	  |j        | }n# t,          $ r}|g}Y d }~nd }~ww xY w|j        j                            |           ||j        _        d d d            n# 1 swxY w Y   |j        rt8          j                                        |
d         dk    rt?          d          |
d         dk    rD|
d         }||_         | !                    |d|i||||          }|"                                 x|
d         dk    r|
d         c cd d d            S tG          d|	           	 d d d            n# 1 swxY w Y   tG          d          # t8          j        j        $ r  w xY w)NGET)paramsr   r   
r   data:   r!   r-   r)   r&   r+   r(   r   r#   r   rU   r   rW   r$   )rA   r   r   rZ   zUnexpected message: z*Did not receive process_completed message.)$stream
iter_linesrstripr   r   rA   rB   rS   r.   r\   r   r   rb   ry   rC   r   r   r|   r   r   rk   r   rD   r   r   r   r   r   r   r   r   rM   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 .D{{4((t99>>??7++ *D:d122h//DE{}'8-:Q&RRR  A A'6$'>(4!'!5!5d5k!B!B'+xx'='=!%&$!7!7$(HHY$7$7!) $ 4 4++&,*?*?_@U*V*V*V!%
) 
) 
) "&(B!7!7!;!;FB!G!G! >m&8FO&K&K-)D)Df)M#, - - -*+-"J.55f===3@
0)A A A A A A A A A A A A A A A* - B(0??AAAE{l22()KLLLe33#'
#3*2$kk(",h!L$!L)!L$+$+	 *   ,,....e(;;;#H~--g5	D 5	D 5	D 5	D 5	D 5	D 5	D 5	Dd < %%BD%B%BCCC].D5	D 5	D 5	D 5	D 5	D 5	D 5	D 5	D 5	D 5	D 5	D 5	D 5	D 5	D 5	Dl EFFF,   s   L BK,7C:H2
F=<H=
G	G	
HG	.HK,HK,HB(K,>L K, L ,K00L 3K04L L1Literal['sse_v1', 'sse_v2', 'sse_v2.1', 'sse_v3']c                   	 ||         }d }	 t          |          dk    r|                    d          }nt          j        d           ?|| j        rt
          j                                        | j        5  d }|d         t          j
        k    r2|                    d          }|                    d          }	|r|	r||	f}t          t                              |d                   |                    d          |                    dd           |                    d	          t          j                    |                    d
          d|v r t"                              |d                   nd |          }
|                    di                               dg           }|d         t          j        k    rM|dv rI|t)          |          }n7t+          |          D ]'\  }}||         }t-          ||          }|||<   |||<   (|r|
j        t          j        k    r	  | j        | }n# t4          $ r}|g}Y d }~nd }~ww xY w| j        j                            |           | j                            tA          ||                    d	d                               |
| j        _!        | j                            |
           d d d            n# 1 swxY w Y   |d         t          j"        k    r||= |                    d	d          s(tG          |d         $                                          }n|d         }| j                            tA          |d|                    d	d                               |d         S |d         t          j%        k    rtM          d          # t
          j        j        $ r  w xY w)NTr   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_v3)r   r+   )r   r   r+   zServer stopped.)'r   popr   r   r   r   r   r   r   rS   r.   rC   r   rb   ry   r   r   r|   r   rY   r   	enumerate
apply_diffr   rk   r   rD   r   r   r   r   
put_nowaitr   r   rZ   r   itemsr`   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=   O5h?&*#H	4#$$q((&**1--
4   {f4{ (77999 ,9 ,9"u:!222''%..CGGG,,E 3u 3'*El ,--c%j99"ww|44..GGI..!
++&#-- #/"7"7O8L"M"M"M#! ! ! 2..2262>>u:!AAAh S G G
 3:6:6ll33(1&(9(9 3 3HAu*Ea*HK)3K)G)GJ=G7:(2F1II m0FOCC%!<!<f!E$ % % %"#%J&--f555N--$VSWWYPT=U=UVVV   ,9
())-888Y,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9Z 5z]<<<.x8wwy$// + "#h-"5"5"7"788FF ]F))  &" #	4 8 8     8}$U};;; !2333QH	4T ,   sc   A7N* 9F&K 
H+*K+
I5H=8K=IBKN* KN* KB'N* 'N* *O 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|||<   n|dk    r||xx         |z  cc<   n|dk    r?t          |t                    r$|                    t          |          |           nH|||<   nB|dk    r*t          |t                    r|t          |          = n||= nt          d	|           | S )
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  sh   t99>>""8##~% !@!@!@AAAs4yy1}%% 	' 	'Ad1g&GGH	Y!&GIxI%'u__'4(( +s9~~u5555%*	""x'4(( 'C	NN++I&&888999r5   )copydeepcopy)objdiffr2  r/  r.  r"  s         r6   r  r  |  sU    
-

C  B  $ 3 3ejdFE22Jr5   	file_pathdirr   c                8   t          |pt          j                              t          j        d          z  }|                    dd           |t          |           j        z  }t          j        | |           t          |
                                          S )N   Texist_okparents)r
   tempfile
gettempdirsecrets	token_hexmkdirnameshutilcopy2r    resolve)r7  r8  	directorydests       r6   create_tmp_copy_of_filerI    s~    S1H/1122W5Fr5J5JJIOOT4O000tI++D
LD!!!t||~~r5   url_pathhf_tokenc                   |t          j        |d           |rdd|z   ini }t          |pt          j                              t          j        d          z  }|                    dd           |t          |           j        z  }t          j
        d| |d	          5 }|                                 t          |d
          5 }|                                D ]}|                    |           	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w 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@  rA  rB  rC  r   r  r  openiter_rawwriter    rF  )	rJ  rK  r8  r   rG  r7  r  fchunks	            r6   download_tmp_copy_of_filerY    s    
C$''''9AI	H 455rGS1H/1122W5Fr5J5JJIOOT4O000DNN//I	x4
 
 
 	!!###)T"" 	a!**,,  	 	 	 	 	 	 	 	 	 	 	 	 	 	 		               y  ""###s6   !%D-D 4D D	DD	DDDfilenamec                    |                      d          rdS t          j        |           d         }|*|                    dd                              dd          }|S )Nz.vttztext/vttr   zx-wavwavzx-flacflac)endswith	mimetypes
guess_typer'  )rZ  mimetypes     r6   get_mimetyperb    sb       z#H--a0H##GU33;;HfMMOr5   encodingc                    |                      dd          } t          j        |           d         }|dk    rdS |d S t          j        |          }||                    d          r
|dd          }|S )Nz	audio/wavzaudio/x-wavr   z
audio/flacr]  .r   )r'  r_  r`  guess_extensionr   )rc  r   	extensions      r6   get_extensionrh    s    ];;H))!,D|v	t)$//I!5!5c!:!:abbM	r5   
file_types	list[str]c                x   t          |           }|D ]}|dk    r dS |                    d          rj|                    d                                          }t	          |           j                            d                                          }||k    r dS ||                    | d          r dS dS )NfileTre  /F)rb  r   lstriplowerr
   suffix)r7  ri  	mime_type	file_typefile_exts        r6   is_valid_filert    s    Y''I 	 		44$$ 	!((--3355II-44S99??AAHH$$tt %"y';';yOOO'L'L"445r5   rW  
str | Pathc                   t          | d          5 }t          j        |                                          }t	          |d          }t          t	          |                     }d||ndz   dz   |z   	 cd d d            S # 1 swxY w Y   d S )Nrbr:   r  r<   ;base64,)rT  base64	b64encodereadr    rb  )rW  rl  encoded_string
base64_strra  s        r6   encode_file_to_base64r~    s    	a 	
$)$))++6611
A''#/xxR9 	
		
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
s   A"B  BBurlc                    t          j        |           }|                                 t          j        |j                  }t          |d          }t          |           }d||ndz   dz   |z   S )Nr:   r  r<   rx  )r   rC   r  ry  rz  contentr    rb  )r  r   r|  r}  ra  s        r6   encode_url_to_base64r    so    9S>>D%dl33N^W--JC  Hx388<zIJVr5   r.  c                z    t          |           } t          |           rt          |           S t          |           S ru   )r    r   r  r~  )r.  s    r6   encode_url_or_file_to_base64r    s9    t99D *#D))) &&&r5   c              #     K   t                      }|rdd|z   ini }t          j        d| |          5 }|                                D ]}||z  }|V  	 d d d            n# 1 swxY w Y   |V  d S )NrN  rO  r	  r   )	bytearrayr   r  
iter_bytes)r  rK  arrr   rr   s         r6   download_byte_streamr    s      
++C9AI	H 455rG	eS'	2	2	2 aLLNN 	 	D4KCJJJJ	               IIIIIs   !A!!A%(A%tuple[bytes, str | None]c                    t          |           }|                     dd          d         }t          j        |          |fS )N,r   r(  )rh  rsplitry  	b64decode)rc  rg  r   s      r6   decode_base64_to_binaryr    s=    h''I??3""2&DD!!9,,r5      	max_bytesr%   c                   t           j                            |           \  }}d                    d |D                       }||z   } t	          |                                           }||k    rP||k    rJt	          |          dk    rn6|dd         }||z   } t	          |                                           }||k    J| 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.
    r<   c                B    g | ]}|                                 s|d v |S )z._-, isalnumr   chars     r6   r   z5strip_invalid_filename_characters.<locals>.<listcomp>#  s*    OOOTT\\^^OtwDr5   r   Nr(  )rR  r.  splitextjoinr   encode)rZ  r  rC  extfilename_lens        r6   !strip_invalid_filename_charactersr    s       **ID#77OOTOOOPPDczHx(())LiY&&4yyA~~9DczHx0011L Y&& Or5   original_namec                    d                     d | D                                           dd                                          S )zECleans up a Python parameter name to make the API info more readable.r<   c                B    g | ]}|                                 s|d v |S )z _r  r  s     r6   r   z,sanitize_parameter_names.<locals>.<listcomp>3  s*    RRR$4<<>>RTT\\\\\r5    r   )r  r'  ro  )r  s    r6   sanitize_parameter_namesr  0  s?     	RR-RRRSS	c			r5   str | Path | Noneprefixc                Z   t          |pt          j                              t          j        d          z  }|                    dd           t          |           \  }}|Y|Wt          |          j        }|}d|v r=|d|                    d                   }||                    d          dz   d          }|t          |          }|t          j
        d||          }nt          j
        d|d|z   |	          }|                    |           |                                 |S )
Nr:  Tr;  re  r   r   F)r*  r  r8  )r*  r  rp  r8  )r
   r>  r?  r@  rA  rB  r  rC  rp   r  NamedTemporaryFilerV  flush)	rc  r7  r8  r  rG  r   rg  rZ  file_objs	            r6   decode_base64_to_filer  9  sC    S1H/1122W5Fr5J5JJIOOT4O000-h77OD)	??'(??a(.."5"556F !4!4q!8!:!:;I26::.Y
 
 
 .?	
 
 
 NN4NNOr5   jsnstr | dict | listc                
   |t          j        |d           t          j        dd|d          }t	          | t
                    rt          j        |           } t          j        | |           |	                                 |S )NTrM  Fz.jsonzw+)r*  rp  r8  mode)
rR  rS  r>  r  r   r    rA   rB   dumpr  )r  r8  r  s      r6   dict_or_str_to_json_filer  \  s    

C$''''*W#D  H #s jooIc8NNOr5   dict | listc                |    t          |           5 }t          j        |          cd d d            S # 1 swxY w Y   d S ru   )rT  rA   load)r7  rW  s     r6   file_to_jsonr  j  sz    	i Ay||                 s   155,  space_idtimeout_in_secondsc                   t           j                            |dt                    }	 t	          j        d|  dd|i|           d S # t          j        $ r1}t          dt          	                    |            d          |d }~ww xY w)	Ngradio_client)tokenlibrary_namelibrary_versionz"https://huggingface.co/api/spaces/z
/sleeptimeseconds)rA   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   HTTPStatusErrorrQ   	SPACE_URLformat)r  rK  r  r   r   s        r6   set_space_timeoutr  r  s    
 #44$# 5  G


EEEE/0	
 	
 	
 	
 	
 	

     #CYM]M]^fMgMg C C C
 
 	s   A B,BBfuncr   r   c                p    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kwargss      r6   synchronize_asyncr    s7     ;FK0022DJ4JJJ6JJJr5   c                      e Zd ZdS )APIInfoParseErrorN)r0   r1   r2   r4   r5   r6   r  r    s        Dr5   r  schemac                   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          rdS d| vri S t          d|            )	Nconstenumr   $refoneOfanyOfallOfzCannot parse type for )rC   r  )r  s    r6   get_typer    s    &wv	6		f~	F		 Cv	G		 	Cw	G		 Cw	G		 Cw	v			 A A AB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                ~    t          | |                     d                    }|                    t          d          S )N$defsfilepath)_json_schema_to_python_typerC   r'  CURRENT_FILE_DATA_FORMAT)r  type_s     r6   json_schema_to_python_typer    s2    '

70C0CDDE==1:>>>r5   c                  
 | i k    rdS t          |           }|i k    rd|                     di           v rdS dS |dk    r5t          | d                             d          d                            S |dk    rd	S |d
k    rd| d
          dS |dk    r+dd                    d | d         D                       z   dz   S |dk    rdS |dk    rdS |dk    rdS |dk    rdS |dk    r|                     dg           }d|v r-d                    fd|d         D                       }d| dS d| v r-d                    fd| d         D                       }d| dS t          |          }d| dS |dk    rd  
|                     d!i           }
fd"|                                D             }d#| v r=| d#         }t          |t                    r	|r|d$gz  }n|d%t          |           gz  }d                    |          }d&| d'S |d(v r)d)                    fd*| |         D                       }|S |d+k    r/d                    fd,| |         D                       }	d-|	 d}|S t          d.|            )/z/Convert the json schema into a python type hintr   rA   descriptionz str | float | bool | list | dictr  rm  r(  nullNoner  zLiteral[]r  z, c                8    g | ]}d t          |          z   d z   S )')r    )r   vs     r6   r   z/_json_schema_to_python_type.<locals>.<listcomp>  s'    #O#O#O1C#a&&L3$6#O#O#Or5   integerr%   stringr    booleanr*   numberr'   arrayr  prefixItemsc                0    g | ]}t          |          S r4   r  r   r!  defss     r6   r   z/_json_schema_to_python_type.<locals>.<listcomp>  s$    TTT!,Q55TTTr5   ztuple[c                0    g | ]}t          |          S r4   r  r  s     r6   r   z/_json_schema_to_python_type.<locals>.<listcomp>  s$    UUU!,Q55UUUr5   zlist[objectc                b    |                      d          rd|                      d           dndS )Nr  z ()r<   r   )r  s    r6   get_descz-_json_schema_to_python_type.<locals>.get_desc  s6    34553G3GO/m,,////ROr5   
propertiesc                b    g | ]+\  }}|d k    | dt          |            |           ,S )r  z: r  )r   nr  r  r  s      r6   r   z/_json_schema_to_python_type.<locals>.<listcomp>  sT     
 
 
1G|| GG/488G((1++GG||r5   additionalPropertieszstr, Anyzstr, zdict(r  )r  r  z | c                0    g | ]}t          |          S r4   r  r  s     r6   r   z/_json_schema_to_python_type.<locals>.<listcomp>  s$    WWWA6q$??WWWr5   r  c              3  8   K   | ]}t          |          V  d S ru   r  r  s     r6   	<genexpr>z._json_schema_to_python_type.<locals>.<genexpr>  s.      UU!4Q==UUUUUUr5   zAll[zCannot parse schema )	r  rC   r  splitr  r  r   r*   r  )r  r  r  r  elementspropsdesadditional_propertiesr   r   r  s    `        @r6   r  r    s   ||uVE{{VZZr2222555	&*4v0D0DS0I0I"0M+NPTUUU	&v	'		,&/,,,,	&#O#Ov#O#O#OPPPSVV	
 
)		u	(		u	)		v	(		w	'		

7B''E!!yyTTTTu]?STTT H (H''''f$$yyUUUUvm?TUUU H (H''''25$??H&8&&&&	(			P 	P 	P 

<,,
 
 
 
 

 
 
 "V++$*+A$B!/66 ;P 
|#V78MtTTVV  iinns~~~	$	$	$zzWWWWPUWWWXX	'		yyUUUUve}UUUUUd~~~ ?v ? ?@@@r5   	type_hintc                F    	 t          |           S # t          $ r i cY S w xY wru   )_python_type_to_json_schemarD   )r  s    r6   python_type_to_json_schemar    s9    *9555   			s      c                   | 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 rddiS | t          u rdi d	S | t          u rd
i dS | t          u rdd
iS | t          u s	| t          u rd
ddS | t          u s	| t          u rdddS t          |           }|t          u r=t          |           }t!          |          dk    r
d|d         iS dt          |          iS |t"          u s.t%          |d          r|j        dk    st          |          dk    rqt          |           }t!          |          dk    rAt          d          |v r0t)          d |D                       }t+          |          }dddi|giS dd |D             iS |t          u r0t          |           }|sd
i dS |d         }d
t+          |          dS |t          u rut          |           }|sdd
iS t!          |          dk    r"|d         du rd
t+          |d                   dS d
d |D             t!          |          t!          |          dS |t          u s	|t          u r1t          |           }|sd
ddS |d         }d
dt+          |          dS |t          u rGt          |           }|sdi d	S |\  }}	|t          urt-          d           dt+          |	          d	}|S t/          j        |           r%t3          | t4                    rd! | D             }
d|
iS t/          j        |           rt%          | d"          ri }g }t7          |           }|                                D ]{\  }}t+          |          ||<   t%          | d#          r| j        r|                    |           Dt%          | d$          r| j        |         j         s|                    |           |d|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  r0   	UnionType|   c              3  <   K   | ]}|t          d           u|V  d S ru   )r   r   ts     r6   r  z._python_type_to_json_schema.<locals>.<genexpr>E  s2      FFA!4::2E2Ea2E2E2E2EFFr5   r  r  c                ,    g | ]}t          |          S r4   r  r  s     r6   r   z/_python_type_to_json_schema.<locals>.<listcomp>H  s!    HHHQ5a88HHHr5   .c                ,    g | ]}t          |          S r4   r  r  s     r6   r   z/_python_type_to_json_schema.<locals>.<listcomp>X  s!    JJJq7::JJJr5   )r   r  minItemsmaxItems)r   r	  r  z0JSON Schema only supports string keys in objectsc                    g | ]	}|j         
S r4   )r"  )r   items     r6   r   z/_python_type_to_json_schema.<locals>.<listcomp>u  s    888dtz888r5   r3   	__total____dataclass_fields__)r   r  required)!r   r   r    r%   r'   r*   r   r   tupleset	frozensetbytesr  r   r   r   r   r   hasattrr0   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_types                   r6   r  r    s"   DJJC	C!!C	""E!!D	""D "===D"---E  C9	11555EY)33 F333	""F!),,~!##^A.//^,,-- 	%FJ'' 	,2O{,J,Jv;;###u::??tDzzU22FFFFFFFJ0<<Fvv.788HH%HHHII~~	"" 	2#b111G	*Ei*P*PQQQ## 	%G$$u::??uQx3#.I%PQ(.S.STTTJJEJJJE

E

	
 
 	
 }})++	"" 	:#D999G	0;;
 
 	
 ~~	"" 	B$bAAA#*3OPPP$?
$K$K
 
 y!! %jD&A&A %88i888$$y!! gi9J&K&K 
y))&+kkmm 		, 		,"J
%@%L%LJz"y+.. ,& 0OOJ///I'=>>, 5jAI, 
+++"*== 	*!)F:Ir5   json_objis_rootCallable[..., bool]c                R    ||           r ||           S t          | t                    r2i }|                                 D ]\  }}t          |||          ||<   |S t          | t          t
          f          r-g }| D ]&}|                    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   r0  r  r1  new_objkeyr"  r  s          r6   r4  r4    s     wx tH~~	Hd	#	# "..** 	: 	:JC#E499GCLL	HtUm	,	,  	: 	:DNN8D$889999r5   'Callable[..., Coroutine[Any, Any, Any]]c                z  K    ||           r ||            d{V S t          | t                    r8i }|                                 D ]\  }}t          |||           d{V ||<    |S t          | t          t
          f          r3g }| D ],}|                    t          |||           d{V            -|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   r5  s          r6   r:  r:    s      wx T(^^#######	Hd	#	# "..** 	F 	FJC!/tW!E!EEEEEEEGCLL	HtUm	,	,  	F 	FDNNdG!D!DDDDDDDEEEEr5   api_infoc                    t          | |                     d                    t          fdt          D                       S )Nr  c              3      K   | ]}|v V  	d S ru   r4   )r   file_data_formatinfos     r6   r  z value_is_file.<locals>.<genexpr>  s*      RR,<4'RRRRRRr5   )r  rC   anyFILE_DATA_FORMATS)r;  r?  s    @r6   value_is_filerB    sB    &xg1F1FGGDRRRR@QRRRRRRr5   c                    t          | t          t          f          oAt          |                                           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)ss    r6   is_filepathrG    sB     a#t%%P$q''..*:*:PtAww?P?PPr5   c                j    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   s    r6   is_file_objrJ    s0     aM6Q;M:ai3M3MMr5   c                    t          | t                    oBd| 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_typer<   gradio.FileData)r   r   r    rC   rI  s    r6   is_file_obj_with_metarO    sh     	1d 	<aK	<qy#&&	< aK	< fIMM'2&&*;;r5   c                ^    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  )rO  r   r    rI  s    r6   is_file_obj_with_urlrQ    s.     !##P
Pz!E(C7P7PPr5   >   boxrowtabformtabsgroupr   columndatasetsidebartabitem	accordioninterpretationfilepath_or_urlc                ,   t          |           }|ddid}t          |          r"i ||                    d          d         |dS t          |                                          ri |dt          |          j        iS t          d| d	          )
NrM  rN  )r.  rL  rm  r(  )	orig_namer  r`  zFile z; does not exist on local filesystem and is not a valid URL.)r    r   r  r
   rD  rC  r   )r^  rF  r   s      r6   handle_filera    s    OA):;<<D 
@$@QWWS\\"%5a@@@@	a		 
2$2T!WW\222RARRR
 
 	
r5   c                H    t          j        d           t          |           S )NzXfile() is deprecated and will be removed in a future version. Use handle_file() instead.)r   r   ra  )r^  s    r6   rl  rl    s)    Mb   '''r5   parameters_infolist[ParameterInfo] | Noner  r  r  r   c                ,    G d dt                     }t          |          }| |rt          d          |S t          |          }||j        gt          |           |z
  z  z   }i }g }t          |           D ]\  }}	d|	v r'|||	d         <   |                    |	d                    n|                    d|            |	                    dd          r)||         |j        k    r|	                    d          ||<   |                                D ]F\  }
}|
|v r+||
         |k     rt          d	|
 d
          ||||
         <   4t          d	|
 d          |j        |v r0t          d||
                    |j                                      |S )Nc                      e Zd ZdZdS )!construct_args.<locals>._KeywordsNO_VALUEN)r0   r1   r2   rh  r4   r5   r6   	_Keywordsrg    s        r5   ri  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   rh  r  r   rC   r  	TypeErrorrp   )rc  r  r  ri  _argsnum_argskwarg_arg_mappingkwarg_namesrp   
param_infor7  r"  s               r6   construct_argsrs    s=       D    JJE 	 M   4yyHY'(C,@,@8,KLLEK&77 
? 
?zz))>Cj)9:;z*:;<<<<2522333NN2E::	?e	 222%>>*=>>E%Lllnn  
U### %00 [#  [  [  [   16',-- Pc  P  P  P   U""fEKKPYPbDcDc8dff
 
 	
 Lr5   )r8   r    )r8   r*   )r   r    r8   r*   ru   )
r   r   r   r    r   r    r   r   r8   r"   )r   r   r   r   r   r   r   r   r   r    r   r    r   r   r   r   r   r*   r   r   r8   r   )r   r   r   r   r   r   r   r   r$   r    r   r   r   r*   r   r   r8   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   r8   r"   )
r   r   r   r   r$   r    r   r  r8   r"   )r7  r    r8  r   r8   r    )NN)rJ  r    rK  r   r8  r   r8   r    )rZ  r    r8   r   )rc  r    r8   r   )r7  r    ri  rj  r8   r*   )rW  ru  )r  r    )r.  ru  )rc  r    r8   r  )r  )rZ  r    r  r%   r8   r    )r  r    r8   r    )NNN)rc  r    r7  r   r8  r  r  r   )r  r  r8  r  )r7  ru  r8   r  )Nr  )r  r    rK  r   r  r%   )r  r   r8   r   )r  r   )r  r   r8   r    )r  r   r8   r   )r0  r   r  r   r1  r2  r8   r   )r0  r   r  r8  r1  r2  r8   r   )r;  r   r8   r*   )r^  ru  )rc  rd  r  r  r  r   r8   r   )
__future__r   r   ry  concurrent.futuresr   r3  r!  rA   r_  rR  r=   r@  rD  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   rG   r  rD   rI   rM   rO   rQ   r    rS   rb   r|   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r  r  rI  rY  rb  rh  rt  r~  r  r  r  r  r  r  r  r  r  r  r  r   r  r  rA  r  r  r  r  r  r4  r:  rB  rG  rJ  rO  rQ  SKIP_COMPONENTSra  rl  rs  r4   r5   r6   <module>r     s	   " " " " " "              				       / / / / / / / / ( ( ( ( ( ( ( (                        
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
          & & & & & & > > > > > > 9888888


	
	
() F 	!	*

 
 
 
 
iu 
 
 
 
	 	 	 	 "!##	 	 	 	 	9 	 	 		 	 	 	 	 	 	 		 	 	 	 	i 	 	 		 	 	 	 	I 	 	 	, , , , ,C , , ,"1 1 1 1 1T 1 1 1h 
 
 
 
 
 
 
 
* 1 1 1 1 1 1 1 1         
<,6	7	7	 	 	 5 5 5 5 5 5 5 5 J J J J J J J J&< < < <   F F F F #'	< < < < <~$ $ $ $N   @. . . .0C C C CLU U U Up' ' '^     CG$ $ $ $ $*   
 
 
 
   

 

 

 

   ' ' ' '    - - - -    (    !!	         F         !    8K K K K 	 	 	 	 	
 	 	 	C C C C*    -R0 ? ? ? ?
JA JA JA JAZ   p p p pf   (   0S S S S
Q Q Q QN N N N   $
Q 
Q 
Q 
Q  "

 

 

 

( ( ( (0 0 0 0 0 0r5   