§
    ‚Štj½¦  ã                   óŽ  — d Z ddl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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mZmZmZmZ ddl m!Z!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l0m1Z1  e*j2        e3¦  «        Z4dej5        de6de6fd„Z7 G d„ dej8        ¦  «        Z9 G d„ dej8        ¦  «        Z:	 	 d?dej;        d ej5        d!ej5        d"ej5        d#ej5        dz  d$e<dz  d%e<d&e$e&         fd'„Z= G d(„ d)ej;        ¦  «        Z> G d*„ d+e¦  «        Z? G d,„ d-e¦  «        Z@e' G d.„ d/e"¦  «        ¦   «         ZA G d0„ d1eA¦  «        ZB G d2„ d3eA¦  «        ZCe' G d4„ d5eA¦  «        ¦   «         ZD e'd6¬7¦  «         G d8„ d9eAe¦  «        ¦   «         ZE G d:„ d;eA¦  «        ZF G d<„ d=eAe¦  «        ZGg d>¢ZHdS )@zPyTorch Blenderbot model.é    N)ÚCallable)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚ)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚSeq2SeqLMOutputÚSeq2SeqModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_torchdynamo_compilingÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚBlenderbotConfigÚ	input_idsÚpad_token_idÚdecoder_start_token_idc                 óô   — |                       | j        ¦  «        }| dd…dd…f                              ¦   «         |dd…dd…f<   ||dd…df<   |€t          d¦  «        ‚|                     |dk    |¦  «         |S )z1
    Shift input ids one token to the right.
    Néÿÿÿÿr!   r   z1self.model.config.pad_token_id has to be defined.iœÿÿÿ)Ú	new_zerosÚshapeÚcloneÚ
ValueErrorÚmasked_fill_)r#   r$   r%   Úshifted_input_idss       úp/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/blenderbot/modeling_blenderbot.pyÚshift_tokens_rightr/   1   s˜   € ð "×+Ò+¨I¬OÑ<Ô<ÐØ(¨¨¨¨C¨R¨C¨Ô0×6Ò6Ñ8Ô8Ð�a�a�a˜˜˜�eÑØ4Ð�a�a�a˜�dÑàÐÝÐLÑMÔMÐMà×"Ò"Ð#4¸Ò#<¸lÑKÔKÐKàÐó    c                   ób   ‡ — e Zd ZdZdedefˆ fd„Z	 ddej        ded	ej        dz  fˆ fd
„Z	ˆ xZ
S )Ú$BlenderbotLearnedPositionalEmbeddingzN
    This module learns positional embeddings up to a fixed maximum size.
    Únum_embeddingsÚembedding_dimc                 óL   •— t          ¦   «                              ||¦  «         d S ©N)ÚsuperÚ__init__)Úselfr3   r4   Ú	__class__s      €r.   r8   z-BlenderbotLearnedPositionalEmbedding.__init__F   s#   ø€ Ý‰Œ×Ò˜¨Ñ7Ô7Ð7Ð7Ð7r0   r   NÚinput_ids_shapeÚpast_key_values_lengthÚposition_idsc                 óÂ   •— |€<|dd…         \  }}t          j        |||z   t           j        | j        j        ¬¦  «        }t          ¦   «                              |¦  «        S )z3`input_ids_shape` is expected to be [bsz x seqlen].Né   )ÚdtypeÚdevice)ÚtorchÚarangeÚlongÚweightrA   r7   Úforward)r9   r;   r<   r=   ÚbszÚseq_lenr:   s         €r.   rF   z,BlenderbotLearnedPositionalEmbedding.forwardI   se   ø€ ð ÐØ*¨2¨A¨2Ô.‰LˆC�Ý œ<Ø&Ð(>ÀÑ(HÕPUÔPZÐcgÔcnÔcuðñ ô ˆLõ ‰wŒw�Š˜|Ñ,Ô,Ð,r0   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr8   rB   ÚSizeÚTensorrF   Ú__classcell__©r:   s   @r.   r2   r2   A   s¢   ø€ € € € € ðð ð8 sð 8¸3ð 8ð 8ð 8ð 8ð 8ð 8ð quð	-ð 	-Ø$œzð	-ØCFð	-ØZ_ÔZfÐimÑZmð	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-r0   r2   c            
       óV   ‡ — e Zd ZdZddededededz  fˆ fd„Zd	ej        fˆ fd
„Z	ˆ xZ
S )ÚBlenderbotScaledWordEmbeddingz\
    This module overrides nn.Embeddings' forward by multiplying with embeddings scale.
    ç      ð?r3   r4   Úpadding_idxÚembed_scaleNc                 ó\   •— t          ¦   «                              |||¦  «         || _        d S r6   )r7   r8   rV   )r9   r3   r4   rU   rV   r:   s        €r.   r8   z&BlenderbotScaledWordEmbedding.__init__[   s-   ø€ Ý‰Œ×Ò˜¨¸ÑDÔDÐDØ&ˆÔÐÐr0   r#   c                 óV   •— t          ¦   «                              |¦  «        | j        z  S r6   )r7   rF   rV   )r9   r#   r:   s     €r.   rF   z%BlenderbotScaledWordEmbedding.forward_   s!   ø€ Ý‰wŒw�Š˜yÑ)Ô)¨DÔ,<Ñ<Ð<r0   )rT   )rI   rJ   rK   rL   rM   Úfloatr8   rB   rO   rF   rP   rQ   s   @r.   rS   rS   V   s–   ø€ € € € € ðð ð'ð ' sð '¸3ð 'ÈSð 'Ð_dÐgkÑ_kð 'ð 'ð 'ð 'ð 'ð 'ð= ¤ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =r0   rS   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr'   ç      à¿r?   r   ©Údim©ÚpÚtrainingr!   )
ÚsizerB   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxra   ri   Ú
contiguous)
r[   r\   r]   r^   r_   r`   ra   rb   Úattn_weightsÚattn_outputs
             r.   Úeager_attention_forwardrr   d   sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r0   c                   óì   ‡ — e Zd ZdZ	 	 	 	 	 	 ddededed	ed
edededz  dedz  fˆ fd„Z	 	 	 dde	j
        de	j
        dz  dedz  de	j
        dz  dee         dee	j
        e	j
        dz  f         fd„Zˆ xZS )ÚBlenderbotAttentionz=Multi-headed attention from 'Attention Is All You Need' paperrZ   FTNÚ	embed_dimÚ	num_headsra   Ú
is_decoderÚbiasÚ	is_causalÚconfigÚ	layer_idxc	                 óz  •— t          ¦   «                              ¦   «          || _        || _        || _        ||z  | _        || _        | j        |z  | j        k    rt          d| j        › d|› d�¦  «        ‚| j        dz  | _        || _	        || _
        || _        |€/| j	        r(t                               d| j        j        › d�¦  «         t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).rd   zInstantiating a decoder z¸ without passing `layer_idx` is not recommended and will lead to errors during the forward call, if caching is used. Please make sure to provide a `layer_idx` when creating this class.©rx   )r7   r8   ru   rv   ra   Úhead_dimrz   r+   r`   rw   ry   r{   ÚloggerÚwarning_oncer:   rI   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)
r9   ru   rv   ra   rw   rx   ry   rz   r{   r:   s
            €r.   r8   zBlenderbotAttention.__init__„   sY  ø€ õ 	‰Œ×ÒÑÔÐØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒàŒM˜IÑ%¨$¬.Ò8Ð8Ýð3ÈdÌnð 3ð 3Ø%.ð3ð 3ð 3ñô ð ð ”} dÑ*ˆŒØ$ˆŒØ"ˆŒØ"ˆŒØÐ ¤ÐÝ×Òð,¨4¬>Ô+Bð ,ð ,ð ,ñô ð õ ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝœ	 )¨Y¸TÐBÑBÔBˆŒˆˆr0   Úhidden_statesÚkey_value_statesÚpast_key_valuesr_   rb   Úreturnc                 óŽ  — |du}|j         dd…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }	d}
|�Ht          |t          ¦  «        r1|j                             | j	        ¦  «        }
|r|j
        }n
|j        }n|}|r|n|}|r3|�1|
r/|j        | j	                 j        }|j        | j	                 j        }nÞ|                      |¦  «        }|                      |¦  «        }g |j         dd…         ¢d‘| j        ‘R }|                     |¦  «                             dd¦  «        }|                     |¦  «                             dd¦  «        }|�E|                     ||| j	        ¦  «        \  }}|r$t          |t          ¦  «        rd|j        | j	        <   t%          j        | j        j        t,          ¦  «        } || |	|||f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )	z#Input shape: Batch x Time x ChannelNr'   r!   r?   FTrZ   )ra   r`   )r)   r~   r„   Úviewrl   Ú
isinstancer   Ú
is_updatedÚgetr{   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesr‚   rƒ   Úupdater   Úget_interfacerz   Ú_attn_implementationrr   ri   ra   r`   Úreshapero   r…   )r9   r†   r‡   rˆ   r_   rb   Úis_cross_attentionÚinput_shapeÚhidden_shapeÚquery_statesr�   Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚkv_shapeÚattention_interfacerq   rp   s                      r.   rF   zBlenderbotAttention.forward«   s¨  € ð .°TÐ9Ðð $Ô)¨#¨2¨#Ô.ˆà8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆð —{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆàˆ
ØÐ&Ý˜/Õ+>Ñ?Ô?ð 7Ø,Ô7×;Ò;¸D¼NÑKÔK�
Ø%ð Pà+:Ô+PÐ(Ð(à+:Ô+OÐ(Ð(à'6Ð$à-?ÐRÐ)Ð)À]ˆØð 	F /Ð"=À*Ð"=à-Ô4°T´^ÔDÔIˆJØ/Ô6°t´~ÔFÔMˆLˆLàŸš ^Ñ4Ô4ˆJØŸ;š; ~Ñ6Ô6ˆLØF˜Ô-¨c¨r¨cÔ2ÐF°BÐF¸¼ÐFÐFˆHØ#Ÿš¨Ñ2Ô2×<Ò<¸QÀÑBÔBˆJØ'×,Ò,¨XÑ6Ô6×@Ò@ÀÀAÑFÔFˆLàÐ*Ø+?×+FÒ+FÀzÐS_ÐaeÔaoÑ+pÔ+pÑ(�
˜Là%ð F­*°_ÕFYÑ*ZÔ*Zð FØAE�OÔ.¨t¬~Ñ>å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð>�C�C°$´,Ø”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r0   )rZ   FTFNN©NNN)rI   rJ   rK   rL   rM   rY   Úboolr"   r8   rB   rO   r	   r   r   ÚtuplerF   rP   rQ   s   @r.   rt   rt   �   s]  ø€ € € € € ØGÐGð Ø ØØØ*.Ø $ð%Cð %Càð%Cð ð%Cð ð	%Cð
 ð%Cð ð%Cð ð%Cð ! 4Ñ'ð%Cð ˜‘:ð%Cð %Cð %Cð %Cð %Cð %CðT 15Ø(,Ø.2ðH)ð H)à”|ðH)ð  œ,¨Ñ-ðH)ð  ™ð	H)ð
 œ tÑ+ðH)ð Ð-Ô.ðH)ð 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ðH)ð H)ð H)ð H)ð H)ð H)ð H)ð H)r0   rt   c                   óf   ‡ — e Zd Zdefˆ fd„Zdej        dej        dee         dej        fd„Z	ˆ xZ
S )ÚBlenderbotEncoderLayerrz   c                 ó  •— t          ¦   «                              ¦   «          |j        | _        t	          | j        |j        |j        |¬¦  «        | _        t          j	        | j        ¦  «        | _
        |j        | _        t          |j                 | _        |j        | _        t          j        | j        |j        ¦  «        | _        t          j        |j        | j        ¦  «        | _        t          j	        | j        ¦  «        | _        d S )N)ru   rv   ra   rz   )r7   r8   Úd_modelru   rt   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normra   r   Úactivation_functionÚactivation_fnÚactivation_dropoutr�   Úencoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm©r9   rz   r:   s     €r.   r8   zBlenderbotEncoderLayer.__init__ø   sÐ   ø€ Ý‰Œ×ÒÑÔÐØœˆŒå,Ø”nØÔ4ØÔ,Øð	
ñ 
ô 
ˆŒõ %'¤L°´Ñ$@Ô$@ˆÔ!Ø”~ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔÝ”9˜Tœ^¨VÔ-CÑDÔDˆŒÝ”9˜VÔ3°T´^ÑDÔDˆŒÝ "¤¨T¬^Ñ <Ô <ˆÔÐÐr0   r†   r_   rb   r‰   c                 óº  — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}t          j                             || j        | j        ¬¦  «        }||z   }|}|                      |¦  «        }|                      |                      |¦  «        ¦  «        }t          j                             || j	        | j        ¬¦  «        }|  
                    |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|j        t          j        k    r9t          j        |j        ¦  «        j        dz
  }t          j        || |¬¦  «        }|S )a>  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
        )r†   r_   rg   iè  )ÚminÚmax© )r­   r«   r   rm   ra   ri   r´   r¯   r²   r°   r³   r@   rB   Úfloat16Úfinfor¸   Úclamp)r9   r†   r_   rb   ÚresidualÚ_Úclamp_values          r.   rF   zBlenderbotEncoderLayer.forward
  s[  € ð !ˆØ×1Ò1°-Ñ@Ô@ˆØ)˜4œ>ð 
Ø'Ø)ð
ð 
ð ð
ð 
Ñˆ�qõ
 œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆà ˆØ×-Ò-¨mÑ<Ô<ˆØ×*Ò*¨4¯8ª8°MÑ+BÔ+BÑCÔCˆÝœ×-Ò-¨m¸tÔ?VÐaeÔanÐ-ÑoÔoˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆàÔ¥%¤-Ò/Ð/Ýœ+ mÔ&9Ñ:Ô:Ô>ÀÑEˆKÝ!œK¨¸K¸<È[ÐYÑYÔYˆMàÐr0   )rI   rJ   rK   r"   r8   rB   rO   r   r   rF   rP   rQ   s   @r.   r¦   r¦   ÷   s‹   ø€ € € € € ð=Ð/ð =ð =ð =ð =ð =ð =ð$"à”|ð"ð œð"ð Ð+Ô,ð	"ð
 
Œð"ð "ð "ð "ð "ð "ð "ð "r0   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z  dej        dz  d	ej        dz  d
edz  de	dz  de
e         dej        fd„Zˆ xZS )ÚBlenderbotDecoderLayerNrz   r{   c           	      ó¨  •— t          ¦   «                              ¦   «          |j        | _        t	          | j        |j        |j        dd||¬¦  «        | _        |j        | _        t          |j
                 | _        |j        | _        t          j        | j        ¦  «        | _        t	          | j        |j        |j        d||¬¦  «        | _        t          j        | j        ¦  «        | _        t          j        | j        |j        ¦  «        | _        t          j        |j        | j        ¦  «        | _        t          j        | j        ¦  «        | _        d S )NT)ru   rv   ra   rw   ry   rz   r{   )ra   rw   rz   r{   )r7   r8   r¨   ru   rt   Údecoder_attention_headsrª   r«   ra   r   r®   r¯   r°   r   r¬   r­   Úencoder_attnÚencoder_attn_layer_normr�   Údecoder_ffn_dimr²   r³   r´   )r9   rz   r{   r:   s      €r.   r8   zBlenderbotDecoderLayer.__init__1  s   ø€ Ý‰Œ×ÒÑÔÐØœˆŒå,Ø”nØÔ4ØÔ,ØØØØð
ñ 
ô 
ˆŒð ”~ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔå$&¤L°´Ñ$@Ô$@ˆÔ!Ý/ØŒNØÔ*ØÔ,ØØØð
ñ 
ô 
ˆÔõ (*¤|°D´NÑ'CÔ'CˆÔ$Ý”9˜Tœ^¨VÔ-CÑDÔDˆŒÝ”9˜VÔ3°T´^ÑDÔDˆŒÝ "¤¨T¬^Ñ <Ô <ˆÔÐÐr0   Tr†   r_   Úencoder_hidden_statesÚencoder_attention_maskrˆ   Ú	use_cacherb   r‰   c                 óÞ  — |}|                       |¦  «        } | j        d|||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|�]|}|                      |¦  «        } | j        d||||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|}|                      |¦  «        }|  	                    |  
                    |¦  «        ¦  «        }t          j                             || j        | j        ¬¦  «        }|                      |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|S )að  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            encoder_hidden_states (`torch.FloatTensor`):
                cross attention input to the layer of shape `(batch, seq_len, embed_dim)`
            encoder_attention_mask (`torch.FloatTensor`): encoder attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            past_key_values (`Cache`): cached past key and value projection states
        )r†   rˆ   r_   rg   N)r†   r‡   r_   rˆ   r¹   )r­   r«   r   rm   ra   ri   rÅ   rÄ   r´   r¯   r²   r°   r³   )
r9   r†   r_   rÇ   rÈ   rˆ   rÉ   rb   r½   r¾   s
             r.   rF   zBlenderbotDecoderLayer.forwardP  s§  € ð* !ˆØ×1Ò1°-Ñ@Ô@ˆð *˜4œ>ð 
Ø'Ø+Ø)ð
ð 
ð ð	
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆð !Ð,Ø$ˆHØ ×8Ò8¸ÑGÔGˆMà0˜tÔ0ð  Ø+Ø!6Ø5Ø /ð	 ð  ð
 ð ð  ÑˆM˜1õ œM×1Ò1°-À4Ä<ÐZ^ÔZgÐ1ÑhÔhˆMØ$ }Ñ4ˆMð !ˆØ×-Ò-¨mÑ<Ô<ˆØ×*Ò*¨4¯8ª8°MÑ+BÔ+BÑCÔCˆÝœ×-Ò-¨m¸tÔ?VÐaeÔanÐ-ÑoÔoˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆàÐr0   r6   )NNNNT)rI   rJ   rK   r"   rM   r8   rB   rO   r	   r£   r   r   rF   rP   rQ   s   @r.   rÁ   rÁ   0  sõ   ø€ € € € € ð=ð =Ð/ð =¸CÀ$¹Jð =ð =ð =ð =ð =ð =ðD /3Ø59Ø6:Ø(,Ø!%ð:ð :à”|ð:ð œ tÑ+ð:ð  %œ|¨dÑ2ð	:ð
 !&¤¨tÑ 3ð:ð  ™ð:ð ˜$‘;ð:ð Ð+Ô,ð:ð 
Œð:ð :ð :ð :ð :ð :ð :ð :r0   rÁ   c                   óX   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
ˆ fd„Zed„ ¦   «         Zˆ xZS )ÚBlenderbotPreTrainedModelrz   ÚmodelTc                 óª   •— t          ¦   «                              |¦  «         t          |t          ¦  «        rt	          j        |j        ¦  «         d S d S r6   )r7   Ú_init_weightsrŒ   Ú"BlenderbotForConditionalGenerationÚinitÚzeros_Úfinal_logits_bias)r9   r[   r:   s     €r.   rÏ   z'BlenderbotPreTrainedModel._init_weights—  sQ   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ@ÑAÔAð 	2ÝŒK˜Ô0Ñ1Ô1Ð1Ð1Ð1ð	2ð 	2r0   c                 ó˜   — | j         j        }t          j        g d¢dddd|gg| j        ¬¦  «        }|                     |¦  «        ||dœ}|S )N)r   é   é
   é   r?   r   é   é   r?   ©rA   )r_   r#   Údecoder_input_ids)rz   r$   rB   ÚtensorrA   Úne)r9   Ú	pad_tokenr#   Údummy_inputss       r.   rß   z&BlenderbotPreTrainedModel.dummy_inputsœ  sd   € à”KÔ,ˆ	Ý”LÐ"2Ð"2Ð"2°Q¸¸2¸qÀ)Ð4LÐ!MÐVZÔVaÐbÑbÔbˆ	à'Ÿlšl¨9Ñ5Ô5Ø"Ø!*ð
ð 
ˆð
 Ðr0   )rI   rJ   rK   r"   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphrÏ   Úpropertyrß   rP   rQ   s   @r.   rÌ   rÌ   �  s„   ø€ € € € € € àÐÐÑØÐØ&*Ð#ØÐØ€NØÐØ!Ðð2ð 2ð 2ð 2ð 2ð
 ðð ñ „Xðð ð ð ð r0   rÌ   c                   óÂ   ‡ — e Zd ZdZeedœZdefˆ fd„Ze	e
e	 	 	 ddej        dz  dej        dz  dej        dz  d	ee         d
ef
d„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚBlenderbotEncoderzì
    Transformer encoder consisting of *config.encoder_layers* self attention layers. Each layer is a
    [`BlenderbotEncoderLayer`].

    Args:
        config: BlenderbotConfig
        embed_tokens (nn.Embedding): output embedding
    )r†   Ú
attentionsrz   c                 óL  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        ‰j        }‰j        | _        ‰j        | _	        ‰j
        rt          j        |¦  «        nd}t          ‰j        || j        |¬¦  «        | _        t!          ‰j        |¦  «        | _        t%          j        ˆfd„t)          ‰j        ¦  «        D ¦   «         ¦  «        | _        t%          j        ‰j        ¦  «        | _        d| _        |                      ¦   «          d S )NrT   ©rV   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r¹   )r¦   )Ú.0r¾   rz   s     €r.   ú
<listcomp>z.BlenderbotEncoder.__init__.<locals>.<listcomp>Ê  s"   ø€ Ð$jÐ$jÐ$jÈÕ%;¸FÑ%CÔ%CÐ$jÐ$jÐ$jr0   F)r7   r8   ra   Úencoder_layerdropÚ	layerdropr¨   r$   rU   Úmax_position_embeddingsÚmax_source_positionsÚscale_embeddingÚmathÚsqrtrS   Ú
vocab_sizeÚembed_tokensr2   Úembed_positionsr   Ú
ModuleListÚrangeÚencoder_layersr‘   r¬   Ú
layer_normÚgradient_checkpointingÚ	post_init)r9   rz   ru   rV   r:   s    `  €r.   r8   zBlenderbotEncoder.__init__·  s  øø€ Ý‰Œ×Ò˜Ñ Ô Ð à”~ˆŒØÔ1ˆŒà”Nˆ	Ø!Ô.ˆÔØ$*Ô$BˆÔ!Ø.4Ô.DÐM•d”i 	Ñ*Ô*Ð*È#ˆå9ØÔ˜y¨$Ô*:Èð
ñ 
ô 
ˆÔõ  DØÔ*Øñ 
ô  
ˆÔõ ”mÐ$jÐ$jÐ$jÐ$jÍUÐSYÔShÑMiÔMiÐ$jÑ$jÔ$jÑkÔkˆŒÝœ, v¤~Ñ6Ô6ˆŒà&+ˆÔ#à�ŠÑÔÐÐÐr0   Nr#   r_   Úinputs_embedsrb   r‰   c                 ó<  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|                     ¦   «         d d…         }|                      |¦  «        }||z   }t          j                             || j        | j        ¬¦  «        }t          | j	        ||¬¦  «        }t          | j        ¦  «        D ];\  }}	d}
| j        r!t          j        g ¦  «        }|| j        k     rd}
|
s
 |	||fi |¤Ž}Œ<|                      |¦  «        }t!          |¬¦  «        S )Nz:You must specify exactly one of input_ids or inputs_embedsr'   rg   )rz   r   r_   FT)Úlast_hidden_state)r+   rø   rj   rù   r   rm   ra   ri   r   rz   Ú	enumerater‘   rB   Úrandrñ   rý   r   )r9   r#   r_   r   rb   r™   Ú	embed_posr†   ÚidxÚencoder_layerÚto_dropÚdropout_probabilitys               r.   rF   zBlenderbotEncoder.forwardÑ  sg  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ×-Ò-¨iÑ8Ô8ˆMà#×(Ò(Ñ*Ô*¨3¨B¨3Ô/ˆØ×(Ò(¨Ñ5Ô5ˆ	à%¨	Ñ1ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆå2Ø”;Ø'Ø)ð
ñ 
ô 
ˆõ
 #,¨D¬KÑ"8Ô"8ð 	ð 	ÑˆC�àˆGØŒ}ð #Ý&+¤j°¡n¤nÐ#Ø&¨¬Ò7Ð7Ø"�Gàð Ø - Ø!Ø"ð!ð !ð ð!ð !�øð Ÿš¨Ñ6Ô6ˆåØ+ð
ñ 
ô 
ð 	
r0   r¢   )rI   rJ   rK   rL   r¦   rt   Ú_can_record_outputsr"   r8   r   r    r   rB   Ú
LongTensorrO   ÚFloatTensorr   r   r   rF   rP   rQ   s   @r.   ré   ré   ¨  sö   ø€ € € € € ðð ð 0Ø)ðð Ðð
Ð/ð ð ð ð ð ð ð4  ØØð .2Ø.2Ø26ð	,
ð ,
àÔ# dÑ*ð,
ð œ tÑ+ð,
ð Ô(¨4Ñ/ð	,
ð
 Ð+Ô,ð,
ð 
ð,
ð ,
ð ,
ñ „^ñ „_ñ  Ôð,
ð ,
ð ,
ð ,
ð ,
r0   ré   c                   ó8  ‡ — e Zd ZdZe eedd¬¦  «         eedd¬¦  «        dœZdefˆ fd„Z	e
ee	 	 	 	 	 	 	 d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j        d	z  ded	z  dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚBlenderbotDecoderzØ
    Transformer decoder consisting of *config.decoder_layers* layers. Each layer is a [`BlenderbotDecoderLayer`]

    Args:
        config: BlenderbotConfig
        embed_tokens (nn.Embedding): output embedding
    r!   r«   )ÚindexÚ
layer_namerÄ   )r†   rê   Úcross_attentionsrz   c                 ó\  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        ‰j        | _        ‰j        | _        ‰j	        rt          j        ‰j        ¦  «        nd}t          ‰j        ‰j        | j        |¬¦  «        | _        t!          ‰j        ‰j        ¦  «        | _        t%          j        ˆfd„t)          ‰j        ¦  «        D ¦   «         ¦  «        | _        t%          j        ‰j        ¦  «        | _        d| _        |                      ¦   «          d S )NrT   rì   c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))r{   )rÁ   )rî   Úirz   s     €r.   rï   z.BlenderbotDecoder.__init__.<locals>.<listcomp>#  s'   ø€ Ð_Ð_Ð_¸QÕ# F°aÐ8Ñ8Ô8Ð_Ð_Ð_r0   F)r7   r8   ra   Údecoder_layerdroprñ   r$   rU   rò   Úmax_target_positionsrô   rõ   rö   r¨   rS   r÷   rø   r2   rù   r   rú   rû   Údecoder_layersr‘   r¬   rý   rþ   rÿ   )r9   rz   rV   r:   s    ` €r.   r8   zBlenderbotDecoder.__init__  s  øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø”~ˆŒØÔ1ˆŒØ!Ô.ˆÔØ$*Ô$BˆÔ!Ø39Ô3IÐR•d”i ¤Ñ/Ô/Ð/Èsˆå9ØÔ˜vœ~¨tÔ/?È[ð
ñ 
ô 
ˆÔõ  DØÔ*ØŒNñ 
ô  
ˆÔõ ”mØ_Ð_Ð_Ð_Å%ÈÔH]ÑB^ÔB^Ð_Ñ_Ô_ñ
ô 
ˆŒõ œ, v¤~Ñ6Ô6ˆŒà&+ˆÔ#à�ŠÑÔÐÐÐr0   Nr#   r_   rÇ   rÈ   rˆ   r   rÉ   rb   r‰   c                 ó‚  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|r[|€Y|€| j        j        r6t	          t          | j        ¬¦  «        t          | j        ¬¦  «        ¦  «        nt          | j        ¬¦  «        }|                     ¦   «         d d…         \  }	}
|�|                     ¦   «         nd}t          j	        |
|j
        ¬¦  «        |z   }|€/t          ¦   «         s!||
z   }t          j        |	||j
        ¬¦  «        }t          |t          ¦  «        r|j        n|}t          | j        |||¬¦  «        }t!          | j        |||¬¦  «        }|                      |	|
f||¬¦  «        }||z   }t$          j                             || j        | j        ¬	¦  «        }t-          | j        ¦  «        D ]Z\  }}| j        r t          j        g ¦  «        }|| j        k     rŒ, ||||f|||d
œ|¤Ž}t          |t4          ¦  «        r|d         n|}Œ[|                      |¦  «        }t9          ||¬¦  «        S )NzTYou cannot specify both decoder_input_ids and decoder_inputs_embeds at the same time)rz   r'   r   rÚ   )rz   r   r_   rˆ   )rz   r   r_   rÇ   )r=   rg   )rÈ   rˆ   rÉ   )r  rˆ   )r+   rø   rz   Úis_encoder_decoderr   r
   rj   Úget_seq_lengthrB   rC   rA   r   ÚonesrŒ   r�   r   r   rù   r   rm   ra   ri   r  r‘   r  rñ   r¤   rý   r   )r9   r#   r_   rÇ   rÈ   rˆ   r   rÉ   rb   Ú
batch_sizeÚ
seq_lengthr<   r=   Úmask_seq_lengthÚself_attn_cacheÚcausal_maskr†   r  Údecoder_layerr	  Úlayer_outputss                        r.   rF   zBlenderbotDecoder.forward+  sÑ  € ð ˜Ð -°tÐ";Ñ<ð 	uÝÐsÑtÔtÐtàÐ Ø ×-Ò-¨iÑ8Ô8ˆMð ð 	˜Ð0ð )Ð4¸¼Ô8VÐ4õ $¥L¸¼Ð$DÑ$DÔ$DÅlÐZ^ÔZeÐFfÑFfÔFfÑgÔgÐgå!¨¬Ð5Ñ5Ô5ð ð "/×!3Ò!3Ñ!5Ô!5°c°r°cÔ!:Ñˆ
�JØETÐE` ×!?Ò!?Ñ!AÔ!AÐ!AÐfgÐÝ”| J°}Ô7KÐLÑLÔLÐOeÑeˆàÐ!Õ*BÑ*DÔ*DÐ!à4°zÑAˆOÝ"œZ¨
°OÈMÔL`ÐaÑaÔaˆNõ ˜/Õ+>Ñ?Ô?ð!ˆOÔ0Ð0à ð 	õ )Ø”;Ø'Ø)Ø+ð	
ñ 
ô 
ˆõ ";Ø”;Ø'Ø1Ø"7ð	"
ñ "
ô "
Ðð ×+Ò+Ø˜Ð$Ð&<È<ð ,ñ 
ô 
ˆð &¨Ñ4ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆå"+¨D¬KÑ"8Ô"8ð 	dð 	dÑˆC�àŒ}ð Ý&+¤j°¡n¤nÐ#Ø&¨¬Ò7Ð7Øà)˜MØØØ%ðð (>Ø /Ø#ðð ð ðð ˆMõ 1;¸=Í%Ñ0PÔ0PÐc˜M¨!Ô,Ð,ÐVcˆMˆMð Ÿš¨Ñ6Ô6ˆå8Ø+Ø+ð
ñ 
ô 
ð 	
r0   )NNNNNNN)rI   rJ   rK   rL   rÁ   r   rt   r
  r"   r8   r   r    r   rB   r  rO   r  r	   r£   r   r   r   rF   rP   rQ   s   @r.   r  r    s|  ø€ € € € € ðð ð 0Ø$�nÐ%8ÀÈkÐZÑZÔZØ*˜NÐ+>ÀaÐTbÐcÑcÔcðð ÐðÐ/ð ð ð ð ð ð ð2  ØØð .2Ø.2Ø:>Ø:>Ø(,Ø26Ø!%ðU
ð U
àÔ# dÑ*ðU
ð œ tÑ+ðU
ð  %Ô0°4Ñ7ð	U
ð
 !&Ô 0°4Ñ 7ðU
ð  ™ðU
ð Ô(¨4Ñ/ðU
ð ˜$‘;ðU
ð Ð+Ô,ðU
ð 
3ðU
ð U
ð U
ñ „^ñ „_ñ  ÔðU
ð U
ð U
ð U
ð U
r0   r  c                   ó   ‡ — e Zd ZdddœZdefˆ fd„Zd„ Zd„ Zee		 	 	 	 	 	 	 	 	 d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
j        dz  de
j        dz  dedz  dee         defd„¦   «         ¦   «         Zˆ xZS )ÚBlenderbotModelzshared.weight)zencoder.embed_tokens.weightzdecoder.embed_tokens.weightrz   c                 ó\  •— t          ¦   «                              |¦  «         |j        |j        }}|j        rt          j        |j        ¦  «        nd}t          ||j        ||¬¦  «        | _	        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S )NrT   rì   )r7   r8   r$   r÷   rô   rõ   rö   r¨   rS   Úsharedré   Úencoderr  Údecoderrÿ   )r9   rz   rU   r÷   rV   r:   s        €r.   r8   zBlenderbotModel.__init__�  sš   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à"(Ô"5°vÔ7H�ZˆØ39Ô3IÐR•d”i ¤Ñ/Ô/Ð/ÈsˆÝ3°JÀÄÐP[ÐitÐuÑuÔuˆŒÝ(¨Ñ0Ô0ˆŒÝ(¨Ñ0Ô0ˆŒð 	�ŠÑÔÐÐÐr0   c                 ó   — | j         S r6   )r&  ©r9   s    r.   Úget_input_embeddingsz$BlenderbotModel.get_input_embeddings™  s
   € ØŒ{Ðr0   c                 óX   — || _         | j         | j        _        | j         | j        _        d S r6   )r&  r'  rø   r(  ©r9   r^   s     r.   Úset_input_embeddingsz$BlenderbotModel.set_input_embeddingsœ  s'   € ØˆŒØ$(¤KˆŒÔ!Ø$(¤KˆŒÔ!Ð!Ð!r0   Nr#   r_   rÛ   Údecoder_attention_maskÚencoder_outputsrˆ   r   Údecoder_inputs_embedsrÉ   rb   r‰   c
                 ó¤  — |€ | j         d	|||dœ|
¤Ž}nct          |t          ¦  «        sNt          |d         t          |¦  «        dk    r|d         ndt          |¦  «        dk    r|d         nd¬¦  «        } | j        d	|||d         ||||	dœ|
¤Ž}t          |j        |j        |j        |j	        |j
        |j        |j        |j	        ¬¦  «        S )
a|  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

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

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            Blenderbot uses the `bos_token_id` as the starting token for `decoder_input_ids` generation. If
            `past_key_values` is used, optionally only the last `decoder_input_ids` have to be input (see
            `past_key_values`).
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.

        Example:

        ```python
        >>> from transformers import AutoTokenizer, BlenderbotModel

        >>> model = BlenderbotModel.from_pretrained("facebook/blenderbot-400M-distill")
        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/blenderbot-400M-distill")

        >>> inputs = tokenizer("Studies have been shown that owning a dog is good for you", return_tensors="pt")
        >>> decoder_input_ids = tokenizer("Studies show that", return_tensors="pt").input_ids  # Batch size 1
        >>> outputs = model(input_ids=inputs.input_ids, decoder_input_ids=decoder_input_ids)

        >>> last_hidden_states = outputs.last_hidden_state
        >>> list(last_hidden_states.shape)
        [1, 6, 1280]
        ```N)r#   r_   r   r   r!   r?   )r  r†   rê   ©r#   r_   rÇ   rÈ   rˆ   r   rÉ   )r  rˆ   Údecoder_hidden_statesÚdecoder_attentionsr  Úencoder_last_hidden_staterÇ   Úencoder_attentionsr¹   )r'  rŒ   r   Úlenr(  r   r  rˆ   r†   rê   r  )r9   r#   r_   rÛ   r/  r0  rˆ   r   r1  rÉ   rb   Údecoder_outputss               r.   rF   zBlenderbotModel.forward¡  s?  € ð` Ð"Ø/;¨t¬|ð 0Ø#Ø-Ø+ð0ð 0ð ð	0ð 0ˆOˆOõ ˜O­_Ñ=Ô=ð 	Ý-Ø"1°!Ô"4Ý47¸Ñ4HÔ4HÈ1Ò4LÐ4L˜o¨aÔ0Ð0ÐRVÝ14°_Ñ1EÔ1EÈÒ1IÐ1I˜?¨1Ô-Ð-Ètðñ ô ˆOð FRÀTÄ\ð 	F
Ø'Ø1Ø"1°!Ô"4Ø#1Ø+Ø/Øð	F
ð 	F
ð ð	F
ð 	F
ˆõ "Ø-Ô?Ø+Ô;Ø"1Ô"?Ø.Ô9Ø,Ô=Ø&5Ô&GØ"1Ô"?Ø.Ô9ð	
ñ 	
ô 	
ð 		
r0   )	NNNNNNNNN)rI   rJ   rK   Ú_tied_weights_keysr"   r8   r+  r.  r   r   rB   r  rO   r   r	   r  r£   r   r   r   rF   rP   rQ   s   @r.   r$  r$  †  s‡  ø€ € € € € ð (7Ø'6ðð Ðð

Ð/ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð0ð 0ð 0ð
 Øð .2Ø.2Ø59Ø:>Ø26Ø(,Ø26Ø:>Ø!%ðP
ð P
àÔ# dÑ*ðP
ð œ tÑ+ðP
ð !Ô+¨dÑ2ð	P
ð
 !&Ô 0°4Ñ 7ðP
ð )¨4Ñ/ðP
ð  ™ðP
ð Ô(¨4Ñ/ðP
ð  %Ô0°4Ñ7ðP
ð ˜$‘;ðP
ð Ð+Ô,ðP
ð 
ðP
ð P
ð P
ñ „^ñ ÔðP
ð P
ð P
ð P
ð P
r0   r$  z\
    The Blenderbot Model with a language modeling head. Can be used for summarization.
    )Úcustom_introc                   ór  ‡ — e Zd ZdZdgZddiZdefˆ fd„Z	 dd	ed
edz  de	de
j        fˆ fd„Zd	eddfd„Zee	 	 	 	 	 	 	 	 	 	 d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j        dz  dej        dz  dej        dz  de	dz  dee         defd„¦   «         ¦   «         Zˆ xZS )rÐ   rÍ   rÓ   úlm_head.weightzmodel.shared.weightrz   c                 ól  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      dt          j        d| j        j        j        f¦  «        ¦  «         t          j
        |j        | j        j        j        d¬¦  «        | _        |                      ¦   «          d S )NrÓ   r!   Fr}   )r7   r8   r$  rÍ   Úregister_bufferrB   Úzerosr&  r3   r   r�   r¨   Úlm_headrÿ   rµ   s     €r.   r8   z+BlenderbotForConditionalGeneration.__init__  s“   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý$ VÑ,Ô,ˆŒ
Ø×ÒÐ0µ%´+¸qÀ$Ä*ÔBSÔBbÐ>cÑ2dÔ2dÑeÔeÐeÝ”y ¤°´Ô1BÔ1QÐX]Ð^Ñ^Ô^ˆŒð 	�ŠÑÔÐÐÐr0   NTÚnew_num_tokensÚpad_to_multiple_ofÚmean_resizingr‰   c                 ó˜   •— t          ¦   «                              |||¦  «        }|                      |j        j        d         ¦  «         |S )Nr   )r7   Úresize_token_embeddingsÚ_resize_final_logits_biasrE   r)   )r9   rB  rC  rD  Únew_embeddingsr:   s        €r.   rF  z:BlenderbotForConditionalGeneration.resize_token_embeddings  sG   ø€ õ ™œ×8Ò8¸ÐI[Ð]jÑkÔkˆØ×&Ò& ~Ô'<Ô'BÀ1Ô'EÑFÔFÐFØÐr0   c                 ó  — | j         j        d         }||k    r| j         d d …d |…f         }nBt          j        d||z
  f| j         j        ¬¦  «        }t          j        | j         |gd¬¦  «        }|                      d|¦  «         d S )Nr'   r!   rÚ   re   rÓ   )rÓ   r)   rB   r@  rA   Úcatr?  )r9   rB  Úold_num_tokensÚnew_biasÚ
extra_biass        r.   rG  z<BlenderbotForConditionalGeneration._resize_final_logits_bias  s—   € ØÔ/Ô5°bÔ9ˆØ˜^Ò+Ð+ØÔ-¨a¨a¨a°°.°Ð.@ÔAˆHˆHåœ a¨¸.Ñ)HÐ%IÐRVÔRhÔRoÐpÑpÔpˆJÝ”y $Ô"8¸*Ð!EÈ1ÐMÑMÔMˆHØ×ÒÐ0°(Ñ;Ô;Ð;Ð;Ð;r0   r#   r_   rÛ   r/  r0  rˆ   r   r1  ÚlabelsrÉ   rb   c                 ó„  — |	�G|
rt                                d¦  «         d}
|€'|€%t          |	| j        j        | j        j        ¦  «        } | j        |f||||||||
dœ|¤Ž}|                      |d         ¦  «        }|| j         	                    |j
        ¦  «        z   }d}|	�e|	 	                    |j
        ¦  «        }	t          ¦   «         } ||                     d| j        j        ¦  «        |	                     d¦  «        ¦  «        }t          |||j        |j        |j        |j        |j        |j        |j        ¬¦	  «	        S )a4  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

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

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            Blenderbot uses the `bos_token_id` as the starting token for `decoder_input_ids` generation. If
            `past_key_values` is used, optionally only the last `decoder_input_ids` have to be input (see
            `past_key_values`).
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example conversation:

        ```python
        >>> from transformers import AutoTokenizer, BlenderbotForConditionalGeneration

        >>> mname = "facebook/blenderbot-400M-distill"
        >>> model = BlenderbotForConditionalGeneration.from_pretrained(mname)
        >>> tokenizer = AutoTokenizer.from_pretrained(mname)
        >>> UTTERANCE = "My friends are cool but they eat too many carbs."
        >>> print("Human: ", UTTERANCE)
        Human:  My friends are cool but they eat too many carbs.

        >>> inputs = tokenizer([UTTERANCE], return_tensors="pt")
        >>> reply_ids = model.generate(**inputs)
        >>> print("Bot: ", tokenizer.batch_decode(reply_ids, skip_special_tokens=True)[0])
        Bot: That's unfortunate. Are they trying to lose weight or are they just trying to be healthier?

        >>> REPLY = "I'm not sure"
        >>> print("Human: ", REPLY)
        Human: I'm not sure

        >>> NEXT_UTTERANCE = (
        ...     "My friends are cool but they eat too many carbs.</s> <s>That's unfortunate. "
        ...     "Are they trying to lose weight or are they just trying to be healthier?</s> "
        ...     "<s> I'm not sure."
        ... )
        >>> inputs = tokenizer([NEXT_UTTERANCE], return_tensors="pt")
        >>> next_reply_ids = model.generate(**inputs)
        >>> print("Bot: ", tokenizer.batch_decode(next_reply_ids, skip_special_tokens=True)[0])
        Bot:   I see. Well, it's good that they're trying to change their eating habits.
        ```
        NzJThe `use_cache` argument is changed to `False` since `labels` is provided.F)r_   rÛ   r0  r/  rˆ   r   r1  rÉ   r   r'   )	ÚlossÚlogitsrˆ   r4  r5  r  r6  rÇ   r7  )r   Úwarningr/   rz   r$   r%   rÍ   rA  rÓ   ÚtorA   r   r‹   r÷   r   rˆ   r4  r5  r  r6  rÇ   r7  )r9   r#   r_   rÛ   r/  r0  rˆ   r   r1  rN  rÉ   rb   ÚoutputsÚ	lm_logitsÚmasked_lm_lossÚloss_fcts                   r.   rF   z*BlenderbotForConditionalGeneration.forward  sw  € ðH ÐØð mÝ—’ÐkÑlÔlÐlØˆIØ Ð(Ð-BÐ-JÝ$6Ø˜DœKÔ4°d´kÔ6Xñ%ô %Ð!ð '1 d¤jØð'
à)Ø/Ø+Ø#9Ø+Ø'Ø"7Øð'
ð '
ð ð'
ð '
ˆð —L’L ¨¤Ñ,Ô,ˆ	Ø Ô 6× 9Ò 9¸)Ô:JÑ KÔ KÑKˆ	àˆØÐØ—Y’Y˜yÔ/Ñ0Ô0ˆFÝ'Ñ)Ô)ˆHØ%˜X i§n¢n°R¸¼Ô9OÑ&PÔ&PÐRX×R]ÒR]Ð^`ÑRaÔRaÑbÔbˆNåØØØ#Ô3Ø")Ô"?Ø&Ô9Ø$Ô5Ø&-Ô&GØ")Ô"?Ø&Ô9ð

ñ 

ô 

ð 
	
r0   )NT)
NNNNNNNNNN)rI   rJ   rK   rá   Ú_keys_to_ignore_on_load_missingr:  r"   r8   rM   r£   r   Ú	EmbeddingrF  rG  r   r   rB   r  rO   r   r	   r  r   r   r   rF   rP   rQ   s   @r.   rÐ   rÐ   ö  sû  ø€ € € € € ð  ÐØ':Ð&;Ð#àÐ/ðÐðÐ/ð ð ð ð ð ð ð aeðð Ø!ðØ7:¸T±zðØY]ðà	Œðð ð ð ð ð ð<¸ð <Àð <ð <ð <ð <ð Øð .2Ø.2Ø59Ø:>Ø26Ø(,Ø26Ø:>Ø*.Ø!%ðk
ð k
àÔ# dÑ*ðk
ð œ tÑ+ðk
ð !Ô+¨dÑ2ð	k
ð
 !&Ô 0°4Ñ 7ðk
ð )¨4Ñ/ðk
ð  ™ðk
ð Ô(¨4Ñ/ðk
ð  %Ô0°4Ñ7ðk
ð Ô  4Ñ'ðk
ð ˜$‘;ðk
ð Ð+Ô,ðk
ð 
ðk
ð k
ð k
ñ „^ñ Ôðk
ð k
ð k
ð k
ð k
r0   rÐ   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚBlenderbotDecoderWrapperz½
    This wrapper class is a helper class to correctly load pretrained checkpoints when the causal language model is
    used in combination with the [`EncoderDecoderModel`] framework.
    c                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S r6   )r7   r8   r  r(  rÿ   rµ   s     €r.   r8   z!BlenderbotDecoderWrapper.__init__’  s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý(¨Ñ0Ô0ˆŒØ�ŠÑÔÐÐÐr0   c                 ó   —  | j         |i |¤ŽS r6   )r(  )r9   Úargsrb   s      r.   rF   z BlenderbotDecoderWrapper.forward—  s   € ØˆtŒ|˜TÐ, VÐ,Ð,Ð,r0   )rI   rJ   rK   rL   r8   rF   rP   rQ   s   @r.   r[  r[  Œ  sQ   ø€ € € € € ðð ð
ð ð ð ð ð
-ð -ð -ð -ð -ð -ð -r0   r[  c                   ó(  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 	 d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	j        dz  de	j
        dz  dedz  dee	j        z  dee         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚBlenderbotForCausalLMr=  z!model.decoder.embed_tokens.weightc                 ó  •— d|_         d|_        t          ¦   «                              |¦  «         t	          |¦  «        | _        t          j        |j        |j	        d¬¦  «        | _
        |                      ¦   «          d S )NTFr}   )rw   r  r7   r8   r[  rÍ   r   r�   Úhidden_sizer÷   rA  rÿ   rµ   s     €r.   r8   zBlenderbotForCausalLM.__init__¡  sp   ø€ Ø ˆÔØ$)ˆÔ!Ý‰Œ×Ò˜Ñ Ô Ð Ý-¨fÑ5Ô5ˆŒ
å”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr0   c                 ó$   — | j         j        j        S r6   ©rÍ   r(  rø   r*  s    r.   r+  z*BlenderbotForCausalLM.get_input_embeddings¬  s   € ØŒzÔ!Ô.Ð.r0   c                 ó(   — || j         j        _        d S r6   rd  r-  s     r.   r.  z*BlenderbotForCausalLM.set_input_embeddings¯  s   € Ø*/ˆŒ
ÔÔ'Ð'Ð'r0   Nr   r#   r_   rÇ   rÈ   rˆ   r   rN  rÉ   Úlogits_to_keeprb   r‰   c
                 óþ  —  | j         j        d|||||||dœ|
¤Ž}|d         }t          |	t          ¦  «        rt	          |	 d¦  «        n|	}|                      |dd…|dd…f         ¦  «        }d}|�e|                     |j        ¦  «        }t          ¦   «         } || 	                    d| j
        j        ¦  «        | 	                    d¦  «        ¦  «        }t          |||j        |j        |j        |j        ¬¦  «        S )ah  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

        ```python
        >>> from transformers import AutoTokenizer, BlenderbotForCausalLM

        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/blenderbot-400M-distill")
        >>> model = BlenderbotForCausalLM.from_pretrained("facebook/blenderbot-400M-distill")
        >>> assert model.config.is_decoder, f"{model.__class__} has to be configured as a decoder."
        >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
        >>> outputs = model(**inputs)

        >>> logits = outputs.logits
        >>> expected_shape = [1, inputs.input_ids.shape[-1], model.config.vocab_size]
        >>> list(logits.shape) == expected_shape
        True
        ```r3  r   Nr'   )rP  rQ  rˆ   r†   rê   r  r¹   )rÍ   r(  rŒ   rM   ÚslicerA  rS  rA   r   r‹   rz   r÷   r   rˆ   r†   rê   r  )r9   r#   r_   rÇ   rÈ   rˆ   r   rN  rÉ   rf  rb   rT  r†   Úslice_indicesrQ  rP  rW  s                    r.   rF   zBlenderbotForCausalLM.forward²  s)  € ðL >P¸T¼ZÔ=Oð 	>
ØØ)Ø"7Ø#9Ø+Ø'Øð	>
ð 	>
ð ð	>
ð 	>
ˆð   œ
ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ—Y’Y˜vœ}Ñ-Ô-ˆFÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬KÔ,BÑCÔCÀVÇ[Â[ÐQSÁ_Ä_ÑUÔUˆDå0ØØØ#Ô3Ø!Ô/ØÔ)Ø$Ô5ð
ñ 
ô 
ð 	
r0   )	NNNNNNNNr   )rI   rJ   rK   r:  r8   r+  r.  r   r   rB   r  rO   r  r	   r£   rM   r   r   r¤   r   rF   rP   rQ   s   @r.   r`  r`  œ  s{  ø€ € € € € àÐ=ðÐð	ð 	ð 	ð 	ð 	ð/ð /ð /ð0ð 0ð 0ð Øð .2Ø.2Ø:>Ø;?Ø(,Ø26Ø*.Ø!%Ø-.ðA
ð A
àÔ# dÑ*ðA
ð œ tÑ+ðA
ð  %Ô0°4Ñ7ð	A
ð
 !&Ô 1°DÑ 8ðA
ð  ™ðA
ð Ô(¨4Ñ/ðA
ð Ô  4Ñ'ðA
ð ˜$‘;ðA
ð ˜eœlÑ*ðA
ð Ð+Ô,ðA
ð 
Ð2Ñ	2ðA
ð A
ð A
ñ „^ñ ÔðA
ð A
ð A
ð A
ð A
r0   r`  )r`  rÐ   r$  rÌ   )NrZ   )IrL   rõ   Úcollections.abcr   rB   r   Útorch.nnr   Ú r   rÑ   Úactivationsr   Úcache_utilsr	   r
   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   r    Úconfiguration_blenderbotr"   Ú
get_loggerrI   r   rO   rM   r/   rY  r2   rS   ÚModulerY   rr   rt   r¦   rÁ   rÌ   ré   r  r$  rÐ   r[  r`  Ú__all__r¹   r0   r.   ú<module>r}     s   ðð  Ð à €€€Ø $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ )Ð )Ð )Ð )Ð )Ð )Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 6Ð 6Ð 6Ð 6Ð 6Ð 6ð 
ˆÔ	˜HÑ	%Ô	%€ð %¤,ð ¸cð Ð[^ð ð ð ð ð -ð -ð -ð -ð -¨2¬<ñ -ô -ð -ð*
=ð 
=ð 
=ð 
=ð 
= B¤Lñ 
=ô 
=ð 
=ð( !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð:r)ð r)ð r)ð r)ð r)˜"œ)ñ r)ô r)ð r)ðl5ð 5ð 5ð 5ð 5Ð7ñ 5ô 5ð 5ðrZð Zð Zð Zð ZÐ7ñ Zô Zð Zðz ðð ð ð ð  ñ ô ñ „ðð4X
ð X
ð X
ð X
ð X
Ð1ñ X
ô X
ð X
ðv@
ð @
ð @
ð @
ð @
Ð1ñ @
ô @
ð @
ðF ðl
ð l
ð l
ð l
ð l
Ð/ñ l
ô l
ñ „ðl
ð^ €ððñ ô ð
M
ð M
ð M
ð M
ð M
Ð)BÀOñ M
ô M
ñô ð
M
ðb-ð -ð -ð -ð -Ð8ñ -ô -ð -ð Y
ð Y
ð Y
ð Y
ð Y
Ð5°ñ Y
ô Y
ð Y
ðxð ð €€€r0   