
    .`i                     |    d dl mZ d dlmZ d dlZd dlZd dlmZ d dl	m
Z
  G d d          Z G d d	e          ZdS )
    )Sequence)OptionalN)
PEFTHelper)is_pin_memory_availablec                   &   e Zd ZdZ	 ddedededej        dej        dedz  d	dfd
Z	ddZ
ed	efd            Zed	efd            Zed	efd            Zededed	d fd            Zedededededej        dej        j        d	d fd            ZdS )LoRALayerWeightsz;LoRA weights for a layer composed of two low rank matrixes.Nmodule_namerank
lora_alphalora_alora_bscalingreturnc                     || _         || _        || _        || _        || _        || j        | j        z  | _        d S || _        d S Nr	   r
   r   r   r   r   )selfr	   r
   r   r   r   r   s          j/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/lora/lora_weights.py__init__zLoRALayerWeights.__init__   sL     '	$??TY6DLLL"DLLL    c                 X    | j         dk    r| S | xj        | j         z  c_        d| _         | S z5Optimize the LoRA by merging the scaling into lora_b.   )r   r   r   s    r   optimizezLoRALayerWeights.optimize%   s2    <1Kt|#r   c                 &    | j         j        d         S Nr   )r   shaper   s    r   	input_dimzLoRALayerWeights.input_dim-       { ##r   c                 &    | j         j        d         S )Nr   )r   r   r   s    r   
output_dimzLoRALayerWeights.output_dim1   r    r   c                     dS )NF r   s    r   	is_packedzLoRALayerWeights.is_packed5   s    ur   peft_helperc                 @     | ||j         |j        d d |j                  S r   )rr   vllm_lora_scaling_factor)clsr	   r&   s      r   from_configzLoRALayerWeights.from_config9   s2     sM"0
 
 	
r   r   r"   dtypedevicec                     t          |          dk    ot                      }t          j        ||g|||          }t          j        ||g|||          }	 | ||d||	          S )Ncpu)r,   r-   
pin_memoryr   )r
   r   r   r   )strr   torchzeros)
r*   r	   r   r"   r
   r,   r-   r0   r   r   s
             r   create_dummy_lora_weightsz*LoRALayerWeights.create_dummy_lora_weightsI   s     [[E)G.E.G.G
9U6j
 
 
 eFz
 
 
 s
 
 
 	
r   r   )r   r   )__name__
__module____qualname____doc__r1   intr2   Tensorfloatr   r   propertyr   r"   boolr%   classmethodr   r+   r,   typesDevicer4   r$   r   r   r   r      s       EE !%# ## # 	#
 # # # 
# # # #(    $3 $ $ $ X$ $C $ $ $ X$ 4    X 

  
 
	
 
 
 [
 

 
 	

 
 {
 "
 

 
 
 [
 
 
r   r   c                   x    e Zd ZdZ	 ddededeedz           deej        dz           deej        dz           dee	         dz  d	df fd
Z
edeed                  d	d fd            Ze	 ddeed                  deded	d fd            ZddZed	efd            Zed	efd            Zed	efd            Z xZS )PackedLoRALayerWeightsz+LoRA used for packed layers (eg. qkv_proj).Nr	   r
   lora_alphasr   r   r   r   c                      t                                          ||d|||           | _        | fd j        D              _        d S d S )Nr   r   c                 $    g | ]}|j         z  S r$   )r
   ).0r   r   s     r   
<listcomp>z3PackedLoRALayerWeights.__init__.<locals>.<listcomp>z   s0        TY&  r   )superr   rC   r   )r   r	   r
   rC   r   r   r   	__class__s   `      r   r   zPackedLoRALayerWeights.__init__g   s     	# 	 	
 	
 	
 '?   "&"2  DLLL ?r   lorasr   c           	          t          d |D                       }|D ]}||                                 |j        }|j        } | ||d |D             d |D             d |D             d |D                       }|S )Pack a list of LoRAs into a single LoRA.

        If LoRA is None, it signifies that the submodule does not have a LoRA.
        c              3      K   | ]}||V  	d S r   r$   rF   loras     r   	<genexpr>z.PackedLoRALayerWeights.pack.<locals>.<genexpr>   '      EE4D4D$4D4D4D4DEEr   Nc                 $    g | ]}||j         nd S r   )r   rN   s     r   rG   z/PackedLoRALayerWeights.pack.<locals>.<listcomp>   s#    MMMt 0T__dMMMr   c                 $    g | ]}||j         nd S r   )r   rN   s     r   rG   z/PackedLoRALayerWeights.pack.<locals>.<listcomp>   #    III4D,T[[$IIIr   c                 $    g | ]}||j         nd S r   )r   rN   s     r   rG   z/PackedLoRALayerWeights.pack.<locals>.<listcomp>   rT   r   c                     g | ]}|dnd 	S r   r$   rN   s     r   rG   z/PackedLoRALayerWeights.pack.<locals>.<listcomp>   s1        %4  r   r   )nextr   r
   r	   )r*   rJ   
first_lorarO   r
   r	   objs          r   packzPackedLoRALayerWeights.pack   s     EE5EEEEE
 	 	D|MMOOOO ,cMMuMMMII5IIIII5III !  

 

 

 
r   Fis_non_gated_moec           
         t          d |D                       }|J |j        }|j        }t          |          dz  dk    sJ g }g }g }	g }
g }g }t	          t          |          dz            D ]}||dz           }||dz  dz            }||dz  dz            }||r|}|J |J |J |                    |j                   |                    |j                   |	                    |j                   |
                    |j                   |                    |j                   |                    |j                   t          j	        |d          }t          j	        |d          }t          j	        |
d          }t          j	        |d          }||z  }|}|r|}|}d}n,t          j	        |	d          }t          j	        |d          } | |||||g|||g|||g|||g	          }|S )
rL   c              3      K   | ]}||V  	d S r   r$   rN   s     r   rP   z2PackedLoRALayerWeights.pack_moe.<locals>.<genexpr>   rQ   r   N   r   r      )dimg      ?rW   )
rX   r
   r   lenrangeappendr   r   r2   stack)r*   rJ   r	   r\   rY   r
   r   w1_lora_a_lstw2_lora_a_lstw3_lora_a_lstw1_lora_b_lstw2_lora_b_lstw3_lora_b_lsteidw1_loraw2_loraw3_lora	w1_lora_a	w2_lora_a	w1_lora_b	w2_lora_br   last_scaling	w3_lora_a	w3_lora_brZ   s                             r   pack_moezPackedLoRALayerWeights.pack_moe   ss    EE5EEEEE
%%%*
5zzA~""""Uq)) 	1 	1CC!GnGC!GaK(GC!GaK(G #3!&&&&&&&&&  000  000  000  000  000  0000K1555	K1555	K1555	K1555	 t# 
	: "I!I LLMq999IMq999IcZ0	9-	9-g|4
 
 
 
r   c                     t          t          | j                            D ]K}| j        |         dk    s| j        |         !| j        |xx         | j        |         z  cc<   d| j        |<   L| S r   )rc   rb   r   r   )r   is     r   r   zPackedLoRALayerWeights.optimize   sr    s4;''(( 	  	 A|A!##t{1~'=KNNNdl1o-NNNDLOOr   c                     t                      r   NotImplementedErrorr   s    r   r   z PackedLoRALayerWeights.input_dim       !###r   c                     t                      r   r{   r   s    r   r"   z!PackedLoRALayerWeights.output_dim   r}   r   c                     dS )NTr$   r   s    r   r%   z PackedLoRALayerWeights.is_packed   s    tr   r   )F)r   rB   )r5   r6   r7   r8   r1   r9   listr2   r:   r;   r   r>   GenericSequencer   r[   r=   rw   r   r<   r   r"   r%   __classcell__)rI   s   @r   rB   rB   d   s       55 '+   #*%	
 U\D() U\D() et# 
     0 #H-?$@A	!   [6 
 "'	I Ix(:;<I I 	I
 
"I I I [IV    $3 $ $ $ X$ $C $ $ $ X$ 4    X    r   rB   )collections.abcr   r   typingr   r2   torch.typesvllm.lora.peft_helperr   vllm.utils.platform_utilsr   r   rB   r$   r   r   <module>r      s    8 7 7 7 7 7            , , , , , , = = = = = =S
 S
 S
 S
 S
 S
 S
 S
lV V V V V- V V V V Vr   