
    Pif                    6   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, erd dl-m.Z. dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?e,j@        e,jA        e,jB        e,jC        e,jD        gZE G d de#d          ZFdd ZG eG            ZH G d! d"eI          ZJ G d# d$eI          ZK G d% d&eI          ZL G d' d(eI          ZM G d) d*eNe          ZO G d+ d,e          ZPe G d- d.                      ZQe G d/ d0                      ZRe G d1 d2                      ZS e"d3eReSz            ZTd4 ZUe G d5 d6                      ZVe G d7 d8                      ZWdd:ZXdd<ZYdd=ZZddNZ[ddTZ\ddUZ]ddWZ^ddYZ_dZ Z`ddd^Za	 dddaZbddcZcddeZdddhZeddkZfddmZgddoZhdddpZiddrZjdddvZkddxZl	 	 	 ddd{Zmddd~ZnddZo	 	 dddZpddZq G d der          ZsddZtg dZueud         ZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZh dZdd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)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__     g/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/gradio_client/utils.pyr   r   F   sp         HHHMMMIIIOOOOOOMMMHHHJJJJJr4   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_datar/   decodestripjsonloadsget	Exception)package_json_datapackage_datar:   s      r5   get_package_versionrF   S   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r/   r0   r1   __doc__r3   r4   r5   rH   rH   b   s        88Dr4   rH   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.NrI   r3   r4   r5   rL   rL   h   s        WWDr4   rL   c                      e Zd ZdZdS )InvalidAPIEndpointErrorz(Raised when the API endpoint is invalid.NrI   r3   r4   r5   rN   rN   n   s        22Dr4   rN   c                      e Zd ZdZdS )SpaceDuplicationErrorz:Raised when something goes wrong with a Space Duplication.NrI   r3   r4   r5   rP   rP   t   s        DDDr4   rP   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)r/   r0   r1   rS   rT   rU   rV   rW   rX   rY   r-   rZ   r[   server_stoppedr\   r]   r^   r3   r4   r5   rR   rR   z   sZ        IJJI%N-+
CHI3N)!L+r4   rR   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statusr7   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.)ra   rb   rc   rd   re   rf   rg   ri   rh   rj   rk   index)rm   orders     r5   orderingzStatus.ordering   sW     O OOO
 {{6"""r4   otherc                Z    |                      |           |                      |          k     S N)rq   )selfrr   s     r5   __lt__zStatus.__lt__   s%    }}T""T]]5%9%999r4   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.)rR   rS   ra   rc   rT   rd   rU   re   rV   rf   rW   rg   rX   rh   rY   rj   rZ   ri   r-   rl   r_   )r    s    r5   msg_to_statuszStatus.msg_to_status   s     #V%9$f&7$fo#V%8(&*;,f.>+V_"FOvz(&/
  	r4   N)rm   ra   r7   r$   )rr   ra   )r    r   r7   ra   )r/   r0   r1   rJ   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   staticmethodrq   rv   rx   r3   r4   r5   ra   ra      s        11H#MJH!LJIHHI
C# # # \# : : : :    \  r4   ra   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 | Nonero   length
str | Noneunitfloat | NonerZ   descdatar+   r7   list[ProgressUnit]c                       fd|D             S )Nc                    g | ]q} |                     d           |                     d          |                     d          |                     d          |                     d                    rS )ro   r}   r   rZ   r   )ro   r}   r   rZ   r   rB   ).0dclss     r5   
<listcomp>z)ProgressUnit.from_msg.<locals>.<listcomp>   s     	
 	
 	
  CeeGnnuuXUU6]]z**UU6]]  	
 	
 	
r4   r3   )r   r   s   ` r5   from_msgzProgressUnit.from_msg   s0    	
 	
 	
 	
 	
 	
 	
 		
r4   N)r   r+   r7   r   )r/   r0   r1   r2   classmethodr   r3   r4   r5   r{   r{      sp         

 

 

 [

 

 

r4   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.ra   coder|   r%   r(   r   etazbool | Noner*   zdatetime | Nonetimezlist[ProgressUnit] | Noner,   Nztuple[str, str] | Noner-   rm   zLiteral['status', 'output']type)r/   r0   r1   rJ   r2   r-   r   r3   r4   r5   r   r      s         SSLLL,,,,"&C&&&&(0D000000r4   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)r/   r0   r1   rJ   r2   r   r   r3   r4   r5   r   r      sO         SSMMM&D&&&&Er4   r   Updatec            	     d    t          t          j        d d d d t          j                    d           S )N)r   r%   r(   r   r*   r   r,   )r   ra   rb   r   nowr3   r4   r5   create_initial_status_updater      s6    _\^^   r4   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)
r/   r0   r1   rJ   r   r   r   r2   listr   r3   r4   r5   r   r      s[          
 #(%8T"U"U"UMUUUUt444G444444r4   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)r/   r0   r1   rJ   r2   r   r#   r   r   r   asyncioQueuer   r3   r4   r5   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Ir4   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    r5   is_http_url_liker     s0     lC(( u""#:;;;r4   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_coderB   
is_successrC   )r   r   clienthead_requests       r5   	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    r5   is_valid_urlr   4  s;     M	H   L))Ei.E.EEr4   r   httpx.Clientr   dict	hash_datahelper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_v0
concurrentfutureswaitFIRST_COMPLETEDlen
ValueErrorresult)r   r   r   r   r   r   r   r   r   r   future_cancel
future_ssedone_futures                  r5   get_pred_from_sse_v0r   ?  s     #FOO&'7J M 
 
J  %%	
#&6 &  GD! "F
4yyA~~H3t99HHHIII  }} r4   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                 r5   get_pred_from_sse_v1plusr   f  s    #FOO&'7J M 6#=x J  %%	
#&6 &  GD! "F
4yyA~~H3t99HHHIII  $$&&	 	O}}	 r4   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#   )r@   r   r   verify)r   sleepr   r   r   r   r   CancelledErrorr#   r   postr   )r   r   r   r   s       r5   r   r     s&   :
4[ 	: 	:# 	: 	: 	: 	: 	: 	: 	: % : (77999:	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	::  

fo.	
 	
 	
 	
 

+
+
-
--s   	A$%A$$A(+A(r!   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%   r*   r   r   r,   r"   r   rT   z Queue is full! Please try again.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   appendr   r   r   r   r   rL   r#   r   raise_for_statusr   )r   r   r   r   r   r   r   r   responselineresphas_progressstatus_updater"   r   er#   reqs                     r5   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   rR   r-   rB   r   ra   rx   r   r   r{   r   rX   r   	enumerate
apply_diffr   rj   r   rC   r   r   r   r   
put_nowaitr   r   rY   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                     r5   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          r5   
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r4   )copydeepcopy)objdiffr"  r  r  r  s         r5   r  r  <  sU    
-

C  B  $ 3 3ejdFE22Jr4   	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)r'  r(  	directorydests       r5   create_tmp_copy_of_filer9  k  s~    S1H/1122W5Fr5J5JJIOOT4O000tI++D
LD!!!t||~~r4   url_path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/  r0  r1  r2  r3  r   r   r   openiter_rawwriter   r6  )	r:  r;  r(  r   r7  r'  r   fchunks	            r5   download_tmp_copy_of_filerI  s  s    
C$''''6;C	E 122G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 |                    d          rdS t          j        |           d         }|*|                    dd                              dd	          }|S )
Nz.vttztext/vttz.webpz
image/webpr   zx-wavwavzx-flacflac)lowerendswith	mimetypes
guess_typer  )rJ  filename_lowermimetypes      r5   get_mimetyperT    s    ^^%%Nv&& zw'' |#H--a0H##GU33;;HfMMOr4   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/flacrM  .r   )r  rP  rQ  guess_extensionr   )rU  r   	extensions      r5   get_extensionrZ    s    ];;H))!,D|v	t)$//I!5!5c!:!:abbM	r4   
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fileTrW  /F)rT  r   lstriprN  r
   suffix)r'  r[  	mime_type	file_typefile_exts        r5   is_valid_filere    s    Y''I 	 		44$$ 	!((--3355II-44S99??AAHH$$tt %"y';';yOOO'L'L"445r4   rG  
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rbr9   r   r;   ;base64,)rD  base64	b64encodereadr   rT  )rG  r^  encoded_string
base64_strrS  s        r5   encode_file_to_base64ro    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 )Nr9   r   r;   ri  )r   rB   r   rj  rk  contentr   rT  )rp  r   rm  rn  rS  s        r5   encode_url_to_base64rs    so    9S>>D%dl33N^W--JC  Hx388<zIJVr4   r  c                z    t          |           } t          |           rt          |           S t          |           S rt   )r   r   rs  ro  )r  s    r5   encode_url_or_file_to_base64ru    s9    t99D *#D))) &&&r4   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 )Nr>  r?  r   r   )	bytearrayr   r   
iter_bytes)rp  r;  arrr   rr   s         r5   download_byte_streamr{    s      
++C6;C	E 122G	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  )rZ  rsplitrj  	b64decode)rU  rY  r   s      r5   decode_base64_to_binaryr    s=    h''I??3""2&DD!!9,,r4      	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     r5   r   z5strip_invalid_filename_characters.<locals>.<listcomp>  s*    OOOTT\\^^OtwDr4   r   Nr  )rB  r  splitextjoinr   encode)rJ  r  r3  extfilename_lens        r5   !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&& Or4   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     r5   r   z,sanitize_parameter_names.<locals>.<listcomp>  s*    RRR$4<<>>RTT\\\\\r4    r   )r  r  rN  )r  s    r5   sanitize_parameter_namesr    s?     	RR-RRRSS	c			r4   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+  rW  r   r   F)r  r  r(  )r  r  ra  r(  )r
   r.  r/  r0  r1  r2  r  r3  ro   r  NamedTemporaryFilerF  flush)	rU  r'  r(  r  r7  r   rY  rJ  file_objs	            r5   decode_base64_to_filer    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Or4   jsnstr | dict | listc                
   |t          j        |d           t          j        dd|d          }t	          | t
                    rt          j        |           } t          j        | |           |	                                 |S )NTr=  Fz.jsonzw+)r  ra  r(  mode)
rB  rC  r.  r  r   r   r@   rA   dumpr  )r  r(  r  s      r5   dict_or_str_to_json_filer    s    

C$''''*W#D  H #s jooIc8NNOr4   dict | listc                |    t          |           5 }t          j        |          cd d d            S # 1 swxY w Y   d S rt   )rD  r@   load)r'  rG  s     r5   file_to_jsonr  -  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)r;  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)r  r;  r  r   r  s        r5   set_space_timeoutr  5  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      r5   synchronize_asyncr  Q  s7     ;FK0022DJ4JJJ6JJJr4   c                      e Zd ZdS )APIInfoParseErrorN)r/   r0   r1   r3   r4   r5   r  r  a  s        Dr4   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 )rB   r  )r  s    r5   get_typer  e  s    &wv	6		f~	F		 Cv	G		 	Cw	G		 Cw	G		 Cw	v			 A A ABBBr4   )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_typerB   r  CURRENT_FILE_DATA_FORMAT)r  type_s     r5   json_schema_to_python_typer    s2    '

70C0CDDE==1:>>>r4   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   r@   descriptionz str | float | bool | list | dictr  r_  r  nullNoner  zLiteral[]r  z, c                8    g | ]}d t          |          z   d z   S )')r   )r   vs     r5   r   z/_json_schema_to_python_type.<locals>.<listcomp>  s'    #O#O#O1C#a&&L3$6#O#O#Or4   integerr$   stringr   booleanr)   numberr&   arrayr  prefixItemsc                0    g | ]}t          |          S r3   r  r   r  defss     r5   r   z/_json_schema_to_python_type.<locals>.<listcomp>  s$    TTT!,Q55TTTr4   ztuple[c                0    g | ]}t          |          S r3   r  r  s     r5   r   z/_json_schema_to_python_type.<locals>.<listcomp>  s$    UUU!,Q55UUUr4   zlist[objectc                b    |                      d          rd|                      d           dndS )Nr  z ()r;   r   )r  s    r5   get_descz-_json_schema_to_python_type.<locals>.get_desc  s6    34553G3GO/m,,////ROr4   
propertiesc                b    g | ]+\  }}|d k    | dt          |            |           ,S )r  : r  )r   nr  r  r  s      r5   r   z/_json_schema_to_python_type.<locals>.<listcomp>  sT     
 
 
1G|| GG/488G((1++GG||r4   additionalPropertieszstr, Anyzstr, zdict(r  )r  r  z | c                0    g | ]}t          |          S r3   r  r  s     r5   r   z/_json_schema_to_python_type.<locals>.<listcomp>  s$    WWWA6q$??WWWr4   r  c              3  8   K   | ]}t          |          V  d S rt   r  r  s     r5   	<genexpr>z._json_schema_to_python_type.<locals>.<genexpr>  s.      UU!4Q==UUUUUUr4   zAll[zCannot parse schema )	r  rB   r  splitr  r  r   r)   r  )r  r  r  r  elementspropsdesadditional_propertiesr   r   r  s    `        @r5   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 ? ?@@@r4   	type_hintc                F    	 t          |           S # t          $ r i cY S w xY wrt   )_python_type_to_json_schemarC   )r  s    r5   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  r/   	UnionType|   c              3  <   K   | ]}|t          d           u|V  d S rt   )r   r   ts     r5   r  z._python_type_to_json_schema.<locals>.<genexpr>  s2      FFA!4::2E2Ea2E2E2E2EFFr4   r  r  c                ,    g | ]}t          |          S r3   r  r   s     r5   r   z/_python_type_to_json_schema.<locals>.<listcomp>  s!    HHHQ5a88HHHr4   .c                ,    g | ]}t          |          S r3   r  r   s     r5   r   z/_python_type_to_json_schema.<locals>.<listcomp>  s!    JJJq7::JJJr4   )r   r  minItemsmaxItems)r   r  r  z0JSON Schema only supports string keys in objectsc                    g | ]	}|j         
S r3   )r  )r   items     r5   r   z/_python_type_to_json_schema.<locals>.<listcomp>8  s    888dtz888r4   r2   	__total____dataclass_fields__)r   r  required)!r   r   r   r$   r&   r)   r   r   tupleset	frozensetbytesrw  r   r   r   r   r   hasattrr/   nextr  r   inspectisclass
issubclassr	   r   r  r	  r   r
  default)r  originliteral_valuestypes
other_typer  r  	item_typekey_type
value_typeenum_valuesr  r  hints
field_name
field_types                   r5   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:Ir4   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   r!  r  r"  new_objkeyr  r  s          r5   r%  r%  S  s     wx tH~~	Hd	#	# "..** 	: 	:JC#E499GCLL	HtUm	,	,  	: 	:DNN8D$889999r4   '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   r&  s          r5   r+  r+  g  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r4   api_infoc                    t          | |                     d                    t          fdt          D                       S )Nr  c              3      K   | ]}|v V  	d S rt   r3   )r   file_data_formatinfos     r5   r  z value_is_file.<locals>.<genexpr>  s*      RR,<4'RRRRRRr4   )r  rB   anyFILE_DATA_FORMATS)r,  r0  s    @r5   value_is_filer3    sB    &xg1F1FGGDRRRR@QRRRRRRr4   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    r5   is_filepathr8    sB     a#t%%P$q''..*:*:PtAww?P?PPr4   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    r5   is_file_objr;    s0     aM6Q;M:ai3M3MMr4   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   rB   r:  s    r5   is_file_obj_with_metar@    sh     	1d 	<aK	<qy#&&	< aK	< fIMM'2&&*;;r4   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"}
    }
    rp  )r@  r   r   r:  s    r5   is_file_obj_with_urlrB    s.     !##P
Pz!E(C7P7PPr4   >   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	          )
Nr>  r?  )r  r=  r_  r  )	orig_namerp  rQ  zFile z; does not exist on local filesystem and is not a valid URL.)r   r   r  r
   r5  r3  r   )rO  r7  r   s      r5   handle_filerR    s    OA):;<<D 
@$@QWWS\\"%5a@@@@	a		 
2$2T!WW\222RARRR
 
 	
r4   c                H    t          j        d           t          |           S )NzXfile() is deprecated and will be removed in a future version. Use handle_file() instead.)r   r   rR  )rO  s    r5   r^  r^    s)    Mb   '''r4   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)r/   r0   r1   rY  r3   r4   r5   	_KeywordsrX    s        r4   rZ  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   rY  r
  r   rB   r  	TypeErrorro   )rT  r  r  rZ  _argsnum_argskwarg_arg_mappingkwarg_namesro   
param_infor(  r  s               r5   construct_argsrd    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
 
 	
 Lr4   r  httpx.Responsec           
     
   | j         dk    r|                                                     dg           }g }t          |          D ]~\  }}|                    dd          dk    r_|                    d          du rH|                    dd	|           }|                    d
| d|                    dd                      |                    dt          |           d           |rd                    |          S dS dS )z
    If the request is a 422 error and the detail contains a validation error message, return the message. Otherwise, return None.
    i  detail__type__r;   validateis_validFr[  
parameter_z- r  messager   z  parameter(s) failed validation:r   N)r   r@   rB   r
  r   r  r   r  )r  rg  validation_messagesro   
error_info
param_names         r5   extract_validation_messagerp    s5    #"-- !*6!2!2 	 	E:z2..*<<NN:..%77'^^,<>R5>R>RSS
#**FFFz~~i'D'DFF   	""#)**LLL	
 	
 	
  	2990111! 	2 	2r4   )r7   r   )r7   r)   )r   r   r7   r)   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r   r   r7   r   )r   r   r   r   r   r   r   r   r#   r   r   r   r   r)   r   r   r7   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   r7   r!   )
r   r   r   r   r#   r   r   r  r7   r!   rt   )r'  r   r(  r~   r7   r   )NN)r:  r   r;  r~   r(  r~   r7   r   )rJ  r   r7   r~   )rU  r   r7   r~   )r'  r   r[  r\  r7   r)   )rG  rf  )rp  r   )r  rf  )rU  r   r7   r|  )r  )rJ  r   r  r$   r7   r   )r  r   r7   r   )NNN)rU  r   r'  r~   r(  r  r  r~   )r  r  r(  r  )r'  rf  r7   r  )Nr  )r  r   r;  r~   r  r$   )r  r   r7   r   )r  r   )r  r   r7   r   )r  r   r7   r   )r!  r   r  r   r"  r#  r7   r   )r!  r   r  r)  r"  r#  r7   r   )r,  r   r7   r)   )rO  rf  )rT  rU  r  r  r  r   r7   r   )r  re  r7   r~   )
__future__r   r   rj  concurrent.futuresr   r#  r  r@   rP  rB  r<   r0  r4  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   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  r9  rI  rT  rZ  re  ro  rs  ru  r{  r  r  r  r  r  r  r  r  r   r  r  r2  r  r  r  r  r  r%  r+  r3  r8  r;  r@  rB  SKIP_COMPONENTSrR  r^  rd  rp  r3   r4   r5   <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' ' '^     @D$ $ $ $ $*	 	 	 	
 
 
 
   

 

 

 

   ' ' ' '    - - - -    (    !!	         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f2 2 2 2 2 2r4   