o
    )i                     @   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	m
Z
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OptionalUnion)
LoRAConfig)init_logger)TensorizerConfigc                
   @   s  e Zd ZU dZeed< eed< eee ef ed< e	ddZ
ed ed< e	d	dZeee  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e 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e dee 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_alphaZtarget_modulesnone)default)r   allZ	lora_only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   a/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   loggerZ	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Zclass_fieldsr   r   r'   N   s    r   )r   itemssetkeys
ValueError)clsr#   Zrequired_fieldsZmissing_fieldsZ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   Z_construct_tensorizer_argsZtensorizer.stream_ior6   Ztensorizer_dirZstream_kwargsjsonloadr   infoopenr2   )
r1   r3   r4   r5   Zlora_config_pathZtensorizer_configZtensorizer_argsr6   r&   configr   r   r   from_local_dirT   s0   


zPEFTHelper.from_local_dirlora_configc                 C   sb   |   }| j|jkr|d| j d|j d | jdkr%|js%|d |r/td| dS )zv
        Validates the LoRA configuration settings against application 
        constraints and requirements.
        z
LoRA rank z is greater than max_lora_rank .r   z1Adapter bias cannot be used without bias_enabled. N)r   r   Zmax_lora_rankr   r   Zbias_enabledr0   r;   )r   rB   r   r   r   r   validate_legalq   s   
zPEFTHelper.validate_legal)N)__name__
__module____qualname____doc__int__annotations__r   liststrr   r   r   r   r   r   boolr   r   floatr   r   r"   classmethoddictr2   rA   r	   rE   r   r   r   r   r      s6   
 r   )r<   r    r9   dataclassesr   r   r   r   typingr   r   r   Zvllm.configr	   Zvllm.loggerr
   Z+vllm.model_executor.model_loader.tensorizerr   rF   r   r   r   r   r   r   <module>   s   