
    .`i&                     Z   d dl Z d dlZd dlZd dlmZ d dlmZ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 erd dlZd dlmZ d dlmZ n? ed	 e            d	          Z ed
 e            d
          Z ed e            d          Z e
e          ZdefdZde e!ef         de"fdZ#de!e e!ef         z  de e!ef         fdZ$e G d de                      Z%e G d de                      Z&	 	 d dede!e e!ef         z  de"de"de!f
dZ'	 d!dedej(        dz  ddfdZ)dS )"    N)	dataclass)TYPE_CHECKINGAny)init_logger)SamplingParams)
LazyLoader)StructuredOutputBackendStructuredOutputGrammarStructuredOutputOptions)get_structured_output_key
llguidancezllguidance.hfzllguidance.torchdatac                     t          | t                    r=|                                 D ]}t          |           d| vrd| v sd| v r	d| d<   d S d S d S t          | t                    r| D ]}t          |           d S d S )NadditionalProperties
propertiespatternPropertiesF)
isinstancedictvalues$_walk_json_for_additional_propertieslist)r   valueitems      ~/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/structured_output/backend_guidance.pyr   r   "   s    $ 	7[[]] 	8 	8E07777!--D  $74$?$?+0D'((( .-$?$? 
D$		 7 	7 	7D066667 7	7 	7    schemareturnc                 f    dt           t          t          f         dt          ffd |           S )zJCheck if JSON schema contains features unsupported by guidance/llguidance.objr   c                 4   t          | t                    sdS d| v rdS |                                 D ]d}t          |t                    r |          r dS &t          |t                    r)|D ]&}t          |t                    r |          r  dS 'edS )NFr   T)r   r   r   r   )r   r   r   check_objects      r   r!   z<has_guidance_unsupported_json_features.<locals>.check_object2   s    #t$$ 	5 #%%4 ZZ\\ 	$ 	$E%&& $<&&  44 E4(( $! $ $D!$-- $,,t2D2D $#tttur   )r   strr   bool)r   r!   s    @r   &has_guidance_unsupported_json_featuresr$   /   sI    $sCx. T      ( <r   
guide_jsonc                     t          | t                    rt          j        |           }nt	          j        |           }t          |           |S N)r   r"   jsonloadscopydeepcopyr   )r%   guide_json_objs     r   !process_for_additional_propertiesr-   I   sL     *c"" 3J// z22(888r   c                   :    e Zd Zd ZdededefdZdefdZ	d Z
d	S )
GuidanceBackendc                     | j         j        j        | _        | j         j        j        | _        t	          j        | j        | j                  | _        d S r'   )	vllm_configstructured_outputs_configdisable_any_whitespacedisable_additional_propertiesllguidance_hffrom_tokenizer	tokenizer
vocab_sizell_tokenizerselfs    r   __post_init__zGuidanceBackend.__post_init__W   sR    6M 	# 6T 	* *8NDO
 
r   request_typegrammar_specr   c           
      @   t          ||| j        | j                  | _        t	          j        | j        | j        t          t          j	        
                    dd                              }t          || j        | j                  }|                                 |S )NLLGUIDANCE_LOG_LEVEL1)	log_level)
ll_matcherr9   r8   )serialize_guidance_grammarr3   r4   serialized_grammarr   	LLMatcherr9   intosenvirongetGuidanceGrammarr8   check_error)r;   r=   r>   rC   rs        r   compile_grammarzGuidanceBackend.compile_grammarc   s     #='.	#
 #
  )#"*..)?EEFF
 
 

 !*
 
 
 	
r   max_num_seqsc                 @    t          j        || j        j                  S r'   )llguidance_torchallocate_token_bitmaskr9   r8   )r;   rO   s     r   rR   z&GuidanceBackend.allocate_token_bitmask|   s"    6$+6
 
 	
r   c                     d S r'    r:   s    r   destroyzGuidanceBackend.destroy   s    r   N)__name__
__module____qualname__r<   r   r"   r
   rN   rG   rR   rU   rT   r   r   r/   r/   U   sy        

 

 

3CF	    2
3 
 
 
 

    r   r/   c                       e Zd ZU ej        ed<   ej        ed<   eed<   dZe	ed<   dZ
e	ed<   dZeed<   d	 Z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 )rK   rC   r9   r8   Fprinted_error
terminatedr   rollback_lagc                     | j         s?| j                                        }|r&d| _         t                              d|           d S d S d S )NTzLLMatcher error: %s)rZ   rC   	get_errorloggerwarning)r;   errs     r   rL   zGuidanceGrammar.check_error   s_    ! 	;/++--C ;%)"4c:::::		; 	;; ;r   
request_idtokensr   c                    | j         j        |v r.| j                                        r| j        sd| _        d| _        | j                                        rdS | j                            |          }|                                  |S )zAccepts a list of tokens and advances the parser.

        Returns True if the parser was advanced successfully.
        Returns False if the parser failed to advance.
           T)r9   	eos_tokenrC   
is_stoppedr[   r\   consume_tokensrL   )r;   rb   rc   rM   s       r   accept_tokenszGuidanceGrammar.accept_tokens   s     &&00))++ &DO &$%!"DO?%%'' 	4 O**622r   c                     t          |          dk    rg S | j                                        rg S | j                            |          }|                                  |d|         S )zChecks if the list of tokens are accepted by the parser in sequence.
        Will not advance the parser.

        Returns the prefix list of tokens that are accepted by the parser.
        r   N)lenrC   rg   validate_tokensrL   )r;   rc   
num_tokenss      r   rl   zGuidanceGrammar.validate_tokens   sk     v;;!I?%%'' 	I_44V<<
kzk""r   rm   Nc                     |dk    rF| j                             || j        z
             d| _        d| _        |                                  d S d S )Nr   F)rC   rollbackr\   r[   rL   )r;   rm   s     r   ro   zGuidanceGrammar.rollback   sW    >>O$$Z$2C%CDDD#DO !D	 >r   bitmaskidxc                 d    t          j        | j        ||           |                                  d S r'   )rQ   fill_next_token_bitmaskrC   rL   )r;   rp   rq   s      r   fill_bitmaskzGuidanceGrammar.fill_bitmask   s3     	0'3OOOr   c                     | j         S r'   )r[   r:   s    r   is_terminatedzGuidanceGrammar.is_terminated   s
    r   c                 8    | j                                          d S r'   )rC   resetr:   s    r   rx   zGuidanceGrammar.reset   s    r   )rV   rW   rX   r   rF   __annotations__LLTokenizerrG   rZ   r#   r[   r\   rL   r"   r   ri   rl   ro   torchTensorrt   rv   rx   rT   r   r   rK   rK      sJ        $$$$((((OOOM4JL#; ; ; T#Y 4    8#d3i #DI # # # #"3 4    EL s t    t             r   rK   Fr=   r>   r3   r4   c                    dt           t          t           t          f         z  dt           ffd}| t          j        k    r ||          S | t          j        k    r$t          j                            dd i          S | t          j	        k    rd}nW| t          j
        k    rd}nC| t          j        k    rd	}n/| t          j        k    rt          |t                     rt          j        |          }n|}|d
         }g }|d         D ]}	|	d         t!          fd|D             d           }
|
t#          d d|           |                    t          j        |
|	d          ||	d                   |	d                              |st#          d          t          j                            |          S t*                              d           t#          d| d          t          j        ||          S )Nr>   r   c                 n    rt          |           } t          j                            | d i          S )Nwhitespace_flexibledefaults)r-   r   rF   grammar_from_json_schema)r>   r4   r3   s    r   _process_schemaz3serialize_guidance_grammar.<locals>._process_schema   sL     ) 	K<\JJL#<<%+A'A = 
 
 	
r   z{"type": "object"}r   r   regexgrammarchoicetriggers
structuresbeginc              3   F   K   | ]}                     |          |V  d S r'   )
startswith).0tr   s     r   	<genexpr>z-serialize_guidance_grammar.<locals>.<genexpr>  s6      HH1E4D4DQ4G4GHQHHHHHHr   zTrigger z not found in triggers r   end)triggerr   r   r   z-No structural tags found in the grammar spec.z>Validation should have already occurred. Please file an issue.z*grammar is not of valid supported types. ())r"   r   r   r   JSONJSON_OBJECTr   rF   r   REGEXGRAMMARCHOICESTRUCTURAL_TAGr   r(   r)   next
ValueErrorappend	StructTag
to_grammarr_   errorgrammar_from)r=   r>   r3   r4   r   tps_tagr   tagsstrigr   s     ``       @r   rD   rD      sp   

DcN*

	

 

 

 

 

 

 

 .333|,,,	0<	<	<#<< %+A'A = 
 
 	
 2888BB4<<<BB4;;;BB4CCC,,, %
<00$"'
"3H/1D<(  wZHHHHHHH$OO<$K5KKKK   ( $j /( < <eH	       R !PQQQ'224888LLP   N\NNN   &r<888r   sampling_paramsr7   c                     | j         d S t          | j                   \  }}t          ||          }t          j                            ||          }|rt          d|           d S )NzGrammar error: )structured_outputsr   rD   r   rF   validate_grammarr   )r   r7   r   grmguidance_grmra   s         r   validate_guidance_grammarr     sv     )1'(JKKGB-b#66L


/
/i
H
HC
 203001112 2r   )FFr'   )*r*   r(   rH   dataclassesr   typingr   r   r{   vllm.loggerr   vllm.sampling_paramsr   vllm.utils.import_utilsr   'vllm.v1.structured_output.backend_typesr	   r
   r   !vllm.v1.structured_output.requestr   r   llguidance.hfhfr5   llguidance.torchrQ   globalsrV   r_   objectr   r   r"   r#   r$   r-   r/   rK   rD   rz   r   rT   r   r   <module>r      s     				 ! ! ! ! ! ! % % % % % % % %  # # # # # # / / / / / / . . . . . .         
 H G G G G G U))))))///////L''))\BBJJ		?KKM!z"4ggiiASTT	X		
7v 
7 
7 
7 
7 4S>  d        4	d38n$		#s(^	 	 	 	 , , , , ,- , , ,^ N  N  N  N  N - N  N  N h $)*/	B9 B9)B9S#X&B9 !B9 $(	B9
 	B9 B9 B9 B9L QU
2 
2#
20:0F0M
2	
2 
2 
2 
2 
2 
2r   