
     `i              	       .   	 d dl Z d dlZd dlmZ d dlmZ n# e$ r  ed          w xY wd dlmZm	Z	m
Z
mZ d dlmZ d dlmZmZmZ d dlZ G d d	          Zddeej        ef         dededz  defdZ	 ddeej        eef         dededefdZddgZdS )    N)MistralTokenizer)PreTrainedTokenizerBasez@vllm is not installed. Please install it with "pip install vllm")CharacterLevelParserTokenEnforcerFormatEnforcerAnalyzerTokenEnforcerTokenizerData)#build_token_enforcer_tokenizer_data)ListOptionalUnionc                   N    e Zd ZdefdZdee         dej        dej        fdZ	dS )VLLMLogitsProcessortoken_enforcerc                 R    || _         |rt          |          nd | _        d | _        d S )N)r   r   analyzermask)selfr   analyzes      v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lmformatenforcer/integrations/vllm.py__init__zVLLMLogitsProcessor.__init__   s/    ,BIS.~>>>t,0			    	input_idsscoresreturnc                 |   |}| j         r-| j                             ||                                           | j                            |          j        }| j        &| j                            t          j	                    n%t          j        |t          j	                   | _        d| j        |<   || j        z   }|S )Nr   )r   report_raw_logitstolistr   get_allowed_tokensallowed_tokensr   fill_mathinftorch	full_like)r   r   r   token_sequencer   s        r   __call__zVLLMLogitsProcessor.__call__   s    "= 	MM++NFMMOOLLL,??OO^9 IOOTXI&&&& 	::DI$%	.!$)#r   N)
__name__
__module____qualname__r   r   r
   intr#   Tensorr&    r   r   r   r      s`        1} 1 1 1 1
$s) U\ el      r   r   F	tokenizeruse_bitmask
vocab_sizer   c                 `   |;t          | d          r+| j                                                                        }t          | d          r|                                 } t          | t                    rt          | ||          S t          | d          r| j        } t          | ||          S )N
llm_engineget_tokenizerr-   )	hasattrr1   get_model_configget_vocab_sizer2   
isinstancer   r	   r-   )r-   r.   r/   s      r   (build_vllm_token_enforcer_tokenizer_datar7   #   s    9l++ 	R"->>@@OOQQJy/** .++--	)-.. W29k:VVVy+&& ('	.y+zRRRr   llmcharacter_level_parserr   c                     t          | t                    st          |           } t          | |          }t	          ||          S )zBuild the logits processor function that llama.cpp will use to filter the tokens generated by the model. The result
    can be passed in the logits_processor list that is sent to the call or generate() method of llama.cpp models.)r6   r   r7   r   r   )r8   r9   r   r   s       r   build_vllm_logits_processorr;   1   sD    
 c566 <6s;;"3(>??N~w777r   r;   r7   )FN)F)r#   vllm!vllm.transformers_utils.tokenizerr   transformersr   ImportErrorlmformatenforcerr   r   r   r   *lmformatenforcer.integrations.transformersr	   typingr
   r   r   r!   r   LLMboolr*   r7   r;   __all__r,   r   r   <module>rF      s  ZLLLKKKBBBBBB4444444 Z Z Z
+X
Y
YYZ t t t t t t t t t t t t Z Z Z Z Z Z ( ( ( ( ( ( ( ( ( (        *S SdhH_>_8` Sos S  JM  PT  JT S  `z S S S S  /48 8U485LNh+h%i 88L8)-88K8 8 8 8 )*T
Us    (