o
    )i                     @   sj   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	m
Z
 d dlmZ eeZG dd dZdS )	    N)
VllmConfig)set_forward_context)init_logger)	get_model)SamplingMetadatac                   @   sl   e Zd ZdZdedejfddZdejde	dejfd	d
Z
dejddfddZe deddfddZdS )MedusaProposerz>
    Medusa proposer class for generating token sequences
    vllm_configdevicec                 C   s2   || _ || _|jj| _|jj | _|j	j
| _
d S )N)r   r	   Zscheduler_configZmax_num_batched_tokensmax_num_tokensspeculative_configdraft_model_configZget_hidden_sizehidden_sizemodel_configdtype)selfr   r	    r   f/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/v1/spec_decode/medusa.py__init__   s   zMedusaProposer.__init__target_hidden_statessampling_metadatareturnc                 C   s8   |  |}| j |d }dd |D }dd t| D S )Nc                 S   s   g | ]
}|j d d qS ))dim)Zargmaxtolist).0Zlogitr   r   r   
<listcomp>/   s    z*MedusaProposer.propose.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   )list)r   rowr   r   r   r   0   s    )modelZcompute_logitszip)r   r   r   blocksZlogitsZdraft_tokensr   r   r   propose%   s   
zMedusaProposer.proposetarget_modelNc                 C   sP   ddl m} |d t| j| jjjd| _W d    d S 1 s!w   Y  d S )Nr   )set_model_tagZmedusa_head)r   r   )Zvllm.compilation.backendsr#   r   r   r   r   r   )r   r"   r#   r   r   r   
load_model2   s   

"zMedusaProposer.load_model
num_tokensc                 C   s\   t j| j| jf| j| jd}td | j|d | | W d    d S 1 s'w   Y  d S )N)r   r	   )r%   )	torchZzerosr
   r   r   r	   r   r   r   )r   r%   Zhidden_statesr   r   r   	dummy_run9   s   "zMedusaProposer.dummy_run)__name__
__module____qualname____doc__r   r&   r	   r   ZTensorr   r!   nnModuler$   Zinference_modeintr'   r   r   r   r   r      s"    

r   )r&   Ztorch.nnr,   Zvllm.configr   Zvllm.forward_contextr   Zvllm.loggerr   Z vllm.model_executor.model_loaderr   Zvllm.v1.sample.metadatar   r(   loggerr   r   r   r   r   <module>   s   