§
    ‚Štj  ã                   ó¦   — d dl Z d dl mZ ddlmZ de j        dede j        fd„Zd	ej        d
e j        de j        de j        de j        dz  defd„Z	dS )é    N)Únné   )ÚPagedAttentionCacheÚhidden_statesÚn_repÚreturnc                 ó¸   — | j         \  }}}}|dk    r| S | dd…dd…ddd…dd…f                              |||||¦  «        } |                      |||z  ||¦  «        S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    é   N)ÚshapeÚexpandÚreshape)r   r   ÚbatchÚnum_key_value_headsÚslenÚhead_dims         úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/integrations/eager_paged.pyÚ	repeat_kvr      s„   € ð
 2?Ô1DÑ.€EÐ  hØ�‚z€zØÐØ! ! ! ! Q Q Q¨¨a¨a¨a°°°Ð"2Ô3×:Ò:¸5ÐBUÐW\Ð^bÐdlÑmÔm€MØ× Ò  Ð(;¸eÑ(CÀTÈ8ÑTÔTÐTó    ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingc                 óR  — |                      dd ¦  «        }|�€|                     ||| j        |d         |d         ¬¦  «        \  }}|                     dd¦  «                             d¦  «        }|                     dd¦  «                             d¦  «        }t          | d¦  «        r*t          || j        ¦  «        }t          || j        ¦  «        }t          |t          ¦  «        r&t          | dd¦  «        }|dk    s|€d	nd
}	||	         }
n|}
t          j        ||                     dd¦  «        ¦  «        |z  }|
�||
z   }t          | d¦  «        rÑ| j                             dddd¦  «                             |j        d         d|j        d         d¦  «        }t          j        ||gd¬¦  «        }||                     dd¬¦  «        j        z
  }t(          j                             |dt          j        ¬¦  «                             |j        ¦  «        }|dd d…f         }nDt(          j                             |dt          j        ¬¦  «                             |j        ¦  «        }t          j        ||¦  «        }|                     dd¦  «                             ¦   «         }||fS )NÚcacheÚ
read_indexÚwrite_index)Ú
key_statesÚvalue_statesÚ	layer_idxr   r   r   r
   Únum_key_value_groupsÚsliding_windowÚfull_attentionÚsliding_attentionr   é   Úsinkséÿÿÿÿéþÿÿÿ)ÚdimT)r*   Úkeepdim)r*   Údtype.)ÚpopÚupdater!   Ú	transposeÚ	unsqueezeÚhasattrr   r"   Ú
isinstanceÚdictÚgetattrÚtorchÚmatmulr'   r   r   r   ÚcatÚmaxÚvaluesr   Ú
functionalÚsoftmaxÚfloat32Útor,   Ú
contiguous)r   r   r   r   r   r   Úkwargsr   r#   Ú
layer_typeÚcausal_maskÚattn_weightsr'   Úattn_outputs                 r   Úeager_paged_attention_forwardrD      s”  € ð )/¯
ª
°7¸DÑ(AÔ(A€EØÐà—\’\ØØØÔ&Ø˜lÔ+Ø˜}Ô-ð "ñ 
ô 
‰
ˆˆUð �mŠm˜A˜qÑ!Ô!×+Ò+¨AÑ.Ô.ˆØ—’  1Ñ%Ô%×/Ò/°Ñ2Ô2ˆõ ˆvÐ-Ñ.Ô.ð >Ý˜˜VÔ8Ñ9Ô9ˆÝ˜% Ô!<Ñ=Ô=ˆõ �.¥$Ñ'Ô'ð %Ý  Ð)9¸1Ñ=Ô=ˆØ)7¸1Ò)<Ð)<ÀÐ@VÐ%Ð%Ð\oˆ
Ø$ ZÔ0ˆˆà$ˆå”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LØÐØ# kÑ1ˆõ ˆv�wÑÔð 
hà”×$Ò$ Q¨¨A¨qÑ1Ô1×8Ò8¸¼ÀQ¼ÈÈUÌ[ÐY[Ì_Ð^`ÑaÔaˆÝ”y ,°Ð!6¸BÐ?Ñ?Ô?ˆà# l×&6Ò&6¸2ÀtÐ&6Ñ&LÔ&LÔ&SÑSˆå”}×,Ò,¨\¸rÍÌÐ,ÑWÔW×ZÒZÐ[`Ô[fÑgÔgˆØ# C¨¨"¨ HÔ-ˆˆå”}×,Ò,¨\¸rÍÌÐ,ÑWÔW×ZÒZÐ[`Ô[fÑgÔgˆå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r   )
r5   r   Ú$generation.continuous_batching.cacher   ÚTensorÚintr   ÚModuleÚfloatrD   © r   r   ú<module>rK      sË   ðØ €€€Ø Ð Ð Ð Ð Ð à FÐ FÐ FÐ FÐ FÐ Fð	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð8%ØŒIð8%àŒ<ð8%ð 
Œð8%ð Œ<ð	8%ð
 ”L 4Ñ'ð8%ð ð8%ð 8%ð 8%ð 8%ð 8%ð 8%r   