§
    ‚Štjîv  ã                  ó,  — d dl mZ d dlZd dlZd dlmZ d dlmZ 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mZmZ ddlmZmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ erddlm,Z, ddl-m.Z. ddl/m0Z0  e)j1        e2¦  «        Z3 G d„ de
j4        ¦  «        Z5e' G d„ d¦  «        ¦   «         Z6e' G d„ d¦  «        ¦   «         Z7e' G d„ d¦  «        ¦   «         Z8 G d„ de
j4        ¦  «        Z9 G d„ de¦  «        Z:dS ) é    )ÚannotationsN)Úpartial)ÚTYPE_CHECKING)Ú	safe_opené   )ÚCache)Úget_model_conversion_mapping)ÚWeightRenamingÚ$convert_and_load_state_dict_in_model)Ú&LAYER_PATTERN_TO_MASK_FUNCTION_MAPPINGÚcreate_causal_mask)ÚBaseModelOutputWithPastÚQuestionAnsweringModelOutputÚ SequenceClassifierOutputWithPastÚTokenClassifierOutput)ÚLoadStateDictConfigÚPreTrainedModelÚ_get_resolved_checkpoint_files)Ú	AutoModel)ÚUnpack)ÚContextManagersÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úlog_state_dict_report)ÚMtpCache)ÚPreTrainedConfig)ÚLogitsProcessorListc                  ó&   ‡ — e Zd ZdZdZˆ fd„Zˆ xZS )ÚGradientCheckpointingLayera  Base class for layers with gradient checkpointing.

    This class enables gradient checkpointing functionality for a layer. By default, gradient checkpointing is disabled
    (`gradient_checkpointing = False`). When `model.set_gradient_checkpointing()` is called, gradient checkpointing is
    enabled by setting `gradient_checkpointing = True` and assigning a checkpointing function to `_gradient_checkpointing_func`.

    Important:

        When using gradient checkpointing with `use_reentrant=True`, inputs that require gradients (e.g. hidden states)
        must be passed as positional arguments (`*args`) rather than keyword arguments to properly propagate gradients.

        Example:

            ```python
            >>> # Correct - hidden_states passed as positional arg
            >>> out = self.layer(hidden_states, attention_mask=attention_mask)

            >>> # Incorrect - hidden_states passed as keyword arg
            >>> out = self.layer(hidden_states=hidden_states, attention_mask=attention_mask)
            ```
    Fc                óö  •— | j         rÙ| j        rÒd}| j        j        }d|› d�}d|v r|d         rd|d<   |dz  }d}d|v r|d         �d |d<   |dz  }d}d	|v r|d	         �d |d	<   |d
z  }d}d|v r|d         �d |d<   |dz  }d}|r2|                     d¦  «        dz   }t
                               |¦  «          | j        t          t          ¦   «         j
        fi |¤Žg|¢R Ž S  t          ¦   «         j
        |i |¤ŽS )NFz7Caching is incompatible with gradient checkpointing in z	. SettingÚ	use_cachez `use_cache=False`,TÚpast_key_valuez `past_key_value=None`,Úpast_key_valuesz `past_key_values=None`,Ú
layer_pastz `layer_past=None`,ú,ú.)Úgradient_checkpointingÚtrainingÚ	__class__Ú__name__ÚrstripÚloggerÚwarning_onceÚ_gradient_checkpointing_funcr   ÚsuperÚ__call__)ÚselfÚargsÚkwargsÚdo_warnÚ
layer_nameÚmessager+   s         €úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/modeling_layers.pyr2   z#GradientCheckpointingLayer.__call__L   s  ø€ ØÔ&ð  	a¨4¬=ð  	aØˆGØœÔ0ˆJØeÐPZÐeÐeÐeˆGà˜fÐ$Ð$¨°Ô)<Ð$Ø&+��{Ñ#ØÐ0Ñ0�Ø�ð   6Ð)Ð)¨fÐ5EÔ.FÐ.RØ+/�Ð'Ñ(ØÐ4Ñ4�Ø�à  FÐ*Ð*¨vÐ6GÔ/HÐ/TØ,0�Ð(Ñ)ØÐ5Ñ5�Ø�à˜vÐ%Ð%¨&°Ô*>Ð*JØ'+��|Ñ$ØÐ0Ñ0�Ø�ð ð -Ø!Ÿ.š.¨Ñ-Ô-°Ñ3�Ý×#Ò# GÑ,Ô,Ð,à4�4Ô4µW½U¹W¼WÔ=MÐ5XÐ5XÐQWÐ5XÐ5XÐ`Ð[_Ð`Ð`Ð`Ð`Ø�u‰wŒwÔ Ð0¨Ð0Ð0Ð0ó    )r,   Ú
__module__Ú__qualname__Ú__doc__r)   r2   Ú__classcell__©r+   s   @r9   r!   r!   3   sJ   ø€ € € € € ðð ð, #Ðð"1ð "1ð "1ð "1ð "1ð "1ð "1ð "1ð "1r:   r!   c                  óZ   ‡ — e Zd ZdZˆ fd„Zee	 	 	 	 	 	 	 ddd„¦   «         ¦   «         Zˆ xZS )Ú GenericForSequenceClassificationÚmodelc                óJ  •— t          ¦   «                              |¦  «         |j        | _        t          | | j        t          j        |¦  «        ¦  «         t          j        | 	                    ¦   «         j
        | j        d¬¦  «        | _        |                      ¦   «          d S )NF©Úbias)r1   Ú__init__Ú
num_labelsÚsetattrÚbase_model_prefixr   Úfrom_configÚnnÚLinearÚget_text_configÚhidden_sizeÚscoreÚ	post_init©r3   Úconfigr+   s     €r9   rF   z)GenericForSequenceClassification.__init__u   s‡   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå��dÔ,­iÔ.CÀFÑ.KÔ.KÑLÔLÐLÝ”Y˜v×5Ò5Ñ7Ô7ÔCÀTÄ_Ð[`ÐaÑaÔaˆŒ
ð 	�ŠÑÔÐÐÐr:   NÚ	input_idsútorch.LongTensor | NoneÚattention_maskútorch.Tensor | NoneÚposition_idsr%   úCache | NoneÚinputs_embedsútorch.FloatTensor | NoneÚlabelsr#   úbool | Noner5   úUnpack[TransformersKwargs]Úreturnr   c           	     ó¤  —  t          | | j        ¦  «        |f|||||dœ|¤Ž}	|	j        }
|                      |
¦  «        }|�|j        d         }n|j        d         }| j                             ¦   «         j        €|dk    rt          d¦  «        ‚| j                             ¦   «         j        €d}nº|��|| j                             ¦   «         j        k     	                    |j
        t          j        ¦  «        }t          j        |j        d         |j
        t          j        ¬¦  «        }||z                       d¦  «        }n)d}t                               | j        j        › d�¦  «         |t          j        ||j
        ¬¦  «        |f         }d }|�|                      |||| j        ¬	¦  «        }t)          |||	j        |	j        |	j        ¬
¦  «        S )N©rU   rW   r%   rY   r#   r   r   z=Cannot handle batch sizes > 1 if no padding token is defined.éÿÿÿÿ)ÚdeviceÚdtypezŠ will not detect padding tokens in `inputs_embeds`. Results may be unexpected if using padding tokens in conjunction with `inputs_embeds.`©rb   )Úlogitsr[   Úpooled_logitsrR   )Úlossre   r%   Úhidden_statesÚ
attentions)ÚgetattrrI   Úlast_hidden_staterO   ÚshaperR   rM   Úpad_token_idÚ
ValueErrorÚtorb   ÚtorchÚint32ÚarangeÚargmaxr.   r/   r+   r,   Úloss_functionr   r%   rh   ri   )r3   rS   rU   rW   r%   rY   r[   r#   r5   Útransformer_outputsrh   re   Ú
batch_sizeÚlast_non_pad_tokenÚnon_pad_maskÚtoken_indicesrf   rg   s                     r9   Úforwardz(GenericForSequenceClassification.forward   s  € ð 8]µw¸tÀTÔE[Ñ7\Ô7\Øð8
à)Ø%Ø+Ø'Øð8
ð 8
ð ð8
ð 8
Ðð ,Ô=ˆØ—’˜MÑ*Ô*ˆàÐ Ø"œ¨Ô+ˆJˆJà&Ô,¨QÔ/ˆJàŒ;×&Ò&Ñ(Ô(Ô5Ð=À*ÐPQÂ/À/ÝÐ\Ñ]Ô]Ð]ØŒ;×&Ò&Ñ(Ô(Ô5Ð=Ø!#ÐÐØÐ"à%¨¬×)DÒ)DÑ)FÔ)FÔ)SÒS×WÒWÐX^ÔXeÕglÔgrÑsÔsˆLÝ!œL¨¬¸Ô)<ÀVÄ]ÕZ_ÔZeÐfÑfÔfˆMØ"/°,Ñ">×!FÒ!FÀrÑ!JÔ!JÐÐà!#ÐÝ×ÒØ”>Ô*ð Zð Zð Zñô ð ð
 �uœ|¨J¸v¼}ÐMÑMÔMÐOaÐaÔbˆàˆØÐØ×%Ò%¨V¸FÐR_ÐhlÔhsÐ%ÑtÔtˆDå/ØØ Ø/Ô?Ø-Ô;Ø*Ô5ð
ñ 
ô 
ð 	
r:   ©NNNNNNN)rS   rT   rU   rV   rW   rT   r%   rX   rY   rZ   r[   rT   r#   r\   r5   r]   r^   r   ©	r,   r;   r<   rI   rF   r   r   rz   r>   r?   s   @r9   rA   rA   q   s…   ø€ € € € € àÐðð ð ð ð ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%ð8
ð 8
ð 8
ð 8
ñ „^ñ Ôð8
ð 8
ð 8
ð 8
ð 8
r:   rA   c                  óf   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 ddd„¦   «         ¦   «         Z	ˆ xZ
S )ÚGenericForQuestionAnsweringrB   c                ó   •— t          ¦   «                              |¦  «         t          | | j        t	          j        |¦  «        ¦  «         t          j        |j        d¦  «        | _	        |  
                    ¦   «          d S )Né   )r1   rF   rH   rI   r   rJ   rK   rL   rN   Ú
qa_outputsrP   rQ   s     €r9   rF   z$GenericForQuestionAnswering.__init__À   si   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å��dÔ,­iÔ.CÀFÑ.KÔ.KÑLÔLÐLÝœ) FÔ$6¸Ñ:Ô:ˆŒð 	�ŠÑÔÐÐÐr:   c                ó6   — t          | | j        ¦  «        j        S ©N©rj   rI   Úembed_tokens)r3   s    r9   Úget_input_embeddingsz0GenericForQuestionAnswering.get_input_embeddingsÉ   s   € Ý�t˜TÔ3Ñ4Ô4ÔAÐAr:   c                ó:   — |t          | | j        ¦  «        _        d S rƒ   r„   )r3   Úvalues     r9   Úset_input_embeddingsz0GenericForQuestionAnswering.set_input_embeddingsÌ   s   € Ø=B���dÔ,Ñ-Ô-Ô:Ð:Ð:r:   NrS   rT   rU   rV   rW   r%   rX   rY   rZ   Ústart_positionsÚend_positionsr5   r]   r^   r   c                ó¶  —  t          | | j        ¦  «        |f||||dœ|¤Ž}	|	j        }
|                      |
¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d }|�|� | j        ||||fi |¤Ž}t          ||||	j	        |	j
        ¬¦  «        S )N)rU   rW   r%   rY   r   ra   ©Údim)rg   Ústart_logitsÚ
end_logitsrh   ri   )rj   rI   rk   r�   ÚsplitÚsqueezeÚ
contiguousrt   r   rh   ri   )r3   rS   rU   rW   r%   rY   rŠ   r‹   r5   ÚoutputsÚsequence_outputre   r�   r�   rg   s                  r9   rz   z#GenericForQuestionAnswering.forwardÏ   s  € ð ,Q­7°4¸Ô9OÑ+PÔ+PØð,
à)Ø%Ø+Ø'ð,
ð ,
ð ð,
ð ,
ˆð "Ô3ˆà—’ Ñ1Ô1ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆØÐ&¨=Ð+DØ%�4Ô% l°JÀÐQ^ÐiÐiÐbhÐiÐiˆDå+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r:   r{   )rS   rT   rU   rV   rW   rT   r%   rX   rY   rZ   rŠ   rT   r‹   rT   r5   r]   r^   r   )r,   r;   r<   rI   rF   r†   r‰   r   r   rz   r>   r?   s   @r9   r~   r~   ¼   s©   ø€ € € € € àÐðð ð ð ð ðBð Bð BðCð Cð Cð Øð .2Ø.2Ø04Ø(,Ø26Ø37Ø15ð%
ð %
ð %
ð %
ñ „^ñ Ôð%
ð %
ð %
ð %
ð %
r:   r~   c                  óZ   ‡ — e Zd ZdZˆ fd„Zee	 	 	 	 	 	 	 ddd„¦   «         ¦   «         Zˆ xZS )ÚGenericForTokenClassificationrB   c           	     ó  •— t          ¦   «                              |¦  «         |j        | _        t          | | j        t          j        |¦  «        ¦  «         t          |dd ¦  «        �|j        }nt          |dd ¦  «        �|j	        }nd}t          j        |¦  «        | _        t          j        |                     ¦   «         j        |j        t          |dd¦  «        ¬¦  «        | _        |                      ¦   «          d S )NÚclassifier_dropoutÚhidden_dropoutgš™™™™™¹?Útoken_classification_biasTrD   )r1   rF   rG   rH   rI   r   rJ   rj   r™   rš   rK   ÚDropoutÚdropoutrL   rM   rN   rO   rP   )r3   rR   r™   r+   s      €r9   rF   z&GenericForTokenClassification.__init__ý   só   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå��dÔ,­iÔ.CÀFÑ.KÔ.KÑLÔLÐLÝ�6Ð/°Ñ6Ô6ÐBØ!'Ô!:ÐÐÝ�VÐ-¨tÑ4Ô4Ð@Ø!'Ô!6ÐÐà!$ÐÝ”zÐ"4Ñ5Ô5ˆŒÝ”YØ×"Ò"Ñ$Ô$Ô0ØÔÝ˜Ð!<¸dÑCÔCð
ñ 
ô 
ˆŒ
ð 	�ŠÑÔÐÐÐr:   NrS   rT   rU   rV   rW   r%   rX   rY   rZ   r[   r#   r\   r5   r]   r^   r   c           	     ó"  —  t          | | j        ¦  «        |f|||||dœ|¤Ž}	|	j        }
|                      |
¦  «        }
|                      |
¦  «        }d }|�|                      ||| j        ¦  «        }t          |||	j        |	j	        ¬¦  «        S )Nr`   )rg   re   rh   ri   )
rj   rI   rk   r�   rO   rt   rR   r   rh   ri   )r3   rS   rU   rW   r%   rY   r[   r#   r5   r”   r•   re   rg   s                r9   rz   z%GenericForTokenClassification.forward  sÂ   € ð ,Q­7°4¸Ô9OÑ+PÔ+PØð,
à)Ø%Ø+Ø'Øð,
ð ,
ð ð,
ð ,
ˆð "Ô3ˆØŸ,š, Ñ7Ô7ˆØ—’˜OÑ,Ô,ˆàˆØÐØ×%Ò% f¨f°d´kÑBÔBˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r:   r{   )rS   rT   rU   rV   rW   rT   r%   rX   rY   rZ   r[   rT   r#   r\   r5   r]   r^   r   r|   r?   s   @r9   r—   r—   ù   s…   ø€ € € € € àÐðð ð ð ð ð* Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%ð!
ð !
ð !
ð !
ñ „^ñ Ôð!
ð !
ð !
ð !
ð !
r:   r—   c                  ó,   ‡ — e Zd Z	 ddˆ fd„Zdd„Zˆ xZS )ÚMtpLayerTrR   r   Údecoder_layer_clsútype[nn.Module]Únorm_clsÚ	layer_idxÚintÚuse_post_normÚboolc                óˆ  •— t          ¦   «                              ¦   «          || _        || _         ||j        |j        ¬¦  «        | _         ||j        |j        ¬¦  «        | _        t          j	        |j        dz  |j        d¬¦  «        | _
         |||¦  «        | _        |r ||j        |j        ¬¦  «        nd | _        d S )N©Úepsr€   FrD   )r1   rF   rR   r¦   rN   Úrms_norm_epsÚenormÚhnormrK   rL   Úeh_projÚ	mtp_blockÚ	post_norm)r3   rR   r¡   r£   r¤   r¦   r+   s         €r9   rF   zMtpLayer.__init__9  sÅ   ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ*ˆÔØ�X˜fÔ0°fÔ6IÐJÑJÔJˆŒ
Ø�X˜fÔ0°fÔ6IÐJÑJÔJˆŒ
Ý”y Ô!3°aÑ!7¸Ô9KÐRWÐXÑXÔXˆŒØ*Ð*¨6°9Ñ=Ô=ˆŒØR_Ði˜˜ &Ô"4¸&Ô:MÐNÑNÔNÐNÐeiˆŒˆˆr:   rY   útorch.TensorÚprevious_hidden_stateÚposition_embeddingsú!tuple[torch.Tensor, torch.Tensor]rU   rV   rW   r%   rX   r^   c                ó´  — t          | j        dd¦  «        r?t          j        |                      |¦  «        |                      |¦  «        gd¬¦  «        }n>t          j        |                      |¦  «        |                      |¦  «        gd¬¦  «        }|                      |¦  «        }	 | j        |	f||||dœ|¤Ž}	| j        r|  	                    |	¦  «        }	|	S )NÚmtp_hidden_states_firstFra   r�   )rU   r³   rW   r%   )
rj   rR   rp   Úcatr­   r¬   r®   r¯   r¦   r°   )
r3   rY   r²   r³   rU   rW   r%   r5   Úprojection_inputrh   s
             r9   rz   zMtpLayer.forwardJ  sô   € õ �4”;Ð 9¸5ÑAÔAð 	qÝ$œy¨$¯*ª*Ð5JÑ*KÔ*KÈTÏZÊZÐXeÑMfÔMfÐ)gÐmoÐpÑpÔpÐÐå$œy¨$¯*ª*°]Ñ*CÔ*CÀTÇZÂZÐPeÑEfÔEfÐ)gÐmoÐpÑpÔpÐØŸšÐ%5Ñ6Ô6ˆØ&˜œØð
à)Ø 3Ø%Ø+ð
ð 
ð ð
ð 
ˆð Ôð 	:Ø ŸNšN¨=Ñ9Ô9ˆMàÐr:   )T)
rR   r   r¡   r¢   r£   r¢   r¤   r¥   r¦   r§   )rY   r±   r²   r±   r³   r´   rU   rV   rW   rV   r%   rX   r^   r´   )r,   r;   r<   rF   rz   r>   r?   s   @r9   r    r    8  sb   ø€ € € € € ð #ðjð jð jð jð jð jð jð"ð ð ð ð ð ð ð r:   r    c                  ó°   ‡ — e Zd ZdZdZdZddgZddgZd(ˆ fd	„Zd)d
„Z	d*d„Z
d+d„Z	 	 	 	 d,d-d$„Zed.d/d%„¦   «         Zed0d&„¦   «         Zed0d'„¦   «         Zˆ xZS )1ÚMtpModelTzshared_head.head.weightzembed_tokens.weightzshared_head.weightÚ
main_modelr   Únum_mtp_layersr¥   c                óì  •‡ ‡‡— t          ¦   «                              |j                             ¦   «         ¦  «         d‰ _        |‰ _        |                     ¦   «         }t          |j        d         ¦  «        Št          d„ |j        d          
                    ¦   «         D ¦   «         ¦  «        Šd‰ _        d‰ _        t          ‰ j        d¦  «        rd‰ _        ‰ j        j        ‰ _        t          j        ˆˆˆ fd„t#          |¦  «        D ¦   «         ¦  «        ‰ _        ‰ j        r& ‰‰ j        j        ‰ j        j        ¬¦  «        ‰ _        ‰                      |¦  «         ‰                      ¦   «          d S )	NÚForCausalLMra   c              3  óB   K  — | ]\  }}d |v ¯	t          |¦  «        V — ŒdS )ÚnormN)Útype)Ú.0ÚnameÚmodules      r9   ú	<genexpr>z$MtpModel.__init__.<locals>.<genexpr>{  s>   è è € ð 
ð 
á��fØ˜ˆ~ˆ~õ �‰LŒLàˆ~ˆ~ˆ~ð
ð 
r:   TFÚchain_hidden_post_normc           	     óJ   •— g | ]}t          ‰j        ‰‰|‰j        ¦  «        ‘Œ S © )r    rR   r¦   )rÂ   ÚkÚ	layer_clsr£   r3   s     €€€r9   ú
<listcomp>z%MtpModel.__init__.<locals>.<listcomp>‰  s/   ø€ ÐnÐnÐnÐST�X�d”k 9¨h¸¸4Ô;MÑNÔNÐnÐnÐnr:   r©   )r1   rF   rR   Úget_mtp_configÚ	loss_typer¼   Úget_decoderrÁ   ÚlayersÚnextÚnamed_modulesr¦   Úuse_shared_post_normÚhasattrrÆ   rK   Ú
ModuleListÚrangerN   r«   Úshared_post_normÚtie_with_main_modelrP   )r3   r»   r¼   Ú
base_modelrÊ   r£   r+   s   `   @@€r9   rF   zMtpModel.__init__s  su  øøøø€ Ý‰Œ×Ò˜Ô*×9Ò9Ñ;Ô;Ñ<Ô<Ð<à&ˆŒØ,ˆÔà×+Ò+Ñ-Ô-ˆ
Ý˜Ô*¨2Ô.Ñ/Ô/ˆ	Ýð 
ð 
à *Ô 1°"Ô 5× CÒ CÑ EÔ Eð
ñ 
ô 
ñ 
ô 
ˆð "ˆÔØ$)ˆÔ!Ý�4”;Ð 8Ñ9Ô9ð 	KØ!&ˆDÔØ(,¬Ô(JˆDÔ%õ ”mØnÐnÐnÐnÐnÐnÕX]Ð^lÑXmÔXmÐnÑnÔnñ
ô 
ˆŒð Ô$ð 	dØ$, H¨T¬[Ô-DÈ$Ì+ÔJbÐ$cÑ$cÔ$cˆDÔ!ð 	× Ò  Ñ,Ô,Ð,à�ŠÑÔÐÐÐr:   c                ó¤   — |                      ¦   «         | _        |j        | _        |                     ¦   «         }t          |dd¦  «        | _        dS )z8Tie the embedding/head/rotary layer with the main model.Ú
rotary_embN)r†   r…   Úlm_headÚshared_headrÎ   rj   rÚ   )r3   r»   rØ   s      r9   r×   zMtpModel.tie_with_main_model“  sM   € ð '×;Ò;Ñ=Ô=ˆÔØ%Ô-ˆÔð  ×+Ò+Ñ-Ô-ˆ
Ý! *¨l¸DÑAÔAˆŒˆˆr:   rh   r±   r^   c                óÔ   — t          | j        dd¦  «        }|�||z  }|                      |¦  «        }t          | j        dd¦  «        }|�||j        d         k     r|dd|…f         }|S )z[Apply the shared head the same way the main model does (muP scaling, unpadded vocab slice).Úlogits_mup_width_multiplierNÚunpadded_vocab_sizera   .)rj   rR   rÜ   rl   )r3   rh   Ú
multiplierre   rß   s        r9   Ú_project_to_logitszMtpModel._project_to_logits�  s‚   € å˜Tœ[Ð*GÈÑNÔNˆ
ØÐ!Ø)¨JÑ6ˆMØ×!Ò! -Ñ0Ô0ˆÝ% d¤kÐ3HÈ$ÑOÔOÐØÐ*Ð/BÀVÄ\ÐRTÔEUÒ/UÐ/UØ˜CÐ!5Ð"5Ð!5Ð5Ô6ˆFØˆr:   r¤   rY   Ú	mtp_cacher   rW   c                óÌ  ‡— | j         |d|||dœ}t          | j        |         dd¦  «        }i }|�]|t          v rTt          |         }t	          |t
          ¦  «        r&|                     ¦   «         D ]\  }	}
 |
di |¤Ž||	<   Œn |di |¤Ž||<   nt          di |¤Ž|d<   t          |¦  «        dk    rt          d¦  «        ‚dddd	œŠˆfd
„|                     ¦   «         D ¦   «         }|S )zÝ
        Create the (potentially several) masks required for layer `layer_idx`. This relies on the `layer_type`
        attribute of the mtp layer if any, otherwise simply create a causal mask for full attention.
        N)rR   rY   rU   r%   rW   r¤   Ú
layer_typeÚfull_attentionr€   zLYou should have at most 2 masks, 1 for attention, and 1 for linear attentionrU   Ú	conv_mask)rå   Úsliding_attentionÚlinear_attentionc                ó(   •— i | ]\  }}‰|         |“ŒS rÈ   rÈ   )rÂ   rÉ   ÚvÚ%internal_layer_expected_kwarg_mappings      €r9   ú
<dictcomp>z7MtpModel.create_masks_for_mtp_layer.<locals>.<dictcomp>Ñ  s%   ø€ ÐWÐWÐWÁÀÀAÐ6°qÔ9¸1ÐWÐWÐWr:   rÈ   )
rR   rj   rÏ   r   Ú
isinstanceÚdictÚitemsr   Úlenrn   )r3   r¤   rY   râ   rW   Úmask_kwargsÚmtp_layer_typeÚmasksÚmask_functionÚactual_patternÚactual_functionrë   s              @r9   Úcreate_masks_for_mtp_layerz#MtpModel.create_masks_for_mtp_layer¨  sN  ø€ ð ”kØ*Ø"Ø(Ø(à"ð
ð 
ˆõ ! ¤¨YÔ!7¸ÀtÑLÔLˆØˆØÐ%¨.Õ<bÐ*bÐ*bÝBÀ>ÔRˆMå˜-­Ñ.Ô.ð EØ7D×7JÒ7JÑ7LÔ7Lð Kð KÑ3�N OØ,;¨OÐ,JÐ,J¸kÐ,JÐ,J�E˜.Ñ)Ð)ðKð )6¨Ð(DÐ(D¸Ð(DÐ(D��nÑ%Ð%å&8Ð&GÐ&G¸;Ð&GÐ&GˆEÐ"Ñ#åˆu‰:Œ:˜Š>ˆ>ÝÐkÑlÔlÐlð /Ø!1Ø +ð1
ð 1
Ð-ð XÐWÐWÐWÈÏÊÉÌÐWÑWÔWˆàˆr:   NFrS   Úlast_hidden_statesrU   rV   úMtpCache | Noner[   rT   Ú	do_sampler§   Úlogits_processorúLogitsProcessorList | NoneÚfull_input_idsr´   c
                ó6  — |j         d         }g }g }d}t          | j        ¦  «        D �]À\  }}|                      |¦  «                             |j        ¦  «        }| j        �|                      ||¬¦  «        nd}|                      ||||¦  «        } |||f|||dœ|¤|
¤Ž}| j        r|  	                    |¦  «        }|€t          dd¦  «        nt          dd¦  «        }|                      |dd…|dd…f         ¦  «        }|�_t          j                             |d|fd¬¦  «        d|d…f                              ¦   «         }| | j        ||f| j        j        |d	œ|
¤Žz  }|                     |¦  «         |dd…ddd…f                              |j        ¬
¦  «        }|�+|	�) ||	|                     t(          j        ¦  «        ¦  «        }|rCt          j                             |dt(          j        ¬¦  «        }t)          j        |d¬¦  «        }nt)          j        |dd¬¦  «        }|                     |¦  «         t)          j        |dd…dd…f         |gd¬¦  «        }t)          j        |dd…dd…f         |                     |d¦  «        gd¬¦  «        }t)          j        |dd…dd…f         |dd…dd…f         dz   gd¬¦  «        }|	�t)          j        |	|gd¬¦  «        }	�ŒÂt)          j        |d¬¦  «        }t)          j        |d¬¦  «        }|||fS )a‡  
        Sample 1 new token for each mtp layers present in this model. Note that the inputs are assumed to be already sliced and correct
        here, i.e. if the main model just processed inputs corresponding to tokens at positions [N-1, N] in the sequence, then from it
        you draft a new token for position N+1, and the `input_ids`/`position_ids`/`attention_mask` here are assumed to correspond to
        data for tokens at positions [N, N+1], i.e. shifted by 1 from the main model, by the newly drafted token. The `last_hidden_states`
        though will correspond to the same as the main model, i.e. positions [N-1, N] in the sequence length dimension.

        `full_input_ids` correspond to the full sequence of `input_ids`, which is used in case we have any `logits_processor` as some
        processors may require to check the length/value of the full previous sequence of ids.
        r   N)rW   )r³   rW   r%   ra   iœÿÿÿ)rˆ   .)Ú
vocab_sizeÚshift_labelsrd   )rŽ   rc   r   )Únum_samplesT)rŽ   Úkeepdimr�   )rl   Ú	enumeraterÏ   r…   ro   rb   rÚ   r÷   rÒ   rÖ   Úslicerá   rK   Ú
functionalÚpadr“   rt   rR   rÿ   Úappendrp   Úfloat32ÚsoftmaxÚmultinomialrs   r·   Únew_ones)r3   rS   rø   rU   rW   râ   r[   rú   rû   rý   r5   rv   Údrafted_logitsÚdrafted_tokensrg   ÚiÚ	mtp_layerrY   r³   ró   Úslice_indicesre   r   Únext_token_logitsÚnext_token_scoresÚprobsÚnext_mtp_tokenÚnew_candidate_idsÚcandidate_logitss                                r9   rz   zMtpModel.forwardÕ  s»  € ð0 ”_ QÔ'ˆ
àˆØˆØˆÝ% d¤kÑ2Ô2ð 6	Uñ 6	U‰LˆAˆyà ×-Ò-¨iÑ8Ô8×;Ò;Ð<NÔ<UÑVÔVˆMàMQÌ_ÐMh�—’ ¸L�ÑIÔIÐIÐnrð  ð
 ×3Ò3°A°}ÀiÐQ]Ñ^Ô^ˆEà!* ØØ"ð"ð %8Ø)Ø )ð"ð "ð ð"ð ð"ð "Ðð Ô(ð OØ%)×%:Ò%:Ð;MÑ%NÔ%NÐ"ð 06¨~�E " d™OœO˜OÅ5ÈÈtÑCTÔCTˆMØ×,Ò,Ð-?ÀÀÀÀ=ÐRSÐRSÐRSÐ@SÔ-TÑUÔUˆFð Ð!å!œ}×0Ò0°¸!¸Q¸ÀtÐ0ÑLÔLÈSÐRSÐRTÐRTÈWÔU×`Ò`ÑbÔb�ØÐ*˜Ô*Ø˜FðØ/3¬{Ô/EÐT`ðð Ødjðð ñ �ð
 ×!Ò! &Ñ)Ô)Ð)à & q q q¨"¨a¨a¨a xÔ 0× 3Ò 3¸9Ô;KÐ 3Ñ LÔ LÐØÐ+°Ð0JØ$4Ð$4°^ÐEV×EYÒEYÕZ_ÔZgÑEhÔEhÑ$iÔ$iÐ!Øð WÝœ×-Ò-Ð.?ÀRÍuÌ}Ð-Ñ]Ô]�Ý!&Ô!2°5ÀaÐ!HÑ!HÔ!H��å!&¤Ð.?ÀRÐQUÐ!VÑ!VÔ!V�Ø×!Ò! .Ñ1Ô1Ð1õ œ	 9¨Q¨Q¨Q°°°¨UÔ#3°^Ð"DÈ"ÐMÑMÔMˆIÝ"œY¨°q°q°q¸!¸"¸"°uÔ(=¸~×?VÒ?VÐWaÐcdÑ?eÔ?eÐ'fÐlnÐoÑoÔoˆNÝ œ9 l°1°1°1°a°b°b°5Ô&9¸<ÈÈÈÈ2È3È3ÈÔ;OÐRSÑ;SÐ%TÐZ\Ð]Ñ]Ô]ˆLð Ð)Ý!&¤¨N¸NÐ+KÐQSÐ!TÑ!TÔ!T�ùå!œI n¸!Ð<Ñ<Ô<ÐÝ œ9 ^¸Ð;Ñ;Ô;ÐØ Ð"2°DÐ8Ð8r:   c           
     ó  ‡‡‡— |j         j        }|j                              ¦   «         j        Š|j                             ¦   «         }g }|D ]U}t          j        d|¦  «        }|�'t          | 	                    d¦  «        ¦  «        ‰k     rŒ@| 
                    |¦  «         ŒVt          |¦  «        dk    rt          |j        j        › d�¦  «        ‚t          j        d                     d„ |D ¦   «         ¦  «        ¦  «        Š|j                              ¦   «         j        }	|                      |j         j        ddd ¦  «        }
t)          |
¦  «        5   | ||	¦  «        }d d d ¦  «         n# 1 swxY w Y   t+          |d d dd d¬	¦  «        \  }}|}d Š|�4ˆfd
„|d                              ¦   «         D ¦   «         Šˆfd„|D ¦   «         }i }t/          ¦   «         }|D ]‡}t1          |dd¬¦  «        }|                     |¦  «         |                     ¦   «         D ]I}‰�|‰                     ¦   «         v s‰€-‰                     |¦  «        �|                     |¦  «        ||<   ŒJŒˆˆfd„t9          ‰‰|	z   ¦  «        D ¦   «         }|                     t=          |d¬¦  «        ¦  «         |                     |j        ¦  «         tA          ||tC          |||j         j        ¬¦  «        d ¬¦  «        \  }}|D ]}| "                    d d d ¦  «         Œ| #                    |¦  «         |j$        r/tK          d| j        › d|› dtM          |j$        ¦  «        › �¦  «        ‚| '                    |¦  «         tQ          ||d|tR          ¬¦  «         |S )Nz\.(\d+)r   r   z7 does not seem to register any known MTP layer patternsú|c              3  ó"   K  — | ]
}d |› d�V — ŒdS )ú(ú)NrÈ   )rÂ   Úpatterns     r9   rÅ   z+MtpModel.from_pretrained.<locals>.<genexpr>?  s*   è è € Ð'ZÐ'Z¸G¨¨W¨¨¨Ð'ZÐ'ZÐ'ZÐ'ZÐ'ZÐ'Zr:   FT)Úpretrained_model_name_or_pathÚvariantÚ	gguf_fileÚuse_safetensorsÚ
user_agentÚis_remote_codec                óF   •— i | ]\  }}‰                      |¦  «        ®||“ŒS rƒ   )Úsearch)rÂ   rÉ   rê   Ú	mtp_regexs      €r9   rì   z,MtpModel.from_pretrained.<locals>.<dictcomp>T  s:   ø€ ð ð ð Ù˜˜AÈ9×K[ÒK[Ð\]ÑK^ÔK^ÐKj��1ÐKjÐKjÐKjr:   Ú
weight_mapc                óz   •— g | ]7}t           j                             |¦  «        ‰                     ¦   «         v ¯5|‘Œ8S rÈ   )ÚosÚpathÚbasenameÚvalues)rÂ   ÚfileÚmtp_weight_maps     €r9   rË   z,MtpModel.from_pretrained.<locals>.<listcomp>W  s@   ø€ ÐpÐpÐp $½b¼g×>NÒ>NÈtÑ>TÔ>TÐXf×XmÒXmÑXoÔXoÐ>oÐ>o˜Ð>oÐ>oÐ>or:   ÚptÚcpu)Ú	frameworkrb   c                óH   •— g | ]}t          d |› d�d |‰z
  › d�¬¦  «        ‘ŒS )zlayers.r(   z.mtp_block.)Úsource_patternsÚtarget_patterns)r
   )rÂ   ÚNÚnum_hidden_layerss     €r9   rË   z,MtpModel.from_pretrained.<locals>.<listcomp>j  sY   ø€ ð 
ð 
ð 
ð õ Ø .¨!   Ð@lÈ!ÐN_ÑJ_Ð@lÐ@lÐ@lðñ ô ð
ð 
ð 
r:   )Ú
add_legacy)Úweight_mappingÚ
device_maprc   )rB   Ú
state_dictÚload_configÚtp_planzThe following z weights are missing from z9 (checkpoint keys not matching the conversion mapping?): )rB   r  Úignore_mismatched_sizesÚloading_infor.   )*rR   Úname_or_pathrM   r5  Ú"_keys_to_ignore_on_load_unexpectedÚcopyÚrer$  r¥   Úgroupr  rð   rn   r+   r,   ÚcompileÚjoinr¼   Úget_init_contextrc   r   r   rï   Úsetr   ÚaddÚkeysÚ	get_slicerÕ   Úextendr	   Ú_weight_conversionsr   r   Ú__exit__Ú#_adjust_missing_and_unexpected_keysÚmissing_keysÚRuntimeErrorÚsortedr×   r   r.   )Úclsr»   r8  r5   r  Úmtp_patternsÚfinal_mtp_patternsr  Úmatch_objectr¼   ÚcontextsÚ	mtp_modelÚcheckpoint_filesÚsharded_metadataÚ	mtp_filesÚmtp_state_dictÚall_pointerr,  Úfile_pointerrÉ   Úweight_conversionsr=  Ú_r%  r-  r5  s                          @@@r9   Úfrom_pretrainedzMtpModel.from_pretrained.  s   øøø€ à(2Ô(9Ô(FÐ%Ø&Ô-×=Ò=Ñ?Ô?ÔQÐð "ÔD×IÒIÑKÔKˆð  ÐØ#ð 	/ð 	/ˆGÝœ9 Z°Ñ9Ô9ˆLØÐ'­C°×0BÒ0BÀ1Ñ0EÔ0EÑ,FÔ,FÐIZÒ,ZÐ,ZØØ×%Ò% gÑ.Ô.Ð.Ð.ÝÐ!Ñ"Ô" aÒ'Ð'Ý 
Ô 4Ô =ÐvÐvÐvÑwÔwÐwÝ”J˜sŸxšxÐ'ZÐ'ZÐGYÐ'ZÑ'ZÔ'ZÑZÔZÑ[Ô[ˆ	ð $Ô*×:Ò:Ñ<Ô<ÔKˆØ×'Ò'¨
Ô(9Ô(?ÀÈÈtÑTÔTˆÝ˜XÑ&Ô&ð 	8ð 	8Ø˜˜J¨Ñ7Ô7ˆIð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8õ .LØ*GØØØ ØØ ð.
ñ .
ô .
Ñ*ÐÐ*ð %ˆ	ØˆàÐ'ðð ð ð Ø!1°,Ô!?×!EÒ!EÑ!GÔ!Gðñ ô ˆNð qÐpÐpÐpÐ*:ÐpÑpÔpˆIð ˆÝ‘e”eˆØð 	Bð 	BˆDÝ$ T°TÀ%ÐHÑHÔHˆLØ�OŠO˜LÑ)Ô)Ð)Ø!×&Ò&Ñ(Ô(ð Bð B�à"Ð.°1¸×8KÒ8KÑ8MÔ8MÐ3MÐ3MØ"Ð*¨y×/?Ò/?ÀÑ/BÔ/BÐ/Nà(4×(>Ò(>¸qÑ(AÔ(A�N 1Ñ%øðBð
ð 
ð 
ð 
õ Ð,Ð.?À.Ñ.PÑQÔQð	
ñ 
ô 
Ðð 	×!Ò!Õ">¸yÐUZÐ"[Ñ"[Ô"[Ñ\Ô\Ð\Ø×!Ò! *Ô"@ÑAÔAÐAõ ?ØØ%Ý+Ø1¸jÐPZÔPaÔPgðñ ô ð ð
ñ 
ô 
‰ˆ�að ð 	)ð 	)ˆAØ�JŠJ�t˜T 4Ñ(Ô(Ð(Ð(ð 	×5Ò5°lÑCÔCÐCð Ô$ð 	Ýðo ¤ð oð oÐIfð oð oÝKQÐR^ÔRkÑKlÔKlðoð oñô ð ð 	×%Ò% jÑ1Ô1Ð1åØØ*GØ$)Ø%Ýð	
ñ 	
ô 	
ð 	
ð Ðs   ÅE)Å)E-Å0E-c                ó   — dS ©NTrÈ   ©rQ  s    r9   Ú_can_set_attn_implementationz%MtpModel._can_set_attn_implementation—  ó	   € ð ˆtr:   c                ó   — dS ra  rÈ   rb  s    r9   Ú_can_set_experts_implementationz(MtpModel._can_set_experts_implementationœ  rd  r:   )r»   r   r¼   r¥   )r»   r   )rh   r±   r^   r±   )r¤   r¥   rY   r±   râ   r   rW   r±   )NFNN)rS   r±   rø   r±   rU   rV   rW   rV   râ   rù   r[   rT   rú   r§   rû   rü   rý   rV   r^   r´   rƒ   )r»   r   r^   rº   )r^   r§   )r,   r;   r<   Ú_supports_sdpaÚ_supports_flex_attnÚ_supports_flash_attnr?  Ú_keys_to_ignore_on_load_missingrF   r×   rá   r÷   rz   Úclassmethodr_  rc  rf  r>   r?   s   @r9   rº   rº   h  sB  ø€ € € € € ð €NØÐØÐà*CÐEZÐ)[Ð&à';Ð=RÐ&SÐ#ðð ð ð ð ð ð@Bð Bð Bð Bð	ð 	ð 	ð 	ð+ð +ð +ð +ðh +/àØ7;Ø.2ðW9ð W9ð W9ð W9ð W9ðr ðfð fð fð fñ „[ðfðP ðð ð ñ „[ðð ðð ð ñ „[ðð ð ð ð r:   rº   );Ú
__future__r   r(  rA  Ú	functoolsr   Útypingr   rp   Útorch.nnrK   Úsafetensorsr   Úcache_utilsr   Úconversion_mappingr	   Úcore_model_loadingr
   r   Úmasking_utilsr   r   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   r   r   Úmodels.autor   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.loading_reportr   r   Úconfiguration_utilsr   Úgeneration.logits_processr   Ú
get_loggerr,   r.   ÚModuler!   rA   r~   r—   r    rº   rÈ   r:   r9   ú<module>r     s   ðð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à €€€Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø <Ð <Ð <Ð <Ð <Ð <Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ UÐ UÐ UÐ UÐ UÐ UÐ UÐ Uðð ð ð ð ð ð ð ð ð ð ð ð aÐ `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ø "Ð "Ð "Ð "Ð "Ð "Ø $Ð $Ð $Ð $Ð $Ð $Ø aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aØ 7Ð 7Ð 7Ð 7Ð 7Ð 7ð ð ?Ø%Ð%Ð%Ð%Ð%Ð%Ø5Ð5Ð5Ð5Ð5Ð5Ø>Ð>Ð>Ð>Ð>Ð>ð 
ˆÔ	˜HÑ	%Ô	%€ð;1ð ;1ð ;1ð ;1ð ;1 ¤ñ ;1ô ;1ð ;1ð| ðG
ð G
ð G
ð G
ð G
ñ G
ô G
ñ „ðG
ðT ð9
ð 9
ð 9
ð 9
ð 9
ñ 9
ô 9
ñ „ð9
ðx ð;
ð ;
ð ;
ð ;
ð ;
ñ ;
ô ;
ñ „ð;
ð|-ð -ð -ð -ð -ˆrŒyñ -ô -ð -ð`wð wð wð wð wˆñ wô wð wð wð wr:   