§
    Ý˜ºh¥  ã                   ó¨  — d dl mZ d dlZddlmZmZ ddlmZ  ej        e	¦  «        Z
 edd¬¦  «        Z ed	d¬¦  «        Z e¦   «         Zd
ej        dedej        fd„Zdeej                 dej        defd„Z	 	 	 ddej        j        dej        dej        dej        deej                 dedee         dee         deej        df         fd„ZdS )é    )ÚOptionalNé   )Úis_torch_xpu_availableÚlogging)Úis_torch_greater_or_equalz2.5T)Ú
accept_devz2.8Ú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         úp/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/integrations/sdpa_attention.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ó    Úattention_maskÚkeyc                 ó´   — t           r't          ot          |t          j        j        ¦  «         S t          o#| d u ot          |t          j        j        ¦  «         S )N)Ú_is_torch_xpu_availableÚ#_is_torch_greater_or_equal_than_2_8Ú
isinstanceÚtorchÚfxÚProxyÚ#_is_torch_greater_or_equal_than_2_5)r   r   s     r   Úuse_gqa_in_sdpar"      sT   € õ ð [Ý2ÐZ½:ÀcÍ5Ì8Ì>Ñ;ZÔ;ZÐ7ZÐZÝ.Ðq°>ÀTÐ3IÐqÕR\Ð]`ÕbgÔbjÔbpÑRqÔRqÐNqÐqr   ç        ÚmoduleÚqueryÚvalueÚdropoutÚscalingÚ	is_causalc                 ó  — |                      dd¦  «        s|                      d¦  «        �t                               d¦  «         i }	t          | d¦  «        r?t	          ||¦  «        s+t          || j        ¦  «        }t          || j        ¦  «        }nddi}	|�*|j        dk    r|d d …d d …d d …d |j        d	         …f         }|€&|j        d
         dk    o|d u ot          | dd¦  «        }t          j                             ¦   «         r.t          |t          j        ¦  «        r|                     ¦   «         }t          j        j        j        |||f||||dœ|	¤Ž}
|
                     dd
¦  «                             ¦   «         }
|
d fS )NÚoutput_attentionsFÚ	head_maskz’`sdpa` attention does not support `output_attentions=True` or `head_mask`. Please set your attention to `eager` if you want any of these features.Únum_key_value_groupsÚ
enable_gqaTé   éþÿÿÿr   r   r)   )Ú	attn_maskÚ	dropout_pÚscaler)   )ÚgetÚloggerÚwarning_onceÚhasattrr"   r   r-   Úndimr   Úgetattrr   ÚjitÚ
is_tracingr   ÚTensorÚitemÚnnÚ
functionalÚscaled_dot_product_attentionÚ	transposeÚ
contiguous)r$   r%   r   r&   r   r'   r(   r)   ÚkwargsÚsdpa_kwargsÚattn_outputs              r   Úsdpa_attention_forwardrF   +   sÃ  € ð ‡z‚zÐ% uÑ-Ô-ð 
°·²¸KÑ1HÔ1HÐ1TÝ×ÒðWñ	
ô 	
ð 	
ð €KÝˆvÐ-Ñ.Ô.ð /Ý˜~¨sÑ3Ô3ð 	/Ý˜C Ô!<Ñ=Ô=ˆCÝ˜e VÔ%@ÑAÔAˆEˆEà'¨Ð.ˆKàÐ! nÔ&9¸QÒ&>Ð&>Ø'¨¨¨¨1¨1¨1¨a¨a¨a°°3´9¸R´=°Ð(@ÔAˆð
 Ðð ”K ”N QÒ&Ðh¨>¸TÐ+AÐhÅgÈfÐVaÐcgÑFhÔFhˆ	õ „y×ÒÑÔð %¥*¨Y½¼Ñ"EÔ"Eð %Ø—N’NÑ$Ô$ˆ	å”(Ô%ÔBØØØð	ð !ØØØð	ð 	ð ð	ð 	€Kð ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜ÐÐr   )r#   NN)Útypingr   r   Úutilsr   r   Úutils.import_utilsr   Ú
get_loggerÚ__name__r5   r!   r   r   r<   Úintr   Úboolr"   r>   ÚModuleÚfloatÚtuplerF   © r   r   ú<module>rR      sµ  ðØ Ð Ð Ð Ð Ð à €€€à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø :Ð :Ð :Ð :Ð :Ð :ð 
ˆÔ	˜HÑ	%Ô	%€ð '@Ð&?ÀÐRVÐ&WÑ&WÔ&WÐ #Ø&?Ð&?ÀÐRVÐ&WÑ&WÔ&WÐ #Ø0Ð0Ñ2Ô2Ð ð	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uðr H¨U¬\Ô$:ð rÀÄð rÐRVð rð rð rð rð( Ø#Ø $ð4ð 4ØŒHŒOð4àŒ<ð4ð 
Œð4ð Œ<ð	4ð
 ˜Uœ\Ô*ð4ð ð4ð �eŒ_ð4ð ˜Œ~ð4ð ˆ5Œ<˜ÐÔð4ð 4ð 4ð 4ð 4ð 4r   