
     `ia              	           d dl Z d dlmZmZmZmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZmZ  G d d          Zdeeeeef                  fd	Zd
edefdZ	 dd
eeef         de
dedefdZdS )    N)ListOptionalTupleUnion)PreTrainedTokenizerBase)CharacterLevelParserFormatEnforcerAnalyzer)TokenEnforcerTokenEnforcerTokenizerDatac                   d    e Zd ZdefdZd Zdedeee                  dej	        dej	        fdZ
d	S )
TRTLLMLogitsProcessortoken_enforcerc                     || _         |rt          |          nd | _        d | _        t          j         | _        || _        d S )N)r   r	   analyzermaskmathinfmask_valeos_token_id)selfr   r   analyzes       x/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lmformatenforcer/integrations/trtllm.py__init__zTRTLLMLogitsProcessor.__init__
   sD    ,BIS.~>>>t,0		(    c                 D      fd|                                 D             S )Nc                 j    g | ]/}|t          j        t                    rj        nj        gv-|0S  )
isinstancer   list).0xr   s     r   
<listcomp>z/TRTLLMLogitsProcessor._trim.<locals>.<listcomp>   s]     e e eaQ&01BD&I&Ib""PTPaOb.d .d .d .d .dr   )tolist)r   inputs   ` r   _trimzTRTLLMLogitsProcessor._trim   s=    e e e e5<<>> e e e 	er   stepbatch_input_idslogitsreturnc                    t          t          |                    D ]}| j        r9| j                            ||         ||                                                    | j                            |                     ||                             j        }| j	         | j	        
                    | j                   n%t          j        ||         | j                  | _	        d| j	        |<   ||         | j	        z   ||<   |S )Nr   )rangelenr   report_raw_logitsr#   r   get_allowed_tokensr%   allowed_tokensr   fill_r   torch	full_like)r   r&   r'   r(   idxr/   s         r   __call__zTRTLLMLogitsProcessor.__call__   s    _--.. 	2 	2C} \//0DfSkFXFXFZFZ[[[!0CCDJJ_bOcDdDdeetNy$	.... "OF3KGG	()DIn% +	1F3KKr   N)__name__
__module____qualname__r
   r   r%   intr   r1   Tensorr4   r   r   r   r   r   	   s        )} ) ) ) )e e eS 4S	? EL ]b]i      r   r   r)   c                    t          | d          r|                                 } t          | d          r| j        } |                     d          d         g}g }| j        }t          |          D ]}|| j        v rt          j        ||gz   t          j	                  }| 
                    |          dd          }| 
                    |          }t          |          t          |          k    }|                    |||f           |S )Nget_tokenizer	tokenizer0dtype   )hasattrr;   r<   encode
vocab_sizer+   all_special_idsr1   tensorlongdecoder,   append)	r<   token_0regular_tokensrD   	token_idxtensor_after_0decoded_after_0decoded_regularis_word_start_tokens	            r   _build_regular_tokens_listrQ   '   s   y/** .++--	y+&& ('	$$R()GN%J:&& Q Q		111g&;5:NNN#**>::122>#**733!/22S5I5IIy/;NOPPPPr   r<   c           	           t                     }dt          t                   dt          f fd}d}t	          || j        |t                               }|S )z\Build the TokenEnforcerTokenizerData from a tokenizer in order to cache it between instancestokensr)   c                 n    t          j        | t           j                  }                    |          S )Nr?   )r1   rF   rG   rH   )rS   rF   r<   s     r   _decodez,build_trtlmm_tokenizer_data.<locals>._decode@   s-    fEJ777'''r   F)rQ   r   r8   strr   r   r,   )r<   rK   rU   use_bitmasktokenizer_datas   `    r   build_trtlmm_tokenizer_datarY   <   sp    /	::N(S	 (c ( ( ( ( ( ( K/I_alnqr{n|n|}}Nr   Fcharacter_level_parserr   c                     t          | t                    r| }nt          |           }t          ||          }t	          || j        |          S )zf
    Build logits processor for feeding it into generate function (use_py_session should be True)
    )r   r   rY   r
   r   r   )r<   rZ   r   rX   r   s        r   build_trtllm_logits_processorr\   I   sQ     )788 @"4Y??">3IJJN 1GQQQr   )F)r   typingr   r   r   r   r1   transformersr   lmformatenforcerr   r	   lmformatenforcer.tokenenforcerr
   r   r   r8   rV   boolrQ   rY   r\   r   r   r   <module>rb      sR    / / / / / / / / / / / /  0 0 0 0 0 0 I I I I I I I I T T T T T T T T       <T%S$2G-H    *
+B 
Ga 
 
 
 
 38R RU3JLf3f-g R:NR+/R<QR R R R R Rr   