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	      )xgrammarZGrammarMatchermatchertokenizer_info
vocab_sizeZallocate_token_bitmaskbitmask)selfr   r	    r   b/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   FZmetal)sizeitemr   Zis_terminatedZaccept_tokenresetZfill_next_token_bitmaskr   r   mxarraynumpyr   )r   r   r   Z
last_tokenaccr   r   r   __call__   s   

z XGrammarLogitsProcessor.__call__N)r   )
__name__
__module____qualname__r   Z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   r,   &   s   r,   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)ZrolecontentT)Zadd_generation_promptF)r   )r   )model	tokenizerpromptverboseZlogits_processors)r0   r1   r2   r3   )r,   mlx_loadr0   r   Zfrom_pretrainedr   randomseedmlx_generateZapply_chat_templater2   r   r   ZGrammarCompilerZTokenizerInfoZfrom_huggingfaceZcompile_builtin_json_grammarprint)argsr0   _r1   Zwith_logits_processorZwithout_logits_processorr   r   r   main0   s:   
r;   __main__)__doc__r(   Zmlx.corecorer   Zmlx_lm.generater   r7   Zmlx_lm.utilsr   r4   Ztransformersr   r   Zxgrammar.kernelsr   r   r,   r;   r    r   r   r   r   <module>   s    
 
