Ë
    Gêñiu	  ã                   ó$  — 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
y)é    Né   )ÚPagedAttentionCacheÚhidden_statesÚn_repÚreturnc                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||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         úf/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/transformers/integrations/sdpa_paged.pyÚ	repeat_kvr      so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTó    ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚdropoutÚscalingc           	      ó|  — |j                  dd «      }|�k|j                  ||| j                  |d   |d   ¬«      \  }}|j                  dd«      j	                  d«      }|j                  dd«      j	                  d«      }t        | d«      r,t        || j                  «      }t        || j                  «      }|}	|j                  «       }|j                  «       }|j                  «       }t        j                  j                  j                  ||||	||d¬	«      }
|
j                  dd
«      j                  «       }
|
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_forwardr4      sG  € ð )/¯
©
°7¸DÓ(A€EØÐà—\‘\ØØØ×&Ñ&Ø˜lÑ+Ø˜}Ñ-ð "ó 
‰
ˆˆUð �m‰m˜A˜qÓ!×+Ñ+¨AÓ.ˆØ—‘  1Ó%×/Ñ/°Ó2ˆô ˆvÐ-Ô.Ü˜˜V×8Ñ8Ó9ˆÜ˜% ×!<Ñ!<Ó=ˆð !€Kð ×ÑÓ€EØ
�.‰.Ó
€CØ×ÑÓ€EÜ—(‘(×%Ñ%×BÑBØØØØØØàð Có 	€Kð ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜ÐÐr   )g        N)r-   Ú$generation.continuous_batching.cacher   ÚTensorÚintr   r.   ÚModuleÚfloatÚtupler4   © r   r   ú<module>r<      s¹   ðÛ å Fð	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð$ Ø ñ0Ø�H‰H�O‰Oð0à�<‰<ð0ð 
�‰ð0ð �<‰<ð	0ð
 —L‘L 4Ñ'ð0ð ð0ð �T‰\ð0ð ˆ5�<‰<˜ÐÑô0r   