o
    پi]                     @   s(   d dl Z d dlmZ G dd deZdS )    N)_BatchedPenalizerc                   @   sp   e Zd ZdZdefddZdd Zdejfdd	Z	d
ejdejfddZ
dejfddZdddZdddZdS )BatchedFrequencyPenalizerzV
    Frequency penalizer penalizes tokens based on their frequency in the output.
    returnc                 C   s   t dd | j D S )Nc                 s   s    | ]	}|j jd kV  qdS )g        Nsampling_paramsfrequency_penalty.0req r   d/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/sampling/penaltylib/frequency_penalty.py	<genexpr>   s
    

z9BatchedFrequencyPenalizer._is_required.<locals>.<genexpr>)anyorchestratorreqsselfr   r   r   _is_required   s   z&BatchedFrequencyPenalizer._is_requiredc                 C   s\   t jt| j | jjft j| jjd| _t j	dd | j D t j| jjd
d| _d S )N)dtypedevicec                 S   s   g | ]}|j jqS r   r   r   r   r   r   
<listcomp>   s    z6BatchedFrequencyPenalizer._prepare.<locals>.<listcomp>)datar   r      )torchzeroslenr   r   
vocab_sizefloat32r   cumulated_frequency_penaltiestensor
unsqueeze_frequency_penaltiesr   r   r   r   _prepare   s   z"BatchedFrequencyPenalizer._prepare
output_idsc                 C   s   | j jd|d| jd d S )Nr   )dimindexsrc)r   scatter_add_	unsqueezer!   )r   r#   r   r   r   _cumulate_output_tokens#   s
   
z1BatchedFrequencyPenalizer._cumulate_output_tokenslogitsc                 C   s   | | j d S N)sub_r   )r   r*   r   r   r   _apply*   s   z BatchedFrequencyPenalizer._applykeep_indicesc                 C   s   | j | | _ | j| | _d S r+   r!   r   )r   r.   r   r   r   _filter-   s   
z!BatchedFrequencyPenalizer._filtertheirc                 C   s4   t j| j|jgdd| _t j| j|jgdd| _d S )Nr   )r$   )r   catr!   r   )r   r1   r   r   r   _merge3   s   
z BatchedFrequencyPenalizer._mergeNc                 C   s"   dD ]}t | |rt| | qd S )Nr/   )hasattrdelattr)r   namer   r   r   	_teardown<   s
   

z#BatchedFrequencyPenalizer._teardown)r1   r   )r   N)__name__
__module____qualname____doc__boolr   r"   r   Tensorr)   r-   r0   r3   r7   r   r   r   r   r      s    
	r   )r   +sglang.srt.sampling.penaltylib.orchestratorr   r   r   r   r   r   <module>   s    