§
    Ý˜ºhƒ  ã                   ó´   — d dl mZ d dlZd dlmZ dej        dedej        fd„Z	 dd	ej        d
ej        dej        dej        deej                 dedefd„Z	dS )é    )ÚOptionalN)ÚnnÚ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         úm/var/www/html/services/rag-service/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ÚscalingÚdropoutc                 ód  — |                      dd ¦  «        }|� |j        ||| j        fi |¤Ž\  }}t          || j        ¦  «        }	t          || j        ¦  «        }
t          j        ||	                     dd¦  «        ¦  «        |z  }|�$|d d …d d …d d …d |	j        d         …f         }||z   }t          j
                             |dt
          j        ¬¦  «                             |j        ¦  «        }t          j        ||
¦  «        }|                     dd¦  «                             ¦   «         }||fS )NÚcacheé   é   éþÿÿÿéÿÿÿÿ)ÚdimÚdtyper	   )ÚpopÚupdateÚ	layer_idxr   Únum_key_value_groupsÚtorchÚmatmulÚ	transposer
   r   Ú
functionalÚsoftmaxÚfloat32Útor#   Ú
contiguous)r   r   r   r   r   r   r   Úkwargsr   Ú
key_statesÚvalue_statesÚattn_weightsÚcausal_maskÚattn_outputs                 r   Úeager_paged_attention_forwardr6      s5  € ð �JŠJ�w Ñ%Ô%€EØÐØ!�U”\ # u¨fÔ.>ÐIÐIÀ&ÐIÐI‰
ˆˆUå˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LØÐ!Ø$ Q Q Q¨¨¨¨1¨1¨1Ð.D°
Ô0@ÀÔ0DÐ.DÐ%DÔEˆØ# kÑ1ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r   )r   )
Útypingr   r(   r   ÚTensorÚintr   ÚModuleÚfloatr6   © r   r   ú<module>r=      sß   ðØ Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð ð	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð& ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ˜Uœ\Ô*ð%ð ð%ð ð%ð %ð %ð %ð %ð %r   