o
    پiMN                     @   s  d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	 ddl
mZ dZdZdZd	ZejG d
d dZG dd dZG dd 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G dd de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G d"d# d#e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!G d,d- d-eZ"G d.d/ d/eZ#G d0d1 d1eZ$dS )2z The intermediate representation.    N)ListOptionalUnion)global_config)ChoicesSamplingMethodz[-+]?[0-9]+[ \n]*z[-+]?[0-9]*\.?[0-9]+[ \n]*z(True|False)z\"[\w\d\s]*\"c                   @   sn  e Zd ZU dZeed< dZeed< dZeed< dZe	e
ee
 f ed< dZeee  ed	< dZee	e
ee
 f  ed
< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< dZeed< dZee ed< dZee ed< dZee ed< dZee ed< dZee
 ed< dZee
 ed< dZee
 ed< dd  Zd!d" Z d#d$ Z!d%d& Z"d'd( Z#d)d* Z$dS )+SglSamplingParams   max_new_tokensr   min_new_tokens   n stopstop_token_ids
stop_regex      ?temperaturetop_ptop_k        min_pfrequency_penaltypresence_penaltyF
ignore_eosNreturn_logprobNlogprob_start_lentop_logprobs_numreturn_text_in_logprobsjson_schemadtyperegexc                 C   sN   t | j| j| j| j| j| j| j| j| j	| j
| j| j| j| j| j| j| j| jS r   )r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    selfr   r   B/home/ubuntu/.local/lib/python3.10/site-packages/sglang/lang/ir.pyclone*   s(   zSglSamplingParams.clonec              	   C   s>   | j d ur
td | j| j| j| jpd | j| j| j| j	dS )Nz:Regular expression is not supported in the OpenAI backend.)
max_tokensmax_completion_tokensr   r   r   r   r   r   )
r"   warningswarnr	   r   r   r   r   r   r   r#   r   r   r%   to_openai_kwargs@   s   

z"SglSamplingParams.to_openai_kwargsc                 C   sB   | j d ur
td d| j| j| j| j| jdkr| jdS d dS )Nz<Regular expression is not supported in the VertexAI backend.r   r   )candidate_countmax_output_tokensstop_sequencesr   r   r   )r"   r)   r*   r	   r   r   r   r   r#   r   r   r%   to_vertexai_kwargsO   s   
z$SglSamplingParams.to_vertexai_kwargsc                 C   sF   | j d ur
td | jt| jttfr| jn| jg| j| j	| j
dS )Nz=Regular expression is not supported in the Anthropic backend.)r'   r.   r   r   r   )r"   r)   r*   r	   
isinstancer   listtupler   r   r   r#   r   r   r%   to_anthropic_kwargs]   s   
z%SglSamplingParams.to_anthropic_kwargsc                 C   s6   | j d ur
td | j| jpd | j| j| j| jdS )Nz;Regular expression is not supported in the LiteLLM backend.)r'   r   r   r   r   r   )	r"   r)   r*   r	   r   r   r   r   r   r#   r   r   r%   to_litellm_kwargsm   s   

z#SglSamplingParams.to_litellm_kwargsc                 C   sB   | j | j| j| j| j| j| j| j| j| j	| j
| j| j| j| jdS )Nr	   r
   r   r   r   r   r   r   r   r   r   r   r   r"   r    r5   r#   r   r   r%   to_srt_kwargsy   s    zSglSamplingParams.to_srt_kwargs)%__name__
__module____qualname__r	   int__annotations__r
   r   r   r   strr   r   r   r   r   floatr   r   r   r   r   r   boolr   r   r   r   r    r!   r"   r&   r+   r/   r3   r4   r6   r   r   r   r%   r      s6   
 r   c                '   @   s  e Zd Zd0ddZdd Zdddddddd	d
d
d
ddddddddddededeeee	e f  dee	e  deeee	e f  de
de
dede
de
de
dedee dee dee dee dedef$d d!Zdddddddd	d
d
d
ddddddd"ddd#dededeeee	e f  dee	e  deeee	e f  de
de
dede
de
de
dedee dee dee dee d$eeef d%ed&ef&d'd(Zdd)d*d+Zd1d,d-Zd.d/ ZdS )2SglFunctionNc                 C   sl   || _ || _|p	i | _d | _t|}|jd dksJ d|jdd  | _|jd ur1|j| _	d S g | _	d S )Nr   szThe first argument must be "s"r   )
funcnum_api_spec_tokensbind_argumentspin_prefix_ridinspectgetfullargspecargs	arg_namesdefaultsarg_defaults)r$   rA   rB   rC   argspecr   r   r%   __init__   s   

 zSglFunction.__init__c                    s6   t  fdd|D sJ i  j|}t j|dS )Nc                 3   s    | ]}| j v V  qd S r   rH   ).0keyr#   r   r%   	<genexpr>   s    z#SglFunction.bind.<locals>.<genexpr>)rC   )allrC   r?   rA   )r$   kwargsnew_bind_dictr   r#   r%   bind   s   zSglFunction.bindr   r   r   r   r   FT)r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   streambackend
use_threadr	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU   rW   c             	   O   s   ddl m} |d u rg }|d u rg }|d u rg }tdi d|d|d|d|d|d|d	|d
|d|	d|
d|d|d|d|d|d|}|pQtj}|| ||||||dS )Nr   )run_programr	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rW   r   )sglang.lang.interpreterrX   r   r   default_backend)r$   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU   rV   rW   rG   rR   rX   default_sampling_parar   r   r%   run   sd   	

zSglFunction.runauto)r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   num_threadsprogress_bargenerator_styler^   r_   r`   c             	      s  ddl m} |d u rg }|d u rg }|d u rg }t|ttfs!J t|dkr)g S t|d tsGt|} fdd|D }t||krGtdtdi d|d|d|d	|d
|d|d|d|	d|
d|d|d|d|d|d|d|}|pt	j
}| ||||||dS )Nr   )run_program_batchc                    sb   g | ]-}t |ttfr/t jt j t|  kr"t jkrn n fd dt|D qS )c                    s   i | ]
\}} j | |qS r   rM   )rN   ivr#   r   r%   
<dictcomp>  s    z4SglFunction.run_batch.<locals>.<listcomp>.<dictcomp>)r0   r1   r2   lenrH   rJ   	enumerate)rN   
arg_valuesr#   r   r%   
<listcomp>  s    
z)SglFunction.run_batch.<locals>.<listcomp>z3Given arguments mismatch the SGL function signaturer	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r`   r   )rY   ra   r0   r1   r2   re   dict	Exceptionr   r   rZ   )r$   batch_kwargsr	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r^   r_   r`   ra   num_programsr[   r   r#   r%   	run_batch   sx   
		

zSglFunction.run_batch)rV   c                K   s"   ddl m} |p
tj}|| ||S )Nr   )trace_program)sglang.lang.tracerrn   r   rZ   )r$   rV   rR   rn   r   r   r%   trace0  s   
zSglFunction.tracec                 C   s    ddl m} |p
tj}|| |S )Nr   )cache_program)rY   rq   r   rZ   )r$   rV   rq   r   r   r%   cache6  s   

zSglFunction.cachec                 O   sH   ddl m} | }|d u r| j|i |S |jj|d< | j|i |S )Nr   )TracingScoperV   )ro   rs   get_current_scoper\   tracer_staterV   rp   )r$   rG   rR   rs   tracing_scoper   r   r%   __call__<  s   zSglFunction.__call__)NNr   )r7   r8   r9   rL   rT   r:   r   r   r<   r   r=   r>   r\   rm   rp   rr   rw   r   r   r   r%   r?      s    
	
	

C
	


Q
r?   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )SglExprr   c                 C   s&   t j| _d | _d | _t  jd7  _d S )Nr   )rx   node_ctnode_id	prev_nodepidr#   r   r   r%   rL   J  s   zSglExpr.__init__c                 C   s,   t |tr	t|}t |tsJ | | |S r   r0   r<   SglConstantTextrx   concatenate_irr$   otherr   r   r%   __add__P  s   
zSglExpr.__add__c                 C   s2   t |tr	t|}t |tsJ | | || S r   r}   r   r   r   r%   __radd__W  s   
zSglExpr.__radd__c                 C   sZ   t |trt |trt|j|j S t|j|g S t |tr't|g|j S t||gS r   )r0   SglExprList	expr_list)r$   abr   r   r%   r   ^  s   


zSglExpr.concatenate_irc                    s,   dgt   fdd  |  d S )N c                    s   | d u s| v r
d S  |  | jd ur | j t| tr)| jD ]} | q!n
t| tr3 | j t| ttfrLd  d| j	 d|  d7  < d S | jd urkd  d| j	 d| jj	 dt
|  d 7  < d S d  d| j	 dt
|  d 7  < d S )Nr   %z = 
z = %z + )addr{   r0   r   r   SglVariablesourceSglForkSglGetForkItemrz   r<   )xy	dfs_printretvisitedr   r%   r   m  s$   







$
"
*z*SglExpr.print_graph_dfs.<locals>.dfs_printr   )setr#   r   r   r%   print_graph_dfsi  s
   zSglExpr.print_graph_dfsN)	r7   r8   r9   ry   rL   r   r   r   r   r   r   r   r%   rx   G  s    rx   c                       s.   e Zd Zdee f fddZdd Z  ZS )r   r   c                       t    || _d S r   )superrL   r   )r$   r   	__class__r   r%   rL        

zSglExprList.__init__c                 C      d| j  dS )Nz	ExprList())r   r#   r   r   r%   __repr__     zSglExprList.__repr__)r7   r8   r9   r   rx   rL   r   __classcell__r   r   r   r%   r     s    r   c                       sV   e Zd Zdedef fddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )SglArgumentnamevaluec                       t    || _|| _d S r   )r   rL   r   r   )r$   r   r   r   r   r%   rL        

zSglArgument.__init__c                 C   s   d| j  dt| j dS )NzArgument(name=z, value=r   )r   reprr   r#   r   r   r%   r     s   zSglArgument.__repr__c                 C   s
   t | jS r   )re   r   r#   r   r   r%   __len__     
zSglArgument.__len__c                 C   s
   | j | S r   r   )r$   rb   r   r   r%   __getitem__  r   zSglArgument.__getitem__c                 C      | j S r   r   r#   r   r   r%   __int__     zSglArgument.__int__c                 C   r   r   r   r#   r   r   r%   __bool__  r   zSglArgument.__bool__c                 G   s   t d)NzOCannot put argument inside a f-string. This is not compatible with the tracer. )	TypeError)r$   rG   r   r   r%   
__format__  s   zSglArgument.__format__)r7   r8   r9   r<   rL   r   r   r   r   r   r   r   r   r   r   r%   r     s    r   c                   @   s(   e Zd ZdefddZdefddZdS )SglImagepathc                 C   s
   || _ d S r   r   )r$   r   r   r   r%   rL     r   zSglImage.__init__returnc                 C   r   )Nz	SglImage(r   r   r#   r   r   r%   r     r   zSglImage.__repr__N)r7   r8   r9   r<   rL   r   r   r   r   r%   r     s    r   c                   @   s,   e Zd ZdedefddZdefddZdS )	SglVideor   
num_framesc                 C   s   || _ || _d S r   r   r   )r$   r   r   r   r   r%   rL     s   
zSglVideo.__init__r   c                 C      d| j  d| j dS )Nz	SglVideo(z, r   r   r#   r   r   r%   r        zSglVideo.__repr__N)r7   r8   r9   r<   r:   rL   r   r   r   r   r%   r     s    r   c                ,       s  e Zd Z																					ddee dee dee dee deeeee f  deee  deeeee f  d	ee d
ee dee dee dee dee dee	 dee	 dee dee dee	 dee
 dee dee f* fddZdd Z  ZS )SglGenNr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r"   r    c                    s   t    || _tdi d|d|d|d|d|d|d|d|	d	|
d
|d|d|d|d|d|d|d|d|d|d|| _dS )z_Call the model to generate. See the meaning of the arguments in docs/backend/sampling_params.mdr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r"   r    Nr   )r   rL   r   r   sampling_params)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%   rL     sV   
	

zSglGen.__init__c                 C   r   )NzGen('')r   r#   r   r   r%   r     r   zSglGen.__repr__)NNNNNNNNNNNNNNNNNNNNN)r7   r8   r9   r   r<   r:   r   r   r=   r>   typerL   r   r   r   r   r   r%   r     s    
	
2r   c                       *   e Zd Zdef fddZdd Z  ZS )r~   r   c                    r   r   )r   rL   r   )r$   r   r   r   r%   rL     r   zSglConstantText.__init__c                 C   s   dt | j dS )Nz	Constant(r   )r   r   r#   r   r   r%   r     s   zSglConstantText.__repr__r7   r8   r9   r<   rL   r   r   r   r   r   r%   r~         r~   c                       r   )SglRoleBeginrolec                    r   r   r   rL   r   r$   r   r   r   r%   rL     r   zSglRoleBegin.__init__c                 C   r   )Nz
RoleBegin(r   r   r#   r   r   r%   r     r   zSglRoleBegin.__repr__r   r   r   r   r%   r     r   r   c                       r   )
SglRoleEndr   c                    r   r   r   r   r   r   r%   rL     r   zSglRoleEnd.__init__c                 C   r   )NzRoleEnd(r   r   r#   r   r   r%   r     r   zSglRoleEnd.__repr__r   r   r   r   r%   r     r   r   c                       s:   e Zd Zdedee dedef fddZdd Z  Z	S )		SglSelectr   choicesr   choices_methodc                    s&   t    || _|| _|| _|| _d S r   )r   rL   r   r   r   r   )r$   r   r   r   r   r   r   r%   rL     s
   

zSglSelect.__init__c                 C   s   d| j  d| j d| j dS )NzSelect(z
, choices=z, choices_method=r   )r   r   r   r#   r   r   r%   r   $  s   zSglSelect.__repr__)
r7   r8   r9   r<   r   r=   r   rL   r   r   r   r   r   r%   r     s    r   c                       s,   e Zd Zddef fddZdd Z  ZS )r   Nnumberc                    r   r   )r   rL   r   position_ids_offset)r$   r   r   r   r   r%   rL   )  r   zSglFork.__init__c                 C   s    d| j j d| j d| j dS )NzFork(%z	, number=z, position_ids_offset=r   )r{   rz   r   r   r#   r   r   r%   r   .  s   zSglFork.__repr__r   r7   r8   r9   r:   rL   r   r   r   r   r   r%   r   (  s    r   c                       r   )r   indexc                    r   r   )r   rL   r   )r$   r   r   r   r%   rL   6  r   zSglGetForkItem.__init__c                 C   s   d| j j d| j dS )NzGetForkItem(%z, index=r   )r{   rz   r   r#   r   r   r%   r   :     zSglGetForkItem.__repr__r   r   r   r   r%   r   5  r   r   c                       r   )r   r   c                    r   r   )r   rL   r   r   )r$   r   r   r   r   r%   rL   ?  r   zSglVariable.__init__c                 C   s   d| j  d| jj dS )Nz
Variable('z', source=%r   )r   r   rz   r#   r   r   r%   r   D  r   zSglVariable.__repr__r   r   r   r   r%   r   >  s    r   c                       r   )SglVarScopeBeginr   c                    r   r   r   rL   r   r$   r   r   r   r%   rL   I  r   zSglVarScopeBegin.__init__c                 C   r   )NzVarScopeBegin('r   r   r#   r   r   r%   r   M  r   zSglVarScopeBegin.__repr__r   r   r   r   r%   r   H  r   r   c                       r   )SglVarScopeEndr   c                    r   r   r   r   r   r   r%   rL   R  r   zSglVarScopeEnd.__init__c                 C   r   )NzVarScopeEnd('r   r   r#   r   r   r%   r   V  r   zSglVarScopeEnd.__repr__r   r   r   r   r%   r   Q  r   r   c                       $   e Zd Z fddZdd Z  ZS )SglConcateAndAppendc                    r   r   )r   rL   states)r$   r   r   r   r%   rL   [  r   zSglConcateAndAppend.__init__c                 C   r   )NzConcatenateAndAppend('r   )r   r#   r   r   r%   r   _  r   zSglConcateAndAppend.__repr__r7   r8   r9   rL   r   r   r   r   r   r%   r   Z  s    r   c                       r   )SglCommitLazyc                    s   t    d S r   )r   rL   r#   r   r   r%   rL   d  r   zSglCommitLazy.__init__c                 C   s   dS )NzCommitLazy()r   r#   r   r   r%   r   g  s   zSglCommitLazy.__repr__r   r   r   r   r%   r   c  s    r   c                       s>   e Zd Zdedef fddZdd Zdd Zd	d
 Z  Z	S )SglSeparateReasoning
model_typeexprc                    s*   t    || _|| _d | _| | d S r   )r   rL   r   r   r   _process_expr)r$   r   r   r   r   r%   rL   l  s
   
zSglSeparateReasoning.__init__c                 C   s   |st d| dS )Nzname must be provided_reasoning_content)
ValueErrorr   r   r   r%   process_name_for_reasoningt  s   
z/SglSeparateReasoning.process_name_for_reasoningc                 C   s`   t |tr| |j| _d S t |tr| |j| _d S t |tr,|jD ]	}| | q$d S d S r   )r0   r   r   r   r   r   r   r   )r$   r   r   r   r   r%   r   y  s   



z"SglSeparateReasoning._process_exprc                 C   r   )NzSeparateReasoning(model_type=z, name=r   )r   r   r#   r   r   r%   r     r   zSglSeparateReasoning.__repr__)
r7   r8   r9   r<   rx   rL   r   r   r   r   r   r   r   r%   r   k  s
    	r   )%__doc__dataclassesrE   r)   typingr   r   r   sglang.global_configr   sglang.lang.choicesr   	REGEX_INTREGEX_FLOAT
REGEX_BOOL	REGEX_STR	dataclassr   r?   rx   r   r   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   <module>   sB    { ;F		7				
			