o
    
۾iF                     @   s~   d dl Z d dlZd dlZd dlmZmZmZ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eG dd dZdS )	    N)MISSING	dataclassfieldfields)Literal)
LoRAConfig)init_logger)TensorizerConfigc                
   @   s  e Zd ZU dZeed< eed< ee eB ed< eddZ	e
d ed< eddZee dB ed	< ed
dZeed< ed
dZeed< eddZeed< ed
dZedB ed< dee fddZdd Zededd fddZe	d dededB dedB dd fddZdeddfddZdS )!
PEFTHelperz
    A helper class for PEFT configurations, specifically designed for LoRA.
    This class handles configuration validation, compatibility checks for
    various LoRA implementations.
    r
lora_alphatarget_modulesnone)defaultbiasNmodules_to_saveF
use_rslorause_dorag      ?vllm_lora_scaling_factorvllm_max_position_embeddingsreturnc                 C   s(   g }| j r
|d | jr|d |S )zC
        Check if there are any unsupported LoRA features.
        z.vLLM only supports modules_to_save being None.zvLLM does not yet support DoRA.)r   appendr   )self	error_msg r   I/home/ubuntu/.local/lib/python3.10/site-packages/vllm/lora/peft_helper.py_validate_features*   s   

zPEFTHelper._validate_featuresc                 C   s:   | j rtd | jt| j | _d S | j| j | _d S )Nz)Loading LoRA weights trained with rsLoRA.)r   logger	info_oncer   mathsqrtr   r   )r   r   r   r   __post_init__5   s   
zPEFTHelper.__post_init__config_dictc                    sj   dd t | D  dd   D }|t|  }|r#td|  fdd| D }| di |S )Nc                 S   s   i | ]}|j |qS r   )name).0fr   r   r   
<dictcomp>?   s    z(PEFTHelper.from_dict.<locals>.<dictcomp>c                 S   s(   h | ]\}}|j tu r|jtu r|qS r   )r   r   default_factory)r$   r#   r%   r   r   r   	<setcomp>A   s
    z'PEFTHelper.from_dict.<locals>.<setcomp>z'Missing required configuration fields: c                    s   i | ]\}}| v r||qS r   r   )r$   kvclass_fieldsr   r   r&   M   s    r   )r   itemssetkeys
ValueError)clsr"   required_fieldsmissing_fieldsfiltered_dictr   r+   r   	from_dict<   s   zPEFTHelper.from_dict	lora_pathmax_position_embeddingstensorizer_config_dictc           
      C   s   t j|d}|rJtdi |}| }ddlm} t j|jd}||fddi|j}t	
|}	W d    n1 s=w   Y  td|j nt|}t	
|}	W d    n1 s^w   Y  ||	d< | |	S )	Nzadapter_config.jsonr   )open_streammoderbz-Successfully deserialized LoRA config from %sr   r   )ospathjoinr	   _construct_tensorizer_argstensorizer.stream_ior9   tensorizer_dirstream_kwargsjsonloadr   infoopenr5   )
r1   r6   r7   r8   lora_config_pathtensorizer_configtensorizer_argsr9   r%   configr   r   r   from_local_dirP   s6   

zPEFTHelper.from_local_dirlora_configc                 C   s\   |   }| j|jkr|d| j d|j d | jdkr"|d |r,td| dS )zu
        Validates the LoRA configuration settings against application
        constraints and requirements.
        z
LoRA rank z is greater than max_lora_rank .r   zAdapter bias is not supported. N)r   r   max_lora_rankr   r   r0   r>   )r   rL   r   r   r   r   validate_legalr   s   


zPEFTHelper.validate_legal)N)__name__
__module____qualname____doc__int__annotations__liststrr   r   r   r   r   boolr   r   floatr   r   r!   classmethoddictr5   rK   r   rP   r   r   r   r   r
      s6   
 !r
   )rC   r   r<   dataclassesr   r   r   r   typingr   vllm.config.lorar   vllm.loggerr   +vllm.model_executor.model_loader.tensorizerr	   rQ   r   r
   r   r   r   r   <module>   s   