o
    iX                     @   sx   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 d dlmZ eeZG dd	 d	eZdS )
    N)override)
VllmConfig)init_logger)	get_model)SpecDecodeBaseProposer)"create_vllm_config_for_draft_modelc                       s   e Zd Z	ddedejf fddZdd Zdd	 Ze	d
e
jfddZe	de
jd
dfddZe	de
jd
dfddZ  ZS )DraftModelProposerNvllm_configdevicec                    s(   t  j||d|d |   |   d S )NF)r	   r
   pass_hidden_states_to_modelrunner)super__init___raise_if_vocab_size_mismatch_raise_if_draft_tp_mismatch)selfr	   r
   r   	__class__ U/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/v1/spec_decode/draft_model.pyr      s   zDraftModelProposer.__init__c                 C   s   | j   d S N)speculative_config&verify_equal_vocab_size_if_draft_model)r   r   r   r   r   !   s   z0DraftModelProposer._raise_if_vocab_size_mismatchc                 C   s8   | j }|jj}|jj}||krtd| d| dd S )NzYCurrently, 'draft_tensor_parallel_size' and 'tensor_parallel_size' must be the same. Got z and zE. Please pass 'draft_tensor_parallel_size' in the speculative_config.)r   target_parallel_configtensor_parallel_sizedraft_parallel_config
ValueError)r   spec_cfgtgt_tpdraft_tpr   r   r   r   $   s   z.DraftModelProposer._raise_if_draft_tp_mismatchreturnc                 C   sP   ddl m} t| j}|d t|dd}W d    |S 1 s!w   Y  |S )Nr   )set_model_tagdraft_model)r	   prefix)vllm.compilation.backendsr!   r   r	   r   )r   r!   temp_vllm_configmodelr   r   r   
_get_model5   s   


zDraftModelProposer._get_modeltarget_language_modelc                 C      d S r   r   r   r(   r   r   r   _maybe_share_embeddingsC      z*DraftModelProposer._maybe_share_embeddingsc                 C   r)   r   r   r*   r   r   r   _maybe_share_lm_headH   r,   z'DraftModelProposer._maybe_share_lm_headr   )__name__
__module____qualname__r   torchr
   r   r   r   r   nnModuler'   r+   r-   __classcell__r   r   r   r   r      s    r   )r1   torch.nnr2   typing_extensionsr   vllm.configr   vllm.loggerr    vllm.model_executor.model_loaderr   vllm.v1.spec_decode.eagler   vllm.v1.spec_decode.utilsr   r.   loggerr   r   r   r   r   <module>   s   