o
    | i                     @   sD   d dl Z d dlmZ d dlmZ d dlmZmZ G dd deZdS )    N)LogitsProcessor)_calc_banned_ngram_tokens)ListSetc                   @   sB   e Zd ZddededefddZdee d	ejd
ejfddZ	dS )NoRepeatNGramLogitsProcessord   N
ngram_sizewindow_sizewhitelist_token_idsc                 C   s\   t |tr	|dkrtd| t |tr|dkr td| || _|| _|p*t | _d S )Nr   z;`ngram_size` has to be a strictly positive integer, but is z<`window_size` has to be a strictly positive integer, but is )
isinstanceint
ValueErrorr   r	   setr
   )selfr   r	   r
    r   V/home/app/DeepSeek-OCR/DeepSeek-OCR-master/DeepSeek-OCR-vllm/process/ngram_norepeat.py__init__	   s   z%NoRepeatNGramLogitsProcessor.__init__	input_idsscoresreturnc           
      C   s   t || jk r	|S t|| jd  d  }tdt || j }t || j d }t }t||D ]}t|||| j  }|d d |krL||d  q0|| j }|rd|	 }|D ]	}	t
d ||	< qZ|S )N   r   inf)lenr   tuplemaxr	   r   rangeaddr
   clonefloat)
r   r   r   Zcurrent_prefixZsearch_startZ
search_endbanned_tokensingramtokenr   r   r   __call__   s"   
z%NoRepeatNGramLogitsProcessor.__call__)r   N)
__name__
__module____qualname__r   r   r   r   torchFloatTensorr$   r   r   r   r   r      s    "	r   )	r(   transformersr   Z&transformers.generation.logits_processr   typingr   r   r   r   r   r   r   <module>   s
    