§
    ‚ŠtjË|  ã                   óŒ  — d Z ddlZddlZddlmZ ddlmZmZmZmZ ddlm	Z
 ddlmZmZ ddl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 ddlmZmZ ddlm Z   ej!        e"¦  «        Z#d(d„Z$ G d„ dej%        ¦  «        Z& G d„ dej%        ¦  «        Z' G d„ de¦  «        Z(e G d„ de¦  «        ¦   «         Z)e G d„ de)¦  «        ¦   «         Z* ed¬¦  «         G d„ de)e¦  «        ¦   «         Z+ ed ¬¦  «         G d!„ d"e)¦  «        ¦   «         Z,e G d#„ d$e)¦  «        ¦   «         Z-e G d%„ d&e)¦  «        ¦   «         Z.g d'¢Z/dS ))zPyTorch MPT model.é    N)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚ	LayerNormÚMSELoss)Ú
functionalé   )ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚGradientCheckpointingLayer)Ú)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚQuestionAnsweringModelOutputÚ SequenceClassifierOutputWithPastÚTokenClassifierOutput)ÚPreTrainedModel)Úauto_docstringÚloggingé   )Ú	MptConfigé   c                 ój  — t          j        d|z
  dt           j        |¬¦  «                             ddd|¦  «        }dt	          j        t	          j        | ¦  «        ¦  «        z  }t          j        d|dz   t           j        |¬¦  «                             ¦   «         }|||z  z  }dt          j	        d|¦  «        z  }|                     d|dd¦  «        }|| k    rAt          j
        |dd…ddd…df         |dd…ddd…df         gd¬¦  «        dd…d| …df         }||z  }|                     d¦  «        S )	aª  
    Link to paper: https://huggingface.co/papers/2108.12409 - Alibi tensor is not causal as the original paper mentions, it
    relies on a translation invariance of softmax for quick implementation. This implementation has been copied from
    the alibi implementation of MPT source code that led to slightly different results than the Bloom alibi:
    https://huggingface.co/mosaicml/mpt-7b/blob/main/attention.py#L292
    r   )ÚdtypeÚdeviceé   g      ð?N.©Údimr   )ÚtorchÚarangeÚint32ÚviewÚmathÚceilÚlog2Úint64ÚfloatÚpowÚconcatÚsqueeze)Ú	num_headsÚsequence_lengthÚalibi_bias_maxr   ÚalibiÚnum_heads_power_of_2ÚbaseÚslopess           úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/mpt/modeling_mpt.pyÚbuild_mpt_alibi_tensorr4   *   sH  € õ ŒL˜˜_Ñ,¨aµu´{È6ÐRÑRÔR×WÒWÐXYÐ[\Ð^_ÐapÑqÔq€EØ¥¤	­$¬)°IÑ*>Ô*>Ñ ?Ô ?Ñ?ÐåŒ<˜Ð/°!Ñ3½5¼;ÈvÐVÑVÔV×\Ò\Ñ^Ô^€DØ�>Ð$8Ñ8Ñ9€Dà•5”9˜Q Ñ%Ô%Ñ%€FØ�[Š[˜Ð0°!°QÑ7Ô7€Fà˜yÒ(Ð(Ý”˜v a a a¨¨¨A¨¨s lÔ3°V¸A¸A¸A¸s¸sÀ¸sÀC¸KÔ5HÐIÈqÐQÑQÔQÐRSÐRSÐRSÐU_ÐV_ÐU_ÐadÐRdÔeˆà�F‰N€EØ�=Š=˜ÑÔÐó    c            
       ó|   ‡ — e Zd ZdZddededz  fˆ fd„Z	 	 ddej        dej        de	dz  d	ej        dz  fd
„Z
ˆ xZS )ÚMptAttentionzzMulti-head self attention.
    Using torch or triton attention implementation enables user to also use additive bias.
    NÚconfigÚ	layer_idxc                 ó*  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        | j        | j        z  | _        |j        j        | _        | j        €)dt          j
        | j        | j        z  ¦  «        z  | _        |j        j        | _        |j        j        | _        t          j        | j        d| j        z  d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _        || _        d S )Nr   r	   F©Úbias)ÚsuperÚ__init__Úhidden_sizeÚn_headsÚmax_seq_lenÚmax_seq_lengthÚhead_dimÚattn_configÚsoftmax_scaler$   ÚsqrtÚ
attn_pdropÚattn_dropout_pÚclip_qkvr   ÚLinearÚWqkvÚout_projr9   )Úselfr8   r9   Ú	__class__s      €r3   r>   zMptAttention.__init__F   sè   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔØ”~ˆŒØ$Ô0ˆÔØÔ(¨D¬LÑ8ˆŒØ#Ô/Ô=ˆÔØÔÐ%Ø!"¥T¤Y¨tÔ/?À$Ä,Ñ/NÑ%OÔ%OÑ!OˆDÔà$Ô0Ô;ˆÔØÔ*Ô3ˆŒÝ”I˜dÔ.°°DÔ4DÑ0DÈ5ÐQÑQÔQˆŒ	Ýœ	 $Ô"2°DÔ4DÈ5ÐQÑQÔQˆŒØ"ˆŒˆˆr5   Úhidden_statesÚposition_biasÚpast_key_valuesÚattention_maskc                 ó€  — |j         d d…         \  }}|                      |¦  «        }| j        r"|                     | j         | j        ¬¦  «        }|                     dd¬¦  «        \  }	}
}|	                     ||| j        | j        ¦  «                             dd¦  «        }	|
                     ||| j        | j        ¦  «                             dd¦  «        }
|                     ||| j        | j        ¦  «                             dd¦  «        }|�| 	                    |
|| j
        ¦  «        \  }
}t          j        |	|
                     dd¦  «        ¦  «        | j        z  }|€|n||                     ¦   «         z   }|�«t          |j         ¦  «        dk    r$t!          dt          |j         ¦  «        › �¦  «        ‚|
j         d         }t#          d	|                     d¦  «        |z
  ¦  «        }t#          d	|                     d¦  «        |z
  ¦  «        }|d d …|d …|d …f         }||z   }|�2|                     |t          j        |	j        ¦  «        j        ¦  «        }t.          j                             |                     ¦   «         d¬¦  «                             |j        ¦  «        }t.          j                             || j        | j        ¬
¦  «        }t          j        ||¦  «        }|                     d	ddd¦  «                              ¦   «          !                    ||d¦  «        }|  "                    |¦  «        }||fS )Nr   )ÚminÚmaxr	   r   r   éÿÿÿÿéþÿÿÿz6Expecting position_bias shape to be 3 dimensions, got r   ©ÚpÚtraining)#ÚshaperK   rI   ÚclampÚchunkÚreshaper@   rC   Ú	transposeÚupdater9   r    ÚmatmulrE   Úget_seq_lengthÚlenÚ
ValueErrorrU   ÚsizeÚmasked_fillÚfinfor   rT   r   r   Úsoftmaxr(   ÚtoÚdropoutrH   rZ   ÚpermuteÚ
contiguousr#   rL   )rM   rO   rP   rQ   rR   ÚkwargsÚ
batch_sizeÚ
seq_lengthÚ	mixed_qkvÚquery_statesÚ
key_statesÚvalue_statesÚattention_scoresÚquery_lengthÚ
key_lengthÚposition_bias_query_indexÚposition_bias_key_indexÚattn_weightsÚcontext_statesÚattn_outputs                       r3   ÚforwardzMptAttention.forwardV   s   € ð "/Ô!4°R°a°RÔ!8Ñˆ
�Jà—I’I˜mÑ,Ô,ˆ	ØŒ=ð 	OØ!Ÿš¨T¬]¨NÀÄ˜ÑNÔNˆIà1:·²ÀÈ°Ñ1JÔ1JÑ.ˆ�j ,Ø#×+Ò+¨J¸
ÀDÄLÐRVÔR_Ñ`Ô`×jÒjÐklÐnoÑpÔpˆØ×'Ò'¨
°JÀÄÈdÌmÑ\Ô\×fÒfÐghÐjkÑlÔlˆ
Ø#×+Ò+¨J¸
ÀDÄLÐRVÔR_Ñ`Ô`×jÒjÐklÐnoÑpÔpˆàÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å œ<¨°j×6JÒ6JÈ2ÈrÑ6RÔ6RÑSÔSÐVZÔVhÑhÐØ%4Ð%<�z�zÀ*È×OmÒOmÑOoÔOoÑBoˆàÐ$Ý�=Ô&Ñ'Ô'¨1Ò,Ð,Ý Ð!tÕZ]Ð^kÔ^qÑZrÔZrÐ!tÐ!tÑuÔuÐuØ#Ô)¨"Ô-ˆJå(+¨A¨}×/AÒ/AÀ!Ñ/DÔ/DÀ|Ñ/SÑ(TÔ(TÐ%Ý&)¨!¨]×-?Ò-?ÀÑ-BÔ-BÀZÑ-OÑ&PÔ&PÐ#à)¨!¨!¨!Ð-FÐ-GÐ-GÐI`ÐIaÐIaÐ*aÔbˆMà/°-Ñ?ÐàÐ%Ø/×;Ò;¸NÍEÌKÐXdÔXjÑLkÔLkÔLoÑpÔpÐõ ”}×,Ò,Ð-=×-CÒ-CÑ-EÔ-EÈ2Ð,ÑNÔN×QÒQÐR^ÔRdÑeÔeˆÝ”}×,Ò,¨\¸TÔ=PÐ[_Ô[hÐ,ÑiÔiˆåœ l°LÑAÔAˆØ'×/Ò/°°1°a¸Ñ;Ô;×FÒFÑHÔH×MÒMÈjÐZdÐfhÑiÔiˆØ—m’m NÑ3Ô3ˆà˜LÐ(Ð(r5   ©N)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úintr>   r    ÚTensorr
   r|   Ú__classcell__©rN   s   @r3   r7   r7   A   s´   ø€ € € € € ðð ð#ð #˜yð #°S¸4±Zð #ð #ð #ð #ð #ð #ð( )-Ø.2ð0)ð 0)à”|ð0)ð ”|ð0)ð  ™ð	0)ð
 œ tÑ+ð0)ð 0)ð 0)ð 0)ð 0)ð 0)ð 0)ð 0)r5   r7   c                   óV   ‡ — e Zd Zdefˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚMptMLPr8   c                 ó(  •— t          ¦   «                              ¦   «          |j        }t          j        |d|z  d¬¦  «        | _        t          j        d¬¦  «        | _        t          j        d|z  |d¬¦  «        | _        |j	        j
        | _        d S )Né   Fr;   Únone)Úapproximate)r=   r>   r?   r   rJ   Úup_projÚGELUÚactÚ	down_projrD   rG   Úhidden_dropout)rM   r8   r?   rN   s      €r3   r>   zMptMLP.__init__Š   s�   ø€ Ý‰Œ×ÒÑÔÐØÔ(ˆå”y ¨a°+©oÀEÐJÑJÔJˆŒÝ”7 vÐ.Ñ.Ô.ˆŒÝœ 1 {¡?°KÀeÐLÑLÔLˆŒØ$Ô0Ô;ˆÔÐÐr5   rO   ÚresidualÚreturnc                 óÌ   — |                       |                      |¦  «        ¦  «        }|                      |¦  «        }t          j        || j        | j        ¬¦  «        }||z   }|S )NrX   )rŽ   rŒ   r�   ÚFrj   r�   rZ   )rM   rO   r‘   Úintermediate_outputÚoutputs        r3   r|   zMptMLP.forward“   s^   € ØŸš §¢¨mÑ!<Ô!<Ñ=Ô=ˆà"Ÿnšn¨]Ñ;Ô;Ðå”Ð.°$Ô2EÐPTÔP]Ð^Ñ^Ô^ˆØ˜(Ñ"ˆàˆr5   )	r~   r   r€   r   r>   r    rƒ   r|   r„   r…   s   @r3   r‡   r‡   ‰   ss   ø€ € € € € ð<˜yð <ð <ð <ð <ð <ð <ð U¤\ð ¸U¼\ð ÈeÌlð ð ð ð ð ð ð ð r5   r‡   c                   ó|   ‡ — e Zd Zddededz  fˆ fd„Z	 	 	 ddej        dej        dej        d	edz  d
e	de	fd„Z
ˆ xZS )ÚMptBlockNr8   r9   c                 óº  •— t          ¦   «                              ¦   «          |j        }t          ||j        ¬¦  «        | _        d | j        _        |j        | _        t          ||¦  «        | _
        t          ||j        ¬¦  «        | _        d | j        _        t          |¦  «        | _        |j        j        | _        t#          j        | j        ¦  «        | _        d S )N©Úeps)r=   r>   r?   r   Úlayer_norm_epsilonÚnorm_1r<   r@   r,   r7   ÚattnÚnorm_2r‡   ÚffnrD   rG   Údropout_rater   ÚDropoutÚresid_attn_dropout)rM   r8   r9   r?   rN   s       €r3   r>   zMptBlock.__init__Ÿ   s³   ø€ Ý‰Œ×ÒÑÔÐØÔ(ˆå °Ô1JÐKÑKÔKˆŒàˆŒÔàœˆŒÝ  ¨Ñ3Ô3ˆŒ	å °Ô1JÐKÑKÔKˆŒàˆŒÔå˜&‘>”>ˆŒà"Ô.Ô9ˆÔÝ"$¤*¨TÔ->Ñ"?Ô"?ˆÔÐÐr5   FrO   rP   rR   Ú
layer_pastÚ	use_cacheÚoutput_attentionsc                 óú   — |                       |¦  «        }|}	|                      ||||¬¦  «        \  }
}|                      |
¦  «        |	z   }|                      |¦  «        }|}	|                      ||	¦  «        }||fS )N)rP   rR   rQ   )r�   rž   r£   rŸ   r    )rM   rO   rP   rR   r¤   r¥   r¦   rm   Úlayernorm_outputr‘   Úattn_outputsry   r–   s                r3   r|   zMptBlock.forward³   sš   € ð  Ÿ;š; }Ñ5Ô5Ðà ˆð &*§Y¢YØØ'Ø)Ø&ð	 &/ñ &
ô &
Ñ"ˆ�lð ×/Ò/°Ñ=Ô=ÀÑHˆàŸ;š; }Ñ5Ô5Ðð !ˆð —’Ð*¨HÑ5Ô5ˆØ�|Ð#Ð#r5   r}   )NFF)r~   r   r€   r   r‚   r>   r    rƒ   r
   Úboolr|   r„   r…   s   @r3   r˜   r˜   ž   sÅ   ø€ € € € € ð@ð @˜yð @°S¸4±Zð @ð @ð @ð @ð @ð @ð2 $(ØØ"'ð!$ð !$à”|ð!$ð ”|ð!$ð œð	!$ð
 ˜D‘Lð!$ð ð!$ð  ð!$ð !$ð !$ð !$ð !$ð !$ð !$ð !$r5   r˜   c                   ó(   — e Zd ZU eed<   dZdZdgZdS )ÚMptPreTrainedModelr8   ÚtransformerTr˜   N)r~   r   r€   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modules© r5   r3   r¬   r¬   ×   s2   € € € € € € àÐÐÑØ%ÐØ&*Ð#Ø#˜ÐÐÐr5   r¬   c                   ó  ‡ — e Zd Zdefˆ fd„Zd„ Zdd„Zdej        fd„Z	e
	 	 	 	 	 	 	 	 dd	ej        dz  d
edz  dej        dz  dej        dz  dedz  dedz  dedz  dedz  deej        df         ez  fd„¦   «         Zˆ xZS )ÚMptModelr8   c                 óÀ  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        t          j        ‰j        | j        ¦  «        | _        t          j	        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          | j        ‰j        ¬¦  «        | _        d | j        _        d| _        |                      ¦   «          d S )Nc                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))r9   )r˜   )Ú.0Úir8   s     €r3   ú
<listcomp>z%MptModel.__init__.<locals>.<listcomp>ë   s&   ø€ Ð$cÐ$cÐ$cÀq¥X¨fÀÐ%BÑ%BÔ%BÐ$cÐ$cÐ$cr5   rš   F)r=   r>   r?   r@   r,   r   Ú	EmbeddingÚ
vocab_sizeÚwteÚ
ModuleListÚrangeÚn_layersÚblocksr   rœ   Únorm_fr<   Úgradient_checkpointingÚ	post_init©rM   r8   rN   s    `€r3   r>   zMptModel.__init__á   sÅ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð à!Ô-ˆÔØœˆŒõ ”< Ô 1°4Ô3CÑDÔDˆŒõ ”mÐ$cÐ$cÐ$cÐ$cÍEÐRXÔRaÑLbÔLbÐ$cÑ$cÔ$cÑdÔdˆŒõ   Ô 0°fÔ6OÐPÑPÔPˆŒàˆŒÔà&+ˆÔ#ð 	�ŠÑÔÐÐÐr5   c                 ó   — | j         S r}   ©r¼   )rM   s    r3   Úget_input_embeddingszMptModel.get_input_embeddings÷   s	   € ØŒxˆr5   r   Nc                 ó&   — t          ||||¦  «        S r}   )r4   )rM   r,   r-   r.   r   s        r3   r4   zMptModel.build_mpt_alibi_tensorú   s   € Ý% i°À.ÐRXÑYÔYÐYr5   Únew_embeddingsc                 ó   — || _         d S r}   rÆ   ©rM   rÉ   s     r3   Úset_input_embeddingszMptModel.set_input_embeddingsý   s   € Ø!ˆŒˆˆr5   Ú	input_idsrQ   rR   Úinputs_embedsr¥   r¦   Úoutput_hidden_statesÚreturn_dictr’   .c	           	      ó¢  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|�|�t          d¦  «        ‚|�|j        \  }
}n|�|j        \  }
}}nt          d¦  «        ‚| j        r%| j        r|rt           
                    d¦  «         d}|€|                      |¦  «        }|r|€t          | j         ¬¦  «        }|}|rdnd}|rdnd}|                      | j        | j         j        |j        ¬¦  «        }t#          | j         |||¬	¦  «                             t&          j        ¦  «        }| j        D ]1}|r||fz   } |||||||¬
¦  «        }|d         }|r||d         fz   }Œ2|                      |¦  «        }|r||fz   }|st/          d„ ||||fD ¦   «         ¦  «        S t1          ||||¬¦  «        S )á²  
        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):
            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else `past_key_values.get_seq_length()`
            (`sequence_length` of input past key value states). Indices of input sequence tokens in the vocabulary.

            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as
            `input_ids`.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        NzDYou cannot specify both input_ids and inputs_embeds at the same timez5You have to specify either input_ids or inputs_embedszZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...F)r8   r²   ©r   )r8   rÎ   rR   rQ   )r¤   rR   r¥   r¦   rP   r   r   c              3   ó   K  — | ]}|®|V — Œ	d S r}   r²   )r·   Úvs     r3   ú	<genexpr>z#MptModel.forward.<locals>.<genexpr>^  s1   è è € ð ð ØÐghÐgt�ÐgtÐgtÐgtÐgtðð r5   )Úlast_hidden_staterQ   rO   Ú
attentions)r8   r¦   rÏ   r¥   rÐ   rd   r[   rÂ   rZ   ÚloggerÚwarning_oncer¼   r   r4   r,   rA   r   r   ri   r    rª   rÀ   rÁ   Útupler   )rM   rÍ   rQ   rR   rÎ   r¥   r¦   rÏ   rÐ   rm   rn   ro   Ú_rO   Úall_self_attentionsÚall_hidden_statesr/   Úcausal_maskÚblockÚoutputss                       r3   r|   zMptModel.forward   s­  € ð4 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð "+Ð!6�I�I¸D¼KÔ<Qˆ	Ø%0Ð%<�k�kÀ$Ä+ÔBYˆàÐ  ]Ð%>ÝÐcÑdÔdÐdØÐ"Ø%.¤_Ñ"ˆJ˜
˜
ØÐ&Ø(5Ô(;Ñ%ˆJ˜
 A AåÐTÑUÔUÐUàÔ&ð 	"¨4¬=ð 	"Øð "Ý×#Ò#Øpñô ð ð "�	àÐ Ø ŸHšH YÑ/Ô/ˆMàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOà%ˆà$5Ð?˜b˜b¸4ÐØ"6Ð@˜B˜B¸DÐð ×+Ò+¨D¬N¸D¼KÔ<SÐ\iÔ\pÐ+ÑqÔqˆå(Ø”;Ø'Ø)Ø+ð	
ñ 
ô 
÷
 Š"�UŒZ‰.Œ.ð 	ð ”[ð 	Jð 	JˆEØ#ð IØ$5¸Ð8HÑ$HÐ!à�eØØ*Ø*Ø#Ø"3Ø#ðñ ô ˆGð $ AœJˆMØ ð JØ&9¸WÀQ¼Z¸MÑ&IÐ#øð Ÿš MÑ2Ô2ˆàð 	EØ 1°]Ð4DÑ DÐàð 	Ýð ð Ø)¨?Ð<MÐObÐcðñ ô ñ ô ð õ 9Ø+Ø+Ø+Ø*ð	
ñ 
ô 
ð 	
r5   ©r   N©NNNNNNNN)r~   r   r€   r   r>   rÇ   r4   r    rƒ   rÌ   r   Ú
LongTensorr
   rª   rÛ   r   r|   r„   r…   s   @r3   r´   r´   ß   sn  ø€ € € € € ð˜yð ð ð ð ð ð ð,ð ð ðZð Zð Zð Zð"°5´<ð "ð "ð "ð "ð ð .2Ø(,Ø.2Ø15Ø!%Ø)-Ø,0Ø#'ðf
ð f
àÔ# dÑ*ðf
ð  ™ðf
ð œ tÑ+ð	f
ð
 Ô'¨$Ñ.ðf
ð ˜$‘;ðf
ð   $™;ðf
ð # T™kðf
ð ˜D‘[ðf
ð 
ˆuŒ|˜SÐ Ô	!Ð$MÑ	Mðf
ð f
ð f
ñ „^ðf
ð f
ð f
ð f
ð f
r5   r´   z†
    The MPT Model transformer with a language modeling head on top (linear layer with weights tied to the input
    embeddings).
    )Úcustom_introc                   ó&  ‡ — e Zd ZddiZdefˆ fd„Zdej        fd„Ze		 	 	 	 	 	 	 	 	 	 dd	ej
        dz  d
edz  dej        dz  dej        dz  dej        dz  dedz  dedz  dedz  dedz  deej        z  deej                 ez  fd„¦   «         Zˆ xZS )ÚMptForCausalLMzlm_head.weightztransformer.wte.weightr8   c                 óæ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S ©NFr;   )
r=   r>   r´   r­   r   rJ   r?   r»   Úlm_headrÃ   rÄ   s     €r3   r>   zMptForCausalLM.__init__s  sa   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý# FÑ+Ô+ˆÔÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr5   rÉ   c                 ó   — || _         d S r}   )rê   rË   s     r3   Úset_output_embeddingsz$MptForCausalLM.set_output_embeddings{  s   € Ø%ˆŒˆˆr5   Nr   rÍ   rQ   rR   rÎ   Úlabelsr¥   r¦   rÏ   rÐ   Úlogits_to_keepr’   c           
      ó¸  — |	�|	n| j         j        }	|                      ||||||||	¬¦  «        }|d         }t          |
t          ¦  «        rt          |
 d¦  «        n|
}|                      |dd…|dd…f         ¦  «        }d}|� | j        d||| j         j        dœ|¤Ž}|	s|f|dd…         z   }|�|f|z   n|S t          |||j
        |j        |j        ¬¦  «        S )a\  
        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):
            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else `past_key_values.get_seq_length()`
            (`sequence_length` of input past key value states). Indices of input sequence tokens in the vocabulary.

            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as
            `input_ids`.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set
            `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`
            are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`
        N©rQ   rR   rÎ   r¥   r¦   rÏ   rÐ   r   )Úlogitsrí   r»   r   ©Úlossrñ   rQ   rO   rØ   r²   )r8   rÐ   r­   Ú
isinstancer‚   Úslicerê   Úloss_functionr»   r   rQ   rO   rØ   )rM   rÍ   rQ   rR   rÎ   rí   r¥   r¦   rÏ   rÐ   rî   rm   Útransformer_outputsrO   Úslice_indicesrñ   ró   r–   s                     r3   r|   zMptForCausalLM.forward~  s:  € ð@ &1Ð%<�k�kÀ$Ä+ÔBYˆà"×.Ò.ØØ+Ø)Ø'ØØ/Ø!5Ø#ð /ñ 	
ô 	
Ðð ,¨AÔ.ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô%Ðp¨V¸FÈtÌ{ÔOeÐpÐpÐioÐpÐpˆDàð 	FØ�YÐ!4°Q°R°RÔ!8Ñ8ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå0ØØØ/Ô?Ø-Ô;Ø*Ô5ð
ñ 
ô 
ð 	
r5   )
NNNNNNNNNr   )r~   r   r€   Ú_tied_weights_keysr   r>   r    rƒ   rì   r   rä   r
   rª   r‚   rÛ   r   r|   r„   r…   s   @r3   rç   rç   j  se  ø€ € € € € ð +Ð,DÐEÐð˜yð ð ð ð ð ð ð&°E´Lð &ð &ð &ð &ð ð .2Ø(,Ø.2Ø-1Ø&*Ø!%Ø)-Ø,0Ø#'Ø-.ð?
ð ?
àÔ# dÑ*ð?
ð  ™ð?
ð œ tÑ+ð	?
ð
 ”| dÑ*ð?
ð ”˜tÑ#ð?
ð ˜$‘;ð?
ð   $™;ð?
ð # T™kð?
ð ˜D‘[ð?
ð ˜eœlÑ*ð?
ð 
ˆuŒ|Ô	Ð@Ñ	@ð?
ð ?
ð ?
ñ „^ð?
ð ?
ð ?
ð ?
ð ?
r5   rç   aÒ  
    The MPT Model transformer with a sequence classification head on top (linear layer).

    [`MptForSequenceClassification`] uses the last token in order to do the classification, as other causal models
    (e.g. GPT-1) do.

    Since it does classification on the last token, it requires to know the position of the last token. If a
    `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in each row. If
    no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot guess the
    padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last value in
    each row of the batch).
    c                   ó  ‡ — e Zd Zdefˆ fd„Zdej        fd„Ze	 	 	 	 	 	 	 	 	 ddej	        dz  de
dz  dej        dz  d	ej        dz  d
ej        dz  dedz  dedz  dedz  dedz  deej                 ez  fd„¦   «         Zˆ xZS )ÚMptForSequenceClassificationr8   c                 óþ   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S ré   )
r=   r>   Ú
num_labelsr´   r­   r   rJ   r?   ÚscorerÃ   rÄ   s     €r3   r>   z%MptForSequenceClassification.__init__Ð  sk   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ# FÑ+Ô+ˆÔÝ”Y˜vÔ1°6Ô3DÈ5ÐQÑQÔQˆŒ
ð 	�ŠÑÔÐÐÐr5   rÉ   c                 ó   — || _         d S r}   )rþ   rË   s     r3   rì   z2MptForSequenceClassification.set_output_embeddingsÙ  s   € Ø#ˆŒ
ˆ
ˆ
r5   NrÍ   rQ   rR   rÎ   rí   r¥   r¦   rÏ   rÐ   r’   c
           
      ó¦  — |	�|	n| j         j        }	|                      ||||||||	¬¦  «        }|d         }|                      |¦  «        }|�|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         j        €f| j        dk    rd
| j         _        nN| j        dk    r7|j        t          j        k    s|j        t          j        k    rd| j         _        nd| j         _        | j         j        d
k    rWt-          ¦   «         }| j        dk    r1 ||                     ¦   «         |                     ¦   «         ¦  «        }nb |||¦  «        }nU| j         j        dk    rt1          ¦   «         } |||¦  «        }n*| j         j        dk    rt3          ¦   «         } |||¦  «        }|	s|f|dd…         z   }|�|f|z   n|S t5          |||j        |j        |j        ¬¦  «        S )á6  
        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):
            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else `past_key_values.get_seq_length()`
            (`sequence_length` of input past key value states). Indices of input sequence tokens in the vocabulary.

            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as
            `input_ids`.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nrð   r   r   z=Cannot handle batch sizes > 1 if no padding token is defined.rV   )r   r   zŠ will not detect padding tokens in `inputs_embeds`. Results may be unexpected if using padding tokens in conjunction with `inputs_embeds.`rÓ   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrò   )r8   rÐ   r­   rþ   r[   Úpad_token_idrd   ri   r   r    r"   r!   ÚargmaxrÙ   rÚ   rN   r~   Úproblem_typerý   r   Úlongr‚   r   r+   r   r   r   rQ   rO   rØ   )rM   rÍ   rQ   rR   rÎ   rí   r¥   r¦   rÏ   rÐ   rm   r÷   rO   rñ   rn   Úlast_non_pad_tokenÚnon_pad_maskÚtoken_indicesÚpooled_logitsró   Úloss_fctr–   s                         r3   r|   z$MptForSequenceClassification.forwardÜ  s  € ð> &1Ð%<�k�kÀ$Ä+ÔBYˆà"×.Ò.ØØ+Ø)Ø'ØØ/Ø!5Ø#ð /ñ 	
ô 	
Ðð ,¨AÔ.ˆØ—’˜MÑ*Ô*ˆàÐ Ø"œ¨Ô+ˆJˆJà&Ô,¨QÔ/ˆJàŒ;Ô#Ð+°
¸a²°ÝÐ\Ñ]Ô]Ð]ØŒ;Ô#Ð+Ø!#ÐÐØÐ"à%¨¬Ô)AÒA×EÒEÀfÄmÕUZÔU`ÑaÔaˆ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ˆàˆØÑØŒ{Ô'Ð/Ø”? aÒ'Ð'Ø/;�D”KÔ,Ð,Ø”_ qÒ(Ð(¨f¬l½e¼jÒ.HÐ.HÈFÌLÕ\aÔ\eÒLeÐLeØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”? aÒ'Ð'Ø#˜8 M×$9Ò$9Ñ$;Ô$;¸V¿^º^Ñ=MÔ=MÑNÔN�D�Dà#˜8 M°6Ñ:Ô:�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x ¨vÑ6Ô6��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨vÑ6Ô6�Øð 	FØ#Ð%Ð(;¸A¸B¸BÔ(?Ñ?ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå/ØØ Ø/Ô?Ø-Ô;Ø*Ô5ð
ñ 
ô 
ð 	
r5   ©	NNNNNNNNN)r~   r   r€   r   r>   r    rƒ   rì   r   rä   r
   rª   rÛ   r   r|   r„   r…   s   @r3   rû   rû   Á  sV  ø€ € € € € ð˜yð ð ð ð ð ð ð$°E´Lð $ð $ð $ð $ð ð .2Ø(,Ø.2Ø-1Ø&*Ø!%Ø)-Ø,0Ø#'ðe
ð e
àÔ# dÑ*ðe
ð  ™ðe
ð œ tÑ+ð	e
ð
 ”| dÑ*ðe
ð ”˜tÑ#ðe
ð ˜$‘;ðe
ð   $™;ðe
ð # T™kðe
ð ˜D‘[ðe
ð 
ˆuŒ|Ô	Ð?Ñ	?ðe
ð e
ð e
ñ „^ðe
ð e
ð e
ð e
ð e
r5   rû   c                   óò   ‡ — e Zd Zdefˆ fd„Ze	 	 	 	 	 	 	 	 	 ddej        dz  dedz  dej	        dz  dej	        dz  dej	        dz  d	e
dz  d
e
dz  de
dz  de
dz  deej	                 ez  fd„¦   «         Zˆ xZS )ÚMptForTokenClassificationr8   c                 ó¬  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          |d¦  «        r|j        �|j        }n!t          |d¦  «        r|j        �|j        }nd}t          j	        |¦  «        | _
        t          j        |j        |j        ¦  «        | _        |                      ¦   «          d S )NÚclassifier_dropoutr�   gš™™™™™¹?)r=   r>   rý   r´   r­   Úhasattrr  r�   r   r¢   rj   rJ   r?   Ú
classifierrÃ   )rM   r8   r  rN   s      €r3   r>   z"MptForTokenClassification.__init__G  sÌ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå# FÑ+Ô+ˆÔÝ�6Ð/Ñ0Ô0ð 	%°VÔ5NÐ5ZØ!'Ô!:ÐÐÝ�VÐ-Ñ.Ô.ð 	%°6Ô3HÐ3TØ!'Ô!6ÐÐà!$ÐÝ”zÐ"4Ñ5Ô5ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr5   NrÍ   rQ   rR   rÎ   rí   r¥   r¦   rÏ   rÐ   r’   c
           
      ó  — |	�|	n| j         j        }	|                      ||||||||	¬¦  «        }|d         }|                      |¦  «        }|                      |¦  «        }d}|�p|                     |j        ¦  «        }|j        \  }}t          ¦   «         } || 	                    ||z  | j
        ¦  «        | 	                    ||z  ¦  «        ¦  «        }|	s|f|dd…         z   }|�|f|z   n|S t          |||j        |j        ¬¦  «        S )r  Nrð   r   r   )ró   rñ   rO   rØ   )r8   rÐ   r­   rj   r  ri   r   r[   r   r#   rý   r   rO   rØ   )rM   rÍ   rQ   rR   rÎ   rí   r¥   r¦   rÏ   rÐ   Údeprecated_argumentsr÷   rO   rñ   ró   rn   ro   r  r–   s                      r3   r|   z!MptForTokenClassification.forwardX  sL  € ð> &1Ð%<�k�kÀ$Ä+ÔBYˆà"×.Ò.ØØ+Ø)Ø'ØØ/Ø!5Ø#ð /ñ 	
ô 	
Ðð ,¨AÔ.ˆØŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆàˆØÐà—Y’Y˜vœ}Ñ-Ô-ˆFØ%+¤\Ñ"ˆJ˜
Ý'Ñ)Ô)ˆHØ�8Ø—’˜J¨Ñ3°T´_ÑEÔEÀvÇ{Â{ÐS]Ð`jÑSjÑGkÔGkñô ˆDð ð 	FØ�YÐ!4°Q°R°RÔ!8Ñ8ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå$ØØØ-Ô;Ø*Ô5ð	
ñ 
ô 
ð 	
r5   r  )r~   r   r€   r   r>   r   r    rä   r
   rƒ   rª   rÛ   r   r|   r„   r…   s   @r3   r  r  E  s9  ø€ € € € € ð˜yð ð ð ð ð ð ð" ð .2Ø(,Ø.2Ø-1Ø&*Ø!%Ø)-Ø,0Ø#'ðB
ð B
àÔ# dÑ*ðB
ð  ™ðB
ð œ tÑ+ð	B
ð
 ”| dÑ*ðB
ð ”˜tÑ#ðB
ð ˜$‘;ðB
ð   $™;ðB
ð # T™kðB
ð ˜D‘[ðB
ð 
ˆuŒ|Ô	Ð4Ñ	4ðB
ð B
ð B
ñ „^ðB
ð B
ð B
ð B
ð B
r5   r  c                   óÔ   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  dej        dz  dedz  d	edz  d
edz  de	e
z  fd„¦   «         Zˆ xZS )ÚMptForQuestionAnsweringc                 óØ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        d¦  «        | _        |                      ¦   «          d S )Nr   )	r=   r>   r´   r­   r   rJ   r?   Ú
qa_outputsrÃ   rÄ   s     €r3   r>   z MptForQuestionAnswering.__init__   sY   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý# FÑ+Ô+ˆÔÝœ) FÔ$6¸Ñ:Ô:ˆŒð 	�ŠÑÔÐÐÐr5   NrÍ   rR   rÎ   Ústart_positionsÚend_positionsr¦   rÏ   rÐ   r’   c	                 óª  — |�|n| j         j        }|                      ||||||¬¦  «        }
|
d         }|                      |¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d}|�ç|�åt          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }|                     d¦  «        }| 	                    d|¦  «        }| 	                    d|¦  «        }t          |¬¦  «        } |||¦  «        } |||¦  «        }||z   dz  }|s||f|
dd…         z   }|�|f|z   n|S t          ||||
j        |
j        ¬	¦  «        S )
rÒ   N)rR   rÎ   r¦   rÏ   rÐ   r   r   rV   r   )Úignore_indexr   )ró   Ústart_logitsÚ
end_logitsrO   rØ   )r8   rÐ   r­   r  Úsplitr+   rl   rc   re   r\   r   r   rO   rØ   )rM   rÍ   rR   rÎ   r  r  r¦   rÏ   rÐ   rm   rá   Úsequence_outputrñ   r  r   Ú
total_lossÚignored_indexr  Ú
start_lossÚend_lossr–   s                        r3   r|   zMptForQuestionAnswering.forward¨  s  € ð4 &1Ð%<�k�kÀ$Ä+ÔBYˆà×"Ò"ØØ)Ø'Ø/Ø!5Ø#ð #ñ 
ô 
ˆð " !œ*ˆà—’ Ñ1Ô1ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"9Ò"9¸"Ñ"=Ô"=�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨1Ò,Ð,Ø -× 5Ò 5°bÑ 9Ô 9�à(×-Ò-¨aÑ0Ô0ˆMØ-×3Ò3°A°}ÑEÔEˆOØ)×/Ò/°°=ÑAÔAˆMå'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJàð 	RØ" JÐ/°'¸!¸"¸"´+Ñ=ˆFØ/9Ð/E�Z�M FÑ*Ð*È6ÐQå+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r5   rã   )r~   r   r€   r>   r   r    rä   ÚFloatTensorrª   rÛ   r   r|   r„   r…   s   @r3   r  r  ž  s  ø€ € € € € ðð ð ð ð ð ð .2Ø37Ø26Ø37Ø15Ø)-Ø,0Ø#'ðF
ð F
àÔ# dÑ*ðF
ð Ô)¨DÑ0ðF
ð Ô(¨4Ñ/ð	F
ð
 Ô)¨DÑ0ðF
ð Ô'¨$Ñ.ðF
ð   $™;ðF
ð # T™kðF
ð ˜D‘[ðF
ð 
Ð-Ñ	-ðF
ð F
ð F
ñ „^ðF
ð F
ð F
ð F
ð F
r5   r  )rç   r´   r¬   rû   r  r  râ   )0r�   r$   r    r   Útorch.nnr   r   r   r   r   r”   Úcache_utilsr
   r   Ú
generationr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   Úutilsr   r   Úconfiguration_mptr   Ú
get_loggerr~   rÙ   r4   ÚModuler7   r‡   r˜   r¬   r´   rç   rû   r  r  Ú__all__r²   r5   r3   ú<module>r4     s­  ðð Ð à €€€à €€€Ø Ð Ð Ð Ð Ð Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ $Ð $Ð $Ð $Ð $Ð $à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø (Ð (Ð (Ð (Ð (Ð (ð 
ˆÔ	˜HÑ	%Ô	%€ðð ð ð ð.E)ð E)ð E)ð E)ð E)�2”9ñ E)ô E)ð E)ðPð ð ð ð ˆRŒYñ ô ð ð*6$ð 6$ð 6$ð 6$ð 6$Ð)ñ 6$ô 6$ð 6$ðr ð%ð %ð %ð %ð %˜ñ %ô %ñ „ð%ð ðG
ð G
ð G
ð G
ð G
Ð!ñ G
ô G
ñ „ðG
ðT €ððñ ô ðN
ð N
ð N
ð N
ð N
Ð'¨ñ N
ô N
ñô ðN
ðb €ððñ ô ðs
ð s
ð s
ð s
ð s
Ð#5ñ s
ô s
ñô ðs
ðl ðU
ð U
ð U
ð U
ð U
Ð 2ñ U
ô U
ñ „ðU
ðp ðP
ð P
ð P
ð P
ð P
Ð0ñ P
ô P
ñ „ðP
ðfð ð €€€r5   