o
    _۷i
                     @   s   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 dZd	d
 Zd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                   @   s>   e Zd ZddejdefddZdejdejdejfd	d
Z	dS )XGrammarLogitsProcessor   grammarmax_rollback_tokensc                 C   s.   t j||d| _|jj| _t d| j| _d S )N)r	      )xgrammarGrammarMatchermatchertokenizer_info
vocab_sizeallocate_token_bitmaskbitmask)selfr   r	    r   L/home/ubuntu/vllm_env/lib/python3.10/site-packages/xgrammar/contrib/mlxlm.py__init__   s   
z XGrammarLogitsProcessor.__init__tokenslogitsreturnc                 C   s   |j dksJ |d  }| j s| j|nd}|s'| j  | j| | j sB| j| j td t	
| 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accr   r   r   __call__   s   

z XGrammarLogitsProcessor.__call__N)r   )
__name__
__module____qualname__r   CompiledGrammarintr   r!   r"   r&   r   r   r   r   r      s     r   c                  C   s@   t  } | jdtdd | jdtdd | jdtdd |  S )	Nz--modelT)typerequiredz--promptz6Generate a simple example JSON. No text. Only the JSON)r,   defaultz--seed*   )argparseArgumentParseradd_argumentstrr+   
parse_args)parserr   r   r   r4   &   s   r4   c               
   C   s   t  } t| j\}}t| j}tj| j t|||j	d| j
dgdddttjtj|d dgd}t|||j	d| j
dgdddd	}||ksPJ t| d S )
Nuser)rolecontentT)add_generation_promptF)r   )r   )model	tokenizerpromptverboselogits_processors)r:   r;   r<   r=   )r4   mlx_loadr:   r   from_pretrainedr!   randomseedmlx_generateapply_chat_templater<   r   r   GrammarCompilerTokenizerInfofrom_huggingfacecompile_builtin_json_grammarprint)argsr:   _r;   with_logits_processorwithout_logits_processorr   r   r   main0   s:   
rN   __main__)__doc__r0   mlx.corecorer!   mlx_lm.generater   rC   mlx_lm.utilsr   r?   transformersr   r   xgrammar.kernelsr   r   r4   rN   r'   r   r   r   r   <module>   s    
 
