§
    ‚ŠtjTØ  ã                   ó  — d Z ddlmZ ddlmZ ddlmZ ddlZddlm	c 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 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$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l0m1Z1m2Z2  e&j3        e4¦  «        Z5 e$d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z6 e$d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z7	 	 	 	 dEd „Z8dFd"„Z9 G d#„ d$e	j:        ¦  «        Z; G d%„ d&e	j<        ¦  «        Z= G d'„ d(e	j>        ¦  «        Z? G d)„ d*ej	        j>        ¦  «        Z@d+„ ZAdGd,„ZB G d-„ d.e	j>        ¦  «        ZC	 dHd0e	j>        d1ejD        d2ejD        d3ejD        d4ejD        dz  d5eEd6eEfd7„ZF G d8„ d9e	j>        ¦  «        ZG G d:„ d;e¦  «        ZH G d<„ d=e¦  «        ZIe$ G d>„ d?e¦  «        ¦   «         ZJe$ G d@„ dAeJ¦  «        ¦   «         ZK G dB„ dCeJe¦  «        ZLg dD¢ZMdS )IzPyTorch Idefics model.é    )ÚCallable)Ú	dataclass)ÚAnyN)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedConfigÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚIdeficsConfig)ÚIdeficsPerceiverResampler)ÚIdeficsVisionEmbeddingsÚIdeficsVisionTransformerz{
    Base class for Idefics model's outputs that may also contain a past key/values (to speed up sequential decoding).
    )Úcustom_introc                   óÄ   — e Zd ZU dZdZej        dz  ed<   dZe	dz  ed<   dZ
eej                 dz  ed<   dZeej                 dz  ed<   dZeej                 dz  ed<   dS )ÚIdeficsBaseModelOutputWithPasta…  
    last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
        Sequence of hidden-states at the output of the last layer of the model.

        If `past_key_values` is used only the last hidden-state of the sequences of shape `(batch_size, 1,
        hidden_size)` is output.
    image_hidden_states (`tuple(torch.FloatTensor)`, *optional*):
        Tuple of `torch.FloatTensor` (one for the output of the image embeddings, `(batch_size, num_images,
        sequence_length, hidden_size)`.

        image_hidden_states of the model produced by the vision encoder, and optionally by the perceiver
    NÚlast_hidden_stateÚpast_key_valuesÚhidden_statesÚ
attentionsÚimage_hidden_states)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   ÚtorchÚFloatTensorÚ__annotations__r$   r
   r%   Útupler&   r'   © ó    új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/idefics/modeling_idefics.pyr"   r"   1   s£   € € € € € € ðð ð 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø$(€O�U˜T‘\Ð(Ð(Ñ(Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø;?Ð˜˜uÔ0Ô1°DÑ8Ð?Ð?Ñ?Ð?Ð?r1   r"   zS
    Base class for Idefics causal language model (or autoregressive) outputs.
    c                   óâ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
dz  ed<   dZeej                 dz  ed<   dZeej                 dz  ed<   dZeej                 dz  ed<   dS )	ÚIdeficsCausalLMOutputWithPastae  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

        Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see
        `past_key_values` input) to speed up sequential decoding.
    image_hidden_states (`tuple(torch.FloatTensor)`, *optional*):
        Tuple of `torch.FloatTensor` (one for the output of the image embeddings, `(batch_size, num_images,
        sequence_length, hidden_size)`.

        image_hidden_states of the model produced by the vision encoder, and optionally by the perceiver
    NÚlossÚlogitsr$   r%   r&   r'   )r(   r)   r*   r+   r5   r,   r-   r.   r6   r$   r
   r%   r/   r&   r'   r0   r1   r2   r4   r4   L   sº   € € € € € € ðð ð" &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø$(€O�U˜T‘\Ð(Ð(Ñ(Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø;?Ð˜˜uÔ0Ô1°DÑ8Ð?Ð?Ñ?Ð?Ð?r1   r4   Fc                 ó–  — t          j        | j        d         ¦  «                             dd¦  «                             d|¦  «                             d¦  «                             | j        ¦  «        }|                      d|¦  «        } |                     d¦  «        |d<   |                     d¦  «        |d<   |                     d¦  «        |d<   |                     d¦  «        |d<   d|v r!|d         }|                     d|¦  «        |d<   |�|                     d|¦  «        |d	<   |d         �|d                              d|¦  «        |d<   |d         � |d                              d|¦  «        |d<   nO|d         � |d                              d|¦  «        |d<   n'|d         �|d                              d|¦  «        |d<   | |fS )
Nr   éÿÿÿÿr   Úpixel_valuesÚimage_encoder_embeddingsÚperceiver_embeddingsÚimage_attention_maskÚtoken_type_idsÚattention_mask)	r,   ÚarangeÚshapeÚviewÚrepeatÚtoÚdeviceÚindex_selectÚget)Ú	input_idsÚexpand_sizeÚis_encoder_decoderr>   Úencoder_outputsÚmodel_kwargsÚexpanded_return_idxr=   s           r2   Úexpand_inputs_for_generationrM   l   s  € õ 	Œ�Y”_ QÔ'Ñ(Ô(×-Ò-¨b°!Ñ4Ô4×;Ò;¸A¸{ÑKÔK×PÒPÐQSÑTÔT×WÒWÐXaÔXhÑiÔið ð ×&Ò& qÐ*=Ñ>Ô>€IØ#/×#3Ò#3°NÑ#CÔ#C€L�Ñ Ø/;×/?Ò/?Ð@ZÑ/[Ô/[€LÐ+Ñ,Ø+7×+;Ò+;Ð<RÑ+SÔ+S€LÐ'Ñ(Ø+7×+;Ò+;Ð<RÑ+SÔ+S€LÐ'Ñ(à˜<Ð'Ð'Ø%Ð&6Ô7ˆØ)7×)DÒ)DÀQÐH[Ñ)\Ô)\ˆÐ%Ñ&àÐ!Ø)7×)DÒ)DÀQÐH[Ñ)\Ô)\ˆÐ%Ñ&àÐ*Ô+Ð7Ø/;Ð<RÔ/S×/`Ò/`ØÐ"ñ0
ô 0
ˆÐ+Ñ,ð �NÔ#Ð/Ø'3°NÔ'C×'PÒ'PÐQRÐTgÑ'hÔ'hˆ�^Ñ$Ð$à	Ð0Ô	1Ð	=Ø3?Ð@ZÔ3[×3hÒ3hØÐ"ñ4
ô 4
ˆÐ/Ñ0Ð0ð 
Ð,Ô	-Ð	9Ø/;Ð<RÔ/S×/`Ò/`ØÐ"ñ0
ô 0
ˆÐ+Ñ,ð �lÐ"Ð"r1   r0   c                 ó,  ‡‡— t           j        t           j        t           j        dœŠˆfd„|D ¦   «         }|                      ¦   «         D ]JŠ|r1t          ˆfd„|D ¦   «         ¦  «        r‰                     d¦  «         Œ5‰                     d¦  «         ŒK| S )N)Ú	LayerNormÚLinearÚ	Embeddingc                 ó    •— g | ]
}‰|         ‘ŒS r0   r0   )Ú.0ÚmÚmappings     €r2   ú
<listcomp>z freeze_model.<locals>.<listcomp>Ÿ   s   ø€ ÐFÐFÐF¨q ¨¤
ÐFÐFÐFr1   c              3   ó8   •K  — | ]}t          ‰|¦  «        V — Œd S ©N)Ú
isinstance)rS   ÚtÚmodules     €r2   ú	<genexpr>zfreeze_model.<locals>.<genexpr>¡   s-   øè è € Ð$]Ð$]¸q¥Z°¸Ñ%:Ô%:Ð$]Ð$]Ð$]Ð$]Ð$]Ð$]r1   TF)r   rO   rP   rQ   ÚmodulesÚanyÚrequires_grad_)ÚmodelÚmodule_exceptionsÚmodule_exceptions_mappedrU   r[   s      @@r2   Úfreeze_modelrc   ™   s´   øø€ å”\Ý”)Ý”\ðð €Gð
  GÐFÐFÐFÐ4EÐFÑFÔFÐØ—-’-‘/”/ð )ð )ˆØð 	)¥Ð$]Ð$]Ð$]Ð$]ÐD\Ð$]Ñ$]Ô$]Ñ!]Ô!]ð 	)Ø×!Ò! $Ñ'Ô'Ð'Ð'à×!Ò! %Ñ(Ô(Ð(Ð(Ø€Lr1   c                   óN   ‡ — e Zd ZdZ	 	 	 	 d	dedz  ddfˆ fd„Zd„ Zdefd„Zˆ xZ	S )
ÚIdeficsDecoupledEmbeddinga¿  
    Implements a decoupling of parameters to allow freezing (or not) a subset of the embeddings. In practise, the
    regular `weight` can be trained or frozen (i.e. `partially_freeze=True`), and if `num_additional_embeddings` > 0,
    then it will create `num_additional_embeddings` additional parameters that are always trained. If
    `num_additional_embeddings=0`, then the module defaults back to the regular behavior of `nn.Embedding`.
    FNÚpartially_freezeÚreturnc           	      óN  •— |�||k    rt          d|› d|› �¦  «        ‚ t          ¦   «         j        d|||||dœ|¤Ž || _        || _        || _        || _        |r| j                             d¦  «         | j        dk    r$t          j
        | j        |||¬¦  «        | _        dS dS )	a)  
        Args:
            num_embeddings (`int`):
                Size of the dictionary of embeddings
            num_additional_embeddings (`int`):
                Number of additional embeddings. Only useful when you `partially_freeze=True`.
            embedding_dim (`int`):
                The size of each embedding vector
            partially_freeze: (`bool`, *optional*, defaults to `False`):
                If `True`, the regular `weight` will be frozen. `additional_weight` is never frozen.
            padding_idx (`int`, *optional*):
                The padding index (needs to be less than num_embeddings)

        Note: there are a lot of other parameters to initialize a standard `nn.Embedding` such as `padding_idx`,
        `max_norm` or `norm_type`. We are not supporting these.
        Nz/padding_idx must be within num_embeddings. Got z and )Únum_embeddingsÚembedding_dimrD   ÚdtypeÚpadding_idxFr   )ri   rj   rD   rk   r0   )Ú
ValueErrorÚsuperÚ__init__ri   rl   Únum_additional_embeddingsrf   Úweightr_   r   rQ   Úadditional_embedding)
Úselfri   rp   rj   rf   rD   rk   rl   ÚkwargsÚ	__class__s
            €r2   ro   z"IdeficsDecoupledEmbedding.__init__±   s÷   ø€ ð6 Ð" {°^Ò'CÐ'CÝÐqÈ{ÐqÐqÐaoÐqÐqÑrÔrÐrØ�‰ŒÔð 	
Ø)Ø'ØØØ#ð	
ð 	
ð ð	
ð 	
ð 	
ð -ˆÔØ&ˆÔØ)BˆÔ&Ø 0ˆÔàð 	.ØŒK×&Ò& uÑ-Ô-Ð-àÔ)¨AÒ-Ð-Ý(*¬Ø#Ô=Ø+ØØð	)ñ )ô )ˆDÔ%Ð%Ð%ð .Ð-r1   c                 óD  — | j         dk    rt          j        || j        ¦  «        S |                     ¦   «         }t          j        || j        k    ¦  «        }||         }|                      || j        z
  ¦  «        }d||<   t          j        || j        ¦  «        }|||<   |S )aû  
        we have 2 embeddings, with different indices - one pretrained self.weight and another
        self.additional_embedding.weight that is being trained.

        in order to make a lookup of the input ids, we:
        1. find out the indices of the entries belonging to the 2nd embedding
        2. extract those values while subtracting the size of the first embedding (num_embeddings), since the 2nd
           embedding starts from 0 and not num_embeddings
        3. perform the 2nd embedding lookup
        4. now we handle the 1st embedding, we overwrite indices belonging to the 2nd embedding with a padding index
        5. perform the 1st embedding lookup
        6. now we overwrite the values in the 1st embedding lookup with the values of the 2nd embedding lookup

        note: for the 1st embedding lookup we could have looked up only the low indices and not do the padding, but
        then we have to create a new tensor and populate it with 2 tensors that are spread out across various indices -
        i.e. not a simple concat - I haven't benchmarked the complex case if it's any faster, given that seqlens are
        usually relatively short it's probably not faster or if faster not by much - but might be a good idea to
        measure.

        r   )	rp   ÚFÚ	embeddingrq   Úcloner,   Úwhereri   rr   )rs   rG   Úadditional_vocab_indicesÚinput_ids_additional_vocabÚadditional_embeddingsÚfull_vectors         r2   Úforwardz!IdeficsDecoupledEmbedding.forwardæ   s­   € ð* Ô)¨QÒ.Ð.Ý”;˜y¨$¬+Ñ6Ô6Ð6ð —O’OÑ%Ô%ˆ	Ý#(¤;¨y¸DÔ<OÒ/OÑ#PÔ#PÐ Ø%.Ð/GÔ%HÐ"Ø $× 9Ò 9Ð:TÐW[ÔWjÑ:jÑ kÔ kÐð /0ˆ	Ð*Ñ+Ý”k )¨T¬[Ñ9Ô9ˆð 1FˆÐ,Ñ-àÐr1   c                 óF   — d| j         › d| j        › d| j        › d| j        › �S )Nznum_embeddings=z, num_additional_embeddings=z, embedding_dim=ú, partially_freeze=)ri   rp   rj   rf   ©rs   s    r2   Ú
extra_reprz$IdeficsDecoupledEmbedding.extra_repr  se   € ð A Ô!4ð  Að  AÐRVÔRpð  Að  Að  CGô  CUð  Að  Að  jnô  jð  Að  Að  	Ar1   )FNNN)
r(   r)   r*   r+   Úboolro   r   Ústrrƒ   Ú__classcell__©ru   s   @r2   re   re   ¨   s§   ø€ € € € € ðð ð ).ØØØð3ð 3ð
  ™+ð3ð 
ð3ð 3ð 3ð 3ð 3ð 3ðj%ð %ð %ðNA˜Cð Að Að Að Að Að Að Að Ar1   re   c                   óx   ‡ — e Zd ZdZ	 	 	 	 	 ddedededed	ed
dfˆ fd„Zdej        d
ej        fd„Z	d
e
fd„Zˆ xZS )ÚIdeficsDecoupledLinearaÄ  
    Implements a decoupling of parameters to allow freezing (or not) a subset of the parameters. In practise, the
    regular `weight` can be trained or frozen (i.e. `partially_freeze=True`), and if `out_additional_features` > 0,
    then it will create `out_additional_features * in_features` additional parameters that are always trained. If
    `out_additional_features=0`, then the module defaults back to the regular behavior of `nn.Linear`.
    r   TNÚin_featuresÚout_featuresÚout_additional_featuresÚbiasrf   rg   c                 óF  •— t          ¦   «                              |||||¦  «         || _        || _        || _        || _        |r6| j                             d¦  «         |r| j                             d¦  «         |dk    r t          j
        |||||¬¦  «        | _        dS dS )aG  
        out_additional_features: int. Number of additional trainable dimensions. Only makes sense when
        `partially_freeze=True`. partially_freeze: bool. If True, the regular `weight` will be frozen and extra
        parameters (if any) will be trainable. If False, default to the regular behavior of nn.Linear.
        Fr   )rŠ   r‹   r�   rD   rk   N)rn   ro   rŒ   rf   rŠ   r‹   rq   r_   r�   r   rP   Úadditional_fc)	rs   rŠ   r‹   rŒ   r�   rf   rD   rk   ru   s	           €r2   ro   zIdeficsDecoupledLinear.__init__  sÂ   ø€ õ 	‰Œ×Ò˜ l°D¸&À%ÑHÔHÐHØ'>ˆÔ$Ø 0ˆÔà&ˆÔØ(ˆÔàð 	0ØŒK×&Ò& uÑ-Ô-Ð-Øð 0Ø”	×(Ò(¨Ñ/Ô/Ð/à" QÒ&Ð&Ý!#¤Ø'Ø4ØØØð"ñ "ô "ˆDÔÐÐð 'Ð&r1   Úinputc                 ó´   — t          j        || j        | j        ¦  «        }| j        dk    r,|                      |¦  «        }t          j        ||fd¦  «        }|S )Nr   r8   )rw   Úlinearrq   r�   rŒ   r�   r,   Úcat)rs   r�   ÚoutputÚadditional_featuress       r2   r   zIdeficsDecoupledLinear.forward>  sW   € Ý”˜% ¤¨d¬iÑ8Ô8ˆàÔ'¨!Ò+Ð+Ø"&×"4Ò"4°UÑ";Ô";ÐÝ”Y Ð(;Ð<¸bÑAÔAˆFàˆr1   c           
      óZ   — d| j         › d| j        › d| j        › d| j        du› d| j        › �
S )z=Overwriting `nn.Linear.extra_repr` to include new parameters.zin_features=z, out_features=z, out_additional_features=z, bias=Nr�   ©rŠ   r‹   rŒ   r�   rf   r‚   s    r2   rƒ   z!IdeficsDecoupledLinear.extra_reprG  sˆ   € ð S˜dÔ.ð  Sð  S¸tÔ?Pð  Sð  SÐlpô  mIð  Sð  Sð  RVô  R[ð  cgð  Rgð  Sð  Sð  |@ô  |Qð  Sð  Sð  	Sr1   )r   TTNN)r(   r)   r*   r+   Úintr„   ro   r,   ÚTensorr   r…   rƒ   r†   r‡   s   @r2   r‰   r‰     sâ   ø€ € € € € ðð ð ()ØØ!%ØØð"ð "àð"ð ð"ð "%ð	"ð
 ð"ð ð"ð 
ð"ð "ð "ð "ð "ð "ðH˜Uœ\ð ¨e¬lð ð ð ð ðS˜Cð Sð Sð Sð Sð Sð Sð Sð Sr1   r‰   c                   ó,   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zˆ xZS )ÚIdeficsRMSNormç�íµ ÷Æ°>c                 ó¬   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        || _        dS )z=
        IdeficsRMSNorm is equivalent to T5LayerNorm
        N)rn   ro   r   Ú	Parameterr,   Úonesrq   Úvariance_epsilon)rs   Úhidden_sizeÚepsru   s      €r2   ro   zIdeficsRMSNorm.__init__N  sD   ø€ õ 	‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐr1   c                 óh  — |                      t          j        ¦  «                             d¦  «                             dd¬¦  «        }|t          j        || j        z   ¦  «        z  }| j        j        t          j	        t          j
        fv r|                      | j        j        ¦  «        }| j        |z  S )Né   r8   T)Úkeepdim)rC   r,   Úfloat32ÚpowÚmeanÚrsqrtr    rq   rk   Úfloat16Úbfloat16)rs   r%   Úvariances      r2   r   zIdeficsRMSNorm.forwardV  s”   € Ø ×#Ò#¥E¤MÑ2Ô2×6Ò6°qÑ9Ô9×>Ò>¸rÈ4Ð>ÑPÔPˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆð Œ;Ô¥¤µ´Ð ?Ð?Ð?Ø)×,Ò,¨T¬[Ô->Ñ?Ô?ˆMàŒ{˜]Ñ*Ð*r1   c                 óH   — t          | j        j        ¦  «        › d| j        › �S )Nz, eps=)r/   rq   r@   r    r‚   s    r2   rƒ   zIdeficsRMSNorm.extra_repr`  s&   € Ý˜œÔ)Ñ*Ô*ÐIÐI°$Ô2GÐIÐIÐIr1   )rœ   )r(   r)   r*   ro   r   rƒ   r†   r‡   s   @r2   r›   r›   M  sb   ø€ € € € € ð$ð $ð $ð $ð $ð $ð+ð +ð +ðJð Jð Jð Jð Jð Jð Jr1   r›   c                   ó.   ‡ — e Zd Zdˆ fd„	Zd„ Zdd„Zˆ xZS )	ÚIdeficsEmbeddingé   é'  Nc                 óº  •— t          ¦   «                              ¦   «          || _        || _        || _        d| j        t          j        d| j        dt
          j        ¬¦  «                             |t
          j	        ¬¦  «        | j        z  z  z  }|  
                    d|d¬¦  «         |                      || j        j        t          j        ¦   «         ¬	¦  «         d S )
Nç      ð?r   r¤   ©rk   ©rD   rk   Úinv_freqF©Ú
persistent©Úseq_lenrD   rk   )rn   ro   ÚdimÚmax_position_embeddingsÚbaser,   r?   Úint64rC   ÚfloatÚregister_bufferÚ_set_cos_sin_cacher¶   rD   Úget_default_dtype)rs   r»   r¼   r½   rD   r¶   ru   s         €r2   ro   zIdeficsEmbedding.__init__f  sÚ   ø€ Ý‰Œ×ÒÑÔÐàˆŒØ'>ˆÔ$ØˆŒ	ØØŒIÝ”˜Q ¤¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgkÔgoÑoñqñ
ˆð 	×Ò˜Z¨¸eÐÑDÔDÐDð 	×ÒØ+°D´MÔ4HÕPUÔPgÑPiÔPið 	 ñ 	
ô 	
ð 	
ð 	
ð 	
r1   c                 óê  — || _         t          j        | j         |t          j        ¬¦  «                             | j        ¦  «        }t          j        d|| j        ¦  «        }t          j        ||fd¬¦  «        }|                      d| 	                    ¦   «          
                    |¦  «        d¬¦  «         |                      d|                     ¦   «          
                    |¦  «        d¬¦  «         d S )	Nrµ   úi,j->ijr8   ©r»   Ú
cos_cachedFr·   Ú
sin_cached)Úmax_seq_len_cachedr,   r?   r¾   Útype_asr¶   Úeinsumr“   rÀ   ÚcosrC   Úsin)rs   rº   rD   rk   rZ   ÚfreqsÚembs          r2   rÁ   z#IdeficsEmbedding._set_cos_sin_cachew  sÈ   € Ø")ˆÔÝŒL˜Ô0¸ÅuÄ{ÐSÑSÔS×[Ò[Ð\`Ô\iÑjÔjˆå”˜Y¨¨4¬=Ñ9Ô9ˆåŒi˜ ˜¨BÐ/Ñ/Ô/ˆØ×Ò˜\¨3¯7ª7©9¬9¯<ª<¸Ñ+>Ô+>È5ÐÑQÔQÐQØ×Ò˜\¨3¯7ª7©9¬9¯<ª<¸Ñ+>Ô+>È5ÐÑQÔQÐQÐQÐQr1   c                 óü   — || j         k    r"|                      ||j        |j        ¬¦  «         | j        d |…                              |j        ¬¦  «        | j        d |…                              |j        ¬¦  «        fS )Nr¹   r´   )rÈ   rÁ   rD   rk   rÆ   rC   rÇ   )rs   Úxrº   s      r2   r   zIdeficsEmbedding.forward�  s}   € à�TÔ,Ò,Ð,Ø×#Ò#¨G¸A¼HÈAÌGÐ#ÑTÔTÐTð ŒO˜H˜W˜HÔ%×(Ò(¨q¬wÐ(Ñ7Ô7ØŒO˜H˜W˜HÔ%×(Ò(¨q¬wÐ(Ñ7Ô7ð
ð 	
r1   )r°   r±   NrX   )r(   r)   r*   ro   rÁ   r   r†   r‡   s   @r2   r¯   r¯   e  sc   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð"Rð Rð Rð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r1   r¯   c                 óœ   — | dd| j         d         dz  …f         }| d| j         d         dz  d…f         }t          j        | |fd¬¦  «        S )z*Rotates half the hidden dims of the input..Nr8   r¤   rÅ   )r@   r,   r“   )rÐ   Úx1Úx2s      r2   Úrotate_halfrÔ   Œ  s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r1   c                 óÖ   — ||                               |¦  «        }||                               |¦  «        }| |z  t          | ¦  «        |z  z   }||z  t          |¦  «        |z  z   }||fS )an  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        position_ids (`torch.Tensor`):
            The position indices of the tokens corresponding to the query and key tensors. For example, this can be
            used to pass offsetted position ids when working with a KV-cache.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    )Ú	unsqueezerÔ   )ÚqÚkrË   rÌ   Úposition_idsÚunsqueeze_dimÚq_embedÚk_embeds           r2   Úapply_rotary_pos_embrÝ   “  sq   € ð* ˆlÔ
×
%Ò
% mÑ
4Ô
4€CØ
ˆlÔ
×
%Ò
% mÑ
4Ô
4€CØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�GÐÐr1   c                   ó2   ‡ — e Zd Zdededefˆ fd„Zd„ Zˆ xZS )Ú
IdeficsMLPr¡   Úintermediate_sizeÚ
hidden_actc                 ó  •— t          ¦   «                              ¦   «          t          j        ||d¬¦  «        | _        t          j        ||d¬¦  «        | _        t          j        ||d¬¦  «        | _        t          |         | _        d S )NF©r�   )	rn   ro   r   rP   Ú	gate_projÚ	down_projÚup_projr	   Úact_fn)rs   r¡   rà   rá   ru   s       €r2   ro   zIdeficsMLP.__init__±  sv   ø€ õ 	‰Œ×ÒÑÔÐÝœ ;Ð0AÈÐNÑNÔNˆŒÝœÐ#4°kÈÐNÑNÔNˆŒÝ”y Ð.?ÀeÐLÑLÔLˆŒÝ˜ZÔ(ˆŒˆˆr1   c                 ó¤   — |                       |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        S rX   )rå   rç   rä   ræ   )rs   rÐ   s     r2   r   zIdeficsMLP.forward½  s;   € Ø�~Š~˜dŸkšk¨$¯.ª.¸Ñ*;Ô*;Ñ<Ô<¸t¿|º|ÈA¹¼ÑNÑOÔOÐOr1   )r(   r)   r*   r˜   r…   ro   r   r†   r‡   s   @r2   rß   rß   °  so   ø€ € € € € ð
)àð
)ð ð
)ð ð	
)ð 
)ð 
)ð 
)ð 
)ð 
)ðPð Pð Pð Pð Pð Pð Pr1   rß   ç        r[   ÚqueryÚkeyÚvaluer>   ÚscalingÚdropoutc                 óÀ  — t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt           j        ¬¦  «                             |j        ¦  «        }t          j         	                    ||| j
        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )Nr8   éþÿÿÿ)r»   rk   ©ÚpÚtrainingr   r¤   )r,   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxr¦   rC   rk   rî   ró   Ú
contiguous)
r[   rê   rë   rì   r>   rí   rî   rt   Úattn_weightsÚattn_outputs
             r2   Úeager_attention_forwardrû   Â  sÃ   € õ ”<  s§}¢}°R¸Ñ'<Ô'<Ñ=Ô=ÀÑG€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r1   c                   ó  ‡ — e Zd ZdZ	 	 	 	 	 ddedededed	edz  d
ededz  fˆ fd„Zde	j
        dede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e         dee	j
        e	j
        f         fd„Zˆ xZS )ÚIdeficsAttentionz=Multi-headed attention from 'Attention Is All You Need' paperré   FNr¡   Ú	num_headsrî   Úis_cross_attentionÚconfigÚqk_layer_normsÚ	layer_idxc                 ó0  •— t          ¦   «                              ¦   «          || _        || _        || _        ||z  | _        || _        d| _        | j        dz  | _        || _	        |€(t                               d| j        j        › d�¦  «         | j        |z  | j        k    rt          d| j        › d|› d�¦  «        ‚|| _        t!          t"          j        d¦  «        st          d	¦  «        ‚| j        ršt!          |j        d
¦  «        s| j        n|j        j        }t#          j        | j        || j        z  d¬¦  «        | _        t#          j        ||| j        z  d¬¦  «        | _        t#          j        ||| j        z  d¬¦  «        | _        n{t#          j        | j        || j        z  d¬¦  «        | _        t#          j        | j        || j        z  d¬¦  «        | _        t#          j        | j        || j        z  d¬¦  «        | _        t#          j        || j        z  |d¬¦  «        | _        t5          | j        ¦  «        | _        || _        | j        rBt;          | j        |j        ¬¦  «        | _        t;          | j        |j        ¬¦  «        | _         d S d S )NTg      à¿zInstantiating z¹ without passing a `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.z?hidden_size must be divisible by num_heads (got `hidden_size`: z and `num_heads`: z).Úscaled_dot_product_attentionz)this model requires pytorch 2.0 or higherÚ	embed_dimFrã   ©r¢   )!rn   ro   r   r¡   rþ   Úhead_dimrî   Ú	is_causalrí   r  ÚloggerÚwarning_onceru   r(   rm   rÿ   Úhasattrr   rö   Úvision_configr  rP   Úq_projÚk_projÚv_projÚo_projr¯   Ú
rotary_embr  r›   Úrms_norm_epsÚq_layer_normÚk_layer_norm)
rs   r¡   rþ   rî   rÿ   r   r  r  Úkv_input_dimru   s
            €r2   ro   zIdeficsAttention.__init__Ý  sã  ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ&ˆÔØ"ˆŒØ# yÑ0ˆŒØˆŒØˆŒØ”} dÑ*ˆŒà"ˆŒØÐÝ×Òð, ¤Ô!8ð ,ð ,ð ,ñô ð ð ŒM˜IÑ%¨$Ô*:Ò:Ð:Ýð3ÐRVÔRbð 3ð 3Ø%.ð3ð 3ð 3ñô ð ð
 #5ˆÔå•r”}Ð&DÑEÔEð 	JÝÐHÑIÔIÐIàÔ"ð 	å(/°Ô0DÀkÑ(RÔ(RÐv�Ô Ð ÐX^ÔXlÔXvð õ œ)ØÔ Ø˜DœMÑ)Øðñ ô ˆDŒKõ
 œ) L°)¸d¼mÑ2KÐRWÐXÑXÔXˆDŒKÝœ)ØØ˜DœMÑ)Øðñ ô ˆDŒKˆKõ œ)ØÔ Ø˜DœMÑ)Øðñ ô ˆDŒKõ
 œ)ØÔ Ø˜DœMÑ)Øðñ ô ˆDŒKõ
 œ)ØÔ Ø˜DœMÑ)Øðñ ô ˆDŒKõ
 ”iØ˜œÑ%ØØð
ñ 
ô 
ˆŒõ
 +¨4¬=Ñ9Ô9ˆŒà,ˆÔØÔð 	WÝ .¨t¬}À&ÔBUÐ VÑ VÔ VˆDÔÝ .¨t¬}À&ÔBUÐ VÑ VÔ VˆDÔÐÐð	Wð 	Wr1   Útensorrº   Úbszc                 ó’   — |                      ||| j        | j        ¦  «                             dd¦  «                             ¦   «         S )Nr   r¤   )rA   rþ   r  rõ   rø   )rs   r  rº   r  s       r2   Ú_shapezIdeficsAttention._shape.  s<   € Ø�{Š{˜3 ¨¬¸¼ÑGÔG×QÒQÐRSÐUVÑWÔW×bÒbÑdÔdÐdr1   r%   Úkey_value_statesr>   rÙ   r$   rt   rg   c                 óà  — | j         p|d u}|                     ¦   «         \  }}	}
|                      |¦  «                             ||	| j        | j        ¦  «                             dd¦  «        }|s“|                      |¦  «                             ||	| j        | j        ¦  «                             dd¦  «        }|                      |¦  «                             ||	| j        | j        ¦  «                             dd¦  «        }nª|                     ¦   «         \  }
}}
|                      |¦  «                             ||| j        | j        ¦  «                             dd¦  «        }|                      |¦  «                             ||| j        | j        ¦  «                             dd¦  «        }|j	        d         }|�|| 
                    ¦   «         z  }|s>|                      |t          ||	¦  «        ¬¦  «        \  }}t          |||||¦  «        \  }}|�|                     ||| j        ¦  «        \  }}| j        r*|                      |¦  «        }|                      |¦  «        }t'          j        | j        j        t.          ¦  «        } || ||||f| j        sdn| j        | j        dœ|¤Ž\  }}|                     ||	d¦  «                             ¦   «         }|                      |¦  «        }||fS )Nr   r¤   rð   )rº   ré   )rî   rí   r8   )rÿ   Úsizer  rA   rþ   r  rõ   r  r  r@   Úget_seq_lengthr  ÚmaxrÝ   Úupdater  r  r  r  r   Úget_interfacer   Ú_attn_implementationrû   ró   rî   rí   Úreshaperø   r  )rs   r%   r  r>   rÙ   r$   rt   rÿ   r  Úq_lenÚ_Úquery_statesÚ
key_statesÚvalue_statesÚkv_lenÚ
kv_seq_lenrË   rÌ   Úattention_interfacerú   rù   s                        r2   r   zIdeficsAttention.forward1  s  € ð "Ô4ÐTÐ8HÐPTÐ8TÐà%×*Ò*Ñ,Ô,‰ˆˆU�Aà—{’{ =Ñ1Ô1×6Ò6°s¸EÀ4Ä>ÐSWÔS`ÑaÔa×kÒkÐlmÐopÑqÔqˆØ!ð 	ØŸš ]Ñ3Ô3×8Ò8¸¸eÀTÄ^ÐUYÔUbÑcÔc×mÒmÐnoÐqrÑsÔsˆJØŸ;š; }Ñ5Ô5×:Ò:¸3ÀÀtÄ~ÐW[ÔWdÑeÔe×oÒoÐpqÐstÑuÔuˆLˆLà+×0Ò0Ñ2Ô2‰LˆAˆv�qØŸšÐ%5Ñ6Ô6×;Ò;¸CÀÈÌÐY]ÔYfÑgÔg×qÒqÐrsÐuvÑwÔwˆJà—’Ð,Ñ-Ô-×2Ò2°3¸ÀÄÐPTÔP]Ñ^Ô^×hÒhÐijÐlmÑnÔnð ð  Ô% bÔ)ˆ
ØÐ&Ø˜/×8Ò8Ñ:Ô:Ñ:ˆJà!ð 	nØ—’ |½SÀÈUÑ=SÔ=S�ÑTÔT‰HˆC�Ý';¸LÈ*ÐVYÐ[^Ð`lÑ'mÔ'mÑ$ˆL˜*ð Ð&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜àÔð 	7Ø×,Ò,¨\Ñ:Ô:ˆLØ×*Ò*¨:Ñ6Ô6ˆJå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð>�C�C°$´,Ø”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð "×)Ò)¨#¨u°bÑ9Ô9×DÒDÑFÔFˆØ—k’k +Ñ.Ô.ˆà˜LÐ(Ð(r1   )ré   FNFN)NNNN)r(   r)   r*   r+   r˜   r¿   r„   r   ro   r,   r™   r  Ú
LongTensorr
   r   r   r/   r   r†   r‡   s   @r2   rý   rý   Ú  s�  ø€ € € € € ØGÐGð Ø#(Ø*.Ø$Ø $ðOWð OWàðOWð ðOWð ð	OWð
 !ðOWð ! 4Ñ'ðOWð ðOWð ˜‘:ðOWð OWð OWð OWð OWð OWðbe˜Uœ\ð e°Cð e¸cð eð eð eð eð 15Ø.2Ø04Ø(,ð;)ð ;)à”|ð;)ð  œ,¨Ñ-ð;)ð œ tÑ+ð	;)ð
 Ô&¨Ñ-ð;)ð  ™ð;)ð Ð+Ô,ð;)ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð;)ð ;)ð ;)ð ;)ð ;)ð ;)ð ;)ð ;)r1   rý   c                   ó®   ‡ — e Zd Zddededz  fˆ fd„Ze	 	 	 ddej        dej        dz  dej	        dz  de
dz  d	ee         d
ej        fd„¦   «         Zˆ xZS )ÚIdeficsDecoderLayerNr   r  c                 ó”  •— t          ¦   «                              ¦   «          |j        | _        t          | j        |j        |j        ||¬¦  «        | _        t          | j        |j        |j	        ¬¦  «        | _
        t          |j        |j        ¬¦  «        | _        t          |j        |j        ¬¦  «        | _        |j        | _        d S )N)r¡   rþ   rî   r   r  ©r¡   rà   rá   r  )rn   ro   r¡   rý   Únum_attention_headsrî   Ú	self_attnrß   rà   rá   Úmlpr›   r  Úinput_layernormÚpost_attention_layernorm©rs   r   r  ru   s      €r2   ro   zIdeficsDecoderLayer.__init__q  sÀ   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔÝ)ØÔ(ØÔ0Ø”NØØð
ñ 
ô 
ˆŒõ ØÔ(Ø$Ô6ØÔ(ð
ñ 
ô 
ˆŒõ
  .¨fÔ.@ÀfÔFYÐZÑZÔZˆÔÝ(6°vÔ7IÈvÔObÐ(cÑ(cÔ(cˆÔ%Ø”~ˆŒˆˆr1   r%   r>   rÙ   r$   rt   rg   c                 óz  — |}|                       |¦  «        } | j        d||||dœ|¤Ž\  }}t          j                             || j        | j        ¬¦  «        }||z   }|}|                      |¦  «        }|                      |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|S )N)r%   r>   rÙ   r$   rñ   r0   )r3  r1  r   rö   rî   ró   r4  r2  )rs   r%   r>   rÙ   r$   rt   Úresidualr$  s           r2   r   zIdeficsDecoderLayer.forward„  sá   € ð !ˆà×,Ò,¨]Ñ;Ô;ˆð *˜4œ>ð 
Ø'Ø)Ø%Ø+ð	
ð 
ð
 ð
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆð !ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆàÐr1   rX   )NNN)r(   r)   r*   r   r˜   ro   r   r,   r™   r+  r
   r   r   r-   r   r†   r‡   s   @r2   r-  r-  p  sÜ   ø€ € € € € ð&ð &˜}ð &¸¸t¹ð &ð &ð &ð &ð &ð &ð& ð /3Ø04Ø(,ðð à”|ðð œ tÑ+ðð Ô&¨Ñ-ð	ð
  ™ðð Ð+Ô,ðð 
Ô	ðð ð ñ „^ðð ð ð ð r1   r-  c                   óÚ   ‡ — e Zd Zddededz  fˆ fd„Ze	 	 	 	 	 ddej        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
e         dej        fd„¦   «         Zˆ xZS )ÚIdeficsGatedCrossAttentionLayerNr   r  c           	      ó˜  •— t          ¦   «                              ¦   «          |j        | _        t          | j        |j        d|j        ||j        |¬¦  «        | _        t          | j        |j	        |j
        ¬¦  «        | _        t          |j        |j        ¬¦  «        | _        t          |j        |j        ¬¦  «        | _        |j        | _        t#          j        ¦   «         | _        t#          j        ¦   «         | _        |j        dk    rì|j        dk    rft#          j        t1          j        dd| j        ¦  «        ¦  «        | _        t#          j        t1          j        dd| j        ¦  «        ¦  «        | _        �n |j        dk    rXt#          j        t1          j        d¦  «        ¦  «        | _        t#          j        t1          j        d¦  «        ¦  «        | _        �n=t9          d	|j        › d
�¦  «        ‚|j        dk    rì|j        dk    rft#          j        t1          j        dd| j        ¦  «        ¦  «        | _        t#          j        t1          j        dd| j        ¦  «        ¦  «        | _        �n©|j        dk    rXt#          j        t1          j        d¦  «        ¦  «        | _        t#          j        t1          j        d¦  «        ¦  «        | _        �nFt9          d	|j        › d
�¦  «        ‚|j        dv �r|j        dk    rwt#          j        t1          j        d|j        dd| j        f¬¦  «        ¦  «        | _        t#          j        t1          j        d|j        dd| j        f¬¦  «        ¦  «        | _        n¢|j        dk    rgt#          j        t1          j        d|j        d¬¦  «        ¦  «        | _        t#          j        t1          j        d|j        d¬¦  «        ¦  «        | _        n0t9          d	|j        › d
�¦  «        ‚tA          d|j        › d�¦  «        ‚tC          | d¦  «        rtC          | d¦  «        st9          d¦  «        ‚d S )NT)r¡   rþ   rÿ   rî   r   r  r  r/  r  ÚzerosÚvectorr   r¿   z Unknown value for `alpha_type` (ú)rŸ   >   ÚnormalÚrandomÚgaussianré   )r¨   Ústdr  zAlpha initialization scheme z not yet implemented!Úalpha_cross_attnÚalpha_densez+Alpha parameters not initialized correctly!)"rn   ro   r¡   rý   r0  rî   r  Ú
cross_attnrß   rà   rá   r2  r›   r  r3  r4  r   r   ÚTanhÚact_cross_attnÚ	act_denseÚalpha_initializerÚ
alpha_typerž   r,   r;  rB  rC  rm   rŸ   r>  Úalphas_initializer_rangeÚNotImplementedErrorr  r5  s      €r2   ro   z(IdeficsGatedCrossAttentionLayer.__init__§  så  ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔÝ*ØÔ(ØÔ0Ø#Ø”NØØ!Ô0Øð
ñ 
ô 
ˆŒõ ØÔ(Ø$Ô6ØÔ(ð
ñ 
ô 
ˆŒõ
  .¨fÔ.@ÀfÔFYÐZÑZÔZˆÔÝ(6°vÔ7IÈvÔObÐ(cÑ(cÔ(cˆÔ%Ø”nˆŒå œg™iœiˆÔÝœ™œˆŒàÔ# wÒ.Ð.ØÔ  HÒ,Ð,Ý(*¬µU´[ÀÀAÀtÔGWÑ5XÔ5XÑ(YÔ(Y�Ô%Ý#%¤<µ´¸A¸qÀ$ÔBRÑ0SÔ0SÑ#TÔ#T�Ô Ñ ØÔ" gÒ-Ð-Ý(*¬µU´[À±^´^Ñ(DÔ(D�Ô%Ý#%¤<µ´¸A±´Ñ#?Ô#?�Ô Ñ å Ð!XÀFÔDUÐ!XÐ!XÐ!XÑYÔYÐYàÔ%¨Ò/Ð/ØÔ  HÒ,Ð,Ý(*¬µU´ZÀÀ1ÀdÔFVÑ5WÔ5WÑ(XÔ(X�Ô%Ý#%¤<µ´
¸1¸aÀÔAQÑ0RÔ0RÑ#SÔ#S�Ô Ñ ØÔ" gÒ-Ð-Ý(*¬µU´ZÀ±]´]Ñ(CÔ(C�Ô%Ý#%¤<µ´
¸1±´Ñ#>Ô#>�Ô Ñ å Ð!XÀFÔDUÐ!XÐ!XÐ!XÑYÔYÐYàÔ%Ð)IÐIÑIØÔ  HÒ,Ð,Ý(*¬Ý”L c¨vÔ/NÐVWÐYZÐ\`Ô\lÐUmÐnÑnÔnñ)ô )�Ô%õ $&¤<Ý”L c¨vÔ/NÐVWÐYZÐ\`Ô\lÐUmÐnÑnÔnñ$ô $�Ô Ð ð Ô" gÒ-Ð-Ý(*¬Ý”L c¨vÔ/NÐVWÐYÑYÔYñ)ô )�Ô%õ $&¤<µ´À#È6ÔKjÐrsÐ0uÑ0uÔ0uÑ#vÔ#v�Ô Ð å Ð!XÀFÔDUÐ!XÐ!XÐ!XÑYÔYÐYõ &Ð&tÀVÔE]Ð&tÐ&tÐ&tÑuÔuÐuå˜Ð0Ñ1Ô1ð 	Lµg¸dÀMÑ6RÔ6Rð 	LÝÐJÑKÔKÐKð	Lð 	Lr1   r%   r>   r'   r<   Úcross_attention_gater$   rt   rg   c                 ó˜  — |€t          d¦  «        ‚|€t          d¦  «        ‚|�t          d¦  «        ‚|}|                      |¦  «        } | j        d	|||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }| 	                    |dk    dd…dd…df         d¦  «        }||  
                    | j        ¦  «        |z  z   }|}|                      |¦  «        }|                      |¦  «        }t          j                             || j        | j        ¬¦  «        }||                      | j        ¦  «        |z  z   }|S )
a  
        image_hidden_states (`torch.FloatTensor`):
            Input to the layer of shape `(batch, seq_len, embed_dim)`
        image_attention_mask (`torch.FloatTensor`, *optional*):
            image attention mask of size
            `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
        cross_attention_gate (`torch.FloatTensor`, *optional*):
            gate of size `(batch, seq_len)` used to zero-out cross-attention output for tokens attending no images.
        Nzt`image_hidden_states` is required for Idefics cross attention module which are visual features to be conditioned on.z‹`cross_attention_gate` is required for Idefics cross attention module to zero-out the cross-attention hidden_states attending to no images.zMPast key value states are not implemented for Idefics cross attention module.)r%   r  r>   rñ   r   ré   r0   )rm   rK  r3  rD  r   rö   rî   r   ró   Úmasked_fillrF  rB  r4  r2  rG  rC  )
rs   r%   r>   r'   r<   rL  r$   rt   r7  r$  s
             r2   r   z'IdeficsGatedCrossAttentionLayer.forwardé  s�  € ð( Ð&Ýð#ñô ð ð
  Ð'Ýð ^ñô ð ð Ð&Ý%Ð&uÑvÔvÐvà ˆà×,Ò,¨]Ñ;Ô;ˆð +˜4œ?ð 
Ø'Ø0Ø/ð
ð 
ð ð	
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼{ÐUYÔUbÐ-ÑcÔcˆà%×1Ò1Ð3GÈ1Ò3LÈaÈaÈaÐQRÐQRÐQRÐTXÈjÔ2YÐ[^Ñ_Ô_ˆØ  4×#6Ò#6°tÔ7LÑ#MÔ#MÐP]Ñ#]Ñ]ˆð !ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼{ÐUYÔUbÐ-ÑcÔcˆØ  4§>¢>°$Ô2BÑ#CÔ#CÀmÑ#SÑSˆàÐr1   rX   )NNNNN)r(   r)   r*   r   r˜   ro   r   r,   r™   r
   r   r   r-   r   r†   r‡   s   @r2   r9  r9  ¦  s  ø€ € € € € ð@Lð @L˜}ð @L¸¸t¹ð @Lð @Lð @Lð @Lð @Lð @LðD ð /3Ø37Ø48Ø48Ø(,ð8ð 8à”|ð8ð œ tÑ+ð8ð #œ\¨DÑ0ð	8ð
 $œl¨TÑ1ð8ð $œl¨TÑ1ð8ð  ™ð8ð Ð+Ô,ð8ð 
Ô	ð8ð 8ð 8ñ „^ð8ð 8ð 8ð 8ð 8r1   r9  c                   óš   ‡ — e Zd ZU eed<   dZdZdZg d¢ZdZ	dZ
dZdZe eedd¬	¦  «        d
œZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚIdeficsPreTrainedModelr   r`   )ÚimageÚtextT)r-  r9  ÚIdeficsVisionEncoderLayerFr   r1  )ÚindexÚ
layer_name)r%   r&   c                 óÀ  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rjt	          j        |j        ¦  «         t	          j        |j        t          j
        |j        j        d         ¦  «                             d¦  «        ¦  «         d S t          |t          ¦  «        ræ| j        j        dk    r4t	          j        |j        ¦  «         t	          j        |j        ¦  «         d S | j        j        dk    r4t	          j        |j        ¦  «         t	          j        |j        ¦  «         d S | j        j        dv rNt	          j        |j        d| j        j        ¬¦  «         t	          j        |j        d| j        j        ¬¦  «         d S d S t          |t*          ¦  «        rt	          j        |j        ¦  «         d S t          |t.          ¦  «        rüd|j        t          j
        d	|j        d
¦  «        |j        z  z  z  }t	          j        |j        |¦  «         t          j
        |j        ¦  «                             |¦  «        }t          j        d||¦  «        }t          j        ||fd¬¦  «        }t	          j        |j        |                      ¦   «         ¦  «         t	          j        |j!        | "                    ¦   «         ¦  «         d S d S )Nr8   )r   r8   r;  rŸ   >   r>  r?  r@  ré   )r¨   rA  r³   r   r¤   rÄ   rÅ   )#rn   Ú_init_weightsrY   r   ÚinitÚnormal_Úclass_embeddingÚcopy_rÙ   r,   r?   r@   Úexpandr9  r   rH  Úzeros_rB  rC  Úones_rJ  r   Úlatentsr¯   r½   r»   r¶   r¼   rÉ   rÊ   r“   rÆ   rË   rÇ   rÌ   )rs   r[   r¶   rZ   rÍ   rÎ   ru   s         €r2   rW  z$IdeficsPreTrainedModel._init_weights7  s}  ø€ õ
 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ5Ñ6Ô6ð 	5ÝŒL˜Ô/Ñ0Ô0Ð0ÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhÝ˜Õ ?Ñ@Ô@ð 	5ØŒ{Ô,°Ò7Ð7Ý”˜FÔ3Ñ4Ô4Ð4Ý”˜FÔ.Ñ/Ô/Ð/Ð/Ð/Ø”Ô.°&Ò8Ð8Ý”
˜6Ô2Ñ3Ô3Ð3Ý”
˜6Ô-Ñ.Ô.Ð.Ð.Ð.Ø”Ô.Ð2RÐRÐRÝ”˜VÔ4¸3ÀDÄKÔDhÐiÑiÔiÐiÝ”˜VÔ/°c¸t¼{Ô?cÐdÑdÔdÐdÐdÐdð SÐRõ ˜Õ 9Ñ:Ô:ð 
	5ÝŒL˜œÑ(Ô(Ð(Ð(Ð(Ý˜Õ 0Ñ1Ô1ð 	5Ø˜fœk­e¬l¸1¸f¼jÈ!Ñ.LÔ.LÈvÌzÑ.YÑZÑ[ˆHÝŒJ�v”¨Ñ1Ô1Ð1Ý”˜VÔ;Ñ<Ô<×DÒDÀXÑNÔNˆAÝ”L ¨A¨xÑ8Ô8ˆEå”)˜U E˜N°Ð3Ñ3Ô3ˆCÝŒJ�vÔ(¨#¯'ª'©)¬)Ñ4Ô4Ð4ÝŒJ�vÔ(¨#¯'ª'©)¬)Ñ4Ô4Ð4Ð4Ð4ð	5ð 	5r1   )r(   r)   r*   r   r.   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_can_compile_fullgraphÚ_supports_attention_backendr-  r   rý   Ú_can_record_outputsr,   Úno_gradrW  r†   r‡   s   @r2   rP  rP  %  s¶   ø€ € € € € € àÐÐÑØÐØ(ÐØ&*Ð#ØoÐoÐoÐØ€Nà ÐØ"ÐØ"&Ðð -Ø$�nÐ%5¸QÈ;ÐWÑWÔWðð Ðð
 €U„]�_„_ð5ð 5ð 5ð 5ñ „_ð5ð 5ð 5ð 5ð 5r1   rP  c                   óh  ‡ — e Zd ZdZdefˆ fd„Zdd„Zdd„Zdd„Ze	e
e	 	 	 	 	 	 	 	 	 	 	 d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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ez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚIdeficsModelzŸ
    Transformer decoder consisting of `config.num_hidden_layers` layers. Each layer is a [`IdeficsDecoderLayer`]

    Args:
        config: IdeficsConfig
    r   c                 ó®  •‡— t          ¦   «                              ‰¦  «         ‰| _        ‰j        | _        ‰j        | _        t          ‰j        ‰j        ‰j        ‰j	        | j        ¬¦  «        | _
        ‰j        j        | _        ‰j        | _        ‰j        | j        _        t          ‰j        ¦  «        | _        ‰j        r>‰j        }t%          ‰‰j        j        |j        |j        |j        |j        ¦  «        | _        t3          j        ˆfd„t7          ‰j        ¦  «        D ¦   «         ¦  «        | _        ‰j        | _        ‰j        | j        z  }t3          j        ˆfd„t7          |¦  «        D ¦   «         ¦  «        | _        d| _         tC          ‰j        ‰j"        ¬¦  «        | _#        |  $                    ¦   «          |  %                    ‰¦  «         d S )N)ri   rp   rj   rf   rl   c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ©)r  )r-  ©rS   Úir   s     €r2   rV   z)IdeficsModel.__init__.<locals>.<listcomp>�  s'   ø€ Ð_Ð_Ð_¸!Õ  °1Ð5Ñ5Ô5Ð_Ð_Ð_r1   c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS rn  )r9  ro  s     €r2   rV   z)IdeficsModel.__init__.<locals>.<listcomp>‡  s'   ø€ ÐcÐcÐcÀaÕ,¨V¸qÐAÑAÔAÐcÐcÐcr1   Fr  )&rn   ro   r   Úpad_token_idrl   Ú
vocab_sizere   Úadditional_vocab_sizer¡   Úfreeze_text_layersÚembed_tokensr  Ú
image_sizer!  r   Úvision_modelÚuse_resamplerÚperceiver_configr   r  Úresampler_depthÚresampler_n_headsÚresampler_head_dimÚresampler_n_latentsÚperceiver_resamplerr   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersÚcross_layer_intervalÚgated_cross_attn_layersÚgradient_checkpointingr›   r  ÚnormÚ	post_initÚfreeze_relevant_params)rs   r   rz  Únum_cross_layersru   s    `  €r2   ro   zIdeficsModel.__init__`  sÍ  øø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØ!Ô.ˆÔØ Ô+ˆŒå5Ø!Ô,Ø&,Ô&BØ Ô,Ø#Ô6ØÔ(ð
ñ 
ô 
ˆÔð !Ô.Ô9ˆŒØ#Ô1ˆÔà28Ô2MˆÔÔ/Ý4°VÔ5IÑJÔJˆÔð Ôð 		Ø%Ô6ÐÝ'@ØØÔ$Ô.Ø Ô0Ø Ô2Ø Ô3Ø Ô4ñ(ô (ˆDÔ$õ ”mØ_Ð_Ð_Ð_½uÀVÔE]Ñ?^Ô?^Ð_Ñ_Ô_ñ
ô 
ˆŒð %+Ô$?ˆÔ!Ø!Ô3°tÔ7PÑPÐÝ')¤}ØcÐcÐcÐcÍ5ÐQaÑKbÔKbÐcÑcÔcñ(
ô (
ˆÔ$ð ',ˆÔ#å" 6Ô#5¸6Ô;NÐOÑOÔOˆŒ	ð 	�ŠÑÔÐà×#Ò# FÑ+Ô+Ð+Ð+Ð+r1   Nc                 ó¢   — |€| j         }|j        r|                      |j        ¦  «         |j        rt	          | j        |j        ¬¦  «         d S d S ©N)ra   )r   ru  Úfreeze_text_module_exceptionsÚfreeze_vision_layersrc   rx  Úfreeze_vision_module_exceptions)rs   r   s     r2   r‰  z#IdeficsModel.freeze_relevant_params’  sh   € Øˆ>Ø”[ˆFàÔ$ð 	JØ×#Ò# FÔ$HÑIÔIÐIàÔ&ð 	fÝ˜Ô*¸fÔ>dÐeÑeÔeÐeÐeÐeð	fð 	fr1   r0   c                 óJ   — | j         | j        fD ]}t          ||¬¦  «         Œd S rŒ  )rƒ  r‡  rc   )rs   ra   r[   s      r2   ru  zIdeficsModel.freeze_text_layersœ  s?   € Ø”{ D¤IÐ.ð 	Fð 	FˆFÝ˜Ð3DÐEÑEÔEÐEÐEð	Fð 	Fr1   c                 ó2   — t          | j        |¬¦  «         d S rŒ  )rc   rx  )rs   ra   s     r2   rŽ  z!IdeficsModel.freeze_vision_layers   s   € Ý�TÔ&Ð:KÐLÑLÔLÐLÐLÐLr1   FrG   r>   rÙ   r$   Úinputs_embedsr9   r:   r;   r<   Ú	use_cacheÚinterpolate_pos_encodingrt   rg   c                 ó0	  — |�|j         n|j         }|du |duz  rt          d¦  «        ‚|€|                      |¦  «        }|
r|€t          | j        ¬¦  «        }|j        d         }|�|                     ¦   «         nd}||z   }|�V|€T|                     ¦   «                              d¦  «        dz
  }| 	                    |dk    d¦  «         |dd…| d…f         }n5|€3t          j        ||j         ¬¦  «        |z   }|                     d¦  «        }t          d„ |||fD ¦   «         ¦  «        d	k    rt          d
¦  «        ‚|�{|                     | j        |¬¦  «        }|j        dd	…         \  }} |                     ¦   «         j        ||z  g|j        d	d…         ¢R Ž }|                      ||¬¦  «        j        }nQ|�O|                     ¦   «         \  }}}}|                     | j        |¬¦  «        }|                     ||z  ||¦  «        }| j        j        r^|€@|                      |¦  «        }|                     d¦  «        |                     d	¦  «        }}n|                     ¦   «         \  }}}}|}n<|€+|                     d¦  «        |                     d	¦  «        }}nt          d¦  «        ‚|                     |||z  |¦  «        } |	d                              ddd|¦  «        j        g |	j        dd	…         ¢d‘R Ž }	t          j        |	dd…ddd…dd…f                              ¦   «         t          j        d||j        ¬¦  «        t          j        |j        ¦  «        j        ¦  «        }	|	dk                         d¬¦  «                             | j        |¬¦  «                             d¬¦  «        }|€(t          j         ||ft          j        |j         ¬¦  «        }tC          | j        ||||¬¦  «        }|}tE          | j#        ¦  «        D ]D\  }}|| j$        z  dk    r$| j%        || j$        z           } ||||f|	|ddœ|¤Ž} ||f|||dœ|¤Ž}ŒE|  &                    |¦  «        }|                     ||||¦  «        }tO          |||¬¦  «        S )ab  
        image_encoder_embeddings (`torch.FloatTensor`, *optional*):
            The output of the image encoder.
        perceiver_embeddings (`torch.FloatTensor`, *optional*):
            The output of the perceiver resampler.
        image_attention_mask (`torch.LongTensor`, *optional*):
            The attention mask for the image encoder.
        Nz:You must specify exactly one of input_ids or inputs_embeds)r   r   r   r8   )rD   c              3   ó   K  — | ]}|d u V — Œ	d S rX   r0   )rS   rÐ   s     r2   r\   z'IdeficsModel.forward.<locals>.<genexpr>Õ  s&   è è € ÐaÐa˜Qˆq�DˆyÐaÐaÐaÐaÐaÐar1   r¤   z_Exactly 1 of pixel_values, image_encoder_embeddings or perceiver_embeddings has to be not-None.)rk   rD   )r9   r”  zBIf `perceiver_embeddings` are passed, use_resampler should be True).Nré   rµ   rÅ   )r   r’  r>   r$   rÙ   )r<   rL  r$   )r>   rÙ   r$   )r#   r'   r$   )(rD   rm   rv  r   r   r@   r  ÚlongÚcumsumÚmasked_fill_r,   r?   rÖ   ÚsumrC   rk   rø   rA   rx  r#   r  ry  r  r\  r"  rz   r„   r  ÚfinfoÚminr^   ÚsqueezerŸ   r   Ú	enumeraterƒ  r„  r…  r‡  r"   )rs   rG   r>   rÙ   r$   r’  r9   r:   r;   r<   r“  r”  rt   rD   Ú
seq_lengthÚpast_key_values_lengthÚseq_length_with_pastÚ
batch_sizeÚ
num_imagesr'   Úimage_seq_lenÚimage_hidden_sizerL  Úcausal_maskr%   ÚidxÚdecoder_layerÚcross_attn_blocks                               r2   r   zIdeficsModel.forward£  s¼  € ð4 &/Ð%:�Ô!Ð!ÀÔ@Tˆà˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ×-Ò-¨iÑ8Ô8ˆMàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOà"Ô(¨Ô+ˆ
ØETÐE` ×!?Ò!?Ñ!AÔ!AÐ!AÐfgÐØ)Ð,BÑBÐàÐ%¨,Ð*>à)×.Ò.Ñ0Ô0×7Ò7¸Ñ;Ô;¸aÑ?ˆLØ×%Ò% n¸Ò&9¸1Ñ=Ô=Ð=Ø'¨¨¨¨J¨;¨<¨<¨Ô8ˆLˆLØÐ!Ý œ<¨
¸=Ô;OÐPÑPÔPÐSiÑiˆLØ'×1Ò1°!Ñ4Ô4ˆLåÐaÐa <Ð1IÐK_Ð"`ÐaÑaÔaÑaÔaÐefÒfÐfÝØqñô ð ð Ð%Ø'Ÿ?š?°´ÀF˜?ÑKÔKˆLØ%1Ô%7¸¸¸Ô%;Ñ"ˆJ˜
Ø9˜<×2Ò2Ñ4Ô4Ô9¸*ÀzÑ:QÐkÐT`ÔTfÐghÐgiÐgiÔTjÐkÐkÐkˆLð #'×"3Ò"3Ø)ÐD\ð #4ñ #ô #äð  Ðð &Ð1ØG_×GdÒGdÑGfÔGfÑDˆJ˜
 MÐ3DØ":×"=Ò"=ÀDÄJÐW]Ð"=Ñ"^Ô"^ÐØ"5×":Ò":¸:È
Ñ;RÐTaÐctÑ"uÔ"uÐàŒ;Ô$ð 
	cØ#Ð+Ø'+×'?Ò'?Ð@SÑ'TÔ'TÐ$Ø3G×3LÒ3LÈQÑ3OÔ3OÐQe×QjÒQjÐklÑQmÔQmÐ0��àK_×KdÒKdÑKfÔKfÑH�
˜J¨Ð7HØ"6ÐÐØ!Ð)Ø/B×/GÒ/GÈÑ/JÔ/JÐL_×LdÒLdÐefÑLgÔLgÐ,ˆMˆMåÐaÑbÔbÐbà1×6Ò6°zÀ:ÐP]ÑC]Ð_pÑqÔqÐðÐ  Ô+ßŠV�B˜˜B Ñ.Ô.Üð:à*Ô0°°!°Ô4ð:à68ð:ð :ð :ð 	õ
  %œ{Ø     D¨!¨!¨!¨Q¨Q¨Q Ô/×4Ò4Ñ6Ô6ÝŒL˜ VÐ3FÔ3LÐMÑMÔMÝŒKÐ+Ô1Ñ2Ô2Ô6ñ 
ô  
Ðð " SÒ(×-Ò-°"Ð-Ñ5Ô5×8Ò8¸t¼zÐRXÐ8ÑYÔY×aÒaÐfgÐaÑhÔhð 	ð
 Ð!Ý"œZØÐ1Ð2½%¼*È]ÔMaðñ ô ˆNõ )Ø”;Ø'Ø)Ø+Ø%ð
ñ 
ô 
ˆð &ˆå"+¨D¬KÑ"8Ô"8ð 	ð 	ÑˆC�à�TÔ.Ñ.°!Ò3Ð3Ø#'Ô#?ÀÀtÔG`Ñ@`Ô#aÐ Ø 0Ð 0Ø!ØØ'ð!ð *>Ø)=Ø$(ð!ð !ð ð!ð !�ð *˜MØðà*Ø)Ø /ð	ð ð
 ðð ˆMˆMð Ÿ	š	 -Ñ0Ô0ˆØ1×6Ò6°zÀ:È}Ð^oÑpÔpÐå-Ø+Ø 3Ø+ð
ñ 
ô 
ð 	
r1   rX   ©r0   )NNNNNNNNNNF)r(   r)   r*   r+   r   ro   r‰  ru  rŽ  r   r   r   r,   r+  r™   r
   r-   r„   r   r   r/   r"   r   r†   r‡   s   @r2   rk  rk  W  sà  ø€ € € € € ðð ð0,˜}ð 0,ð 0,ð 0,ð 0,ð 0,ð 0,ðdfð fð fð fðFð Fð Fð FðMð Mð Mð Mð  ØØð .2Ø.2Ø04Ø(,Ø26Ø15Ø=AØ9=Ø48Ø!%Ø05ðS
ð S
àÔ# dÑ*ðS
ð œ tÑ+ðS
ð Ô&¨Ñ-ð	S
ð
  ™ðS
ð Ô(¨4Ñ/ðS
ð Ô'¨$Ñ.ðS
ð #(Ô"3°dÑ":ðS
ð $Ô/°$Ñ6ðS
ð $œl¨TÑ1ðS
ð ˜$‘;ðS
ð #'¨¡+ðS
ð Ð+Ô,ðS
ð 
Ð/Ñ	/ðS
ð S
ð S
ñ „^ñ „_ñ  ÔðS
ð S
ð S
ð S
ð S
r1   rk  c            "       óÈ  ‡ — e Zd ZddiZdˆ fd„	Zee	 	 	 	 	 	 	 	 	 	 	 	 	 d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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ej	        z  dee         deez  fd„¦   «         ¦   «         Z	 	 	 	 	 	 	 	 dˆ fd„	Z	 ddedeeef         dedeeef         fˆ fd„Zˆ xZS ) ÚIdeficsForVisionText2Textúlm_head.weightúmodel.embed_tokens.weightNc                 ó  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |j        |j        |j        d|j        ¬¦  «        | _	        |j        dk    r
dddœ| _
        |                      ¦   «          d S )NFr—   r   r®  z.model.embed_tokens.additional_embedding.weight)r­  zlm_head.additional_fc.weight)rn   ro   rk  r`   r‰   r¡   rs  rt  Úfreeze_lm_headÚlm_headÚ_tied_weights_keysrˆ  )rs   r   rx  ru   s      €r2   ro   z"IdeficsForVisionText2Text.__init__?  s˜   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý! &Ñ)Ô)ˆŒ
å-ØÔ*ØÔ*Ø$*Ô$@ØØ#Ô2ð
ñ 
ô 
ˆŒð Ô'¨!Ò+Ð+à"=Ø0`ð'ð 'ˆDÔ#ð 	�ŠÑÔÐÐÐr1   Fr   rG   r>   rÙ   r$   r’  r9   r:   r;   r<   Úlabelsr“  r”  Úlogits_to_keeprt   rg   c                 óh  —  | j         d|||||||||	||ddœ|¤Ž}|j        }t          |t          ¦  «        rt	          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }d}|
� | j        d||
| j        j        dœ|¤Ž}t          |||j
        |j        |j        |j        ¬¦  «        S )aC  
        image_encoder_embeddings (`torch.FloatTensor`, *optional*):
            The output of the image encoder.
        perceiver_embeddings (`torch.FloatTensor`, *optional*):
            The output of the perceiver resampler.
        image_attention_mask (`torch.LongTensor`, *optional*):
            The attention mask for the image encoder.
        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 AutoProcessor, IdeficsForVisionText2Text

        >>> model = IdeficsForVisionText2Text.from_pretrained("HuggingFaceM4/idefics-9b")
        >>> processor = AutoProcessor.from_pretrained("HuggingFaceM4/idefics-9b")

        >>> dogs_image_url_1 = "https://huggingface.co/datasets/hf-internal-testing/fixtures_nlvr2/raw/main/image1.jpeg"
        >>> dogs_image_url_2 = "https://huggingface.co/datasets/hf-internal-testing/fixtures_nlvr2/raw/main/image2.jpeg"

        >>> prompts = [
        ...     [
        ...         "User:",
        ...         dogs_image_url_1,
        ...         "Describe this image.\nAssistant: An image of two dogs.\n",
        ...         "User:",
        ...         dogs_image_url_2,
        ...         "Describe this image.\nAssistant:",
        ...     ]
        ... ]
        >>> inputs = processor(prompts, return_tensors="pt")
        >>> generate_ids = model.generate(**inputs, max_new_tokens=6)
        >>> processor.batch_decode(generate_ids, skip_special_tokens=True)
        ```T)rG   r>   rÙ   r$   r’  r9   r:   r;   r<   r“  r”  Úreturn_dictN)r6   r³  rs  )r5   r6   r$   r%   r&   r'   r0   )r`   r#   rY   r˜   Úslicer±  Úloss_functionr   rs  r4   r$   r%   r&   r'   )rs   rG   r>   rÙ   r$   r’  r9   r:   r;   r<   r³  r“  r”  r´  rt   Úoutputsr%   Úslice_indicesr6   r5   s                       r2   r   z!IdeficsForVisionText2Text.forwardS  s  € ðp 3=°$´*ð 3
ØØ)Ø%Ø+Ø'Ø%Ø%=Ø!5Ø!5ØØ%=Øð3
ð 3
ð ð3
ð 3
ˆð   Ô1ˆå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å,ØØØ#Ô3Ø!Ô/ØÔ)Ø 'Ô ;ð
ñ 
ô 
ð 	
r1   c
           
      ó  •— i }|�| j         j        r||d<   n||d<   n||d<   |
                     dd¦  «        |d<    t          ¦   «         j        |f|||||	|dœ|¤|
¤Ž}|�'|€%|d         j        d         }|d d …| d …f         |d	<   |S )
Nr;   r:   r9   r”  F)r$   r>   r’  rÙ   r“  r<   rG   r   r<   )r   ry  Úpoprn   Úprepare_inputs_for_generationr@   )rs   rG   r>   rÙ   r’  r$   r9   r'   r<   r“  rt   Úimages_kwargsÚmodel_inputsrŸ  ru   s                 €r2   r½  z7IdeficsForVisionText2Text.prepare_inputs_for_generation­  sí   ø€ ð ˆØÐ*ØŒ{Ô(ð PØ8K�Ð4Ñ5Ð5à<O�Ð8Ñ9Ð9à,8ˆM˜.Ñ)Ø4:·J²JÐ?YÐ[`Ñ4aÔ4aˆÐ0Ñ1à<•u‘w”wÔ<Øð

à+Ø)Ø'Ø%ØØ!5ð

ð 

ð ð

ð ð

ð 

ˆð  Ð+°Ð0EØ% kÔ2Ô8¸Ô;ˆJØ3GÈÈÈÈJÈ;È<È<ÈÔ3XˆLÐ/Ñ0àÐr1   r¹  rK   rI   c                 ó  •—  t          ¦   «         j        |||fi |¤Ž}d|v ra|d         }|d d …dd d …f                              d¦  «        }|                     dd¦  «        r||d<   nt	          j        ||gd¬¦  «        |d<   |j        |d<   |S )Nr<   r8   r   r“  TrÅ   r'   )rn   Ú#_update_model_kwargs_for_generationrÖ   rF   r,   r“   r'   )rs   r¹  rK   rI   rt   r<   Ú	last_maskru   s          €r2   rÁ  z=IdeficsForVisionText2Text._update_model_kwargs_for_generationØ  sÔ   ø€ ð C•u‘w”wÔBØØØð
ð 
ð ð	
ð 
ˆð " \Ð1Ð1Ø#/Ð0FÔ#GÐ Ø,¨Q¨Q¨Q°°A°A°A¨XÔ6×@Ò@ÀÑCÔCˆIØ×Ò ¨TÑ2Ô2ð kØ7@�Ð3Ñ4Ð4å7<´yÐBVÐXaÐAbÐhiÐ7jÑ7jÔ7j�Ð3Ñ4ð /6Ô.IˆÐ*Ñ+ØÐr1   rX   )NNNNNNNNNNNFr   )NNNNNNNN)F)r(   r)   r*   r²  ro   r   r   r,   r+  r™   r
   r-   r„   r˜   r   r   r/   r4   r   r½  r   Údictr…   r   rÁ  r†   r‡   s   @r2   r¬  r¬  <  sG  ø€ € € € € Ø*Ð,GÐHÐðð ð ð ð ð ð( Øð .2Ø.2Ø04Ø(,Ø26Ø15Ø=AØ9=Ø48Ø*.Ø!%Ø05Ø-.ðV
ð V
àÔ# dÑ*ðV
ð œ tÑ+ðV
ð Ô&¨Ñ-ð	V
ð
  ™ðV
ð Ô(¨4Ñ/ðV
ð Ô'¨$Ñ.ðV
ð #(Ô"3°dÑ":ðV
ð $Ô/°$Ñ6ðV
ð $œl¨TÑ1ðV
ð Ô  4Ñ'ðV
ð ˜$‘;ðV
ð #'¨¡+ðV
ð ˜eœlÑ*ðV
ð Ð+Ô,ðV
ð  
Ð.Ñ	.ð!V
ð V
ð V
ñ „^ñ ÔðV
ðv ØØØØØ Ø!Øð)ð )ð )ð )ð )ð )ð^ $)ð	ð àðð ˜3 ˜8”nðð !ð	ð 
ˆc�3ˆhŒðð ð ð ð ð ð ð ð ð r1   r¬  )r¬  rk  rP  )r   FNNrª  )r   )ré   )Nr+   Úcollections.abcr   Údataclassesr   Útypingr   r,   Útorch.nn.functionalr   rö   rw   Ú r   rX  Úactivationsr	   Úcache_utilsr
   r   Ú
generationr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   Úmodeling_utilsr   r   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   r   Úconfiguration_ideficsr   Ú	perceiverr   Úvisionr   r   Ú
get_loggerr(   r	  r"   r4   rM   rc   rQ   re   rP   r‰   ÚModuler›   r¯   rÔ   rÝ   rß   r™   r¿   rû   rý   r-  r9  rP  rk  r¬  Ú__all__r0   r1   r2   ú<module>rÚ     s·  ðð& Ð à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø +Ð +Ð +Ð +Ð +Ð +Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ &Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ð@ð @ð @ð @ð @ [ñ @ô @ñ „ñô ð@ð* €ððñ ô ð
 ð@ð @ð @ð @ð @ Kñ @ô @ñ „ñô ð@ð8 ØØØð*#ð *#ð *#ð *#ðZð ð ð ðfAð fAð fAð fAð fA ¤ñ fAô fAð fAðR8Sð 8Sð 8Sð 8Sð 8S˜RœYñ 8Sô 8Sð 8SðxJð Jð Jð Jð J�R”Yñ Jô Jð Jð0$
ð $
ð $
ð $
ð $
�u”x”ñ $
ô $
ð $
ðN(ð (ð (ðð ð ð ð:Pð Pð Pð Pð P�”ñ Pô Pð Pð2 ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð0R)ð R)ð R)ð R)ð R)�r”yñ R)ô R)ð R)ðl3ð 3ð 3ð 3ð 3Ð4ñ 3ô 3ð 3ðl|ð |ð |ð |ð |Ð&@ñ |ô |ð |ð~ ð.5ð .5ð .5ð .5ð .5˜_ñ .5ô .5ñ „ð.5ðb ða
ð a
ð a
ð a
ð a
Ð)ñ a
ô a
ñ „ða
ðHtð tð tð tð tÐ 6¸ñ tô tð tðn RÐ
QÐ
Q€€€r1   