o
    i+                     @   s  d Z ddlZddlZddlZddlmZ ddlmZ ddlZ	ddl
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 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 d	dlmZ d	dlmZ d	dlmZ dZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dd Z'd d! Z(d"e)d#e)fd$d%Z*d&edB d'e+d(e)d)e)d*e)d+e)d,e,e)e)f fd-d.Z-				/dEd0e.d1e	j/dB d2edB d3edB d4e+d,efd5d6Z0d7e)d,dfd8d9Z1d:d:d;d7e)d<e+d=e+d,dfd>d?Z2d1e	j/dB d,e3e)e)f fd@dAZ4dBe3e)e)f d,e,e)dB e3e)ef f fdCdDZ5dS )F
    N)	timedelta)Any)version)assert_never   )Config   )utils)	APIClient)GPUSize)	AuthLevel)
QuotaInfos)ScheduleResponse)info)error)	get_event)supports_authz
X-IP-Token<   zGPU device not usedzNo GPU was availablezNo GPU was available after 60szDTry re-running outside of examples if it happened after clicking onezCreate a free accountzhttps://huggingface.co/joinzSubscribe to Proz4https://huggingface.co/settings/billing/subscriptionc                  C   s(   t jd usJ tjt jddd} t| S )Nr   F)base_urltimeoutverify)r   zero_device_api_urlhttpxClientr   )httpx_client r   F/home/ubuntu/.local/lib/python3.10/site-packages/spaces/zero/client.py
api_client)   s   r   c                  C   sp   d\} }t  }|  }tjju r,td | d  } |kr"td|  }tjju s|tjjur6tdd S )N)r   r   r	   z*Error while initializing ZeroGPU: NotFoundz)Error while initializing ZeroGPU: Unknown)	r   startup_reportr   codes	NOT_FOUNDtimesleepRuntimeErrorOK)retriesmax_retriesclientstatusr   r   r   r   /   s   
r   html_contentstext_contentsc                    s   G  fdddt }|| S )Nc                       s   e Zd Z fddZdS )zhtml_string.<locals>.HTMLStringc                    s    S )Nr   )selfr+   r   r   __str__<   s   z'html_string.<locals>.HTMLString.__str__N)__name__
__module____qualname__r.   r   r-   r   r   
HTMLString;   s    r2   )str)r*   r+   r2   r   r-   r   html_string:   s   r4   authsupports_htmlpro_messageunlogged_desclogged_descendingreturnc                 C   s   t  r| dkr||fS d}| d u rtnt}| d u rtnt}| d u r#|n|}	|	d| d7 }	dg d}
|rA|d|
 d| d	7 }||7 }|rK|d
7 }|d|	 7 }d| d| d|	 }||fS )Npro  .;)zwhite-space: nowrapztext-underline-offset: 2pxzcolor: var(--body-text-color)z
<a style="z" href="z">z</a>[z](z) )r   SIGNUP_ON_HF_URLSUBSCRIBE_TO_PRO_URLSIGNUP_ON_HF_TXTSUBSCRIBE_TO_PRO_TXTjoin)r5   r6   r7   r8   r9   r:   htmllinktextdescstylemarkdownr   r   r   _toast_actionA   s    rM   Ttask_idrequestdurationgpu_size_first_attemptc              	   C   s  t tj }jdkstd|t dk}|t dk}t|}t|\}	}
|	d ur?|
	d }r?d| d}t
d|d	d
 t jt | |	|rKdnd|d urS|jnd |d\}}|j}t|trd|S t|tr|d urp|jnt}|jtdk rd| d}td||	d u rdt }td||
	dd u r|jdkrd}n>|dkrdn|dkrdnd}d| d| d|j d|j }|d u rd}n	|dkrd }n|}|	d!d"k}|r|nt||}td|d#d$t|tjs|jd%v rt
d&d' n|jd(krt
d&d) nt|j t }|d u r|d urt !d* 	 zt"|}W n% t#y.   td+ tj$yG   |s=td,t| ||d-d. Y S w |j%d/kra|d ur_|j&s_|'  td0q|j%d1kr|	d u rxt( d2t }td|t)||d3d4d5d6d7\}}t( d2| }t( d8| }t||}td9|d#d$|j%d:kr|j*d usJ |d ur|j&st+|j*j, td;t
d&d<d=d
 |j*S q|tjj-u rtd>t.|tjj/u rtd>d?td@| dAtj0| d)BN   z)ZeroGPU is only compatible with Gradio 4+z4.39z5.16.1r   z!Falling back to IP-based quotas ()ZeroGPU client warningwarninglevelr   r	   )cgroup_pathrN   tokentoken_versionduration_secondsrQ   r   zThe requested GPU duration (z%s) is larger than the maximum allowedzZeroGPU illegal durationz%Space app has reached its GPU limit. zZeroGPU quota exceededuserz"You have exceeded your runs limit.r<   zPro GPUregularzfree GPUGPUzYou have exceeded your z quota (zs requested vs. zs left). Try again in zUnlogged user is runnning out of daily ZeroGPU quotas. Signup for free on https://huggingface.co/join or login on https://huggingface.co/login to get more ZeroGPU quota now.zwUser is runnning out of daily ZeroGPU quotas. Visit https://huggingface.co/subscribe/pro to get more ZeroGPU quota now.zx-gradio-usermcpT)rG   )nodeNzZeroGPU queuez%Waiting for a GPU to become availableconcurrencyz$Waiting for a GPU slot on this Spacez-ZeroGPU: Cannot get Gradio app Queue instancezUnexpected end of streamz,Error while re-trying after queue disconnectF)rR   pingz+Connection closed by visitor while queueingfailedz. zRetry laterzto get a higherzto get the highestzpriority in ZeroGPU queues)r5   r6   r7   r8   r9   r:   r>   zZeroGPU queue timeout	succeededz-Connection closed by visitor on queue successzSuccessfully acquired a GPUsuccessZeroGPU client errorzExpired ZeroGPU proxy tokenzZeroGPU API /schedule error:  ()1r   parsegr__version__majorr$   Version_get_headers_get_token_and_payloadgetr   r   scheduler
   self_cgroup_device_pathsecondsr5   
isinstancer   r   DEFAULT_SCHEDULE_DURATIONwaitr   r   EXAMPLES_RETRY_MESSAGEleftr4   r   r    queuing_reasonr   r   warningswarnnextStopIterationRemoteProtocolErroreventalivecloseNO_GPU_MESSAGE_INQUEUErM   datarelease
allowTokenSERVICE_UNAVAILABLENO_GPU_MESSAGE_REGULARUNAUTHORIZEDget_reason_phrase)rN   rO   rP   rQ   rR   gradio_versionGRADIO_HTML_TOASTSGRADIO_HANDSHAKEheadersrZ   payloadtoken_errormessageresmetar5   	requestedgpumessage_guimessage_mcpmcp_userconnection_eventr   details_htmldetails_markdownmessage_htmlmessage_textr   r   r   rq   _   s   

	











&

rq   allow_tokenc                 C   s8   t  }|dksJ dt j| |dtjju sJ d S )Nr	   z8Allowing PID 1 on ZeroGPU will end up killing your Spacer   pid)osgetpidr   allowr   r    r%   r   r   r   r   r      s    r   F)fail	allow_404r   r   c                C   s   t  j| |d}|tjju r)z	tdtdd W n	 ty    Y nw t	tt
 d S |tjju r8|s6t	d d S tj|r@d S td| dtj| d)	N)r   r   rU   rV   rW   z+ZeroGPU API /release warning: 404 Not FoundzZeroGPU API /release error: rh   rT   )r   r   r   r    
NO_CONTENTr   UNUSED_MESSAGEAttributeErrorrz   r{   RuntimeWarningr!   
is_successr$   r   )r   r   r   r   r   r   r   r      s&   
r   c                 C   sH   | d u ri S t | dd }|d u st|dstddt|ds"|j}|S )Nr   __dict__rg   zInternal Gradio errorrp   )getattrhasattrr   r   )rO   r   r   r   r   rn     s   

rn   r   c                 C   sX   |  t  }d u rd i fS z
t|}W ||fS  ty+   td |i f Y S w )Nz#Error while decoding X-IP-Token JWT)rp   TOKEN_HEADERlowerr
   jwt_payload	Exceptionrz   r{   )r   rZ   r   r   r   r   ro     s   
ro   )NNNT)6__doc__r   r"   rz   datetimer   typingr   gradiorj   r   	packagingr   typing_extensionsr   configr   r=   r
   apir   r   r   r   r   r   r   r   r   r   ru   r   r   r   rw   rD   rB   rE   rC   r   r   r3   r4   booltuplerM   intRequestrq   r   r   dictrn   ro   r   r   r   r   <module>   s    

 
 	
  2