
    .`iR/                       d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
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mZmZ d d	lmZmZmZ e
rd dlZd dlmZ n* ed
 e            d          Z ed e            d          Zej         dk    r ej!        d          Z"e"j#        Z$e"j%        Z&nd dl&Z&d dl$Z$e G d de                      Z'e G d de                      Z(ddZ)d dZ*d!dZ+d"dZ,dS )#    )annotationsN)	dataclassfield)TYPE_CHECKING)escape)SamplingParams)
LazyLoader)StructuredOutputBackendStructuredOutputGrammarStructuredOutputOptions)OutlinesVocabularyget_outlines_cacheget_outlines_vocabularyocoutlines_corejson_schemazoutlines_core.json_schema)      rec                  2    e Zd Zd ZddZddZddZd ZdS )OutlinesBackendc                ^    t          | j                  | _        t                      | _        d S N)r   	tokenizer
vocabularyr   cacheselfs    ~/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/structured_output/backend_outlines.py__post_init__zOutlinesBackend.__post_init__4   s$    1$.AA'))


    regex_stringstrr   r   returnoc.Indexc                    |j          d| }|| j        v r| j        |         S t          j        ||j                  }|| j        |<   |S )N_)_hashr   r   Indexinner)r   r"   r   	cache_keyindexs        r   _compile_indexzOutlinesBackend._compile_index8   sY     "'88,88	
"":i((z'788 %
9r!   request_typer   grammar_specr   c                   |t           j        k    rt          j        |          }nr|t           j        k    r|}n_|t           j        k    r<t          j        |          }d |D             }dd                    |          z   dz   }nt          d|d          | 
                    || j                  }| j        j        | j        j        j        nd}t          | j        t#          j        ||                    S )	Nc                ,    g | ]}t          |          S  )regex_escape).0cs     r   
<listcomp>z3OutlinesBackend.compile_grammar.<locals>.<listcomp>M   s    8881|A888r!   (|)z+Invalid request type for Outlines backend (r   )max_rollback)
vocab_sizeguide)r   JSONr   build_regex_from_schemaREGEXCHOICEastliteral_evaljoin
ValueErrorr-   r   vllm_configspeculative_confignum_speculative_tokensOutlinesGrammarr;   r   Guide)r   r.   r/   regexchoicesr,   max_rollback_tokenss          r   compile_grammarzOutlinesBackend.compile_grammarD   s    27777EEEE4::: EE4;;;&|44G88888G#((7+++c1EEOlOOO   ##E4?;; 2> /FF 	
 (5/BCCC
 
 
 	
r!   max_num_seqsinttorch.Tensorc                    t          j        || j        dz   dz  fdt           j        t           j                                                  S )N       )dtype
pin_memory)torchfullr;   int32cudais_available)r   rN   s     r   allocate_token_bitmaskz&OutlinesBackend.allocate_token_bitmask^   sH    zDOb0R78+z..00	
 
 
 	
r!   c                    d S r   r2   r   s    r   destroyzOutlinesBackend.destroyf   s    r!   N)r"   r#   r   r   r$   r%   )r.   r   r/   r#   r$   r   )rN   rO   r$   rP   )__name__
__module____qualname__r    r-   rM   r\   r^   r2   r!   r   r   r   2   sn        * * *
 
 
 

 
 
 
4
 
 
 
    r!   r   c                      e Zd ZU ded<    ed          Zded<    ed ddd          Zded	<    edddd
          Zded<   ddZddZ	d dZ
d!dZd"dZd ZdS )#rH   rO   r;   F)hashzoc.Guider<   c                     dS )Nr   r2   r2   r!   r   <lambda>zOutlinesGrammar.<lambda>o   s     r!   )default_factoryreprrc   initnum_processed_tokens)defaultrh   rg   rc   bool_prev_finished
request_idr#   tokens	list[int]r$   c                    | j                             |          r1|D ],}| j                             |           | xj        dz  c_        -dS 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.
           TF)r<   accepts_tokensadvanceri   )r   rm   rn   ts       r   accept_tokenszOutlinesGrammar.accept_tokensv   sd     :$$V,, 
	  / /
""1%%%))Q.)))4ur!   
num_tokensNonec                Z    | j                             |           | xj        |z  c_        d S r   )r<   rollback_stateri   )r   rv   s     r   rollbackzOutlinesGrammar.rollback   s2    
!!*---!!Z/!!!!r!   c                    g }|D ]G}|                     |           | j                            |          s|                                  nH|S r   )appendr<   rr   pop)r   rn   acceptedtoks       r   validate_tokenszOutlinesGrammar.validate_tokens   s^      	 	COOC   :,,X66  r!   bitmaskrP   idxc                    ||         }| j                             |                                |                                |                                           d S r   )r<   write_mask_intodata_ptrnumelelement_size)r   r   r   masks       r   fill_bitmaskzOutlinesGrammar.fill_bitmask   sG    s|
""4==??DJJLL$BSBSBUBUVVVVVr!   c                T    | j                                         }| j        }|| _        |S r   )r<   is_finishedrl   )r   currprevs      r   is_terminatedzOutlinesGrammar.is_terminated   s*    z%%''""r!   c                T    d| _         d| _        | j                                         d S )Nr   F)ri   rl   r<   resetr   s    r   r   zOutlinesGrammar.reset   s,    $%!#
r!   N)rm   r#   rn   ro   r$   rk   )rv   rO   r$   rw   )rn   ro   r$   ro   )r   rP   r   rO   r$   rw   r$   rk   )r_   r`   ra   __annotations__r   r<   ri   rl   ru   rz   r   r   r   r   r2   r!   r   rH   rH   j   s        OOOe'''E'''' %!	E! ! !     !5UUSSSNSSSS   &0 0 0 0   W W W W       r!   rH   paramsr   c                   | j         d S | j         }|j        rt          |j                   d S |j        rt	          |j        t
                    rI	 t          j        |j                   |j        }ng# t          j        $ r}t          d          |d }~ww xY w	 t          j	        |j                  }n%# t          $ r}t          d|           |d }~ww xY wt          j        |          }t          |           d S |j        r=d |j        D             }dd                    |          z   dz   }t          |           d S |j        rt          d          d S )Nz#Invalid JSON grammar specification.z1Error serializing structured outputs jsonschema: c                F    g | ]}t          t          |                    S r2   )r3   r#   )r4   choices     r   r6   z?validate_structured_output_request_outlines.<locals>.<listcomp>   s&    LLL<F,,LLLr!   r7   r8   r9   zKOutlines structured outputs backend does not support grammar specifications)structured_outputsrJ   validate_regex_is_buildablejson
isinstancer#   loadsJSONDecodeErrorrD   dumps	Exceptionr   r>   r   rC   grammar)r   	so_paramsschemaepatternrK   rJ   s          r   +validate_structured_output_request_outlinesr      s    ()I 
#IO44444	 
inc** 	O
9>***"' O O O !FGGQNOIN33    KKK  5f==#G,,,,,		 
LL9;KLLLchhw'''#-#E*****		 
6
 
 	

 
s0    A1 1B BBB3 3
C=CCr$   rk   c                |   d
fdt          | d          r| j        n| }|D ]\  }}|t          j        k    s|t          j        t          j        fv r dS |t          j        k    r-t          |d                   r dS  |d                   r dS p|t          j	        k    r3d}|d         D ]"}t          |          r  dS  |          rd}#|r dS |t          j
        t          j        t          j        fv r dS |t          j        k    r,t          |d	                   r dS  |d	                   r dS dS )z@Return True if there's a look-around/anchor before any consumer.r$   rk   c                   t          | d          r| j        n| }|D ]\  }}|t          j        t          j        t          j        fv r dS |t          j        k    r|\  }}}|dk    r |          r dS X|t          j        k    r$|\  }}t          fd|D                       r dS |t          j	        k    r |d                   r dS dS )z=Return True if subpattern can consume at least one character.dataTr   c              3  .   K   | ]} |          V  d S r   r2   )r4   brsubpattern_consumess     r   	<genexpr>zE_prefix_needs_context.<locals>.subpattern_consumes.<locals>.<genexpr>   s/      BB2**2..BBBBBBr!   r   F)
hasattrr   	sre_parseLITERALINANY
MAX_REPEATBRANCHany
SUBPATTERN)	parsedrn   ttypetvalr'   mxsubbranchesr   s	           r   r   z2_prefix_needs_context.<locals>.subpattern_consumes   s    ' 7 7CV! 	 	KE4*IL)-HHHtt)...!
2s7722377744)***"8BBBBBBBBB  44  )...3F3FtAw3O3O.ttur!   r   Tr   Frq      r   )r   r   r   ATsre_constantsASSERT
ASSERT_NOTr   _prefix_needs_contextr   r   r   r   r   )r   rn   r   r   saw_consumerr   r   s         @r   r   r      s        . $FF33?V[[F % %tIL  E $.
 %
 %
 44 I((($T!W-- tt""47++ uu
 i&&& L1g ( ((,,  444&&r** (#'L uu y(),	FFF55 i***$T!W-- tt""47++ uu5r!   rw   c                    t          | d          r| j        n| }|D ]\  }}|t          j        t          j        fv rt          d          |t          j        t          j        fv rt          d          |t          j	        k    r*|t          j
        t          j        fv rt          d          |t          j        k    r|d         D ]}t          |           |t          j        k    rt          |d                    dS )z6Check for regex features unsupported by regex-automatar   zBackreferences are unsupported.z&Look-Around assertion are unsupported.z(Unicode word boundaries are unsupported.rq   r   N)r   r   r   GROUPREFGROUPREF_EXISTSrD   r   r   r   r   AT_BOUNDARYAT_NON_BOUNDARYr   _check_unsupportedr   )r   rn   r   r   branchs        r   r   r     s   #FF33?V[[F ( (tY')BCCC>??? }+]-EFFFEFFF il""1=3PQQQ !KLLL R i&&&q' + +"6****+ i***tAw'''+( (r!   r   r#   c                6   	 t          j        |           }n*# t          j        $ r}t	          d|           |d}~ww xY w	 t          |           n&# t          $ r}t	          d| d          |d}~ww xY wt          |          rt	          d|            dS )a[  
    Validates that the input regex is not using unsupported features
    of the `regex-automata` crate (outlines_core regex engine) and has a
    universal start state.
    definition of universal start state used can be found at:
    https://docs.rs/regex-automata/latest/regex_automata/dfa/trait.Automaton.html#method.universal_start_state
    zError parsing regex: Nz7Regex uses unsupported feature for structured outputs: um   . Only basic matching constructs are supported—lookarounds, backreferences, and unicode boundaries are not.a<  Regex does not have a anchored universal start stateThis means that the Regex uses anchors (^) or look-arounds in a way which requires context before any token is matched.structured outputs needs regexes that can match without needing that context. Try rewriting the pattern without using these constructs. Pattern:
)r   parser   errorrD   r   r   )r   r   r   s      r   r   r   *  s    =)) = = =444551<=6""""   >a > > >
 
 		 V$$ 
/
 &-/ /
 
 	

 
s(    >9>A 
A5A00A5)r   r   r   )r$   rw   )r   r#   r$   rw   )-
__future__r   rA   	importlibr   sysdataclassesr   r   typingr   rW   rJ   r   r3   vllm.sampling_paramsr   vllm.utils.import_utilsr	   'vllm.v1.structured_output.backend_typesr
   r   r   vllm.v1.structured_output.utilsr   r   r   r   r   outlines_core.json_schemar   globalsversion_infoimport_module_re_parserr   
_constantsr   r   rH   r   r   r   r   r2   r!   r   <module>r      s   # " " " " " 



      



 ( ( ( ( ( ( ( (              ( ( ( ( ( ( / / / / / / . . . . . .         
           T3333333	D''))_	5	5B*]GGII7RSSK w ")
!$
'
'CINMM 4 4 4 4 4- 4 4 4n 8 8 8 8 8- 8 8 8v!
 !
 !
 !
HB B B BJ( ( ( (6
 
 
 
 
 
r!   