§
    Þ˜ºh'  ã                   óÚ   — d dl Z d dlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZ dd	lmZmZ d
dlmZ  e¦   «         r
d dlZd dlmZ dZdZdZdZdZ	 dd„Z G d„ d¦  «        ZdS )é    N)ÚImageé   )Úcreate_causal_mask)Ú_get_model_class)Ú
AutoConfig)ÚMODEL_FOR_PRETRAINING_MAPPINGÚMODEL_MAPPING)ÚPROCESSOR_MAPPING_NAMESÚAutoProcessor)ÚTOKENIZER_MAPPING_NAMESÚAutoTokenizeré   )Úis_torch_availablez[92mz[93mz[0mu   â– u   â¬šú<img>c                 ó^	  ‡ ‡‡‡‡‡‡‡‡— ‰                      ¦   «         Š‰j        dk    r‰ddd…dd…f         Š‰j        dk    r‰dddd…dd…f         Št          ‰ ¦  «        Št          d„ ‰ D ¦   «         ¦  «        }d}g }t	          ‰ ¦  «        D ]F\  Š}	|	‰k    r|s	‰}d‰‰‰f<   |dk    r*|	‰k    s	‰‰dz
  k    r‰‰dz
  k    r‰dz  Šd‰|‰…|‰…f<   d}ŒGdŠ‰�ˆˆfd„t          ‰¦  «        D ¦   «         Šd	                     ˆfd
„t          ‰¦  «        D ¦   «         ¦  «        }
|�‰|dk    }t          j        | 	                    d¦  «        dz  |z    
                    ¦   «         | 	                    d¦  «        d¦  «        Št          j        d|dz   |¦  «        }t          j        ‰|¬¦  «        Št          › t          › t          › dt           › t          › t          › d�}|                     d	|z   ¦  «         d	|dz   z  d                     t          |
¦  «        dz  ¦  «        z   }‰�|dz  }|                     |¦  «         g }t	          ‰ ¦  «        D ]Ö\  }Š‰||f         dk    rg|                     d„ t'          t)          |¦  «                             t          t)          ‰¦  «        ¦  «        ¦  «        ¦  «        D ¦   «         ¦  «         Œz|                     t'          t)          |¦  «                             t          t)          ‰¦  «        ¦  «        ¦  «        ¦  «        ¦  «         Œ×t'          t-          t&          t/          |Ž ¦  «        ¦  «        }|D ]P}|                     ‰�7|dz   d	z  d	                     |¦  «        z   dz   d	                     |¦  «        z   nd¦  «         ŒQt	          ‰ ¦  «        D ]è\  ŠŠt1          ‰¦  «                             |¦  «        }‰‰v rt           › |› t          › �n|}d	                     ˆˆˆˆˆ fd„t          ‰¦  «        D ¦   «         ¦  «        }d}‰�3d	                     ˆˆˆˆˆˆ fd„t          ‰¦  «        D ¦   «         ¦  «        }|                     |› dt)          ‰¦  «                             d¦  «        › d	|› d|› �¦  «         Œéd                     |¦  «        S )zÚ
    Generates an attention matrix from a given attention mask.

    Optionally applies a sliding window mask (e.g., for Gemma2/3) and
    marks regions where image tokens occur based on the specified `img_token`.
    é   r   Né   c              3   óN   K  — | ] }t          t          |¦  «        ¦  «        V — Œ!d S ©N)ÚlenÚrepr)Ú.0Úwords     úo/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/utils/attention_visualizer.pyú	<genexpr>z6generate_attention_matrix_from_mask.<locals>.<genexpr>8   s.   è è € Ð<Ð<¨d�#�d 4™jœj™/œ/Ð<Ð<Ð<Ð<Ð<Ð<ó    r   r   c                 óJ   •‡— g | ]Šˆˆfd „t          ‰¦  «        D ¦   «         ‘ŒS )c                 ó>   •— g | ]}d ‰|z
  cxk    r‰k     rn ndnd ‘ŒS )r   r   © )r   ÚjÚiÚsliding_windows     €€r   ú
<listcomp>zBgenerate_attention_matrix_from_mask.<locals>.<listcomp>.<listcomp>I   sB   ø€ Ð\Ð\Ð\Èa a¨1¨q©5Ð&AÐ&AÒ&AÐ&A°>Ò&AÐ&AÐ&AÐ&AÐ&A  ÈÐ\Ð\Ð\r   )Úrange)r   r!   Únr"   s    @€€r   r#   z7generate_attention_matrix_from_mask.<locals>.<listcomp>I   s=   øø€ ÐoÐoÐoÐabÐ\Ð\Ð\Ð\Ð\ÕSXÐYZÑS[ÔS[Ð\Ñ\Ô\ÐoÐoÐor   ú c              3   óÄ   •K  — | ]Z}‰d |f         rt           › t          › t          › �n4d |k    rt          › t          › t          › �n‰d |f         rt          nt          V — Œ[dS ©r   N©ÚYELLOWÚBLACK_SQUAREÚRESETÚGREENÚWHITE_SQUARE)r   r    Úmasks     €r   r   z6generate_attention_matrix_from_mask.<locals>.<genexpr>K   s—   øè è € ð 	ð 	ð ð ��1�Œ:ð	�6Ð(•<Ð(¥Ð(Ð(Ð(ð �Š6ˆ6õ Ð,•|Ð,¥UÐ,Ð,Ð,ð ��1�Œ:ð�\ˆ\åð	ð 	ð 	ð 	ð 	ð 	r   éÿÿÿÿé   )Ú
boundariesz: i == j (diagonal)   z: token_type_idszAttention MatrixzSliding Window Maskc                 ó2   — g | ]}t           › |› t          › �‘ŒS r   )r*   r,   )r   Úks     r   r#   z7generate_attention_matrix_from_mask.<locals>.<listcomp>i   s(   € Ð#eÐ#eÐ#e¸a¥vÐ$9¨qÐ$9µ%Ð$9Ð$9Ð#eÐ#eÐ#er   z	    |    Ú c              3   óà   •K  — | ]h}‰‰|         v r%‰‰|f         r‰‰v rt           › t          › t          › �n4‰|k    rt          › t          › t          › �n‰‰|f         rt          nt          V — Œid S r   r)   )r   r    r!   Ú	img_tokenr/   r   Úwordss     €€€€€r   r   z6generate_attention_matrix_from_mask.<locals>.<genexpr>x   s°   øè è € ð 	
ð 	
ð ð ˜E !œHÐ$Ð$¨¨a°¨d¬Ð$¸	ÀTÐ8IÐ8Iõ Ð,•|Ð,¥UÐ,Ð,Ð,ð �AŠvˆvõ Ð0�<Ð0­Ð0Ð0Ð0ð �A�q�DŒzð•�åð	
ð 	
ð 	
ð 	
ð 	
ð 	
r   c              3   ó   •K  — | ]x}‰‰|         v r1‰‰v r-‰d ‰f         ‰d |f         k    rt           › t          › t          › �n8‰|k    rt          › t          › t          › �n‰‰         |         rt          nt          V — ŒydS r(   r)   )r   r    r!   r7   Úsliding_window_maskÚtoken_type_bucketsr   r8   s     €€€€€€r   r   z6generate_attention_matrix_from_mask.<locals>.<genexpr>„   sÉ   øè è € ð 	*ð 	*ð ð   a¤Ð(Ð(¨Y¸$Ð->Ð->ÐCUÐVWÐYZÐVZÔC[Ð_qÐrsÐuvÐrvÔ_wÒCwÐCwõ Ð0�<Ð0­Ð0Ð0Ð0ð ˜’6�6õ Ð4�|Ð4­UÐ4Ð4Ð4ð ' qÔ)¨!Ô,ð"•\�\å!ð	*ð 	*ð 	*ð 	*ð 	*ð 	*r   z: ú
)ÚintÚndimr   ÚmaxÚ	enumerater$   ÚjoinÚtorchÚwhereÚcumsumÚboolÚarangeÚ	bucketizer-   r+   r,   r*   ÚappendÚljustÚlistÚstrÚrjustÚmapÚzipr   )r8   r/   r7   r"   Útoken_type_idsÚimage_seq_lengthÚmax_word_lengthÚfirst_img_idxÚoutputr4   Ú	row_dummyÚ
is_specialr2   ÚlegendÚf_stringÚvertical_headerÚidxÚrowÚ	word_reprÚcolored_wordÚrow_displayÚsliding_window_rowr!   r%   r:   r;   r   s   ````                  @@@@@r   Ú#generate_attention_matrix_from_maskr_   (   sv  øøøøøøøøø€ ð �8Š8‰:Œ:€DØ„y�A‚~€~Ø�A�q�q�q˜!˜!˜!�GŒ}ˆØ„y�A‚~€~Ø�A�q˜!˜!˜!˜Q˜Q˜Q�JÔˆåˆE‰
Œ
€AÝÐ<Ð<°eÐ<Ñ<Ô<Ñ<Ô<€OØ€MØ€Få˜%Ñ Ô ð ð ‰ˆˆ1Ø�	Š>ˆ> -ˆ>ØˆMØˆD��A�‰JØ˜1ÒÐ ! y¢. .°A¸¸Q¹²J°JØ�A˜‘EŠzˆzØ�Q‘�Ø56ˆD�˜q� -° /Ð1Ñ2ØˆMøð ÐØÐ!ØoÐoÐoÐoÐoÕfkÐlmÑfnÔfnÐoÑoÔoÐà—’ð 	ð 	ð 	ð 	õ �q‘”ð	ñ 	ô 	ñ 	ô 	€Ið Ð!Ø# qÒ(ˆ
Ý"œ[Ø×"Ò" 2Ñ&Ô&¨Ñ*¨ZÑ7×=Ò=Ñ?Ô?À×AVÒAVÐWYÑAZÔAZÐ\]ñ
ô 
Ðõ ”\ !Ð%5¸Ñ%9Ð;KÑLÔLˆ
Ý"œ_Ð-?ÈJÐWÑWÔWÐõ Ðo•|Ðo¥UÐoÐoÅ&ÐoÍ,ÐoÕX]ÐoÐoÐo€FØ
‡M‚M�#˜‘,ÑÔÐØ�o¨Ñ)Ñ*Ð-?×-EÒ-EÅcÈ)ÁnÄnÐXYÑFYÑ-ZÔ-ZÑZ€HØÐ!ØÐ)Ñ)ˆØ
‡M‚M�(ÑÔÐà€OÝ˜uÑ%Ô%ð Fð F‰	ˆˆTØ��S�Œ>˜QÒÐØ×"Ò"Ð#eÐ#eÅ4ÍÈCÉÌÏÊÕWZÕ[^Ð_`Ñ[aÔ[aÑWbÔWbÑHcÔHcÑCdÔCdÐ#eÑ#eÔ#eÑfÔfÐfÐfà×"Ò"¥4­¨C©¬¯ªµs½3¸q¹6¼6±{´{Ñ(CÔ(CÑ#DÔ#DÑEÔEÐEÐEå�3�t¥S¨/Ð%:Ñ;Ô;Ñ<Ô<€Oàð 
ð 
ˆØ�ŠàÐ)ð ˜qÑ  CÑ'¨#¯(ª(°3©-¬-Ñ7¸+ÑEÈÏÊÐQTÉÌÑUÐUàñ	
ô 	
ð 	
ð 	
õ
 ˜UÑ#Ô#ð gð g‰ˆˆ4Ý˜‘J”J×$Ò$ _Ñ5Ô5ˆ	Ø8AÀTÐ8IÐ8I�&Ð4 )Ð4­UÐ4Ð4Ð4ÈyˆØ—h’hð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ ˜1‘X”Xð	
ñ 	
ô 	
ñ 	
ô 	
ˆð  ÐØÐ%Ø!$§¢ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*õ ˜q™œð	*ñ 	*ô 	*ñ 	"ô 	"Ðð 	�Š˜ÐeÐe­¨Q©¬¯ª°a©¬ÐeÐe¸;ÐeÐeÐQcÐeÐeÑfÔfÐfÐfà�9Š9�VÑÔÐr   c                   ó6   — e Zd Zdefd„Zddefd„Zddefd„ZdS )	ÚAttentionMaskVisualizerÚ
model_namec                 ó.  — t          j        |¦  «        }d| _        t          |                     ¦   «         d¦  «        r(t          |                     ¦   «         dd ¦  «        | _        	 t          |t          ¦  «        }n%# t          $ r t          |t          ¦  «        }Y nw xY w|€t          d|› d�¦  «        ‚|| _         G d„ d|t          j        ¦  «        } |||¦  «        | _        | j                             |j        ¦  «         || _        || _        d S )Nr   r"   zModel name z- is not supported for attention visualizationc                   ó   — e Zd Zd„ ZdS )ú7AttentionMaskVisualizer.__init__.<locals>._ModelWrapperc                 ó†   — t           j                             | ¦  «         t          j        dd¦  «        | _        || _        d S )Nr   )ÚnnÚModuleÚ__init__ÚLinearÚdummy_moduleÚconfig)Úselfrl   rb   s      r   ri   z@AttentionMaskVisualizer.__init__.<locals>._ModelWrapper.__init__¤   s5   € Ý”	×"Ò" 4Ñ(Ô(Ð(Ý$&¤I¨a°¡O¤O�Ô!Ø$�”��r   N)Ú__name__Ú
__module__Ú__qualname__ri   r   r   r   Ú_ModelWrapperre   £   s#   € € € € € ð%ð %ð %ð %ð %r   rq   )r   Úfrom_pretrainedÚimage_tokenÚhasattrÚget_text_configÚgetattrr"   r   r	   Ú	Exceptionr   Ú
ValueErrorÚ
mapped_clsrg   rh   ÚmodelÚtoÚdtypeÚrepo_idrl   )rm   rb   rl   ry   rq   s        r   ri   z AttentionMaskVisualizer.__init__•   s:  € ÝÔ+¨JÑ7Ô7ˆØ"ˆÔÝ�6×)Ò)Ñ+Ô+Ð-=Ñ>Ô>ð 	\Ý")¨&×*@Ò*@Ñ*BÔ*BÐDTÐVZÑ"[Ô"[ˆDÔð	QÝ)¨&µ-Ñ@Ô@ˆJˆJøÝð 	Qð 	Qð 	QÝ)¨&Õ2OÑPÔPˆJˆJˆJð	Qøøøð ÐÝÐd¨:ÐdÐdÐdÑeÔeÐeØ$ˆŒð	%ð 	%ð 	%ð 	%ð 	%˜J­¬	ñ 	%ô 	%ð 	%ð #�] 6¨:Ñ6Ô6ˆŒ
ØŒ
�Š�f”lÑ#Ô#Ð#Ø!ˆŒØˆŒˆˆs   Á'A= Á=BÂBr5   Úinput_sentencec                 ó4   — |                       ||¬¦  «         d S )N)Úsuffix)Úvisualize_attention_mask)rm   r~   r€   s      r   Ú__call__z AttentionMaskVisualizer.__call__®   s!   € Ø×%Ò% n¸VÐ%ÑDÔDÐDÐDÐDr   c           
      ó   — | j         }i }d }| j        j        t          v �rd}t	          j        t          j        |d¬¦  «        j        ¦  «        }d}t          j
        | j        |¬¦  «        }t          |d¦  «        r|j        }n&|j                             |j        g¦  «        d         }|r|                     d|¦  «        } ||||d	¬
¦  «        }	|j                             |j        g¦  «        d         | _        |	d         }
d|	v r|	d         |d<   |j                             |	d         d         ¦  «        }nr| j        j        t$          v rBt'          j
        | j        ¦  «        }|                     |¦  «        } ||d	¬¦  «        d         }
nt+          d|j        j        › d�¦  «        ‚d|j        _        |                     ¦   «          |
j        \  }}t3          j        |||j        j        f| j         j        ¬¦  «        }t3          j        |¦  «        }t=          |j        ||
|d ¬¦  «        }|�|                     ¦   «          }
n>|
                      d¦  «                              d¦  «         !                    |d||¦  «        }
dtE          d| j        j        › d| j#        › �¦  «        dz   z  }d}tI          d|› �¦  «         tI          dd| j        j        › d| j        › d| j#        j%        › � &                    tE          |¦  «        ¦  «        z   dz   |z   ¦  «         tI          |› ¦  «         tO          ||
| j        tQ          | j        dd ¦  «        |                     d¦  «        |¬¦  «        }tI          |¦  «         tI          |› ¦  «         d S ) Nzchttps://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg?download=trueT)Ústreamr1   )rP   rs   r   r   Úpt)ÚimagesÚtextr€   Úreturn_tensorsÚattention_maskrO   Ú	input_ids)rˆ   zModel type z) does not support attention visualizationÚeager)r|   )rl   Úinput_embedsr‰   Úcache_positionÚpast_key_valuesr   z##zAttention visualization for z | r   r<   z"  Attention visualization for [1mú:z[0m z    r"   )r7   r"   rO   rP   ))rz   rl   Ú
model_typer
   r   ÚopenÚrequestsÚgetÚrawr   rr   r}   rt   rs   Ú	tokenizerÚconvert_ids_to_tokensÚimage_token_idÚreplacer   r   Útokenizerx   Ú_attn_implementationÚtrainÚshaperB   ÚzerosÚhidden_sizer|   rF   r   rE   Ú	unsqueezeÚexpandr   ry   Úprintrn   Úcenterr_   rv   )rm   r~   r€   rz   ÚkwargsrP   ÚimgÚ	processorrs   Úinputsr‰   Útokensr•   Ú
batch_sizeÚ
seq_lengthrŒ   r�   Úcausal_maskÚtop_bottom_borderÚside_borderrW   s                        r   r�   z0AttentionMaskVisualizer.visualize_attention_mask±   sÞ  € Ø”
ˆØˆØÐØŒ;Ô!Õ%<Ð<Ñ<ØwˆCÝ”*�Xœ\¨#°dÐ;Ñ;Ô;Ô?Ñ@Ô@ˆCØ ÐÝ%Ô5°d´lÐUeÐfÑfÔfˆIÝ�y -Ñ0Ô0ð gØ'Ô3��à'Ô1×GÒGÈÔIaÐHbÑcÔcÐdeÔf�àð NØ!/×!7Ò!7¸ÀÑ!MÔ!M�à�Y c°ÀvÐ^bÐcÑcÔcˆFà(Ô2×HÒHÈ)ÔJbÐIcÑdÔdÐefÔgˆDÔà#Ð$4Ô5ˆNØ 6Ð)Ð)Ø+1Ð2BÔ+C�Ð'Ñ(ØÔ(×>Ò>¸vÀkÔ?RÐSTÔ?UÑVÔVˆFˆFØŒ[Ô#Õ'>Ð>Ð>Ý%Ô5°d´lÑCÔCˆIØ×'Ò'¨Ñ7Ô7ˆFØ&˜Y ~ÀdÐKÑKÔKÐL\Ô]ˆNˆNåÐm¨5¬<Ô+BÐmÐmÐmÑnÔnÐnà,3ˆŒÔ)Ø�Š‰Œˆà!/Ô!5Ñˆ
�JÝ”{ J°
¸E¼LÔ<TÐ#UÐ]aÔ]gÔ]mÐnÑnÔnˆÝœ jÑ1Ô1ˆå(Ø”<Ø%Ø)Ø)Ø ð
ñ 
ô 
ˆð Ð"Ø)×.Ò.Ñ0Ô0Ð0ˆNˆNà+×5Ò5°aÑ8Ô8×BÒBÀ1ÑEÔE×LÒLÈZÐYZÐ\fÐhrÑsÔsˆNØ ÝÐ[¨t¬{Ô/EÐ[Ð[È$Ì/Ð[Ð[Ñ\Ô\Ð_`Ñ`ñ
Ðð ˆÝÐ&Ð$Ð&Ð&Ñ'Ô'Ð'ÝØØ°d´kÔ6LÐÐÈtÌ|ÐÐÐeiÔetÔe}ÐÐ÷  Gò  GÝÐ%Ñ&Ô&ñô ñð ñ	ð
 ññ	
ô 	
ð 	
õ 	Ð"Ð$Ñ%Ô%Ð%Ý6ØØØÔ&Ý" 4¤;Ð0@À$ÑGÔGØ!Ÿ:š:Ð&6Ñ7Ô7Ø-ð
ñ 
ô 
ˆõ 	ˆh‰ŒˆÝÐ"Ð$Ñ%Ô%Ð%Ð%Ð%r   N)r5   )rn   ro   rp   rK   ri   r‚   r�   r   r   r   ra   ra   ”   s}   € € € € € ð 3ð ð ð ð ð2Eð E sð Eð Eð Eð EðJ&ð J&°sð J&ð J&ð J&ð J&ð J&ð J&r   ra   )r   NNN)r’   ÚPILr   Úmasking_utilsr   Úmodels.auto.auto_factoryr   Úmodels.auto.configuration_autor   Úmodels.auto.modeling_autor   r	   Úmodels.auto.processing_autor
   r   Úmodels.auto.tokenization_autor   r   Úimport_utilsr   rB   Útorch.nnrg   r-   r*   r,   r+   r.   r_   ra   r   r   r   ú<module>r¶      sW  ðð  €€€Ø Ð Ð Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ ,Ð ,Ð ,Ð ,Ð ,Ð ,ð ÐÑÔð Ø€L€L€LØÐÐÐÐÐð 	€Ø	€Ø€Ø€Ø€ð `dðið ið ið iðXg&ð g&ð g&ð g&ð g&ñ g&ô g&ð g&ð g&ð g&r   