o
    i                     @   s*  d 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
Z
dd
lmZ ddlmZ eZeZeZeZeZed Zed Zed ZdZdZG dd deZG dd deZG dd deZG dd deZdefddZde
j deeed	f fddZ!G d d! d!Z"d	S )"z5
Synced with huggingface/pyspaces:spaces/zero/api.py
    )	timedelta)Any)	Generator)Literal)
NamedTuple)Optional)overloadN)	BaseModel)assert_never)largexlarge)regularpro)nodeconcurrencyzX-AuthenticatedzX-Queuing-Reasonc                   @   s.   e Zd ZU eed< eed< eed< eed< dS )ScheduleResponseidlenvidiaIndex
nvidiaUUID
allowTokenN)__name__
__module____qualname__bool__annotations__intstr r   r   C/home/ubuntu/.local/lib/python3.10/site-packages/spaces/zero/api.pyr       s
   
 r   c                   @   s.   e Zd ZU dZee ed< dZee ed< dS )ScheduleMetadataNauthqueuing_reason)	r   r   r   r    r   	AuthLevelr   r!   QueuingReasonr   r   r   r   r   '   s   
 r   c                   @   s   e Zd ZU eed< eed< dS )
QuotaInfosleftwaitN)r   r   r   r   r   r   r   r   r   r   r$   ,   s   
 r$   c                   @   s*   e Zd ZU ed ed< dZee ed< dS )
QueueEvent)pingfailed	succeededeventNdata)r   r   r   r   r   r,   r   r   r   r   r   r   r'   1   s   
 r'   textc                 C   s   |    ^}}|dsJ |dd    }|dv r t|dS |dks&J |\}|ds0J |dd    }t|t|dS )	Nzevent:   )r(   r)   )r+   r*   zdata:   )r+   r,   )strip
splitlines
startswithr'   r   	parse_raw)r-   r+   r,   r   r   r   	sse_parse6   s   
r4   resreturnc              	   c   sR    |   D ]!}t|dkr d S zt|V  W q ty&   |   Y  d S w d S )Nr   )	iter_textlenr4   GeneratorExitclose)r5   r-   r   r   r   
sse_streamC   s   r;   c                   @   s   e Zd ZdejfddZdejfddZ						
	ddede	dedB de	de	dB de
dedB fddZdede	fddZ	ddede
dejfddZdefddZdS ) 	APIClientclientc                 C   s
   || _ d S )N)r=   )selfr=   r   r   r   __init__P   s   
zAPIClient.__init__r6   c                 C   s   | j d}t|jS )Nz/startup-reportr=   posthttpxcodesstatus_code)r>   r5   r   r   r   startup_reportS   s   zAPIClient.startup_reportr   N   Tcgroup_pathtask_idtokentoken_versionduration_secondsenable_queuegpu_sizec                 C   s&  ||||d}|d ur||d< |d ur||d< |d ur||d< | j j| j jdd|ddd	}	t|	j}
|	jt}|	jt	}t
||d
}|
tjjurZ|
tjjurZ|	  |
|fS d|	jd v rgt|	|fS |	  |
tjju r|tdi |	 |fS |
tjju rtdi |	 |fS t|
 d S )N)
cgroupPathtaskIdenableQueuetokenVersiondurationSecondsgpuSizerI   POSTz	/schedule)methodurlparamsT)requeststream)r    r!   ztext/event-streamzcontent-typer   )r=   sendbuild_requestrB   rC   rD   headersgetAUTHENTICATED_HEADERQUEUING_REASON_HEADERr   OKTOO_MANY_REQUESTSr:   r;   readr$   jsonr   r
   )r>   rG   rH   rI   rJ   rK   rL   rM   rW   r5   statusr    r!   metadatar   r   r   scheduleW   sF   zAPIClient.scheduleallow_tokenpidc                 C   "   | j jd||dd}t|jS )Nz/allow)r   rh   rW   r@   )r>   rg   rh   r5   r   r   r   allow   
   
zAPIClient.allowFfailc                 C   ri   )Nz/release)r   rm   rj   r@   )r>   rg   rm   r5   r   r   r   release   rl   zAPIClient.releasec                 C   s,   | j d}|jdksJ |j| }|S )Nz/queue-size   )r=   r]   rD   rc   )r>   r5   sizer   r   r   get_queue_size   s   zAPIClient.get_queue_size)r   NrF   NTN)F)r   r   r   rB   Clientr?   rC   rE   r   r   r   GPUSizerf   rk   rn   floatrq   r   r   r   r   r<   N   sL    
0

r<   )#__doc__datetimer   typingr   r   r   r   r   r   rB   pydanticr	   typing_extensionsr
   r   
AllowTokenr   NvidiaIndex
NvidiaUUID
CGroupPathTaskIdrs   r"   r#   r^   r_   r   r   r$   r'   r4   Responser;   r<   r   r   r   r   <module>   s8    