§
    ‚Štju	  ã                   óÒ   — d dl Z ddlmZ de j        dede j        fd„Z	 	 dd	e j        j        d
e j        de j        de j        de j        dz  dededz  de	e j        df         fd„Z
dS )é    Né   )Ú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         úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/integrations/sdpa_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ÚdropoutÚscalingc           	      óÐ  — |                      dd ¦  «        }|�€|                     ||| j        |d         |d         ¬¦  «        \  }}|                     dd¦  «                             d¦  «        }|                     dd¦  «                             d¦  «        }t          | d¦  «        r*t          || j        ¦  «        }t          || j        ¦  «        }|}	|                     ¦   «         }|                     ¦   «         }|                     ¦   «         }t          j
        j                             ||||	||d¬	¦  «        }
|
                     dd
¦  «                             ¦   «         }
|
d fS )NÚcacheÚ
read_indexÚwrite_index)Ú
key_statesÚvalue_statesÚ	layer_idxr   r   r   r	   Únum_key_value_groupsF)Ú	attn_maskÚ	dropout_pÚscaleÚ	is_causalr   )ÚpopÚupdater"   Ú	transposeÚ	unsqueezeÚhasattrr   r#   Ú
contiguousÚtorchÚnnÚ
functionalÚscaled_dot_product_attention)r   r   r   r   r   r   r   Úkwargsr   Úcausal_maskÚattn_outputs              r   Úsdpa_attention_paged_forwardr5      so  € ð )/¯
ª
°7¸DÑ(AÔ(A€EØÐà—\’\ØØØÔ&Ø˜lÔ+Ø˜}Ô-ð "ñ 
ô 
‰
ˆˆUð �mŠm˜A˜qÑ!Ô!×+Ò+¨AÑ.Ô.ˆØ—’  1Ñ%Ô%×/Ò/°Ñ2Ô2ˆõ ˆvÐ-Ñ.Ô.ð >Ý˜˜VÔ8Ñ9Ô9ˆÝ˜% Ô!<Ñ=Ô=ˆð !€Kð ×ÒÑÔ€EØ
�.Š.Ñ
Ô
€CØ×ÒÑÔ€EÝ”(Ô%×BÒBØØØØØØàð Cñ 	ô 	€Kð ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜ÐÐr   )r   N)r.   Ú$generation.continuous_batching.cacher   ÚTensorÚintr   r/   ÚModuleÚfloatÚtupler5   © r   r   ú<module>r=      sì   ðØ €€€à FÐ FÐ FÐ FÐ FÐ Fð	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð$ Ø ð0ð 0ØŒHŒOð0àŒ<ð0ð 
Œð0ð Œ<ð	0ð
 ”L 4Ñ'ð0ð ð0ð �T‰\ð0ð ˆ5Œ<˜ÐÔð0ð 0ð 0ð 0ð 0ð 0r   