§
    Ý˜ºh5  ã                   ó*  — 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¦   «         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         deej        df         fd„ZdS )é    )ÚOptionalNé   )Ú_flash_attention_forwardÚ!flash_attn_supports_top_left_mask)Úloggingç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚdropoutÚscalingÚsliding_windowÚsoftcapÚreturnc	                 óv  — |	                      dd¦  «        s|	                      d¦  «        �t                               d¦  «         |j        d         }
t	          d„ |j        D ¦   «         ¦  «        rt          d¦  «        ‚|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }d }|j        t          j	        k    r~t          j
        ¦   «         rt          j        ¦   «         }nWt          | j        d	¦  «        r| j        j        }n5t          d
„ |                      ¦   «         D ¦   «         ¦  «        j        j        }|	                     dd ¦  «        }|€| j        }t)          ||||f|
|||||t*          || j        j        t          | d¦  «        r| j        nd dœ
|	¤Ž}|d fS )NÚoutput_attentionsFÚ	head_maskz•`flash_attention_2` does not support `output_attentions=True` or `head_mask`. Please set your attention to `eager` if you want any of these features.r   c              3   ó"   K  — | ]
}|d k    V — ŒdS )r   N© )Ú.0Údims     úq/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/integrations/flash_attention.pyú	<genexpr>z*flash_attention_forward.<locals>.<genexpr>#   s&   è è € Ð
+Ð
+˜ˆ3�!Š8Ð
+Ð
+Ð
+Ð
+Ð
+Ð
+ó    z•Tensor query has shape  with a zero dimension.
FlashAttention does not support inputs with dim=0.
Please check your input shapes or use SDPA instead.é   Ú_pre_quantization_dtypec              3   óX   K  — | ]%}t          |t          j        j        ¦  «        ¯!|V — Œ&d S )N)Ú
isinstanceÚtorchÚnnÚLinear)r   Úlayers     r   r   z*flash_attention_forward.<locals>.<genexpr>;   s9   è è € ÐjÐj¨%ÅzÐRWÕY^ÔYaÔYhÑGiÔGiÐj ÐjÐjÐjÐjÐjÐjr   Ú	is_causalÚ	layer_idx)
Úquery_lengthr%   r   Úsoftmax_scaler   r   Úuse_top_left_maskÚtarget_dtypeÚattn_implementationr&   )ÚgetÚloggerÚwarning_onceÚshapeÚanyÚ
ValueErrorÚ	transposeÚdtyper!   Úfloat32Úis_autocast_enabledÚget_autocast_gpu_dtypeÚhasattrÚconfigr   ÚnextÚmodulesÚweightÚpopr%   r   Ú_use_top_left_maskÚ_attn_implementationr&   )r	   r
   r   r   r   r   r   r   r   ÚkwargsÚseq_lenr*   r%   Úattn_outputs                 r   Úflash_attention_forwardrB      sì  € ð ‡z‚zÐ% uÑ-Ô-ð 
°·²¸KÑ1HÔ1HÐ1TÝ×ÒðWñ	
ô 	
ð 	
ð Œk˜!Œn€Gå
Ð
+Ð
+˜uœ{Ð
+Ñ
+Ô
+Ñ+Ô+ð 
ÝðBñ
ô 
ð 	
ð �OŠO˜A˜qÑ!Ô!€EØ
�-Š-˜˜1Ñ
Ô
€CØ�OŠO˜A˜qÑ!Ô!€Eð €LØ„{•e”mÒ#Ð#ÝÔ$Ñ&Ô&ð 	xÝ Ô7Ñ9Ô9ˆLˆLå�V”]Ð$=Ñ>Ô>ð 	xØ!œ=Ô@ˆLˆLåÐjÐj°6·>²>Ñ3CÔ3CÐjÑjÔjÑjÔjÔqÔwˆLð —
’
˜;¨Ñ-Ô-€IØÐØÔ$ˆ	å*ØØØØð	ð
 ØØØØ%ØÝ,Ø!Ø"œMÔ>Ý&-¨f°kÑ&BÔ&BÐL�&Ô"Ð"Èðð ð ðð €Kð$ ˜ÐÐr   )r   NNN)Útypingr   r!   Úmodeling_flash_attention_utilsr   r   Úutilsr   Ú
get_loggerÚ__name__r-   r=   r"   ÚModuleÚTensorÚfloatÚintÚtuplerB   r   r   r   ú<module>rM      s8  ðØ Ð Ð Ð Ð Ð à €€€à hÐ hÐ hÐ hÐ hÐ hÐ hÐ hØ Ð Ð Ð Ð Ð ð 
ˆÔ	˜HÑ	%Ô	%€à6Ð6Ñ8Ô8Ð ð Ø#Ø$(Ø#ðFð FØŒHŒOðFàŒ<ðFð 
ŒðFð Œ<ð	Fð
 ˜Uœ\Ô*ðFð ðFð �eŒ_ðFð ˜S”MðFð �eŒ_ðFð ˆ5Œ<˜ÐÔðFð Fð Fð Fð Fð Fr   