
    .`i!                         d dl Z d dlZd dlZd dlmZ d dlmZ d dl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 G d	 d
          ZdS )    N)init_logger)LoRALayerWeights)
PEFTHelper)get_lora_idis_base_embeddding_weightsparse_fine_tuned_lora_name)TensorizerConfig)WeightsMapper)is_pin_memory_availablec                   l   e Zd ZdZdededeeef         ddfdZdedd fdZ	d	ededz  fd
Z
dedefdZe	 	 	 	 ddedeeej        f         dededej        dz  dedz  dedz  dd fd            Zeddddddddedee         dededz  dedej        dz  dedz  dedz  dedz  dd fd            ZdS )	LoRAModelzA LoRA fine-tuned model.lora_model_idranklorasreturnNc                 `    || _         |dk    sJ d| j                      || _        || _        dS )z
        Args:
            lora_model_id: The integer id for the lora model.
            rank: lora rank.
            loras: module name -> weights for lora-replaced layers.

        r   z.a valid lora id should be greater than 0, got N)idr   r   )selfr   r   r   s       h/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/lora/lora_model.py__init__zLoRAModel.__init__   sE      q   FTWFF !   	27


    c                 j    |                      || j        | j                                                  S )z[Return a copy of the object with different ids.

        Will share the underlying tensors.)r   r   )	__class__r   r   copy)r   r   s     r   clonezLoRAModel.clone0   s6     ~~*//##  
 
 	
r   module_namec                 8    | j                             |d          S )z#Get LoRA for a given module by nameN)r   get)r   r   s     r   get_lorazLoRAModel.get_lora:   s    z~~k4000r   	lora_namec                     || j         v S )N)r   )r   r    s     r   check_lora_namezLoRAModel.check_lora_name>   s    DJ&&r   cudatensorspeft_helperdevicedtypemodel_vocab_sizeweights_mapperc                    t          |          dk    ot                      }i }	|                                D ]\  }
}t          |
          rt	          |
|          \  }}||	vrt          j        ||          |	|<   |rd|
v r4|2||j        d         k    r!t          d|j        d          d| d          |	                    ||          |	|         _
        |r*|	|         j
                                        |	|         _
        |	                    ||          |	|         _        |r*|	|         j                                        |	|         _         | ||j        |	          S )	z0Create a LoRAModel from a dictionary of tensors.cpulora_embedding_AN   zThe embedding LoRA size(z;) must be consistent with the base model's vocabulary size(z).)r&   r'   )strr   itemsr   r   r   from_configshapeRuntimeErrortolora_a
pin_memorylora_br)clsr   r$   r%   r&   r'   r(   r)   r5   r   tensor_nametensorr   	is_lora_as                 r   from_lora_tensorszLoRAModel.from_lora_tensorsA   s    [[E)G.E.G.G
-/#*==?? 	W 	WK)+66 %?^& &"K %''%5%A& &k"  W&+55(4(FLO;;&W6<? W WBRW W W   -3IIV5I,Q,Qk") W05k0B0I0T0T0V0VE+&-,2IIV5I,Q,Qk") W05k0B0I0T0T0V0VE+&-s=+-777r   )r   r&   r'   r(   r)   tensorizer_config_dictlora_direxpected_lora_modulesr=   c          	      j   t           j                            d          }
t           j                            d          }t           j                            d          }i }g dt          ffd}|	rmddlm} t          di |	}t           j                            |j        d          }
|                                } ||
fd	|j	        i|j
        } ||           n!t           j                            |
          rlg t          j        |
d
          5 } ||           |                                D ]}|                    |          ||<   	 ddd           n# 1 swxY w Y   nt           j                            |          st           j                            |          rFt           j                            |          r|n|}t!          j        ||d          } ||           nt%           d          |                     |t)                      n||||||          S )a8  Create a LoRAModel from a local checkpoint.

        Args:
            lora_dir: The local path that has lora data.
            expected_lora_modules: Name of modules that are expected to be
                replaced by lora.
            peft_helper: Loaded lora configuration information.
            lora_model_id: LoRA model id. If not given, automatically set by
                a global counter.
            device: Device where the lora model is loaded.
            dtype: dtype of the lora model weights.

        Returns:
            Loaded LoRA Model.
        zadapter_model.safetensorszadapter_model.binzadapter_model.ptmodulesc           	         |                                  D ]}t          |          rd|v rt          |	          \  }}d|v r<|                    d          }||dz   d          }|vr                    |           j|                    dd          d         vr                    |           rt          d d d d	          d S )
N
base_layerz.expertsr-   .zWhile loading z, expected target modules in z but received z6. Please verify that the loaded LoRA module is correct)keysr   r   findappendrsplit
ValueError)
rA   lora_moduler   _
expert_idxexpert_suffixr?   r>   unexpected_modulesr)   s
         r   check_unexpected_moduleszALoRAModel.from_local_checkpoint.<locals>.check_unexpected_modules   s5   &||~~ ; ;-k::   ;..!;K!X!XQ,,!,!1!1*!=!=J$/
Q0@0@$AM$,AAA*11+>>> ''Q//3;PPP&--k:::!  MX M M*?M M%7M M M   r   r   )TensorDeserializerzadapter_model.tensorsr'   pt)	frameworkNT)map_locationweights_onlyz doesn't contain tensors)r   r$   r%   r&   r'   r(   r)    )ospathjoindict
tensorizerrQ   r	   tensorizer_dir_construct_tensorizer_argsr'   deserialization_kwargsisfilesafetensors	safe_openrF   
get_tensortorchloadrJ   r<   r   )r8   r>   r?   r%   r   r&   r'   r(   r)   r=   lora_tensor_pathlora_bin_file_pathlora_pt_file_pathr$   rP   rQ   tensorizer_configtensorizer_argsfmodulelora_file_pathrO   s    ``     `            @r   from_local_checkpointzLoRAModel.from_local_checkpointo   s   : 7<<2MNNW\\(4GHHGLL3EFF+-46	d 	 	 	 	 	 	 	 	 	6 " %	D555555 0 J J3I J J!w||!02I    0JJLLO((  '- "8 G
 %$W----W^^,-- 	D "$&'74HHH ;A((+++ffhh ; ;F&'ll6&:&:GFOO;; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
 W^^.// 		D27>>BS3T3T 		D 7>>"455'""& 
 jfSWXXXG$$W----BBBCCC$$+8+@+---m#-) % 
 
 	
s   ;E''E+.E+)r#   NNN)__name__
__module____qualname____doc__intrZ   r.   r   r   r   r   boolr"   classmethodrc   Tensorr   r'   r
   r<   setrm   rV   r   r   r   r      s7       ""88 8 C))*	8
 
8 8 8 8*
3 
; 
 
 
 
1C 1,<t,C 1 1 1 1' ' ' ' ' '  $('+/3+8 +8+8 c5<'(+8  	+8
 +8 {T!+8 *+8 &,+8 
+8 +8 +8 [+8Z  %)$('+/3.2m
 m
 m
m
  #3xm
  	m
 Tzm
 m
 {T!m
 *m
 &,m
 !%tm
 
m
 m
 m
 [m
 m
 m
r   r   )rW   r`   rc   vllm.loggerr   vllm.lora.lora_weightsr   vllm.lora.peft_helperr   vllm.lora.utilsr   r   r   +vllm.model_executor.model_loader.tensorizerr	    vllm.model_executor.models.utilsr
   vllm.utils.platform_utilsr   rn   loggerr   rV   r   r   <module>r      s   
			      # # # # # # 3 3 3 3 3 3 , , , , , ,         
 I H H H H H : : : : : : = = = = = =	X		E
 E
 E
 E
 E
 E
 E
 E
 E
 E
r   