o
    h&                     @   sd   d Z i ZdZi ZdZi ZdZi ZdZi Z	dZ
dd Zdd	 ZdddZdd ZdddZdd ZdS )z&
Set a few common flags for peft uage
@      g?z+query,value,output.dense,intermediate.dense c                 C   s   | j dtddt d | j dtddt d | j dtddt d | j d	tdd
t d | j dtddt d | j ddddd dS )z1
    Add common default flags to an argparse
    z--lora_rankNzORank of a LoRA approximation.  Default will be %d or a model-specific parameter)typedefaulthelpz--lora_alphazPAlpha of a LoRA approximation.  Default will be %d or a model-specific parameterz--lora_dropoutzUDropout for the LoRA approximation.  Default will be %s or a model-specific parameterz--lora_target_moduleszYComma separated list of LoRA targets.  Default will be '%s' or a model-specific parameterz--lora_modules_to_savez}Comma separated list of modules to save (eg, fully tune) when using LoRA.  Default will be '%s' or a model-specific parameterz
--use_peftF
store_truezFinetune Bert using peft)r   actionr   )	add_argumentintDEFAULT_LORA_RANKDEFAULT_LORA_ALPHAfloatDEFAULT_LORA_DROPOUTstrDEFAULT_LORA_TARGETSDEFAULT_LORA_SAVE)parser r   [/var/www/html/env_mimamsha/lib/python3.10/site-packages/stanza/models/common/peft_config.pyadd_peft_args   s   r   c                 C   sL   |  dd |  dd |  dd |  dd |  dd |  dd dS )z
    Pop all of the peft-related arguments from a given dict

    Useful for making sure a model loaded from disk is recreated with
    the right shapes, for example
    	lora_rankN
lora_alphalora_dropoutlora_target_moduleslora_modules_to_saveuse_peft)pop)argsr   r   r   pop_peft_args!   s   r   Tc                 C   s  t | dsd S | jd u rt| jt| _| jd u r!t| jt| _| j	d u r.t
| jt| _	| jd u r;t| jt| _| j sDg | _n| jd| _| jd u rXt| jt| _| j sag | _n| jd| _|rt | dr| jr| js|d d| _d S d S d S d S d S )N
bert_model,bert_finetunez0--use_peft set.  setting --bert_finetune as wellT)hasattrr   TRANSFORMER_LORA_RANKgetr   r   r   TRANSFORMER_LORA_ALPHAr   r   TRANSFORMER_LORA_DROPOUTr   r   TRANSFORMER_LORA_TARGETSr   stripsplitr   TRANSFORMER_LORA_SAVEr   r   r!   info)r   loggercheck_bert_finetuner   r   r   resolve_peft_args1   s0   









r.   c              	   C   sP   ddl m} |d| d | d  |d| d | d | d | d | d	 d
d}|S )N    )
LoraConfigz/Creating lora adapter with rank %d and alpha %dr   r   Fr   r   r   none)inference_modertarget_modulesr   r   modules_to_savebias)peftr0   debug)r   r,   r0   peft_configr   r   r   build_peft_configQ   s   r:   r   c                 C   s>   ddl m} t||}|| ||d}d| _d|_|| |S )Nr/   )get_peft_modeladapter_nameT)r7   r;   r:   _hf_peft_config_loadedset_adapter)r   r   r,   r=   r;   r9   peftedr   r   r   build_peft_wrapper^   s   

rA   c              
   C   sp   t ||}z
| j|||d W n! ttfy0 } zddlm} || ||d W Y d }~nd }~ww | | | S )N)r=   r9   adapter_state_dictr/   )set_peft_model_state_dictr<   )r:   load_adapter
ValueError	TypeErrorr7   rC   r?   )r   lora_paramsr   r,   r=   r9   _rC   r   r   r   load_peft_wrapperl   s   

rI   N)T)r   )__doc__r#   r   r%   r   r&   r   r'   r   r*   r   r   r   r.   r:   rA   rI   r   r   r   r   <module>   s"    
 
