
    .`iF                         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                      ZdS )	    N)MISSING	dataclassfieldfields)Literal)
LoRAConfig)init_logger)TensorizerConfigc            
          e Zd ZU dZeed<   eed<   ee         ez  ed<    ed          Z	e
d         ed<    ed          Zee         dz  ed	<    ed
          Zeed<    ed
          Zeed<    ed          Zeed<    ed
          Zedz  ed<   dee         fdZd Zededd fd            Ze	 ddededz  dedz  dd fd            Zdeddf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                 z    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_msgs     i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/lora/peft_helper.py_validate_featureszPEFTHelper._validate_features*   sP     	 	OMNNN= 	@>???    c                     | j         rBt                              d           | j        t	          j        | j                  z  | _        d S | j        | j        z  | _        d S )Nz)Loading LoRA weights trained with rsLoRA.)r   logger	info_oncer   mathsqrtr   r   )r   s    r   __post_init__zPEFTHelper.__post_init__5   sZ    ? 	EHIII,0Odi>O>O,OD))),0Odf,DD)))r   config_dictc                 2   d t          |           D             d                                 D             }|t          |                                          z
  }|rt	          d|           fd|                                D             } | di |S )Nc                     i | ]
}|j         |S  )name).0fs     r   
<dictcomp>z(PEFTHelper.from_dict.<locals>.<dictcomp>?   s    777a777r   c                 P    h | ]#\  }}|j         t          u |j        t          u !|$S r)   )r   r   default_factory)r+   r*   r,   s      r   	<setcomp>z'PEFTHelper.from_dict.<locals>.<setcomp>A   s@     
 
 
ayG##(9W(D(D (D(D(Dr   z'Missing required configuration fields: c                 $    i | ]\  }}|v 	||S r)   r)   )r+   kvclass_fieldss      r   r-   z(PEFTHelper.from_dict.<locals>.<dictcomp>M   s)    SSS$!QlARARAARARARr   r)   )r   itemssetkeys
ValueError)clsr&   required_fieldsmissing_fieldsfiltered_dictr4   s        @r   	from_dictzPEFTHelper.from_dict<   s     876#;;777
 
'--//
 
 
 )3{/?/?/A/A+B+BB 	YW~WWXXX TSSS+*;*;*=*=SSSs##]###r   	lora_pathmax_position_embeddingstensorizer_config_dictc                 @   t           j                            |d          }|rt          di |}|                                }ddlm} t           j                            |j        d          } ||fddi|j        5 }t          j
        |          }	d d d            n# 1 swxY w Y   t                              d|j                   n;t          |          5 }t          j
        |          }	d d d            n# 1 swxY 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_iorB   tensorizer_dirstream_kwargsjsonloadr!   infoopenr=   )
r9   r>   r?   r@   lora_config_pathtensorizer_configtensorizer_argsrB   r,   configs
             r   from_local_dirzPEFTHelper.from_local_dirP   s    7<<	3HII! 	& 0 J J3I J J/JJLLO888888!w||!02G      '+/>/L  &1& & & & & & & & & & & & & & &
 KK?!0    &'' &11& & & & & & & & & & & & & & & 2I-.}}V$$$s$   >BB#&B#C;;C?C?lora_configc                 $   |                                  }| 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   r8   rG   )r   rU   r   s      r   validate_legalzPEFTHelper.validate_legalr   s    
 ++--	6K---1TV 1 1-1 1 1   9=>>> 	7 3 35666	7 	7r   )N)__name__
__module____qualname____doc__int__annotations__liststrr   r   r   r   r   boolr   r   floatr   r   r%   classmethoddictr=   rT   r   rZ   r)   r   r   r   r      s          FFFOOOIO###!E&111D'&/111(-d(;(;(;OT#Y%;;;uU+++J+++U5)))Hd)))&+eC&8&8&8e888/4uU/C/C/C #*CCC	DI 	 	 	 	E E E $D $\ $ $ $ [$& 
 /3	% %% "%t% !%t	%
 
% % % [%B7* 7 7 7 7 7 7 7r   r   )rL   r#   rE   dataclassesr   r   r   r   typingr   vllm.config.lorar   vllm.loggerr	   +vllm.model_executor.model_loader.tensorizerr
   r[   r!   r   r)   r   r   <module>rl      s      				 9 9 9 9 9 9 9 9 9 9 9 9       ' ' ' ' ' ' # # # # # # H H H H H H	X		 l7 l7 l7 l7 l7 l7 l7 l7 l7 l7r   