
    *`i
                         d 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ZddlmZ  G d d          Zd	 Zd
 Zedk    r e             dS dS )zR
Usage:
    python mlxlm.py --model mlx-community/Qwen2.5-Coder-32B-Instruct-3bit
    N)generate)load)AutoTokenizer)#apply_token_bitmask_inplace_kernelsc                   \    e Zd Zd
dej        defdZdej        dej        dej        fdZ	d	S )XGrammarLogitsProcessor   grammarmax_rollback_tokensc                     t          j        ||          | _        |j        j        | _        t          j        d| j                  | _        d S )N)r      )xgrammarGrammarMatchermatchertokenizer_info
vocab_sizeallocate_token_bitmaskbitmask)selfr
   r   s      j/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/xgrammar/contrib/mlxlm.py__init__z XGrammarLogitsProcessor.__init__   sA    .wL_```!0;6q$/JJ    tokenslogitsreturnc                 "   |j         dk    sJ |d                                         }| j                                        s| j                            |          nd}|s3| j                                         | j                            |           | j                                        sd| j                            | j                   t          d         t          j
        | j                                                  || j                  S |S )Nr   Fmetal)sizeitemr   is_terminatedaccept_tokenresetfill_next_token_bitmaskr   r   mxarraynumpyr   )r   r   r   
last_tokenaccs        r   __call__z XGrammarLogitsProcessor.__call__   s    {QBZ__&&
;?<;U;U;W;Wbdl''
333]b 	2L   L%%j111|))++ 	L00>>>6w?++--..   r   N)r	   )
__name__
__module____qualname__r   CompiledGrammarintr   r%   r&   r*    r   r   r   r      st        K K 8 Ks K K K K
rx  bh      r   r   c                      t          j                    } |                     dt          d           |                     dt          d           |                     dt          d           |                                 S )	Nz--modelT)typerequiredz--promptz6Generate a simple example JSON. No text. Only the JSON)r2   defaultz--seed*   )argparseArgumentParseradd_argumentstrr/   
parse_args)parsers    r   r:   r:   &   s    $&&F
	d;;;
&^     sB777r   c                  `   t                      } t          | j                  \  }}t          j        | j                  }t
          j                            | j                   t          |||	                    d| j
        dgd          dt          t          j        t          j                            |                                                              g          }t          |||	                    d| j
        dgd          d	          }||k    sJ t#          |           d S )
Nuser)rolecontentT)add_generation_promptF)r   )r
   )model	tokenizerpromptverboselogits_processors)rA   rB   rC   rD   )r:   mlx_loadrA   r   from_pretrainedr%   randomseedmlx_generateapply_chat_templaterC   r   r   GrammarCompilerTokenizerInfofrom_huggingfacecompile_builtin_json_grammarprint)argsrA   _rB   with_logits_processorwithout_logits_processors         r   mainrU   0   sQ   <<D
##HE1-dj99IINN49(,,556d - 
 
 # 0#+#9#J#J9#U#U  ..00  
    ,,,556d - 
 
       $'<<<<<	
"#####r   __main__)__doc__r6   mlx.corecorer%   mlx_lm.generater   rJ   mlx_lm.utilsr   rF   transformersr   r   xgrammar.kernelsr   r   r:   rU   r+   r0   r   r   <module>r^      s    
        4 4 4 4 4 4 ) ) ) ) ) ) & & & & & &  @ @ @ @ @ @       *  $ $ $@ zDFFFFF r   