o
    پiS                     @   s\   d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	 G dd dZ
G dd dZdS )	    N)DictOptional)TokenizedGenerateReqInput)FINISH_ABORTReqc                   @   sR   e Zd Z		ddeded  fddZdd Zdd	 Zd
d Zdd Z	dddZ
dS )SessionReqNodeNreqparentc                 C   s8   || _ || _|d ur|j|  |sg | _d S || _d S N)r   r	   childrenappend)selfr   r	   r    r   Z/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/managers/session_controller.py__init__   s
   zSessionReqNode.__init__c                 C   s    | j D ]}|| qg | _ d S r
   )r   clearr   req_dictreq_noder   r   r   clear_children"   s   

zSessionReqNode.clear_childrenc                 C   s:   | j D ]}|| q| jjd u rt | j_|| jj= d S r
   )r   r   r   finished_reasonr   	to_finishridr   r   r   r   r   '   s
   

zSessionReqNode.clearc                 C   s   | j jd u rt | j _d S d S r
   )r   r   r   r   r   r   r   r   abort/   s   zSessionReqNode.abortc                 C   s   |  | jjS r
   )_str_helperr   r   r   r   r   r   __str__3   s   zSessionReqNode.__str__ c                 C   s~   t | jdkr|d S |}|d| jd jj 7 }| jd |}| jdd  D ]}dt | d |jj }|||7 }q'|S )Nr   
z --     z \- )lenr   r   r   r   )r   prefixorigin_prefixretchildr   r   r   r   6   s   zSessionReqNode._str_helper)NN)r   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r      s    
r   c                   @   s6   e Zd Zd
dedee fddZdedefdd	ZdS )SessionNcapacity_of_str_len
session_idc                 C   s(   |d ur|nt  j| _|| _i | _d S r
   )uuiduuid4hexr+   r*   	req_nodes)r   r*   r+   r   r   r   r   D   s   
zSession.__init__r   
vocab_sizec                 C   s@  |j d usJ |j }d }d }d}|jrF|jd u r)| j D ]
\}}	|	| j qn?|j| jvr2d}n6| j|j }|  |j}|| j n"|jd urh|j| jvrTd}n| j|j }|j}|	 sht
d d}|d ur|d ur|jd |jkr|jdd  |_|j|jd |jj  }
|jr|jd d  }
|jr|jdkr|
d |j |j }
n|
|j7 }
|j|jd |jj  }|jr|jd d  }|jr|jdkr|d |j |j }n||j7 }n|j}
|j}t|jd |
||j|j| j|j|j|j|j|j|d}|d ur|j|_||_|r|d |S t ||}|| j|j< |S )NFTzHThe request in a session is appending to a request that hasn't finished.r   r   )r   origin_input_textorigin_input_idsorigin_input_ids_unpaddedsampling_paramslora_idr+   custom_logit_processorstreamreturn_logprobtop_logprobs_numtoken_ids_logprobr0   zInvalid request session id)!session_paramsreplacer   r/   itemsr   r   r   r   finishedloggingwarning	input_idsbos_token_idr2   
output_idsr4   max_new_tokensdrop_previous_outputoffsetr3   r   r5   r+   r6   r7   r8   r9   r:   multimodal_inputs	tokenizerset_finish_with_abortr   )r   r   rH   r0   r;   last_req_nodelast_reqr   _r   rA   input_ids_unpaddednew_reqnew_req_noder   r   r   
create_reqI   s   





zSession.create_reqr
   )	r&   r'   r(   intr   strr   r   rP   r   r   r   r   r)   C   s    r)   )r?   r,   typingr   r   sglang.srt.managers.io_structr   "sglang.srt.managers.schedule_batchr   r   r   r)   r   r   r   r   <module>   s   .