o
    
۾i"                     @   s4  d dl mZmZmZmZmZmZmZ d dlZd dl	m
Z
 d dlmZmZ d dlmZ d dlmZ erMd dlmZ d dlmZ d dlmZmZ d d	lmZ n
eZeZeZeZeZeeZed
ejdZedejddZeG dd dee Z de!e" e"B de#fddZ$de!e" e"B de#fddZ%de!e" e"B de#fddZ&ede!e" dee!e   fddZ'ede"dee  fddZ'de!e" e"B dee!e   ee  B fddZ'eG dd de e ee Z(ede!e" dee!e(  fdd Z)ede"dee( fd!d Z)de!e" e"B dee!e(  ee( B fd"d Z)eG d#d$ d$e e ee Z*ede!e" dee!e*  fd%d&Z+ede"dee* fd'd&Z+de!e" e"B dee!e*  ee* B fd(d&Z+ed)e!e
j, d*Z-d+d,d-d.ed/efd0d1Z.de!e" e"B defd2d3Z/de!e" e"B defd4d5Z0d6efd7d6Z1de!e" e"B defd8d9Z2dS ):    )TYPE_CHECKINGAnyClassVarLiteralProtocoloverloadruntime_checkableN)TypeIsTypeVar)init_loggersupports_kw)
VllmConfig)AttnTypeStr)SequencePoolingTypeTokenPoolingType)PoolerT)defaultT_coT)r   	covariantc                   @   sX   e Zd ZdZddededdfddZd	ejdejfd
dZ	d	ejdejde
fddZdS )	VllmModelz.The interface required for all models in vLLM. vllm_configprefixreturnNc                 C      d S N )selfr   r   r   r   ^/home/ubuntu/.local/lib/python3.10/site-packages/vllm/model_executor/models/interfaces_base.py__init__1       zVllmModel.__init__	input_idsc                 C      dS )z&Apply token embeddings to `input_ids`.Nr   )r   r#   r   r   r    embed_input_ids3   s   zVllmModel.embed_input_ids	positionsc                 C   r   r   r   )r   r#   r&   r   r   r    forward7   r"   zVllmModel.forward)r   )__name__
__module____qualname____doc__r   strr!   torchTensorr%   r   r'   r   r   r   r    r   -   s
    r   modelr   c                 C   s   | j }t|dS )Nr   )r!   r   )r/   
model_initr   r   r    _check_vllm_model_init:   s   
r1   c                 C   s(   t | dd }t|std|  dS dS )Nr%   z7The model (%s) is missing the `embed_input_ids` method.FT)getattrcallableloggerwarning)r/   model_embed_input_idsr   r   r    !_check_vllm_model_embed_input_ids?   s   r7   c                    sf   t | dd  t sdS d}t fdd|D }|r-t| tr-t| tjr-t	d| | t
|dkS )Nr'   F)r#   r&   c                 3   s    | ]
}t  |s|V  qd S r   r   ).0kwmodel_forwardr   r    	<genexpr>Q   s    z,_check_vllm_model_forward.<locals>.<genexpr>zNThe model (%s) is missing vLLM-specific keywords from its `forward` method: %sr   )r2   r3   tuple
isinstancetype
issubclassnnModuler4   r5   len)r/   vllm_kwsmissing_kwsr   r:   r    _check_vllm_model_forwardK   s   rF   c                 C   r   r   r   r/   r   r   r    is_vllm_model^      rH   c                 C   r   r   r   rG   r   r   r    rH   b   rI   c                 C   s   t | ot| ot| S r   )r1   r7   rF   rG   r   r   r    rH   f   s
   c                   @   s&   e Zd ZdZdededB fddZdS )VllmModelForTextGenerationz9The interface required for all generative models in vLLM.hidden_statesr   Nc                 C   r$   )zReturn `None` if TP rank > 0.Nr   )r   rK   r   r   r    compute_logitst   s   z)VllmModelForTextGeneration.compute_logits)r(   r)   r*   r+   r   rL   r   r   r   r    rJ   p   s    rJ   c                 C   r   r   r   rG   r   r   r    is_text_generation_model|   s   rM   c                 C   r   r   r   rG   r   r   r    rM      rI   c                 C   s*   t | sdS t| trt| tS t| tS )NF)rH   r>   r?   rJ   rG   r   r   r    rM      s
   


c                   @   sf   e Zd ZU dZdZeed  ed< 	 dZee	 ed< 	 dZ
ee ed< 	 dZee ed	< 	 eed
< dS )VllmModelForPoolingz6The interface required for all pooling models in vLLM.Tis_pooling_modelLASTdefault_seq_pooling_typeALLdefault_tok_pooling_typedecoder	attn_typepoolerN)r(   r)   r*   r+   rO   r   r   __annotations__rQ   r   rS   r   rU   r   r   r   r   r   r    rN      s   
 		
rN   c                 C   r   r   r   rG   r   r   r    rO      rI   rO   c                 C   r   r   r   rG   r   r   r    rO      rI   c                 C   s   t | sdS t| ddS )NFrO   )rH   r2   rG   r   r   r    rO      s   _T)boundrP   rR   seq_pooling_typetok_pooling_typer[   r\   c                    s   dt dt f fdd}|S )z>Decorator to set `VllmModelForPooling.default_*_pooling_type`.r/   r   c                    s    | _ | _| S r   )rQ   rS   rG   rZ   r   r    func   s   z"default_pooling_type.<locals>.funcrX   )r[   r\   r]   r   rZ   r    default_pooling_type   s   r_   c                 C      t | ddS )NrQ   rP   r2   rG   r   r   r    get_default_seq_pooling_type      rb   c                 C   r`   )NrS   rR   ra   rG   r   r   r    get_default_tok_pooling_type   rc   rd   rU   c                    s   dt dt f fdd}|S )z1Decorator to set `VllmModelForPooling.attn_type`.r/   r   c                    s
    | _ | S r   rU   rG   re   r   r    r]      s   zattn_type.<locals>.funcr^   )rU   r]   r   re   r    rU      s   c                 C   r`   )NrU   rT   ra   rG   r   r   r    get_attn_type   s   rf   )3typingr   r   r   r   r   r   r   r-   torch.nnrA   typing_extensionsr	   r
   vllm.loggerr   vllm.utils.func_utilsr   vllm.configr   vllm.config.modelr   vllm.config.poolerr   r   !vllm.model_executor.layers.poolerr   r(   r4   r.   r   r   r   r?   objectboolr1   r7   rF   rH   rJ   rM   rN   rO   rB   rX   r_   rb   rd   rU   rf   r   r   r   r    <module>   s   $
 





/ 

	





