
    .`i5                        d dl Z d dlmZmZ d dlmZ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mZmZ d d
lmZmZmZ erd dlZn ed e            d          Z ee          Z e G d de                      Z!e G d de                      Z"h dZ#de$e%ef         de&fdZ'deddfdZ(dS )    N)	dataclassfield)TYPE_CHECKINGAny)init_logger)SamplingParams)DeepseekV32Tokenizer)MistralTokenizer)
LazyLoader)StructuredOutputBackendStructuredOutputGrammarStructuredOutputOptions)choice_as_grammarconvert_lark_to_ebnfgrammar_is_likely_larkxgrxgrammarc                   :    e Zd Zd ZdededefdZdefdZ	d Z
d	S )
XgrammarBackendc                    | j         j        j        | _        t          | j        t
                    r| j        j        g}t          | j        j                  | _	        t          j        | j        j        | j        j        rt          j        j        nt          j        j        | j	        |d          }n1t          | j        t                     r| j                                        }t%          t          |          | j        j        dz             }| j	        p|}dg|z  }|                                D ]\  }}||k     r|||<   | j        j        g}| j        j        j                                        }	t          j                            |	          }
t          j        ||
d         |||
d                   }n+t          j                            | j        | j	                  }t          j        |ddt4          j        j        d	z  d	z  
          | _        d| _        | j         j        | j         j        j        | _        d S d S )NT)encoded_vocab
vocab_type
vocab_sizestop_token_idsadd_prefix_space    r   r   )r      i   )max_threadscache_enabledcache_limit_bytesr   ) vllm_configstructured_outputs_configdisable_any_whitespace
isinstance	tokenizerr
   eos_token_idlenvocabr   r   TokenizerInfo	is_tekken	VocabTypeRAWBYTE_FALLBACKr	   	get_vocabmaxmax_token_iditemsbackend_tokenizerto_str_detect_metadata_from_hffrom_huggingfaceGrammarCompilervllmenvsVLLM_XGRAMMAR_CACHE_MBcompilernum_speculative_tokensspeculative_config)selfr   tokenizer_info
vocab_dicttokenizer_vocab_sizer   r   tokenidxbackend_strmetadatas              ~/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/structured_output/backend_xgrammar.py__post_init__zXgrammarBackend.__post_init__%   sA   6M 	# dn&677 +	 #n9:N "$."677DO ."n2 >+13=,,]0?-!%	 	 	NN (<== 	 1133J#&s:8SVW8W#X#X @,@JD:-M(..00 / /
s##).M#&"n9:N.2DKKMMK(AA+NNH .+#L1%-!)*<!=  NN !.??? @  N +"i>EL	
 
 
 '(#.: 3J ''' ;:    request_typegrammar_specreturnc                 $   |t           j        k    r$| j                            || j                   }n-|t           j        k    r#| j                            d| j                   }n|t           j        k    r| j                            |          }n|t           j        k    r| j        	                    |          }n|t           j
        k    rgt          j        |          }d|v r4d |d         D             }| j                            ||d                   }nH| j                            |          }n-t                              d           t!          d|d          t#          t%          j        || j        	          | j        |
          S )N)any_whitespacez{"type": "object"}
structuresc           	          g | ]=}t          j        |d          t          j        |d                   |d                   >S beginschemaend)rQ   rR   rS   r   StructuralTagItemjsondumps.0ss     rF   
<listcomp>z3XgrammarBackend.compile_grammar.<locals>.<listcomp>v   [         )j#z!H+66eH    rH   triggersz>Validation should have already occurred. Please file an issue.z*grammar is not of valid supported types. ())max_rollback_tokens)matcherr   ctx)r   JSONr;   compile_json_schemar$   JSON_OBJECTGRAMMARcompile_grammarREGEXcompile_regexSTRUCTURAL_TAGrV   loadscompile_structural_tagloggererror
ValueErrorXgrammarGrammarr   GrammarMatcherr<   r   )r>   rI   rJ   ra   s_tagtagss         rF   rf   zXgrammarBackend.compile_grammarc   s    2777-331L-L 4  CC 4@@@-33$9T5T 4  CC 4<<<-//==CC4:::---l;;CC4CCCJ|,,Eu$$  #<0   m::4zARSSm::<HHLLP   N\NNN   &$($?   
 
 
 	
rH   max_num_seqsc                 6    t          j        || j                  S N)r   allocate_token_bitmaskr   )r>   rs   s     rF   rv   z&XgrammarBackend.allocate_token_bitmask   s    ),HHHrH   c                 
    | ` d S ru   )r;   r>   s    rF   destroyzXgrammarBackend.destroy   s    MMMrH   N)__name__
__module____qualname__rG   r   strr   rf   intrv   ry    rH   rF   r   r   #   s        < < <|-
3-
CF-
	 -
 -
 -
 -
^I3 I I I I    rH   r   c                   J   e Zd ZU eed<    ed          Zej        ed<    ed          Z	ej
        ed<    ed ddd          Zeed<    eddd	          Zeed
<   dedee         defdZdee         dee         fdZdeddfdZdej        deddfdZdefdZd ZdS )ro   r   F)hashr`   ra   c                      dS Nr   r   r   rH   rF   <lambda>zXgrammarGrammar.<lambda>   s     rH   )default_factoryreprr   initnum_processed_tokens)defaultr   r   _is_terminated
request_idtokensrK   c                     | j         rdS |D ]K}| j                            |          st                              d||            dS | xj        dz  c_        L| j                                        | _         dS )zAccepts a list of tokens and advances the FSM.

        Returns True if the FSM was advanced successfully.
        Returns False if the FSM failed to advance.
        FzIFailed to advance FSM for request %s for tokens %s. Please file an issue.r   T)r   r`   accept_tokenrl   rm   r   is_terminated)r>   r   r   rB   s       rF   accept_tokenszXgrammarGrammar.accept_tokens   s      	5 		+ 		+E<,,U33 ;	   uu%%*%%%"l88::trH   c                     g }|D ]2}| j                             |          r|                    |           2 t          |          dk    r'| j                             t          |                     |S )zChecks if the list of tokens are accepted by the FSM in sequence.
        Will not advance the FSM.

        Returns the prefix list of tokens that are accepted by the FSM.
        r   )r`   r   appendr(   rollback)r>   r   accepted_tokensrB   s       rF   validate_tokenszXgrammarGrammar.validate_tokens   s      	 	E|((// &&u----!##L!!#o"6"6777rH   
num_tokensNc                     | j                             |           | xj        |z  c_        | j                                         | _        d S ru   )r`   r   r   r   r   )r>   r   s     rF   r   zXgrammarGrammar.rollback   sH    j)))!!Z/!!"l88::rH   bitmaskrC   c                 <    | j                             ||           d S ru   )r`   fill_next_token_bitmask)r>   r   rC   s      rF   fill_bitmaskzXgrammarGrammar.fill_bitmask   s     ,,Wc:::::rH   c                     | j         S ru   )r   rx   s    rF   r   zXgrammarGrammar.is_terminated   s    ""rH   c                 F    d| _         | j                                         d S r   )r   r`   resetrx   s    rF   r   zXgrammarGrammar.reset   s$    $%!rH   )rz   r{   r|   r~   __annotations__r   r`   r   rp   ra   CompiledGrammarr   r   boolr}   listr   r   r   torchTensorr   r   r   r   rH   rF   ro   ro      s         OOO"'%U"3"3"3GS333$u%000C	000 %!	E! ! !#    !5UGGGNDGGG T#Y 4    *d3i DI    ";3 ;4 ; ; ; ;
;EL ;s ;t ; ; ; ;#t # # # #    rH   ro   >   	date-timejson-pointeruri-templateuri-referencerelative-json-pointeruridateipv4ipv6timeuuidemaildurationhostnamerR   rK   c                 f    dt           t          t          f         dt          ffd |           S )z?Check if JSON schema contains features unsupported by xgrammar.objrK   c                     t           t                    sdS                      d          dv rd v rdS                      d          dk    rt           fddD                       rdS                      d          d	k    rd
 v r d
         t          vrdS                      d          dk    rt           fddD                       rdS                                  D ]d}t          |t                    r |          r dS &t          |t                    r)|D ]&}t          |t                    r |          r  dS 'edS )NFtype)integernumber
multipleOfTarrayc              3       K   | ]}|v V  	d S ru   r   rY   keyr   s     rF   	<genexpr>zOhas_xgrammar_unsupported_json_features.<locals>.check_object.<locals>.<genexpr>   s;       .
 .
 3J.
 .
 .
 .
 .
 .
rH   )uniqueItemscontainsminContainsmaxContainsstringformatobjectc              3       K   | ]}|v V  	d S ru   r   r   s     rF   r   zOhas_xgrammar_unsupported_json_features.<locals>.check_object.<locals>.<genexpr>  s8       /
 /
C3J/
 /
 /
 /
 /
 /
rH   )patternPropertiespropertyNames)r%   dictgetanySTRING_SUPPORTED_FORMATSvaluesr   )r   valueitemcheck_objects   `  rF   r   z<has_xgrammar_unsupported_json_features.<locals>.check_object   s   #t$$ 	5 776??3339L9L4 776??g%%# .
 .
 .
 .
P.
 .
 .
 +
 +
% 4 GGFOOx''CH%===4 776??h&&3 /
 /
 /
 /
"H/
 /
 /
 ,
 ,
& 4 ZZ\\ 	$ 	$E%&& $<&&  44 E4(( $! $ $D!$-- $,,t2D2D $#ttturH   )r   r}   r   r   )rR   r   s    @rF   &has_xgrammar_unsupported_json_featuresr      sJ    '$sCx. 'T ' ' ' ' ' 'R <rH   sampling_paramsc                    | j         dS | j         }|j        rK	 t          j                            |j                   n%# t
          $ r}t          d|           |d}~ww xY w|j        rgt          |j                  }	 t          j        	                    |           n"# t
          $ r}t          d          |d}~ww xY wd|_        ||_
        dS |j        rt          |j        t                    rB	 t          j        |j                  }n.# t          j        $ r}t          d          |d}~ww xY w|j        }	 t          j                            |           n%# t
          $ r}t          d|           |d}~ww xY wt#          |          rt          d          dS |j
        rt%          |j
                  r=	 t'          |j
                  |_
        n"# t          $ r}t          d          |d}~ww xY w	 t          j        	                    |j
                   n"# t
          $ r}t          d          |d}~ww xY wdS |j        r	 t          j        |j                  }d	|v r:d
 |d	         D             }t          j                            ||d                    dS t          j                            |j                   dS # t
          $ r}t          d          |d}~ww xY wdS )zyValidate that the request is supported by structured output.

    Raises ValueError if the request is not supported.
    Nz*Failed to transform regex into a grammar: z1Failed to transform choices into a grammar: {err}z#Invalid JSON grammar specification.z0Failed to transform json schema into a grammar: zEThe provided JSON schema contains features not supported by xgrammar.z1Failed to convert the grammar from Lark to EBNF. zInvalid grammar specification.rN   c           	          g | ]=}t          j        |d          t          j        |d                   |d                   >S rP   rT   rX   s     rF   r[   z-validate_xgrammar_grammar.<locals>.<listcomp>n  r\   rH   r]   z%Invalid structural tag specification.)structured_outputsregexr   Grammar
from_regex	Exceptionrn   choicer   	from_ebnfgrammarrV   r%   r}   rj   JSONDecodeErrorfrom_json_schemar   r   r   structural_tagfrom_structural_tag)r   	so_paramserrchoice_grammarrR   erq   rr   s           rF   validate_xgrammar_grammarr   "  s   
 )12I 	K""9?3333 	 	 	BSBB 	
  
*9+;<<	K!!.1111 	 	 	C 	  	*	~ inc** 	$OIN33' O O O !FGGQNO ^F	K((0000 	 	 	H3HH 	
 2&99 	W   	 !)"344 	$89J$K$K	!!    G 	FK!!)"34444 	F 	F 	F=>>AE	F M	MJy788E u$$  #<0   //eJ6GHHHHH//	0HIIIII 	M 	M 	MDEE1L	M#M Ms   $> 
A AA ?B 
B>)B99B>3D D1D,,D1<E 
E>&E99E>=G 
G6!G11G6:$H 
H>)H99H>AK "$K 
K'K""K'))rV   dataclassesr   r   typingr   r   r   	vllm.envsr8   vllm.loggerr   vllm.sampling_paramsr   vllm.tokenizers.deepseek_v32r	   vllm.tokenizers.mistralr
   vllm.utils.import_utilsr   'vllm.v1.structured_output.backend_typesr   r   r   vllm.v1.structured_output.utilsr   r   r   r   r   globalsrz   rl   r   ro   r   r   r}   r   r   r   r   rH   rF   <module>r      sM    ( ( ( ( ( ( ( ( % % % % % % % %      # # # # # # / / / / / / = = = = = = 4 4 4 4 4 4 . . . . . .         
           3
*UGGIIz
2
2C	X		 r r r r r- r r rj C C C C C- C C CN   $, 4S> , d ,  ,  ,  , ^XM~ XM$ XM XM XM XM XM XMrH   