
    AF[i4                       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,j                  e,j                  e,j                  e,j                  gZE G d de#d      ZFdfd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- d.             ZRe G d/ d0             ZS e"d1eReSz        ZTd2 ZUe G d3 d4             ZVe G d5 d6             ZWdgd7ZXdhd8ZYdhd9ZZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 did:Z[	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 djd;Z\	 	 	 	 	 	 	 	 dkd<Z]	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dld=Z^	 	 	 	 	 	 	 	 	 	 dmd>Z_d? Z`dndod@Za	 dp	 	 	 	 	 	 	 dqdAZbdrdBZcdsdCZddtdDZedudEZfdvdFZgdwdGZhdndvdHZidxdIZjdydzdJZkd{dKZl	 	 	 d|	 	 	 	 	 	 	 d}dLZmdnd~dMZnddNZo	 	 d	 	 	 	 	 ddOZpddPZq G dQ dRer      ZsddSZtg dTZueudU   ZvddVZwddWZxddXZyddYZzddZZ{	 	 	 	 	 	 	 	 dd[Z|dd\Z}dgd]Z~dgd^Zdgd_Zdgd`Zh daZddbZddcZ	 	 	 	 	 	 	 	 dddZddeZy)    )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                  r    e Zd ZU ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   y)Messagestrmsgdict[str, Any]outputevent_idintrankfloatrank_eta
queue_sizeboolsuccess
list[dict]progress_dataloglevelN)__name__
__module____qualname____annotations__     \/var/www/html/chatbot/moweb-chatbot/venv/lib/python3.12/site-packages/gradio_client/utils.pyr   r   F   s6    	HM
IOOM	HJr4   r   F)totalc                     	 t        j                  t        d      j                  d      j	                         } t        j                  |       }|j                  dd      }|S # t        $ r Y yw xY w)Nzpackage.jsonutf-8version )	pkgutilget_datar/   decodestripjsonloadsget	Exception)package_json_datapackage_datar9   s      r5   get_package_versionrE   S   sj    X~6==gFLLN 	 zz"34""9b1 s   AA" "	A.-A.c                      e Zd ZdZy)TooManyRequestsErrorz.Raised when the API returns a 429 status code.Nr/   r0   r1   __doc__r3   r4   r5   rG   rG   b   s    8r4   rG   c                      e Zd ZdZy)
QueueErrorzMRaised when the queue is full or there is an issue adding a job to the queue.NrH   r3   r4   r5   rK   rK   h   s    Wr4   rK   c                      e Zd ZdZy)InvalidAPIEndpointErrorz(Raised when the API endpoint is invalid.NrH   r3   r4   r5   rM   rM   n   s    2r4   rM   c                      e Zd ZdZy)SpaceDuplicationErrorz:Raised when something goes wrong with a Space Duplication.NrH   r3   r4   r5   rO   rO   t   s    Dr4   rO   c                  D    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZy)ServerMessage	send_hash
queue_full
estimation	send_dataprocess_startsprocess_generatingprocess_completedr-   progress	heartbeatzServer stopped unexpectedly.unexpected_errorclose_streamprocess_streamingN)r/   r0   r1   rR   rS   rT   rU   rV   rW   rX   r-   rY   rZ   server_stoppedr[   r\   r]   r3   r4   r5   rQ   rQ   z   sL    IJJI%N-+
CHI3N)!L+r4   rQ   c                  h    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZedd       ZddZedd       Zy)Statusz'Status codes presented to client users.STARTINGJOINING_QUEUE
QUEUE_FULLIN_QUEUESENDING_DATA
PROCESSING	ITERATINGPROGRESSFINISHED	CANCELLEDLOGc           
     T   t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  g
}|j                  |       S )z'Order of messages. Helpful for testing.)r`   ra   rb   rc   rd   re   rf   rh   rg   ri   rj   index)statusorders     r5   orderingzStatus.ordering   sn     OO  OOOOOO
 {{6""r4   c                H    | j                  |       | j                  |      k  S N)rp   )selfothers     r5   __lt__zStatus.__lt__   s    }}T"T]]5%999r4   c                d   t         j                  t        j                  t         j                  t        j
                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j                   t        j"                  t         j$                  t        j&                  t         j(                  t        j                  i
|    S )zKMap the raw message from the backend to the status code presented to users.)rQ   rR   r`   rb   rS   rc   rT   rd   rU   re   rV   rf   rW   rg   rX   ri   rY   rh   r-   rk   r^   )r    s    r5   msg_to_statuszStatus.msg_to_status   s     ##V%9%9$$f&7&7$$foo##V%8%8((&*;*;,,f.>.>++V__""FOOvzz((&//
  	r4   N)rn   r`   returnr$   )rt   r`   )r    r   rx   r`   )r/   r0   r1   rI   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   staticmethodrp   ru   rw   r3   r4   r5   r`   r`      sg    1H#MJH!LJIHHI
C# # :  r4   r`   c                  R    e Zd ZU ded<   ded<   ded<   ded<   ded<   edd	       Zy
)ProgressUnit
int | Nonerm   length
str | Noneunitfloat | NonerY   descc                    |D cg c]Z  } | |j                  d      |j                  d      |j                  d      |j                  d      |j                  d            \ c}S c c}w )Nrm   r}   r   rY   r   )rm   r}   r   rY   r   rA   )clsdatads      r5   from_msgzProgressUnit.from_msg   sc     	
  eeGnuuXUU6]z*UU6]	
 		
 	
s   AA'N)r   r+   rx   zlist[ProgressUnit])r/   r0   r1   r2   classmethodr   r3   r4   r5   r{   r{      s2    



 

r4   r{   c                  t    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<   y)StatusUpdateIUpdate message sent from the worker thread to the Job on the main thread.r`   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)r/   r0   r1   rI   r2   r-   r   r3   r4   r5   r   r      sD    S
L
	
,,"&C	&(0D
%0r4   r   c                  B    e Zd ZU dZded<   ded<   dZded<   d	Zded
<   y)OutputUpdater   	list[Any]outputsr)   r*   r"   zLiteral['output']r   FfinalN)r/   r0   r1   rI   r2   r   r   r3   r4   r5   r   r      s%    SM&D
&E4r4   r   Updatec            	     f    t        t        j                  d d d d t        j                         d       S )N)r   r%   r(   r   r*   r   r,   )r   r`   ra   r   nowr3   r4   r5   create_initial_status_updater      s.    __\\^ r4   c                  J    e Zd ZU dZ ee      Zded<    ee      Z	ded<   y)	JobStatuszpThe job status.

    Keeps track of the latest status update and intermediate outputs (not yet implements).
    default_factoryr   latest_statusr   r   N)
r/   r0   r1   rI   r   r   r   r2   listr   r3   r4   r5   r   r      s(    
 #(8T"UM<Ut4GY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<   y)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   rI   r2   r   r#   r   r   r   asyncioQueuer   r3   r4   r5   r   r     sW    U
J	N..NM4Hj!OT!-1O*1%*7==%IG"Ir4   r   c                F    t        | t              sy| j                  d      S )zN
    Check if the given value is a string that looks like an HTTP(S) URL.
    F)zhttp://zhttps://)
isinstancer   
startswithpossible_urls    r5   is_http_url_liker     s#     lC(""#:;;r4   c                .   ddi}	 t        j                         5 }t        j                  | |      }|j                  dk(  r&|j	                  | |      j
                  cddd       S |j
                  cddd       S # 1 sw Y   yxY w# t        $ r Y yw xY w)zb
    Probe the given URL to see if it responds with a 200 status code (to HEAD, then to GET).
    z
User-Agentz8gradio (https://gradio.app/; gradio-team@huggingface.co)headersi  NF)httpxClientheadstatus_coderA   
is_successrB   )r   r   clienthead_requests       r5   	probe_urlr   %  s     WXG\\^ 	+v ::lGDL''3.zz,z@KK	+ 	+  **		+ 	+ 	+
  s;   B AA<	B 'A<2	B <BB B 	BBc                \    t        j                  d       t        |       xr t        |       S )z3
    Check if the given string is a valid URL.
    z^is_valid_url should not be used. Use is_http_url_like() and probe_url(), as suitable, instead.)warningswarnr   r   r   s    r5   is_valid_urlr   4  s-     MM	H L)Ei.EEr4   c
                   d|_         |	j                  t        ||||      }
|	j                  t        | |||||||	      }t        j
                  j                  |
|gt        j
                  j                        \  }}d|_         t        |      dk7  rt        dt        |       d      |D ]  }|j                         c S  y NF)return_whenT   zDid not expect z tasks to be done.)r   submitcheck_for_cancelstream_sse_v0
concurrentfutureswaitFIRST_COMPLETEDlen
ValueErrorresult)r   r   	hash_datahelpersse_urlsse_data_urlr   cookies
ssl_verifyexecutorfuture_cancel
future_ssedone_futures                  r5   get_pred_from_sse_v0r   ?  s     #FOO&'7JM 
J   %%	
#&&66 & GD! "F
4yA~?3t9+5GHII }}r4   c                   d| _         |j                  t        | |||      }|j                  t        | |||      }	t        j
                  j                  ||	gt        j
                  j                        \  }
}d| _         t        |
      dk7  rt        dt        |
       d      |
D ]'  }|j                         }|r||j                         c S  y r   )r   r   r   stream_sse_v1plusr   r   r   r   r   r   	exceptionr   )r   r   r   pending_messages_per_eventr#   protocolr   r   r   r   r   r   r   r   s                 r5   get_pred_from_sse_v1plusr   f  s     #FOO&'7JM 6#=xJ   %%	
#&&66 & GD! "F
4yA~?3t9+5GHII $$&	O}}	r4   c                   	 t        j                  d       | j                  5  | j                  r
	 d d d        n4| j                  rt
        j                  j                         	 d d d        l| j                  r0t        j                  | j                  d| j                  i|||       t
        j                  j                         # 1 sw Y   dxY w)N皙?r#   )r?   r   r   verify)r   sleepr   r   r   r   r   CancelledErrorr#   r   postr   )r   r   r   r   s       r5   r   r     s     

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

foo.	
 


+
+
--	: 	:s   C*CCc                   	 | j                  d||||      5 }|j                         D ]H  }	|	j                  d      }	t        |	      dk(  r$|	j	                  d      rt        j                  |	dd        }
|
d   t        j                  t        j                  fv rt|j                  5  d|
v }t        t        j                  |
d         |
j                  d	      |
j                  d
d       |
j                  d      t        j                          |
j                  d      |rt"        j%                  |
d         nd       }|
j                  di       j                  dg       }|rR|j&                  t        j(                  k7  r5	  |j*                  | }|j.                  j0                  j3                  |       ||j.                  _        d d d        |j6                  rt8        j:                  j=                         |
d   dk(  rt?        d      |
d   dk(  r9|
d   }||_         | jC                  |d|i||||      }|jE                          #|
d   dk(  s-|
d   c cd d d        S tG        d|	        	 d d d        tG        d      # t,        $ r}|g}Y d }~d }~ww xY w# 1 sw Y   xY w# 1 sw Y   tG        d      xY w# t8        j:                  j<                  $ r  w xY w)NGET)paramsr   r   
r   data:   r    r,   r(   r%   r*   r'   )r   r(   r%   r*   r   r   r,   r"   r   rS   z Queue is full! Please try again.rU   r#   )r?   r   r   rX   zUnexpected message: z*Did not receive process_completed message.)$stream
iter_linesrstripr   r   r?   r@   rQ   r-   rZ   r   r   r`   rw   rA   r   r   r{   r   r   ri   r   rB   r   r   appendr   r   r   r   r   rK   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{{4(t9>??7+::d12h/DE{}'8'8-:Q:Q&RR  A'6$'>(4!'!5!5d5k!B'+xx'=!%&$!7$(HHY$7!) $ 4+ +7*?*?_@U*V!%
) "&(B!7!;!;FB!G!m&8&8FOO&K-)D)D)Df)M #JJ..55f=3@

0)A* --(00??AAE{l2()KLLe3#'
#3*2$kk(",h!L$!L)!L$+$+	 *  ,,.e(;;#H~-g5	D 5	Dj %';D6%BCC].D5	Dl EFF- $- -*+-#A A5	Dl EFF,, sy   K BJ/)CJ#J	6J#BJ/J/	K &J/6K 		J 	J	J#J 	 J##J,(J//K4K K$c                   	 ||   }d }	 t        |      dkD  r|j                  d      }nt        j                  d       7|| j                  rt
        j                  j                         | j                  5  d }|d   t        j                  k(  r*|j                  d      }|j                  d      }	|r|	r||	f}t        t        j                  |d         |j                  d      |j                  dd       |j                  d	      t        j                          |j                  d
      d|v rt"        j%                  |d         nd |      }
|j                  di       j                  dg       }|d   t        j&                  k(  r@|dv r<|t)        |      }n.t+        |      D ]   \  }}||   }t-        ||      }|||<   |||<   " |r|
j.                  t        j0                  k7  rk	  | j2                  | }| j6                  j8                  j;                  |       | j<                  j?                  tA        ||j                  d	d                   |
| j6                  _!        | j<                  j?                  |
       d d d        |d   t        jD                  k(  rs||= |j                  d	d      stG        |d   jI                               }n|d   }| j<                  j?                  tA        |d|j                  d	d                   |d   S |d   t        jJ                  k(  rtM        d      '# t4        $ r}|g}Y d }~Md }~ww xY w# 1 sw Y   xY w# 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   rQ   r-   rA   r   r`   rw   r   r   r{   r   rW   r   	enumerate
apply_diffr   ri   r   rB   r   r   r   r   
put_nowaitr   r   rX   dict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     sJ   O5h?&*##$q(&**1-

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

())-8Y,9Z 5z]<<<.x8wwy$/ "#h-"5"5"78F ]F))  &" #	4 8 8}$U};;; !233Q ^ % %"#%K,9 ,9@ ,, sW   A6M 8E.M'L16BM=BM #M 1	M:M=MMMMM M6c                b    t        j                  |       } d }|D ]  \  }}} || |||      }  | S )Nc                   t        |      dk(  r|dk(  r|S |dk(  r| |z   S t        d|       | }t        t        |      dz
        D ]
  }|||      } |d   }|dk(  r|||<   | S |dk(  r||xx   |z  cc<   | S |dk(  r4t        |t              r|j                  t        |      |       | S |||<   | S |dk(  r#t        |t              r|t        |      = | S ||= | S t        d	|       )
Nr   replacer   zUnsupported action: r   adddeletezUnknown action: )r   r   ranger   r   insertr$   )targetpathactionr  currentr  	last_paths          r5   
apply_editzapply_diff.<locals>.apply_edit?  s?   t9>"8#~% #7x!@AAs4y1}% 	'Ad1g&G	' H	Y!&GI   xI%'  u_'4(s9~u5  &+	"  x'4(C	N+ 	 I&  /x899r4   )copydeepcopy)objdiffr  r  r  r  s         r5   r   r   <  sE    
--
CB  $ 3edFE23 Jr4   c                $   t        |xs t        j                               t        j                  d      z  }|j                  dd       |t        |       j                  z  }t        j                  | |       t        |j                               S )N   Texist_okparents)r
   tempfile
gettempdirsecrets	token_hexmkdirnameshutilcopy2r   resolve)	file_pathdir	directorydests       r5   create_tmp_copy_of_filer.  k  sm    S1H//12W5F5Fr5JJIOOT4O0tI+++D
LLD!t||~r4   c                L   |t        j                  |d       |rdd|z   ini }t        |xs t        j                               t        j                  d      z  }|j                  dd       |t        |       j                  z  }t        j                  d| |d	      5 }|j                          t        |d
      5 }|j                         D ]  }|j                  |        	 ddd       ddd       t        |j!                               S # 1 sw Y   *xY w# 1 sw Y   .xY w)z0Kept for backwards compatibility for 3.x spaces.NTr  AuthorizationBearer r  r  r   )r   follow_redirectswb)osmakedirsr
   r!  r"  r#  r$  r%  r&  r   r   r   openiter_rawwriter   r)  )	url_pathtokenr+  r   r,  r*  r   fchunks	            r5   download_tmp_copy_of_filer>  s  s	    
C$'6;	E 12GS1H//12W5F5Fr5JJIOOT4O0DN///I	x4
 	!!#)T" 	a!**, 		 y  "##	 		 s$    D='D%DD	DD#c                    | j                  d      ry| j                  d      ryt        j                  |       d   }|"|j                  dd      j                  dd	      }|S )
Nz.vttztext/vttz.webpz
image/webpr   zx-wavwavzx-flacflac)endswith	mimetypes
guess_typer  )filenamemimetypes     r5   get_mimetyperG    sc     !##H-a0H##GU3;;HfMOr4   c                    | j                  dd      } t        j                  |       d   }|dk(  ry|y t        j                  |      }||j	                  d      r|dd  }|S )Nz	audio/wavzaudio/x-wavr   z
audio/flacrA  .r   )r  rC  rD  guess_extensionr   )encodingr   	extensions      r5   get_extensionrM    sp    ];H)!,D|	))$/I!5!5c!:abM	r4   c                <   t        |       }|D ]  }|dk(  r y|j                  d      rY|j                  d      j                         }t	        |       j
                  j                  d      j                         }||k(  sr y|w|j                  | d      s y y)NfileTrI  /F)rG  r   lstriplowerr
   suffix)r*  
file_types	mime_type	file_typefile_exts        r5   is_valid_filerX    s    Y'I 		$!((-335II--44S9??AHH$"y';';ykO'L	 r4   c                    t        | d      5 }t        j                  |j                               }t	        |d      }t        t	        |             }d||ndz   dz   |z   	 cd d d        S # 1 sw Y   y xY w)Nrbr8   r   r:   ;base64,)r7  base64	b64encodereadr   rG  )r<  rO  encoded_string
base64_strrF  s        r5   encode_file_to_base64ra    s{    	a 	
$))$))+61
A'#/xR9 	
		
 	
 	
s   AA**A3c                    t        j                  |       }|j                          t        j                  |j
                        }t        |d      }t        |       }d||ndz   dz   |z   S )Nr8   r   r:   r[  )r   rA   r   r\  r]  contentr   rG  )urlr   r_  r`  rF  s        r5   encode_url_to_base64re    sc    99S>D%%dll3N^W-JC Hx38<zIJVr4   c                Z    t        |       } t        |       rt        |       S t        |       S rr   )r   r   re  ra  )r  s    r5   encode_url_or_file_to_base64rg    s)    t9D#D)) &&r4   c              #     K   t               }|rdd|z   ini }t        j                  d| |      5 }|j                         D ]  }||z  }|  	 d d d        | y # 1 sw Y   xY ww)Nr1  r2  r   r   )	bytearrayr   r   
iter_bytes)rd  r;  arrr   rr   s         r5   download_byte_streamrm    sp     
+C6;	E 12G	eS'	2 aLLN 	D4KCJ	 I	 s   .A)AA)A&"A)c                p    t        |       }| j                  dd      d   }t        j                  |      |fS )N,r   r  )rM  rsplitr\  	b64decode)rK  rL  r   s      r5   decode_base64_to_binaryrr    s7    h'I??3"2&DD!9,,r4   c                   t         j                  j                  |       \  }}dj                  |D cg c]  }|j	                         s|dv s| c}      }||z   } t        | j                               }||kD  r?||kD  r:t        |      dk(  r	 | S |dd }||z   } t        | j                               }||kD  r:| S c c}w )aV  
    Strips invalid characters from a filename and ensures it does not exceed the maximum byte length
    Invalid characters are any characters that are not alphanumeric or one of the following: . _ - ,
    The filename may include an extension (in which case it is preserved exactly as is), or could be just a name without an extension.
    r:   z._-, r   Nr  )r5  r  splitextjoinisalnumr   encode)rE  	max_bytesr&  extcharfilename_lens         r5   !strip_invalid_filename_charactersr|    s       *ID#77TOTT\\^twDOPDczHx()LiY&4yA~ O 9DczHx01L Y& O Ps   B;B;c                    dj                  | D cg c]  }|j                         s|dv s| c}      j                  dd      j                         S c c}w )zECleans up a Python parameter name to make the API info more readable.r:   z _ r   )ru  rv  r  rR  )original_namerz  s     r5   sanitize_parameter_namesr    sD     	-R$4<<>TT\RS	c		Rs
   AAc                   t        |xs t        j                               t        j                  d      z  }|j                  dd       t        |       \  }}|H|Ft        |      j                  }|}d|v r+|d|j                  d       }||j                  d      dz   d  }|t        |      }|t        j                  d||      }nt        j                  d|d|z   |	      }|j                  |       |j                          |S )
Nr  Tr  rI  r   r   F)r  prefixr+  )r  r  rS  r+  )r
   r!  r"  r#  r$  r%  rr  r&  rm   r|  NamedTemporaryFiler9  flush)	rK  r*  r+  r  r,  r   rL  rE  file_objs	            r5   decode_base64_to_filer    s    S1H//12W5F5Fr5JJIOOT4O0-h7OD)	?''(?a(.."56F !4q!8!:;I26:..Y
 ..?	
 NN4NNOr4   c                    |t        j                  |d       t        j                  dd|d      }t	        | t
              rt        j                  |       } t        j                  | |       |j                          |S )NTr0  Fz.jsonzw+)r  rS  r+  mode)
r5  r6  r!  r  r   r   r?   r@   dumpr  )jsnr+  r  s      r5   dict_or_str_to_json_filer    sd    

C$'**W#DH #sjjoIIc8NNOr4   c                n    t        |       5 }t        j                  |      cd d d        S # 1 sw Y   y xY wrr   )r7  r?   load)r*  r<  s     r5   file_to_jsonr  ,  s+    	i Ayy|  s   +4c                
   t         j                  j                  |dt              }	 t	        j
                  d|  dd|i|       y # t        j                  $ r(}t        dt        j                  |        d      |d }~ww xY w)	Ngradio_client)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   HTTPStatusErrorrO   	SPACE_URLformat)space_idr;  timeout_in_secondsr   r   s        r5   set_space_timeoutr  4  s    
 ##44$# 5 G



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

    #LYM]M]^fMgLh iC C
 	s   A B#A==Bc                    t        j                  j                  t         j                  j                         | g|i |S )a  
    Runs async functions in sync scopes. Can be used in any scope.

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

    Args:
        func:
        *args:
        **kwargs:
    )fsspecasynsyncget_loop)funcargskwargss      r5   synchronize_asyncr  P  s2     ;;FKK002DJ4J6JJr4   c                      e Zd Zy)APIInfoParseErrorN)r/   r0   r1   r3   r4   r5   r  r  `  s    r4   r  c                    d| v ryd| v ryd| v r| d   S | j                  d      ry| j                  d      ry| j                  d      ry| j                  d      ryd| vri S t        d|        )	Nconstenumr   $refoneOfanyOfallOfzCannot parse type for )rA   r  )schemas    r5   get_typer  d  s    &	6	f~	F		G		G		G		v		"8 A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                d    t        | | j                  d            }|j                  t        d      S )N$defsfilepath)_json_schema_to_python_typerA   r  CURRENT_FILE_DATA_FORMAT)r  type_s     r5   json_schema_to_python_typer    s)    '

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

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

<, 
1G| c/489(1+G
 
 "V+$*+A$B!/6;P
|#78MtTUV  iinse1~	$	$zzPUWA6q$?WX	'	yyUve}UUdV1~"6vh ?@@q $P U
 V
" Xs   I"
,I'"I,(I1I7c                <    	 t        |       S # t        $ r i cY S w xY wrr   )_python_type_to_json_schemarB   )	type_hints    r5   python_type_to_json_schemar    s&    *9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(  rft        |       }t!        |      dk(  r2t        d      |v r%t)        d |D              }t+        |      }dddi|giS d|D cg c]  }t+        |       c}iS |t        u r%t        |       }|sd
i dS |d   }d
t+        |      dS |t        u rgt        |       }|sdd
iS t!        |      dk(  r|d   du rd
t+        |d         dS d
|D cg c]  }t+        |       c}t!        |      t!        |      dS |t        u s|t        u r&t        |       }|sd
ddS |d   }d
dt+        |      dS |t        u r:t        |       }|sdi d	S |\  }	}
|	t        urt-        d      dt+        |
      d	}|S t/        j0                  |       r-t3        | t4              r| D cg c]  }|j6                   }}d|iS t/        j0                  |       rt%        | d      ri }g }t9        |       }|j;                         D ]u  \  }}t+        |      ||<   t%        | d       r| j<                  s-|j?                  |       ?t%        | d!      r| j@                  |   jB                  re|j?                  |       w d|d"}|r||d#<   |S i S c c}w c c}w c c}w )$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s|  y wrr   )r   )r  ts     r5   r  z._python_type_to_json_schema.<locals>.<genexpr>  s     FA!4:2EaFs   r  r  .)r   r  minItemsmaxItems)r   r  r  z0JSON Schema only supports string keys in objectsr2   	__total____dataclass_fields__)r   r  required)"r   r   r   r$   r&   r)   r  r   tupleset	frozensetbytesri  r   r   r   r   r   hasattrr/   nextr  r   inspectisclass
issubclassr	   r  r   r  r  r   r  default)r  originliteral_valuestypes
other_typer  r  r  	item_typekey_type
value_typeitemenum_valuesr  r  hints
field_name
field_types                     r5   r  r    s   DJC	C!!C	""E!!D	""D "==D"--E  C9	155EY)3 F33	"F!),~!#^A.//^,-- 	%FJ'FOO{,Jv;##u:?tDzU2FFFJ0<Fvv.788%HQ5a8HII~	"#b11G	*Ei*PQQ#G$$u:?uQx3#.I%PQ(.STTDIJq7:JE
E
	
 	
 })+	"#D99G	0;
 	
 ~	"$bAA#*3OPP$?
$K
 y!jD&A.78dtzz88$$y!gi9J&K
y)&+kkm 		,"J
%@%LJz"y+.&&OOJ/I'=> 55jAII
+		, #*=!)F:IK I  K: 9s   N$N0Nc                    ||       r ||       S t        | t              r,i }| j                         D ]  \  }}t        |||      ||<    |S t        | t        t
        f      r'g }| D ]  }|j                  t        |||               |S | S )zk
    Traverse a JSON object and apply a function to each element that satisfies the is_root condition.
    )r   r  r  traverser   r  r   json_objr  is_rootnew_objkeyr  r  s          r5   r  r  R  s     xH~	Hd	#"..* 	:JC#E49GCL	:	HtUm	, 	:DNN8D$89	:r4   c                \  K    ||       r ||        d{   S t        | t              r4i }| j                         D ]  \  }}t        |||       d{   ||<    |S t        | t        t
        f      r/g }| D ]&  }|j                  t        |||       d{          ( |S | S 7 7 T7 w)zq
    Traverse a JSON object and apply a async function to each element that satisfies the is_root condition.
    N)r   r  r  async_traverser   r  r   r   s          r5   r  r  f  s      x(^##	Hd	#"..* 	FJC!/tW!EEGCL	F	HtUm	, 	FDNNdG!DDE	F $ F
 Es4   B,B&<B,B(AB,B*
B,(B,*B,c                j    t        | | j                  d            t        fdt        D              S )Nr  c              3  &   K   | ]  }|v  
 y wrr   r3   )r  file_data_formatinfos     r5   r  z value_is_file.<locals>.<genexpr>  s     R,<4'Rs   )r  rA   anyFILE_DATA_FORMATS)api_infor
  s    @r5   value_is_filer  ~  s*    &xg1FGDR@QRRRr4   c                    t        | t        t        f      xr4 t        |       j                         xr t        |       j	                         S )zp
    Check if the given value is a valid str or Path filepath on the local filesystem, e.g. "path/to/file".
    )r   r   r
   existsis_file)ss    r5   is_filepathr    s5     a#t%P$q'..*:PtAw?PPr4   c                X    t        | t              xr d| v xr t        | d   t              S )z
    Check if the given value is a valid FileData object dictionary in versions of Gradio<=4.20, e.g.
    {
        "path": "path/to/file",
    }
    r  )r   r  r   r   s    r5   is_file_objr    s*     aM6Q;M:ai3MMr4   c                    t        | t              xr9 d| v xr3 t        | d   t              xr d| v xr | d   j                  dd      dk(  S )z
    Check if the given value is a valid FileData object dictionary in newer versions of Gradio
    where the file objects include a specific "meta" key, e.g.
    {
        "path": "path/to/file",
        "meta": {"_type: "gradio.FileData"}
    }
    r  meta_typer:   gradio.FileData)r   r  r   rA   r  s    r5   is_file_obj_with_metar    s_     	1d 	<aK	<qy#&	< aK	< fIMM'2&*;;r4   c                N    t        |       xr d| v xr t        | d   t              S )a>  
    Check if the given value is a valid FileData object dictionary in newer versions of Gradio
    where the file objects include a specific "meta" key, and ALSO include a "url" key, e.g.
    {
        "path": "path/to/file",
        "url": "/file=path/to/file",
        "meta": {"_type: "gradio.FileData"}
    }
    rd  )r  r   r   r  s    r5   is_file_obj_with_urlr    s(     !#P
Pz!E(C7PPr4   >   boxrowtabformtabsgroupr   columndatasetsidebartabitem	accordioninterpretationc                    t        |       }|ddid}t        |      ri ||j                  d      d   |dS t        |      j	                         ri |dt        |      j
                  iS t        d| d	      )
Nr  r  )r  r  rP  r  )	orig_namerd  r+  zFile z; does not exist on local filesystem and is not a valid URL.)r   r   r  r
   r  r&  r   )filepath_or_urlr  r   s      r5   handle_filer-    s    OA):;<D@$@QWWS\"%5a@@	a	2$2T!W\\22A3QR
 	
r4   c                B    t        j                  d       t        |       S )NzXfile() is deprecated and will be removed in a future version. Use handle_file() instead.)r   r   r-  )r,  s    r5   rO  rO    s    MMb ''r4   c                    G d dt               }t        |      }| |rt        d      |S t        |      }||j                  gt        |       |z
  z  z   }i }g }t        |       D ]t  \  }}	d|	v r|||	d   <   |j                  |	d          n|j                  d|        |	j                  dd      sN||   |j                  k(  sa|	j                  d      ||<   v |j                         D ]7  \  }
}|
|v r ||
   |k  rt        d	|
 d
      ||||
   <   *t        d	|
 d       |j                  |v r*t        d||j                  |j                                  |S )Nc                      e Zd ZdZy)!construct_args.<locals>._KeywordsNO_VALUEN)r/   r0   r1   r2  r3   r4   r5   	_Keywordsr1    s    r4   r3  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   r2  r   r   rA   r  	TypeErrorrm   )parameters_infor  r  r3  _argsnum_argskwarg_arg_mappingkwarg_namesrm   
param_infor  r  s               r5   construct_argsr>    s   D  JE M  4yHY''(C,@8,KLLEK&7 
?zz)>Cj)9:;z*:;<5'23NN2E:e	 2 22%>>*=>E%L
? lln 
U## %0!#  'Z  [  16',-cU  #O  P  U"7EKKPYPbPbDc8d7ef
 	
 Lr4   c           
        | j                   dk(  r| j                         j                  dg       }g }t        |      D ]k  \  }}|j                  dd      dk(  s|j                  d      du s0|j                  dd	|       }|j	                  d
| d|j                  dd              m |j                  dt        |       d       |rdj                  |      S yy)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_validFr4  
parameter_z- r  messager   z  parameter(s) failed validation:r   N)r   r?   rA   r   r   r  r   ru  )r   r@  validation_messagesrm   
error_info
param_names         r5   extract_validation_messagerI    s     #"- !*6!2 	E:z2.*<NN:.%7'^^,<
5'>RS
#**Bz~~i'D&EF	 	""#)*++KL	
 99011  r4   )rx   r   )rx   r)   )r   r   rx   r)   )r   httpx.Clientr   r  r   r  r   r   r   r   r   r   r   dict[str, str]r   r   r   r)   r   %concurrent.futures.ThreadPoolExecutorrx   dict[str, Any] | None)r   r   r   rK  r   r   r   dict[str, list[Message | None]]r#   r   r   z'Literal['sse_v1', 'sse_v2', 'sse_v2.1']r   r)   r   rL  rx   rM  )r   r   r   rK  r   r   r   r)   )r   rJ  r   r  r   r  r   r   r   r   r   r   r   rK  r   r   rx   r!   )
r   r   r   rN  r#   r   r   z1Literal['sse_v1', 'sse_v2', 'sse_v2.1', 'sse_v3']rx   r!   rr   )r*  r   r+  r~   rx   r   )NN)r:  r   r;  r~   r+  r~   rx   r   )rE  r   rx   r~   )rK  r   rx   r~   )r*  r   rT  z	list[str]rx   r)   )r<  
str | Path)rd  r   )r  rO  )rK  r   rx   ztuple[bytes, str | None])   )rE  r   rx  r$   rx   r   )r  r   rx   r   )NNN)rK  r   r*  r~   r+  str | Path | Noner  r~   )r  zstr | dict | listr+  rQ  )r*  rO  rx   zdict | list)Ni,  )r  r   r;  r~   r  r$   )r  r   rx   r   )r  r  )r  r   rx   r   )r  r   rx   r  )r  r   r  r   r  Callable[..., bool]rx   r   )r  r   r  z'Callable[..., Coroutine[Any, Any, Any]]r  rR  rx   r   )r  r  rx   r)   )r,  rO  )r8  zlist[ParameterInfo] | Noner  r  r  r  rx   r   )r   zhttpx.Responserx   r~   )
__future__r   r   r\  concurrent.futuresr   r  r  r?   rC  r5  r;   r#  r'  r!  r   r   collections.abcr   r   dataclassesr   r   r   r  r	   pathlibr
   	threadingr   typingr   r   r   r   r   r   r   r   r   fsspec.asynr  r   r  r   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   rE   r  rB   rG   rK   rM   rO   r   rQ   r`   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.  r>  rG  rM  rX  ra  re  rg  rm  rr  r|  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  SKIP_COMPONENTSr-  rO  r>  rI  r3   r4   r5   <module>rs     s5   "        	       / (    
 
 
    &8


	
	
() F 	!	*

iu 
	 "#	9 		 		i 		I 	,C ,"1T 1h 
 
 
* 1 1 1    
<,6	7	 5 5 5 J J J&<F$$
$ $ 	$
 $ $ $ #$ $ 4$ $N # !@	
  6  4 @... #. 	.0CC
C C 	C
 C C C #C CLUU ?U U @	U
 Up'^ @D$$$$2<$$*


'-( !!	    
  	 F ! 8K 	
 	C*  -R0 ?
JAZpf(
1 ! 		0S
QN$
Q"

(0/07<0FJ0	0f2r4   