§
    ‚ŠtjÕç  ã                   ó
  — 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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 ddlmZ ddlmZ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# ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7  e)j8        e9¦  «        Z:e'e G d„ de¦  «        ¦   «         ¦   «         Z; e'd¬¦  «        e G d„ de%¦  «        ¦   «         ¦   «         Z< G d„ d ej=        ¦  «        Z>	 dOd"ej=        d#ej?        d$ej?        d%ej?        d&ej?        dz  d'e@d(e@fd)„ZA G d*„ d+ej=        ¦  «        ZB G d,„ d-ej=        ¦  «        ZC G d.„ d/e¦  «        ZDe' G d0„ d1e¦  «        ¦   «         ZE G d2„ d3ej=        ¦  «        ZF G d4„ d5eE¦  «        ZG G d6„ d7ej=        ¦  «        ZH G d8„ d9ej=        ¦  «        ZI G d:„ d;ej=        ¦  «        ZJ G d<„ d=ej=        ¦  «        ZK G d>„ d?ej=        ¦  «        ZL G d@„ dAe¦  «        ZM G dB„ dCej=        ¦  «        ZN G dD„ dEej=        ¦  «        ZO G dF„ dGeE¦  «        ZP e'dH¬¦  «         G dI„ dJeE¦  «        ¦   «         ZQ e'dK¬¦  «         G dL„ dMeEe¦  «        ¦   «         ZRg dN¢ZSdS )PzPyTorch InstructBLIP model.é    )ÚCallable)Ú	dataclass)ÚAnyN)Únné   )Úinitialization)ÚACT2FN)ÚGenerationMixin)Úcreate_bidirectional_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚ)BaseModelOutputWithPastAndCrossAttentionsÚBaseModelOutputWithPoolingÚ,BaseModelOutputWithPoolingAndCrossAttentionsÚCausalLMOutputWithPastÚSeq2SeqLMOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚ	torch_int)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )Ú	AutoModelÚAutoModelForCausalLMÚAutoModelForSeq2SeqLMé   )ÚInstructBlipConfigÚInstructBlipQFormerConfigÚInstructBlipVisionConfigc                   ó<   — e Zd ZU dZdZedz  ed<   dZedz  ed<   dS )Ú'BaseModelOutputWithVisionQformerOutputszÝ
    vision_outputs (`BaseModelOutputWithPooling`):
        Outputs of the vision encoder.
    qformer_outputs (`BaseModelOutputWithPoolingAndCrossAttentions`):
        Outputs of the Q-Former (Querying Transformer).
    NÚvision_outputsÚqformer_outputs)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r+   r   Ú__annotations__r,   r   © ó    út/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/instructblip/modeling_instructblip.pyr*   r*   2   sJ   € € € € € € ðð ð 9=€NÐ.°Ñ5Ð<Ð<Ñ<ØKO€OÐAÀDÑHÐOÐOÑOÐOÐOr3   r*   zQ
    Class defining the outputs of [`InstructBlipForConditionalGeneration`].
    )Úcustom_introc                   óÂ   — e Zd ZU dZdZeej                 dz  ed<   dZ	eej                 dz  ed<   dZ
edz  ed<   dZedz  ed<   dZeez  dz  ed<   dee         fd	„ZdS )
Ú/InstructBlipForConditionalGenerationModelOutputaª  
    loss (`torch.FloatTensor`, *optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        Language modeling loss from the language model.
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head of the language model.
    vision_outputs (`BaseModelOutputWithPooling`):
        Outputs of the vision encoder.
    qformer_outputs (`BaseModelOutputWithPoolingAndCrossAttentions`):
        Outputs of the Q-Former (Querying Transformer).
    language_model_outputs (`CausalLMOutputWithPast` or `Seq2SeqLMOutput`):
        Outputs of the language model.
    NÚlossÚlogitsr+   r,   Úlanguage_model_outputsÚreturnc                 ó^   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ót   •K  — | ]2}|d vr‰|         n!t          ‰|¦  «                             ¦   «         V — Œ3dS )©r+   r,   r:   N)ÚgetattrÚto_tuple)Ú.0ÚkÚselfs     €r4   ú	<genexpr>zKInstructBlipForConditionalGenerationModelOutput.to_tuple.<locals>.<genexpr>\   sf   øè è € ð 
ð 
ð ð ÐWÐWÐWð �ŒGˆGå˜˜qÑ!Ô!×*Ò*Ñ,Ô,ð
ð 
ð 
ð 
ð 
ð 
r3   )ÚtupleÚkeys©rC   s   `r4   r@   z8InstructBlipForConditionalGenerationModelOutput.to_tuple[   sE   ø€ Ýð 
ð 
ð 
ð 
ð —Y’Y‘[”[ð	
ñ 
ô 
ñ 
ô 
ð 	
r3   )r-   r.   r/   r0   r8   rE   ÚtorchÚFloatTensorr1   r9   r+   r   r,   r   r:   r   r   r   r@   r2   r3   r4   r7   r7   @   sÃ   € € € € € € ðð ð -1€Dˆ%�Ô!Ô
" TÑ
)Ð0Ð0Ñ0Ø.2€FˆE�%Ô#Ô$ tÑ+Ð2Ð2Ñ2Ø8<€NÐ.°Ñ5Ð<Ð<Ñ<ØKO€OÐAÀDÑHÐOÐOÑOØNRÐÐ2°_ÑDÀtÑKÐRÐRÑRð
˜% œ*ð 
ð 
ð 
ð 
ð 
ð 
r3   r7   c                   óz   ‡ — e Zd Zdefˆ fd„Zdej        dededej        fd„Zdd	ej	        d
e
dej        fd„Zˆ xZS )ÚInstructBlipVisionEmbeddingsÚconfigc                 ó  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        |j        | _        t          j        t          j
        dd| j        ¦  «        ¦  «        | _        t          j        d| j        | j        | j        ¬¦  «        | _        | j        | j        z  dz  | _        | j        dz   | _        t          j        t          j
        d| j        | j        ¦  «        ¦  «        | _        d S )Nr%   r   )Úin_channelsÚout_channelsÚkernel_sizeÚstrider!   )ÚsuperÚ__init__rL   Úhidden_sizeÚ	embed_dimÚ
image_sizeÚ
patch_sizer   Ú	ParameterrH   ÚrandnÚclass_embeddingÚConv2dÚpatch_embeddingÚnum_patchesÚnum_positionsÚposition_embedding©rC   rL   Ú	__class__s     €r4   rS   z%InstructBlipVisionEmbeddings.__init__f   sß   ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØ Ô+ˆŒØ Ô+ˆŒå!œ|­E¬K¸¸1¸d¼nÑ,MÔ,MÑNÔNˆÔå!œyØ¨¬ÀDÄOÐ\`Ô\kð 
ñ  
ô  
ˆÔð !œO¨t¬Ñ>À1ÑDˆÔØ!Ô-°Ñ1ˆÔå"$¤,­u¬{¸1¸dÔ>PÐRVÔR`Ñ/aÔ/aÑ"bÔ"bˆÔÐÐr3   Ú
embeddingsÚheightÚwidthr;   c                 ó”  — |j         d         dz
  }| j        j         d         dz
  }t          j                             ¦   «         s||k    r||k    r| j        S | j        dd…dd…f         }| j        dd…dd…f         }|j         d         }|| j        z  }	|| j        z  }
t          |dz  ¦  «        }|                     d|||¦  «        }|                     dddd¦  «        }t          j
                             ||	|
fdd	¬
¦  «        }|                     dddd¦  «                             dd|¦  «        }t          j        ||fd¬¦  «        S )a   
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r%   Néÿÿÿÿg      à?r   r   r!   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údim)Úshaper_   rH   ÚjitÚ
is_tracingrW   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolateÚviewÚcat)rC   rb   rc   rd   r]   r^   Úclass_pos_embedÚpatch_pos_embedrl   Ú
new_heightÚ	new_widthÚsqrt_num_positionss               r4   Úinterpolate_pos_encodingz5InstructBlipVisionEmbeddings.interpolate_pos_encodingx   sr  € ð !Ô& qÔ)¨AÑ-ˆØÔ/Ô5°aÔ8¸1Ñ<ˆõ Œy×#Ò#Ñ%Ô%ð 	+¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?ØÔ*Ð*àÔ1°!°!°!°R°a°R°%Ô8ˆØÔ1°!°!°!°Q°R°R°%Ô8ˆàÔ˜rÔ"ˆà˜tœÑ.ˆ
Ø˜Tœ_Ñ,ˆ	å& }°cÑ'9Ñ:Ô:ÐØ)×1Ò1°!Ð5GÐI[Ð]`ÑaÔaˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆåœ-×3Ò3ØØ˜iÐ(ØØð	 4ñ 
ô 
ˆð *×1Ò1°!°Q¸¸1Ñ=Ô=×BÒBÀ1ÀbÈ#ÑNÔNˆåŒy˜/¨?Ð;ÀÐCÑCÔCÐCr3   FÚpixel_valuesr{   c                 ó(  — |j         \  }}}}| j        j        j        }|                      |                     |¬¦  «        ¦  «        }|                     d¦  «                             dd¦  «        }| j                             |dd¦  «                             |¦  «        }	t          j
        |	|gd¬¦  «        }
|r|                      |
||¦  «        }n| j        }|
|d d …d |
                     d¦  «        …d d …f                              |¦  «        z   }
|
S )N)Údtyper!   r%   rf   rk   )rm   r\   Úweightr~   ÚtoÚflattenÚ	transposerZ   ÚexpandrH   ru   r{   r_   rh   )rC   r|   r{   Ú
batch_sizeÚ_rc   rd   Útarget_dtypeÚpatch_embedsÚclass_embedsrb   r_   s               r4   Úforwardz$InstructBlipVisionEmbeddings.forward    s  € Ø'3Ô'9Ñ$ˆ
�A�v˜uØÔ+Ô2Ô8ˆØ×+Ò+¨L¯OªOÀ,¨OÑ,OÔ,OÑPÔPˆØ#×+Ò+¨AÑ.Ô.×8Ò8¸¸AÑ>Ô>ˆØÔ+×2Ò2°:¸qÀ"ÑEÔE×HÒHÈÑVÔVˆÝ”Y ¨lÐ;ÀÐCÑCÔCˆ
Ø#ð 	9Ø!%×!>Ò!>¸zÈ6ÐSXÑ!YÔ!YÐÐà!%Ô!8ÐØÐ"4°Q°Q°QÐ8L¸*¿/º/È!Ñ:LÔ:LÐ8LÈaÈaÈaÐ5OÔ"P×"SÒ"SÐT`Ñ"aÔ"aÑaˆ
ØÐr3   ©F)r-   r.   r/   r(   rS   rH   ÚTensorÚintr{   rI   Úboolr‰   Ú__classcell__©ra   s   @r4   rK   rK   e   sÂ   ø€ € € € € ðcÐ7ð cð cð cð cð cð cð$&D°5´<ð &DÈð &DÐUXð &DÐ]bÔ]ið &Dð &Dð &Dð &DðPð  EÔ$5ð ÐQUð ÐbgÔbnð ð ð ð ð ð ð ð r3   rK   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 óz  — t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )Nrf   éþÿÿÿrk   )ÚpÚtrainingr%   r!   )	rH   Úmatmulr‚   r   rr   Úsoftmaxr—   r›   Ú
contiguous)
r‘   r’   r“   r”   r•   r–   r—   ÚkwargsÚattn_weightsÚattn_outputs
             r4   Úeager_attention_forwardr¢   °   s­   € õ ”<  s§}¢}°R¸Ñ'<Ô'<Ñ=Ô=ÀÑG€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r3   c                   ó¢   ‡ — e Zd ZdZˆ fd„Zdej        dedefd„Zdej        de	ej        ej        d	z  e	ej                 d	z  f         fd
„Z
ˆ xZS )ÚInstructBlipAttentionz=Multi-headed attention from 'Attention Is All You Need' paperc                 óV  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        | j        | j        z  | _        | j        | j        z  | j        k    r t          d| j        › d| j        › d�¦  «        ‚| j        dz  | _	        d| _
        |j        | _        t          j        | j        d| j        z  d¬¦  «        | _        |j        rWt          j        t#          j        | j        ¦  «        ¦  «        }t          j        t#          j        | j        ¦  «        ¦  «        }nd }d }|�It#          j        |t#          j        |d¬¦  «        |f¦  «        }t          j        |¦  «        | j        _        t          j        | j        | j        ¦  «        | _        d S )	Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).ç      à¿Fr   )Úbias)Úrequires_grad)rR   rS   rL   rT   rU   Únum_attention_headsÚ	num_headsÚhead_dimÚ
ValueErrorÚscaleÚ	is_causalÚattention_dropoutr   ÚLinearÚqkvÚqkv_biasrX   rH   Úzerosru   Ú
zeros_liker§   Ú
projection)rC   rL   Úq_biasÚv_biasr²   ra   s        €r4   rS   zInstructBlipAttention.__init__Ë   s€  ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØÔ3ˆŒØœ¨$¬.Ñ8ˆŒØŒ=˜4œ>Ñ)¨T¬^Ò;Ð;Ýð'ÈdÌnð 'ð 'Ø”Nð'ð 'ð 'ñô ð ð ”] DÑ(ˆŒ
ØˆŒØ!'Ô!9ˆÔõ ”9˜Tœ^¨Q°´Ñ-?ÀeÐLÑLÔLˆŒàŒ?ð 	Ý”\¥%¤+¨d¬nÑ"=Ô"=Ñ>Ô>ˆFÝ”\¥%¤+¨d¬nÑ"=Ô"=Ñ>Ô>ˆFˆFàˆFØˆFàÐÝ”y &­%Ô*:¸6ÐQVÐ*WÑ*WÔ*WÐY_Ð!`ÑaÔaˆHÝœL¨Ñ2Ô2ˆDŒHŒMåœ) D¤N°D´NÑCÔCˆŒˆˆr3   ÚtensorÚseq_lenÚbszc                 ó’   — |                      ||| j        | j        ¦  «                             dd¦  «                             ¦   «         S )Nr%   r!   )rt   rª   r«   r‚   rž   )rC   r¸   r¹   rº   s       r4   Ú_shapezInstructBlipAttention._shapeê   s<   € Ø�{Š{˜3 ¨¬¸¼ÑGÔG×QÒQÐRSÐUVÑWÔW×bÒbÑdÔdÐdr3   Úhidden_statesr;   Nc                 ó  — |                      ¦   «         \  }}}|                      |¦  «        }|                     ||d| j        || j        z  ¦  «                             ddddd¦  «        }|d         |d         |d         }	}}t          j        | j        j        t          ¦  «        }
 |
| |||	fd| j
        sdn| j        | j        dœ|¤Ž\  }}|                     ||d	¦  «                             ¦   «         }|                      |¦  «        }||fS )
z#Input shape: Batch x Time x Channelr   r!   r   r%   é   Nr�   )r•   r—   r–   rf   )rh   r±   rp   rª   rq   r   Úget_interfacerL   Ú_attn_implementationr¢   r›   r¯   r­   rž   rµ   )rC   r½   rŸ   rº   Útgt_lenrU   Ú	mixed_qkvÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacer¡   r    s                r4   r‰   zInstructBlipAttention.forwardí   s=  € ð #0×"4Ò"4Ñ"6Ô"6ÑˆˆW�ià—H’H˜]Ñ+Ô+ˆ	à×%Ò% c¨7°A°t´~ÀyÐTXÔTbÑGbÑcÔc×kÒkØˆq�!�Q˜ñ
ô 
ˆ	ð 2;¸1´¸yÈ¼|ÈYÐWXÌ\ ,�jˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØð		%
ð
  Ø#œ}ÐH�C�C°$Ô2HØ”Jð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð "×)Ò)¨#¨w¸Ñ;Ô;×FÒFÑHÔHˆØ—o’o kÑ2Ô2ˆà˜LÐ(Ð(r3   )r-   r.   r/   r0   rS   rH   r‹   rŒ   r¼   rE   r‰   rŽ   r�   s   @r4   r¤   r¤   È   s¾   ø€ € € € € ØGÐGðDð Dð Dð Dð Dð>e˜Uœ\ð e°Cð e¸cð eð eð eð eð")à”|ð")ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð	")ð ")ð ")ð ")ð ")ð ")ð ")ð ")r3   r¤   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚInstructBlipMLPc                 ó  •— t          ¦   «                              ¦   «          || _        t          |j                 | _        t          j        |j        |j	        ¦  «        | _
        t          j        |j	        |j        ¦  «        | _        d S ©N)rR   rS   rL   r	   Ú
hidden_actÚactivation_fnr   r°   rT   Úintermediate_sizeÚfc1Úfc2r`   s     €r4   rS   zInstructBlipMLP.__init__  sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr3   r½   r;   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rË   )rÏ   rÍ   rÐ   ©rC   r½   s     r4   r‰   zInstructBlipMLP.forward  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆØÐr3   ©r-   r.   r/   rS   rH   r‹   r‰   rŽ   r�   s   @r4   rÉ   rÉ     sc   ø€ € € € € ðKð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð r3   rÉ   c                   óh   ‡ — e Zd Zdefˆ fd„Zedej        dee	         dej
        fd„¦   «         Zˆ xZS )ÚInstructBlipEncoderLayerrL   c                 óD  •— t          ¦   «                              ¦   «          |j        | _        t	          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _	        t          |¦  «        | _        t          j        | j        |j        ¬¦  «        | _        d S ©N©Úeps)rR   rS   rT   rU   r¤   Ú	self_attnr   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1rÉ   ÚmlpÚlayer_norm2r`   s     €r4   rS   z!InstructBlipEncoderLayer.__init__$  s   ø€ Ý‰Œ×ÒÑÔÐØÔ+ˆŒÝ.¨vÑ6Ô6ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÝ" 6Ñ*Ô*ˆŒÝœ<¨¬¸FÔ<QÐRÑRÔRˆÔÐÐr3   r½   rŸ   r;   c                 óÄ   — |}|                       |¦  «        } | j        dd|i|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )Nr½   r2   )rÝ   rÚ   rß   rÞ   )rC   r½   rŸ   Úresidualr…   s        r4   r‰   z InstructBlipEncoderLayer.forward,  sŽ   € ð !ˆà×(Ò(¨Ñ7Ô7ˆØ)˜4œ>ð 
ð 
Ø'ð
àð
ð 
Ñˆ�qð &¨Ñ0ˆØ ˆØ×(Ò(¨Ñ7Ô7ˆØŸš Ñ/Ô/ˆà%¨Ñ0ˆàÐr3   )r-   r.   r/   r&   rS   r   rH   r‹   r   r   rI   r‰   rŽ   r�   s   @r4   rÕ   rÕ   #  s“   ø€ € € € € ðSÐ1ð Sð Sð Sð Sð Sð Sð ðà”|ðð Ð+Ô,ðð 
Ô	ð	ð ð ñ „^ðð ð ð ð r3   rÕ   c                   ó|   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZdZg d¢Z ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚInstructBlipPreTrainedModelrL   Úblip)ÚimageÚtextT)ÚInstructBlipQFormerEmbeddingsr¤   rÕ   ÚInstructBlipQFormerLayerÚ%InstructBlipQFormerMultiHeadAttentionÚInstructBlipQFormerSelfOutputc                 ó:  •— t          ¦   «                              |¦  «         | j        j        }t	          |t
          ¦  «        r:t          j        |j        d|¬¦  «         t          j        |j	        d|¬¦  «         dS t	          |t          t          f¦  «        rt          j        |j        ¦  «         dS t	          |t          ¦  «        rQt          j        |j        t#          j        |j        j        d         ¦  «                             d¦  «        ¦  «         dS dS )zInitialize the weightsr�   )ÚmeanÚstdrf   ©r%   rf   N)rR   Ú_init_weightsrL   Úinitializer_rangeÚ
isinstancerK   ÚinitÚtrunc_normal_r_   rZ   Ú$InstructBlipForConditionalGenerationÚInstructBlipModelÚzeros_Úquery_tokensrç   Úcopy_Úposition_idsrH   Úarangerm   rƒ   )rC   r‘   Úfactorra   s      €r4   rï   z)InstructBlipPreTrainedModel._init_weightsY  s
  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ø”Ô.ˆÝ�fÕ:Ñ;Ô;ð 	iÝÔ˜vÔ8¸sÈÐOÑOÔOÐOÝÔ˜vÔ5¸CÀVÐLÑLÔLÐLÐLÐLÝ˜Õ!EÕGXÐ YÑZÔZð 	iÝŒK˜Ô+Ñ,Ô,Ð,Ð,Ð,Ý˜Õ =Ñ>Ô>ð 	iÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhð	ið 	ir3   )r-   r.   r/   r&   r1   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_attention_backendÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphÚ_no_split_modulesrH   Úno_gradrï   rŽ   r�   s   @r4   rã   rã   C  s¤   ø€ € € € € € àÐÐÑØÐØ(ÐØ&*Ð#Ø"&ÐØÐØ€NØÐà!Ððð ð Ðð €U„]�_„_ð
ið 
ið 
ið 
iñ „_ð
ið 
ið 
ið 
ið 
ir3   rã   c                   óZ   ‡ — e Zd ZdZdefˆ fd„Zedee         de	e
z  fd„¦   «         Zˆ xZS )ÚInstructBlipEncodera  
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`InstructBlipEncoderLayer`].

    Args:
        config (`InstructBlipConfig`):
            The corresponding vision configuration for the `InstructBlipEncoder`.
    rL   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r2   )rÕ   )rA   r…   rL   s     €r4   ú
<listcomp>z0InstructBlipEncoder.__init__.<locals>.<listcomp>u  s"   ø€ Ð$oÐ$oÐ$oÈ!Õ%=¸fÑ%EÔ%EÐ$oÐ$oÐ$or3   F)	rR   rS   rL   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersÚgradient_checkpointingr`   s    `€r4   rS   zInstructBlipEncoder.__init__r  sa   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”mÐ$oÐ$oÐ$oÐ$oÍuÐU[ÔUmÑOnÔOnÐ$oÑ$oÔ$oÑpÔpˆŒØ&+ˆÔ#Ð#Ð#r3   rŸ   r;   c                 óL   — |}| j         D ]} ||fi |¤Ž}Œt          |¬¦  «        S )N©Úlast_hidden_state)r  r   )rC   Úinputs_embedsrŸ   r½   Úencoder_layers        r4   r‰   zInstructBlipEncoder.forwardx  sP   € ð &ˆØ!œ[ð 	ð 	ˆMØ)˜MØðð àðð ˆMˆMõ
 °Ð?Ñ?Ô?Ð?r3   )r-   r.   r/   r0   r&   rS   r   r   r   rE   r   r‰   rŽ   r�   s   @r4   r  r  h  s˜   ø€ € € € € ðð ð,Ð1ð ,ð ,ð ,ð ,ð ,ð ,ð ð@ð Ð+Ô,ð@ð 
�Ñ	 ð	@ð @ð @ñ „^ð@ð @ð @ð @ð @r3   r  c                   óÌ   ‡ — e Zd ZU dZdZeed<   eedœZ	defˆ fd„Z
e ed¬¦  «        e	 	 ddej        dz  d	ed
ee         deez  fd„¦   «         ¦   «         ¦   «         Zd„ Zˆ xZS )ÚInstructBlipVisionModelr|   )rå   rL   )r½   Ú
attentionsc                 ó  •— t          ¦   «                              |¦  «         || _        |j        }t	          |¦  «        | _        t          |¦  «        | _        t          j	        ||j
        ¬¦  «        | _        |                      ¦   «          d S r×   )rR   rS   rL   rT   rK   rb   r  Úencoderr   rÛ   rÜ   Úpost_layernormÚ	post_init)rC   rL   rU   ra   s      €r4   rS   z InstructBlipVisionModel.__init__‘  sx   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØÔ&ˆ	å6°vÑ>Ô>ˆŒÝ*¨6Ñ2Ô2ˆŒÝ œl¨9¸&Ô:OÐPÑPÔPˆÔà�ŠÑÔÐÐÐr3   F)Útie_last_hidden_statesNr{   rŸ   r;   c                 ó  — |€t          d¦  «        ‚|                      ||¬¦  «        } | j        dd|i|¤Ž}|j        }|                      |¦  «        }|d d …dd d …f         }|                      |¦  «        }t          ||¬¦  «        S )Nz You have to specify pixel_values)r{   r  r   ©r  Úpooler_outputr2   )r¬   rb   r  r  r  r   )rC   r|   r{   rŸ   r½   Úencoder_outputsr  Úpooled_outputs           r4   r‰   zInstructBlipVisionModel.forwardœ  s¿   € ð ÐÝÐ?Ñ@Ô@Ð@àŸš¨ÐOg˜ÑhÔhˆà+7¨4¬<ð ,
ð ,
Ø'ð,
àð,
ð ,
ˆð
 ,Ô=ÐØ ×/Ò/Ð0AÑBÔBÐà)¨!¨!¨!¨Q°°°¨'Ô2ˆØ×+Ò+¨MÑ:Ô:ˆå)Ø/Ø'ð
ñ 
ô 
ð 	
r3   c                 ó   — | j         S rË   )rb   rG   s    r4   Úget_input_embeddingsz,InstructBlipVisionModel.get_input_embeddingsº  s
   € ØŒÐr3   ©NF)r-   r.   r/   Úmain_input_namerý   r(   r1   rÕ   r¤   Ú_can_record_outputsrS   r   r    r   rH   rI   r�   r   r   rE   r   r‰   r#  rŽ   r�   s   @r4   r  r  ˆ  s
  ø€ € € € € € Ø$€OØ!ÐØ$Ð$Ð$Ñ$à1Ø+ðð Ðð
	Ð7ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨EÐ2Ñ2Ô2Øð 26Ø).ð
ð 
àÔ'¨$Ñ.ð
ð #'ð
ð Ð+Ô,ð	
ð
 
Ð+Ñ	+ð
ð 
ð 
ñ „^ñ 3Ô2ñ  Ôð
ð6ð ð ð ð ð ð r3   r  c                   ó@   ‡ — e Zd Zdˆ fd„	Z	 	 	 ddee         fd„Zˆ xZS )ré   Fc                 ó  •— t          ¦   «                              ¦   «          || _        |j        |j        z  dk    r.t          |d¦  «        st          d|j        |j        fz  ¦  «        ‚|j        | _        t          |j        |j        z  ¦  «        | _        | j        | j        z  | _	        | j        dz  | _
        d| _        |j        | _        t          j        |j        | j	        ¦  «        | _        |rJt          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        d S t          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        d S )Nr   Úembedding_sizezLThe hidden size (%d) is not a multiple of the number of attention heads (%d)r¦   F)rR   rS   rL   rT   r©   Úhasattrr¬   rŒ   Úattention_head_sizeÚall_head_sizer–   r®   Úattention_probs_dropout_probr¯   r   r°   r’   Úencoder_hidden_sizer“   r”   ©rC   rL   Úis_cross_attentionra   s      €r4   rS   z.InstructBlipQFormerMultiHeadAttention.__init__¿  sZ  ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?ÝØ^ØÔ% vÔ'AÐBñCñô ð ð
 $*Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔØÔ/°Ñ5ˆŒØˆŒØ!'Ô!DˆÔå”Y˜vÔ1°4Ô3EÑFÔFˆŒ
Øð 	KÝ”y Ô!;¸TÔ=OÑPÔPˆDŒHÝœ 6Ô#=¸tÔ?QÑRÔRˆDŒJˆJˆJå”y Ô!3°TÔ5GÑHÔHˆDŒHÝœ 6Ô#5°tÔ7IÑJÔJˆDŒJˆJˆJr3   NrŸ   c                 óì  — |d u}|j         d d…         }g |¢d‘| j        ‘R }|r|}	|}n|}	g |	j         d d…         ¢d‘| j        ‘R }
|                      |¦  «                             |¦  «                             dd¦  «        }|                      |	¦  «                             |
¦  «                             dd¦  «        }|                      |	¦  «                             |
¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        } || ||||f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |j         d d…         ¢d‘R Ž                      ¦   «         }||fS )Nrf   r%   r!   r�   )r—   r–   )rm   r+  r’   rt   r‚   r“   r”   r   rÀ   rL   rÁ   r¢   r›   r¯   r–   rp   rž   )rC   r½   r•   Úencoder_hidden_statesÚencoder_attention_maskrŸ   r0  Úinput_shapeÚhidden_shapeÚcurrent_statesÚkv_shapeÚquery_layerÚ	key_layerÚvalue_layerrÇ   r¡   r    s                    r4   r‰   z-InstructBlipQFormerMultiHeadAttention.forward×  s»  € ð 3¸$Ð>Ðà#Ô)¨#¨2¨#Ô.ˆØC˜ÐC bÐC¨$Ô*BÐCÐCˆàð 	+Ø2ˆNØ3ˆNˆNà*ˆNàM�^Ô)¨#¨2¨#Ô.ÐM°ÐM°DÔ4LÐMÐMˆØ—j’j Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆØ—H’H˜^Ñ,Ô,×1Ò1°(Ñ;Ô;×EÒEÀaÈÑKÔKˆ	Ø—j’j Ñ0Ô0×5Ò5°hÑ?Ô?×IÒIÈ!ÈQÑOÔOˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)ÐE¨;Ô+<¸R¸a¸RÔ+@ÐEÀ"ÐEÐEÐE×PÒPÑRÔRˆØ˜LÐ(Ð(r3   rŠ   ©NNN)r-   r.   r/   rS   r   r   r‰   rŽ   r�   s   @r4   ré   ré   ¾  sw   ø€ € € € € ðKð Kð Kð Kð Kð Kð6 Ø"Ø#ð,)ð ,)ð Ð+Ô,ð,)ð ,)ð ,)ð ,)ð ,)ð ,)ð ,)ð ,)r3   ré   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )rê   c                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j	        ¦  «        | _
        d S r×   )rR   rS   r   r°   rT   ÚdenserÛ   rÜ   ÚDropoutÚhidden_dropout_probr—   r`   s     €r4   rS   z&InstructBlipQFormerSelfOutput.__init__  sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr3   r½   Úinput_tensorr;   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S rË   ©r>  r—   rÛ   ©rC   r½   rA  s      r4   r‰   z%InstructBlipQFormerSelfOutput.forward  ó@   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš }°|Ñ'CÑDÔDˆØÐr3   rÓ   r�   s   @r4   rê   rê     ói   ø€ € € € € ð>ð >ð >ð >ð >ð U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r3   rê   c                   ó˜   ‡ — e Zd Zdˆ fd„	Z	 	 	 ddej        dej        dz  dej        dz  dej        dz  dee         d	ej        fd
„Z	ˆ xZ
S )ÚInstructBlipQFormerAttentionFc                 óš   •— t          ¦   «                              ¦   «          t          ||¦  «        | _        t	          |¦  «        | _        d S rË   )rR   rS   ré   Ú	attentionrê   Úoutputr/  s      €r4   rS   z%InstructBlipQFormerAttention.__init__  s>   ø€ Ý‰Œ×ÒÑÔÐÝ>¸vÐGYÑZÔZˆŒÝ3°FÑ;Ô;ˆŒˆˆr3   Nr½   r•   r2  r3  rŸ   r;   c                 ó\   —  | j         d||||dœ|¤Ž\  }}|                      ||¦  «        }|S )N)r½   r•   r2  r3  r2   )rJ  rK  )	rC   r½   r•   r2  r3  rŸ   r¡   r…   Úattention_outputs	            r4   r‰   z$InstructBlipQFormerAttention.forward  sW   € ð (˜œð 
Ø'Ø)Ø"7Ø#9ð	
ð 
ð
 ð
ð 
‰ˆ�Qð  Ÿ;š; {°MÑBÔBÐØÐr3   rŠ   r;  )r-   r.   r/   rS   rH   r‹   rI   r   r   r‰   rŽ   r�   s   @r4   rH  rH    s½   ø€ € € € € ð<ð <ð <ð <ð <ð <ð 48Ø:>Ø;?ð ð  à”|ð ð Ô)¨DÑ0ð ð  %Ô0°4Ñ7ð	 ð
 !&Ô 1°DÑ 8ð ð Ð+Ô,ð ð 
Œð ð  ð  ð  ð  ð  ð  ð  r3   rH  c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚInstructBlipQFormerIntermediatec                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S rË   )rR   rS   r   r°   rT   rÎ   r>  rñ   rÌ   Ústrr	   Úintermediate_act_fnr`   s     €r4   rS   z(InstructBlipQFormerIntermediate.__init__1  sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r3   r½   r;   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rË   )r>  rR  rÒ   s     r4   r‰   z'InstructBlipQFormerIntermediate.forward9  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr3   rÓ   r�   s   @r4   rO  rO  0  s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r3   rO  c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚInstructBlipQFormerOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j	        |j
        ¦  «        | _        d S r×   )rR   rS   r   r°   rÎ   rT   r>  rÛ   rÜ   r?  r@  r—   r`   s     €r4   rS   z"InstructBlipQFormerOutput.__init__A  sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr3   r½   rA  r;   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S rË   rC  rD  s      r4   r‰   z!InstructBlipQFormerOutput.forwardG  rE  r3   rÓ   r�   s   @r4   rU  rU  @  rF  r3   rU  c                   óL   ‡ — e Zd Zˆ fd„Z	 	 	 	 ddee         fd„Zd„ Zd„ Zˆ xZ	S )	rè   c                 óª  •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          |¦  «        | _        || _        ||j        z  dk    rt	          |d¬¦  «        | _        d| _	        nd| _	        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        d S )Nr%   r   T)r0  F)rR   rS   Úchunk_size_feed_forwardÚseq_len_dimrH  rJ  Ú	layer_idxÚcross_attention_frequencyÚcrossattentionÚhas_cross_attentionrO  ÚintermediaterU  rK  Úintermediate_queryÚoutput_query)rC   rL   r\  ra   s      €r4   rS   z!InstructBlipQFormerLayer.__init__O  sÃ   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ5°fÑ=Ô=ˆŒà"ˆŒà�vÔ7Ñ7¸1Ò<Ð<Ý">¸vÐZ^Ð"_Ñ"_Ô"_ˆDÔØ'+ˆDÔ$Ð$à',ˆDÔ$å;¸FÑCÔCˆÔÝ/°Ñ7Ô7ˆŒå"AÀ&Ñ"IÔ"IˆÔÝ5°fÑ=Ô=ˆÔÐÐr3   Nr   rŸ   c           
      ó  —  | j         |fd|i|¤Ž}|dk    rÎ|d d …d |…d d …f         }| j        r#|€t          d¦  «        ‚ | j        |f|||dœ|¤Ž}t	          | j        | j        | j        |¦  «        }	|j        d         |k    r`t	          | j	        | j        | j        |d d …|d …d d …f         ¦  «         
                    |	j        ¦  «        }
t          j        |	|
gd¬¦  «        }	n!t	          | j	        | j        | j        |¦  «        }	|	S )Nr•   r   z>encoder_hidden_states must be given for cross-attention layers)r•   r2  r3  r%   rk   )rJ  r_  r¬   r^  r   Úfeed_forward_chunk_queryrZ  r[  rm   Úfeed_forward_chunkr€   ÚdevicerH   ru   )rC   r½   r•   r2  r3  Úquery_lengthrŸ   rM  Úquery_attention_outputÚlayer_outputÚlayer_output_texts              r4   r‰   z InstructBlipQFormerLayer.forwardc  sˆ  € ð *˜4œ>Øð
ð 
à)ð
ð ð
ð 
Ðð ˜!ÒÐØ%5°a°a°a¸¸,¸ÈÈÈÐ6IÔ%JÐ"àÔ'ð 	Ø(Ð0Ý$Ð%eÑfÔfÐfØ)<¨Ô)<Ø*ð*à#1Ø*?Ø+Að	*ð *ð
 ð*ð *Ð&õ 5ØÔ-ØÔ,ØÔ Ø&ñ	ô ˆLð  Ô% aÔ(¨<Ò7Ð7Ý$=ØÔ+ØÔ0ØÔ$Ø$ Q Q Q¨¨¨°q°q°qÐ%8Ô9ñ	%ô %÷
 ’"�\Ô(Ñ)Ô)ð "õ  %œy¨,Ð8IÐ)JÐPQÐRÑRÔR�øå4ØÔ'ØÔ,ØÔ Ø ñ	ô ˆLð Ðr3   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S rË   )r`  rK  ©rC   rM  Úintermediate_outputri  s       r4   re  z+InstructBlipQFormerLayer.feed_forward_chunk˜  s2   € Ø"×/Ò/Ð0@ÑAÔAÐØ—{’{Ð#6Ð8HÑIÔIˆØÐr3   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S rË   )ra  rb  rl  s       r4   rd  z1InstructBlipQFormerLayer.feed_forward_chunk_query�  s4   € Ø"×5Ò5Ð6FÑGÔGÐØ×(Ò(Ð)<Ð>NÑOÔOˆØÐr3   ©NNNr   )
r-   r.   r/   rS   r   r   r‰   re  rd  rŽ   r�   s   @r4   rè   rè   N  sŽ   ø€ € € € € ð>ð >ð >ð >ð >ð. Ø"Ø#Øð3ð 3ð Ð+Ô,ð3ð 3ð 3ð 3ðjð ð ð
ð ð ð ð ð ð r3   rè   c                   óP   ‡ — e Zd Zˆ fd„Ze	 	 	 	 ddee         fd„¦   «         Zˆ xZS )ÚInstructBlipQFormerEncoderc                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r2   )rè   )rA   r\  rL   s     €r4   r
  z7InstructBlipQFormerEncoder.__init__.<locals>.<listcomp>©  s$   ø€ ÐjÐjÐj¸YÕ% f¨iÑ8Ô8ÐjÐjÐjr3   F)	rR   rS   rL   r   r  r  r  Úlayerr  r`   s    `€r4   rS   z#InstructBlipQFormerEncoder.__init__¥  sg   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]ØjÐjÐjÐjÍ%ÐPVÔPhÑJiÔJiÐjÑjÔjñ
ô 
ˆŒ
ð ',ˆÔ#Ð#Ð#r3   Nr   rŸ   c                 ó�   — t          | j        j        ¦  «        D ]}| j        |         } ||||f||dœ|¤Ž}Œt	          |¬¦  «        S )N)r3  rg  r  )r  rL   r  rt  r   )	rC   r½   r•   r2  r3  rg  rŸ   ÚiÚlayer_modules	            r4   r‰   z"InstructBlipQFormerEncoder.forward­  s   € õ �t”{Ô4Ñ5Ô5ð 
	ð 
	ˆAØœ: aœ=ˆLà(˜LØØØ%ðð (>Ø)ðð ð ðð ˆMˆMõ 9Ø+ð
ñ 
ô 
ð 	
r3   ro  )	r-   r.   r/   rS   r   r   r   r‰   rŽ   r�   s   @r4   rq  rq  ¤  s|   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð ð Ø"Ø#Øð
ð 
ð Ð+Ô,ð
ð 
ð 
ñ Ôð
ð 
ð 
ð 
ð 
r3   rq  c                   ó2   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 dd„Zˆ xZS )rç   z;Construct the embeddings from word and position embeddings.c                 óþ  •— t          ¦   «                              ¦   «          t          j        |j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¦  «        | _	        t          j
        |j        |j        ¬¦  «        | _        t          j        |j        ¦  «        | _        |                      dt#          j        |j        ¦  «                             d¦  «        d¬¦  «         || _        d S )N)Úpadding_idxrØ   rù   rî   F)Ú
persistent)rR   rS   r   Ú	EmbeddingÚ
vocab_sizerT   Úpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsrÛ   rÜ   Ú	layernormr?  r@  r—   Úregister_bufferrH   rú   rƒ   rL   r`   s     €r4   rS   z&InstructBlipQFormerEmbeddings.__init__Ë  s×   ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÐ_eÔ_rÐsÑsÔsˆÔÝ#%¤<°Ô0NÐPVÔPbÑ#cÔ#cˆÔ åœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð ˆŒˆˆr3   Nr   c                 ó   — |�|                      ¦   «         d         }nd}|€(| j        d d …|||z   …f                              ¦   «         }|�b|                      |¦  «        }|                      |                     |j        ¦  «        ¦  «        }||z   }|�t          j        ||fd¬¦  «        }n|}|                     | j	        j
        j        ¦  «        }|  	                    |¦  «        }|                      |¦  «        }|S )Nr%   r   rk   )rh   rù   Úcloner  r�  r€   rf  rH   ru   r‚  r   r~   r—   )rC   Ú	input_idsrù   Úquery_embedsÚpast_key_values_lengthÚ
seq_lengthrb   r�  s           r4   r‰   z%InstructBlipQFormerEmbeddings.forwardÚ  s  € ð Ð Ø"ŸšÑ)Ô)¨!Ô,ˆJˆJàˆJàÐØÔ,¨Q¨Q¨QÐ0FÈÐVlÑIlÐ0lÐ-lÔm×sÒsÑuÔuˆLàÐ Ø×-Ò-¨iÑ8Ô8ˆJà"&×":Ò":¸<¿?º?È:ÔK\Ñ;]Ô;]Ñ"^Ô"^ÐØ#Ð&9Ñ9ˆJàÐ'Ý"œY¨°jÐ'AÀqÐIÑIÔI�
øà%ˆJà—]’] 4¤>Ô#8Ô#>Ñ?Ô?ˆ
Ø—^’^ JÑ/Ô/ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐr3   ro  )r-   r.   r/   r0   rS   r‰   rŽ   r�   s   @r4   rç   rç   È  s`   ø€ € € € € ØEÐEðð ð ð ð ð" ØØØ ðð ð ð ð ð ð ð r3   rç   c                   ój  ‡ — e Zd ZdZdZdZdZdZe e	e
dd¬¦  «        g e	e
dd¬¦  «        gdœZdefˆ fd	„Zd
„ Zd„ Zee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j        dz  dee         deej                 ez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚInstructBlipQFormerModelz�
    Querying Transformer (Q-Former), used in InstructBLIP. Slightly modified from BLIP-2 as it also takes the
    instruction as input.
    Tr%   z
.attention)ÚindexÚ
layer_namez.crossattention)r½   r  Úcross_attentionsrL   c                 óÐ   •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S rË   )rR   rS   rL   rç   rb   rq  r  r  r`   s     €r4   rS   z!InstructBlipQFormerModel.__init__  sV   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå7¸Ñ?Ô?ˆŒå1°&Ñ9Ô9ˆŒà�ŠÑÔÐÐÐr3   c                 ó   — | j         j        S rË   ©rb   r  rG   s    r4   r#  z-InstructBlipQFormerModel.get_input_embeddings  s   € ØŒÔ.Ð.r3   c                 ó   — || j         _        d S rË   r‘  )rC   r”   s     r4   Úset_input_embeddingsz-InstructBlipQFormerModel.set_input_embeddings  s   € Ø*/ˆŒÔ'Ð'Ð'r3   Nr†  r•   rù   r‡  r2  r3  rŸ   r;   c                 ó‚  — |€|€t          d¦  «        ‚|�|j        d         nd}|                      |||¬¦  «        }	t          | j        |	|¬¦  «        }|�1|dk    r|	dd…d|…dd…f         n|	}
t          | j        |
||¬¦  «        } | j        |	f||||dœ|¤Ž}|j        }|dd…ddd…f         }t          ||¬	¦  «        S )
a$  
        query_embeds (`torch.FloatTensor`  of shape `(batch_size, sequence_length, hidden_size)`):
            Hidden states to be used in the attention computation. If cross-attention,
            will be used for the query (i.e., key and value will use the encoder_hidden_states).
        Nz7You have to specify query_embeds when input_ids is Noner%   r   )r†  rù   r‡  )rL   r  r•   )rL   r  r•   r2  )r•   r2  r3  rg  r  )r¬   rm   rb   r   rL   r  r  r   )rC   r†  r•   rù   r‡  r2  r3  rŸ   rg  Úembedding_outputÚquery_embedding_outputr   Úsequence_outputr!  s                 r4   r‰   z InstructBlipQFormerModel.forward  sN  € ð$ Ð Ð!5ÝÐVÑWÔWÐWà0<Ð0H�|Ô)¨!Ô,Ð,ÈaˆàŸ?š?ØØ%Ø%ð +ñ 
ô 
Ðõ 3Ø”;Ø*Ø)ð
ñ 
ô 
ˆð "Ð-ð O[Ð]^ÒN^ÐN^Ð%5°a°a°a¸¸,¸ÈÈÈÐ6IÔ%JÐ%JÐdtÐ"Ý%>Ø”{Ø4Ø5Ø&;ð	&ñ &ô &Ð"ð ,8¨4¬<Øð,
à)Ø"7Ø#9Ø%ð,
ð ,
ð ð,
ð ,
ˆð *Ô;ˆØ'¨¨¨¨1¨a¨a¨a¨Ô0ˆå;Ø-Ø'ð
ñ 
ô 
ð 	
r3   )NNNNN)r-   r.   r/   r0   rÿ   r  r   r  rè   r   ré   r&  r'   rS   r#  r“  r   r    r   rH   Ú
LongTensorrI   r‹   r   r   rE   r   r‰   rŽ   r�   s   @r4   r‹  r‹  ú  s§  ø€ € € € € ðð ð
 #'ÐØ€NØÐØÐð 2àˆNÐ@ÈÐVbÐcÑcÔcð
ð ˆNÐ@ÈÐVgÐhÑhÔhð
ðð ÐðÐ8ð ð ð ð ð ð ð/ð /ð /ð0ð 0ð 0ð  ØØð 48Ø04Ø,0Ø:>Ø;?ð9
ð 9
àÔ#ð9
ð Ô)¨DÑ0ð9
ð Ô&¨Ñ-ð	9
ð
 ”l TÑ)ð9
ð  %Ô0°4Ñ7ð9
ð !&Ô 1°DÑ 8ð9
ð Ð+Ô,ð9
ð 
ˆuÔ Ô	!Ð$PÑ	Pð9
ð 9
ð 9
ñ „^ñ „_ñ  Ôð9
ð 9
ð 9
ð 9
ð 9
r3   r‹  z[
    InstructBLIP base Model consisting of language model, qformer and vision encoder.
    c                   óB  ‡ — e Zd ZdZdgZdefˆ fd„Zd„ Zdej	        dej
        fd„Zee	 	 	 	 	 	 	 ddej
        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j	        d	z  dej        d	z  dedee         deez  fd„¦   «         ¦   «         Zˆ xZS )rõ   r|   r÷   rL   c                 óæ  •— t          ¦   «                              |¦  «         t          |j        ¦  «        | _        t          j        t          j        d|j	        |j
        j        ¦  «        ¦  «        | _        t          |j
        ¦  «        | _        t          j        |j
        j        |j        j        ¦  «        | _        t%          j        |j        ¦  «        | _        |                      ¦   «          d S ©Nr%   )rR   rS   r  Úvision_configÚvision_modelr   rX   rH   r³   Únum_query_tokensÚqformer_configrT   r÷   r‹  Úqformerr°   Útext_configÚlanguage_projectionr"   Úfrom_configÚlanguage_modelr  r`   s     €r4   rS   zInstructBlipModel.__init__g  s¹   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å3°FÔ4HÑIÔIˆÔÝœL­¬°Q¸Ô8OÐQWÔQfÔQrÑ)sÔ)sÑtÔtˆÔÝ/°Ô0EÑFÔFˆŒå#%¤9¨VÔ-BÔ-NÐPVÔPbÔPnÑ#oÔ#oˆÔ Ý'Ô3°FÔ4FÑGÔGˆÔð 	�ŠÑÔÐÐÐr3   c                 ó
  — | j         }t          |¦  «        dk    r@d|vr<t          j                             ¦   «         dk    rt
                               d¦  «         t          | j        d¦  «        rd| j        j	        _
        dS dS ©z­
        Some pre-processing hacks to make the model `accelerate` compatible. Check
        https://github.com/huggingface/transformers/pull/21707 for more details.
        r%   r¤  a   The `language_model` is not in the `hf_device_map` dictionary and you are running your script in a multi-GPU environment. this may lead to unexpected behavior when using `accelerate`. Please pass a `device_map` that contains `language_model` to remove this warning. Please refer to https://github.com/huggingface/blog/blob/main/accelerate-large-models.md for more details on creating a `device_map` for large models.Ú_hf_hookTN©Úhf_device_mapÚlenrH   ÚcudaÚdevice_countÚloggerÚwarningr*  r¤  r§  Úio_same_device©rC   r©  s     r4   Ú_preprocess_acceleratez(InstructBlipModel._preprocess_acceleratet  ó–   € ð
 Ô*ˆåˆ}ÑÔ Ò!Ð!Ð&6¸mÐ&KÐ&KÕPUÔPZ×PgÒPgÑPiÔPiÐlmÒPmÐPmå�NŠNðMñô ð õ �4Ô&¨
Ñ3Ô3ð 	?Ø:>ˆDÔÔ(Ô7Ð7Ð7ð	?ð 	?r3   r†  r  c                 óN  — |€e| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }n|| j        j        k    }|                     d¦  «         	                    |j        ¦  «        }|S ©zZ
        Obtains multimodal placeholder mask from `input_ids` or `inputs_embeds`.
        N©r~   rf  rf   ©
r#  rH   r¸   rL   Úimage_token_idÚlongrf  ÚallÚ	unsqueezer€   ©rC   r†  r  Úspecial_image_masks       r4   Úget_placeholder_maskz&InstructBlipModel.get_placeholder_maskˆ  ó£   € ð ÐØ!.Ð2M°$×2KÒ2KÑ2MÔ2MÝ”˜Tœ[Ô7½u¼zÐR_ÔRfÐgÑgÔgñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐÐà!*¨d¬kÔ.HÒ!HÐà/×9Ò9¸"Ñ=Ô=×@Ò@ÀÔAUÑVÔVÐØ!Ð!r3   NFÚqformer_input_idsÚqformer_attention_maskr•   Údecoder_input_idsÚdecoder_attention_maskr{   rŸ   r;   c
           	      óD  —  | j         d||	dœ|
¤Ž}|d         }t          j        |                     ¦   «         dd…         t          j        |j        ¬¦  «        }| j                             |j        d         dd¦  «        }t          j        |                     ¦   «         dd…         t          j        |j        ¬¦  «        }|€t          j	        |¦  «        }| 
                    |j        ¦  «        }t          j        ||gd¬¦  «        } | j        d|||||dœ|
¤Ž}|d         dd…d|                     d¦  «        …dd…f         }|€8 | j                             ¦   «         |¦  «        }|€t          j	        |¦  «        }|                      |¦  «        }| 
                    |j        |j        ¦  «        }|                      ||¬	¦  «        }|                     ||¦  «        }| j        j        r | j        d||d
œ|
¤Ž}n | j        d||||dœ|
¤Ž}t+          |||¬¦  «        S )aË  
        qformer_input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Indices of input sequence tokens in the vocabulary of the Q-Former. Input tokens can optionally be provided
            to serve as text prompt, which the Q-Former model will encode.

            Indices can be obtained using [`InstructBlipProcessor`]. See [`InstructBlipProcessor.__call__`] for
            details.

            [What are input IDs?](../glossary#input-ids)
        qformer_attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        decoder_attention_mask (`torch.BoolTensor` 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.

            Only relevant in case an encoder-decoder language model (like T5) is used.
        )r|   r{   r   Nrf   rµ  r%   rk   )r†  r•   r‡  r2  r3  ©r  ©r  r•   )r  r•   rÁ  rÂ  r>   r2   )r�  rH   Úonesrh   r¸  rf  r÷   rƒ   rm   Ú	ones_liker€   ru   r   r¤  r#  r¢  r~   r½  Úmasked_scatterrL   Úuse_decoder_only_language_modelr7   )rC   r|   r¿  rÀ  r†  r•   rÁ  rÂ  r  r{   rŸ   r+   Úimage_embedsÚimage_attention_maskr÷   Úquery_attention_maskÚquery_outputsÚquery_outputÚlanguage_model_inputsr¼  Úoutputss                        r4   r‰   zInstructBlipModel.forward—  s°  € ðP +˜Ô*ð 
Ø%Ø%=ð
ð 
ð ð
ð 
ˆð
 & aÔ(ˆõ  %œz¨,×*;Ò*;Ñ*=Ô*=¸c¸r¸cÔ*BÍ%Ì*Ð]iÔ]pÐqÑqÔqÐð Ô(×/Ò/°Ô0BÀ1Ô0EÀrÈ2ÑNÔNˆÝ$œz¨,×*;Ò*;Ñ*=Ô*=¸c¸r¸cÔ*BÍ%Ì*Ð]iÔ]pÐqÑqÔqÐØ!Ð)Ý%*¤_Ð5FÑ%GÔ%GÐ"Ø!7×!:Ò!:Ð;OÔ;VÑ!WÔ!WÐÝ!&¤Ð,@ÐBXÐ+YÐ_`Ð!aÑ!aÔ!aÐØ$˜œð 
Ø'Ø1Ø%Ø".Ø#7ð
ð 
ð ð
ð 
ˆð % QÔ'¨¨¨Ð+A¨\×->Ò->¸qÑ-AÔ-AÐ+AÀ1À1À1Ð(DÔEˆàÐ ØF˜DÔ/×DÒDÑFÔFÀyÑQÔQˆMØÐ%Ý!&¤°Ñ!;Ô!;�ð !%× 8Ò 8¸Ñ FÔ FÐØ 5× 8Ò 8¸Ô9MÈ}ÔObÑ cÔ cÐØ!×6Ò6°yÐP]Ð6Ñ^Ô^ÐØ%×4Ò4Ð5GÐI^Ñ_Ô_ˆàŒ;Ô6ð 	Ø)�dÔ)ð Ø+Ø-ðð ð ðð ˆGˆGð *�dÔ)ð Ø+Ø-Ø"3Ø'=ð	ð ð
 ðð ˆGõ ?Ø)Ø)Ø#*ð
ñ 
ô 
ð 	
r3   )NNNNNNF)r-   r.   r/   r%  Ú_keep_in_fp32_modulesr&   rS   r±  rH   r˜  rI   r½  r   r   r‹   r�   r   r   rE   r7   r‰   rŽ   r�   s   @r4   rõ   rõ   ^  s”  ø€ € € € € ð %€OØ+Ð,ÐðÐ1ð ð ð ð ð ð ð?ð ?ð ?ð("¨eÔ.>ð "ÈuÔO`ð "ð "ð "ð "ð Øð
 ;?Ø.2Ø26Ø59Ø:>Ø-1Ø).ð_
ð _
àÔ'ð_
ð !Ô,ð_
ð !&Ô 0°4Ñ 7ð	_
ð
 Ô$ tÑ+ð_
ð Ô(¨4Ñ/ð_
ð !Ô+¨dÑ2ð_
ð !&Ô 0°4Ñ 7ð_
ð ”| dÑ*ð_
ð #'ð_
ð Ð-Ô.ð_
ð 
Ð@Ñ	@ð_
ð _
ð _
ñ „^ñ Ôð_
ð _
ð _
ð _
ð _
r3   rõ   aª  
    InstructBLIP Model for generating text given an image and an optional text prompt. The model consists of a vision
    encoder, Querying Transformer (Q-Former) and a language model.

    One can optionally pass `input_ids` to the model, which serve as a text prompt, to make the language model continue
    the prompt. Otherwise, the language model starts generating text from the [BOS] (beginning-of-sequence) token.
    c                   óÜ  ‡ — e Zd ZU eed<   dZdZdgZdefˆ fd„Zd„ Z	de
j        fd„Zdˆ fd
„	Zd„ Zd„ Zee	 	 ddej        dej        dej        d	z  ded	z  dee         deez  fd„¦   «         ¦   «         Zdej        dej        fd„Zee	 	 	 	 	 	 	 	 ddej        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j        d	z  dej        d	z  dej        d	z  dedee         deez  fd„¦   «         ¦   «         Z ej        ¦   «         	 	 	 	 	 	 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j        d	z  dedej        fd„¦   «         Zˆ xZ S ) rô   rL   r|   Tr÷   c                 óX  •— t          ¦   «                              |¦  «         t                               |j        ¦  «        | _        t          j        t          j	        d|j
        |j        j        ¦  «        ¦  «        | _        t                               |j        ¦  «        | _        t          j        |j        j        |j        j        ¦  «        | _        |j        rt)          j        |j        ¦  «        }nt-          j        |j        ¦  «        }|| _        |                      ¦   «          d S r›  )rR   rS   r  Ú_from_configrœ  r�  r   rX   rH   r³   rž  rŸ  rT   r÷   r‹  r   r°   r¡  r¢  rÉ  r#   r£  r$   r¤  r  )rC   rL   r¤  ra   s      €r4   rS   z-InstructBlipForConditionalGeneration.__init__  së   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å3×@Ò@ÀÔAUÑVÔVˆÔåœL­¬°Q¸Ô8OÐQWÔQfÔQrÑ)sÔ)sÑtÔtˆÔÝ/×<Ò<¸VÔ=RÑSÔSˆŒå#%¤9¨VÔ-BÔ-NÐPVÔPbÔPnÑ#oÔ#oˆÔ àÔ1ð 	SÝ1Ô=¸fÔ>PÑQÔQˆNˆNå2Ô>¸vÔ?QÑRÔRˆNà,ˆÔð 	�ŠÑÔÐÐÐr3   c                 ó:   — | j                              |¦  «         d S rË   )r¤  Úset_output_embeddings)rC   Únew_embeddingss     r4   rÖ  z:InstructBlipForConditionalGeneration.set_output_embeddings  s   € ØÔ×1Ò1°.ÑAÔAÐAÐAÐAr3   r;   c                 ó4   — | j                              ¦   «         S rË   )r¤  Úget_output_embeddingsrG   s    r4   rÙ  z:InstructBlipForConditionalGeneration.get_output_embeddings"  s   € ØÔ"×8Ò8Ñ:Ô:Ð:r3   Nc                 ó~   •— |€| j                              ¦   «         S t          ¦   «                              |¬¦  «        S )N)Úmodality)r¤  Úget_encoderrR   )rC   rÛ  ra   s     €r4   rÜ  z0InstructBlipForConditionalGeneration.get_encoder%  s9   ø€ ØÐØÔ&×2Ò2Ñ4Ô4Ð4å‘7”7×&Ò&°Ð&Ñ9Ô9Ð9r3   c                 ó4   — | j                              ¦   «         S rË   )r¤  Úget_decoderrG   s    r4   rÞ  z0InstructBlipForConditionalGeneration.get_decoder+  s   € ØÔ"×.Ò.Ñ0Ô0Ð0r3   c                 ó
  — | j         }t          |¦  «        dk    r@d|vr<t          j                             ¦   «         dk    rt
                               d¦  «         t          | j        d¦  «        rd| j        j	        _
        dS dS r¦  r¨  r°  s     r4   r±  z;InstructBlipForConditionalGeneration._preprocess_accelerate/  r²  r3   Fr¿  rÀ  r{   rŸ   c           
      óø  —  | j         d||ddœ|¤Ž}t          di |¤d|i¤Ž}|d         }t          j        |                     ¦   «         dd…         t          j        |j        ¬¦  «        }| j                             |j	        d         dd¦  «        }	t          j        |	                     ¦   «         dd…         t          j        |j        ¬¦  «        }
|€t          j
        |¦  «        }|                     |
j        ¦  «        }t          j        |
|gd¬	¦  «        } | j        d|||	||dd
œ|¤Ž}||_        |d         dd…d|	                     d¦  «        …dd…f         }|                      |¦  «        }||_        |S )a  
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
            The tensors corresponding to the input images.
        qformer_input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Indices of input sequence tokens in the vocabulary of the Q-Former. Input tokens can optionally be provided
            to serve as text prompt, which the Q-Former model will encode.

            Indices can be obtained using [`InstructBlipProcessor`]. See [`InstructBlipProcessor.__call__`] for
            details.

            [What are input IDs?](../glossary#input-ids)
        qformer_attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        T)r|   r{   Úreturn_dictr+   r   Nrf   rµ  r%   rk   )r†  r•   r‡  r2  r3  rá  r2   )r�  r*   rH   rÆ  rh   r¸  rf  r÷   rƒ   rm   rÇ  r€   ru   r   r,   r¢  r  )rC   r|   r¿  rÀ  r{   rŸ   r+   rÊ  rË  r÷   rÌ  r,   rÎ  Úimage_featuress                 r4   Úget_image_featuresz7InstructBlipForConditionalGeneration.get_image_featuresC  sÐ  € ð> 6G°TÔ5Fð 6
Ø%Ø%=Øð6
ð 6
ð ð	6
ð 6
ˆõ AÐqÐqÀ>ÐqÐqÐbpÐqÐqÐqˆØ% aÔ(ˆõ  %œz¨,×*;Ò*;Ñ*=Ô*=¸c¸r¸cÔ*BÍ%Ì*Ð]iÔ]pÐqÑqÔqÐð Ô(×/Ò/°Ô0BÀ1Ô0EÀrÈ2ÑNÔNˆÝ$œz¨,×*;Ò*;Ñ*=Ô*=¸c¸r¸cÔ*BÍ%Ì*Ð]iÔ]pÐqÑqÔqÐØ!Ð)Ý%*¤_Ð5FÑ%GÔ%GÐ"Ø!7×!:Ò!:Ð;OÔ;VÑ!WÔ!WÐÝ!&¤Ð,@ÐBXÐ+YÐ_`Ð!aÑ!aÔ!aÐØ&˜$œ,ð 
Ø'Ø1Ø%Ø".Ø#7Øð
ð 
ð ð
ð 
ˆð *9ˆÔ&Ø& qÔ)¨!¨!¨!Ð-C¨|×/@Ò/@ÀÑ/CÔ/CÐ-CÀQÀQÀQÐ*FÔGˆð ×1Ò1°,Ñ?Ô?ˆØ'5ˆÔ$àÐr3   r†  r  c                 óN  — |€e| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }n|| j        j        k    }|                     d¦  «         	                    |j        ¦  «        }|S r´  r¶  r»  s       r4   r½  z9InstructBlipForConditionalGeneration.get_placeholder_mask‡  r¾  r3   r•   rÁ  rÂ  Úlabelsc           	      ój  — |                       ||||
d¬¦  «        }|j        }|j        }|j        }|€ |                      ¦   «         |¦  «        }|€t          j        |¦  «        }|                     |j        |j	        ¦  «        }|  
                    ||¬¦  «        }|                     ||¦  «        }| j        j        r= | j        d||dœ|¤Ž}|d         }d}|	�  | j        d||	| j        j        j        dœ|¤Ž}n&d|d<    | j        d|||||	d	œ|¤Ž}|j        }|j        }t)          |||||¬
¦  «        S )a•  
        qformer_input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Indices of input sequence tokens in the vocabulary of the Q-Former. Input tokens can optionally be provided
            to serve as text prompt, which the Q-Former model will encode.

            Indices can be obtained using [`InstructBlipProcessor`]. See [`InstructBlipProcessor.__call__`] for
            details.

            [What are input IDs?](../glossary#input-ids)
        qformer_attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        decoder_attention_mask (`torch.BoolTensor` 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.

            Only relevant in case an encoder-decoder language model (like T5) is used.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the language modeling loss. Indices should be in `[-100, 0, ..., config.vocab_size -
            1]`. All labels set to `-100` are ignored (masked), the loss is only computed for labels in `[0, ...,
            config.vocab_size]`

        Examples:

        ```python
        >>> from transformers import InstructBlipProcessor, InstructBlipForConditionalGeneration
        >>> import torch
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO

        >>> model = InstructBlipForConditionalGeneration.from_pretrained("Salesforce/instructblip-vicuna-7b")
        >>> processor = InstructBlipProcessor.from_pretrained("Salesforce/instructblip-vicuna-7b")

        >>> device = "cuda" if torch.cuda.is_available() else "cpu"
        >>> model.to(device)  # doctest: +IGNORE_RESULT

        >>> url = "https://raw.githubusercontent.com/salesforce/LAVIS/main/docs/_static/Confusing-Pictures.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read())).convert("RGB")
        >>> prompt = "What is unusual about this image?"
        >>> inputs = processor(images=image, text=prompt, return_tensors="pt").to(device)

        >>> outputs = model.generate(
        ...     **inputs,
        ...     do_sample=False,
        ...     num_beams=5,
        ...     max_length=256,
        ...     min_length=1,
        ...     top_p=0.9,
        ...     repetition_penalty=1.5,
        ...     length_penalty=1.0,
        ...     temperature=1,
        ... )
        >>> generated_text = processor.batch_decode(outputs, skip_special_tokens=True)[0].strip()
        >>> print(generated_text)
        The unusual aspect of this image is that a man is ironing clothes on the back of a yellow SUV, which is parked in the middle of a busy city street. This is an unconventional approach to ironing clothes, as it requires the man to balance himself and his ironing equipment on top of the vehicle while navigating through traffic. Additionally, the presence of taxis and other vehicles in the scene further emphasizes the unusual nature of this situation.
        ```T©r¿  rÀ  r{   rá  NrÄ  rÅ  r   )r9   rå  r}  rá  )r  r•   rÁ  rÂ  rå  )r8   r9   r+   r,   r:   r2   )rã  r  r,   r+   r#  rH   rÇ  r€   rf  r~   r½  rÈ  rL   rÉ  r¤  Úloss_functionr¡  r}  r8   r9   r7   )rC   r|   r¿  rÀ  r†  r•   rÁ  rÂ  r  rå  r{   rŸ   râ  rÏ  r,   r+   r¼  rÐ  r9   r8   s                       r4   r‰   z,InstructBlipForConditionalGeneration.forward–  sÒ  € ð^ CG×BYÒBYØØ/Ø#9Ø%=Øð CZñ C
ô C
ˆð !/Ô <ÐØ(Ô8ˆØ'Ô6ˆàÐ Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàÐ!Ý"œ_¨YÑ7Ô7ˆNà 5× 8Ò 8¸Ô9MÈ}ÔObÑ cÔ cÐØ!×6Ò6°yÐP]Ð6Ñ^Ô^ÐØ%×4Ò4Ð5GÐI^Ñ_Ô_ˆàŒ;Ô6ð 	$Ø)�dÔ)ð Ø+Ø-ðð ð ðð ˆGð
 ˜Q”ZˆFØˆDØÐ!Ø)�tÔ)ð Ø!¨&¸T¼[Ô=TÔ=_ðð Øciðð �øð
 %)ˆF�=Ñ!Ø)�dÔ)ð Ø+Ø-Ø"3Ø'=Øðð ð ðð ˆGð ”<ˆDØ”^ˆFå>ØØØ)Ø+Ø#*ð
ñ 
ô 
ð 	
r3   c                 óè  — t          | d¦  «        r|                      ¦   «          |j        d         }	|                      ||||d¬¦  «        }
|
j        }|€‹|€l| j        j        g| j        j        z  }|| j        j        j	        gz   }t          j        |gt          j        |j        ¬¦  «        }|                     |	d¦  «        } |                      ¦   «         |¦  «        }|€t          j        |¦  «        }|                     |j        |j        ¦  «        }|                      ||¬¦  «        }|                     ||¦  «        }||d	œ}| j        j        j        s||d
<    | j        j        di |¤|¤Ž}|S )a–  
        Overrides `generate` function to be able to use the model as a conditional generator.

        Args:
            pixel_values (`torch.FloatTensor` of shape (batch_size, num_channels, height, width)):
                Input images to be processed.
            qformer_input_ids (`torch.LongTensor` of shape (batch_size, sequence_length), *optional*):
                The sequence used as a prompt to be fed to the Q-Former module.
            qformer_attention_mask (`torch.LongTensor` of shape (batch_size, sequence_length), *optional*):
                Mask to avoid performing attention on padding token indices.
            input_ids (`torch.LongTensor` of shape (batch_size, sequence_length), *optional*):
                The sequence used as a prompt for the generation.
            attention_mask (`torch.LongTensor` of shape (batch_size, sequence_length), *optional*):
                Mask to avoid performing attention on padding token indices.
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
                Embedded representation of the inputs. Should be float, not int tokens.
            interpolate_pos_encoding (`bool`, *optional*, defaults to `False`):
                Whether to interpolate the positional encoding of the image embeddings.

        Returns:
            captions (list): A list of strings of length batch_size * num_captions.
        r©  r   Trç  Nrµ  r%   rÄ  rÅ  r†  r2   )r*  r±  rm   rã  r  rL   Úimage_token_indexrž  r¡  Úbos_token_idrH   r¸   r¸  rf  Úrepeatr#  rÇ  r€   r~   r½  rÈ  r¤  Úis_encoder_decoderÚgenerate)rC   r|   r¿  rÀ  r†  r•   r  r{   Úgenerate_kwargsr„   râ  rÏ  Úimage_tokensÚstart_tokensr¼  ÚinputsrÐ  s                    r4   rî  z-InstructBlipForConditionalGeneration.generate  s£  € õD �4˜Ñ)Ô)ð 	*à×'Ò'Ñ)Ô)Ð)à!Ô'¨Ô*ˆ
ØBF×BYÒBYØØ/Ø#9Ø%=Øð CZñ C
ô C
ˆð !/Ô <ÐàÐ ØÐ Ø $¤Ô =Ð>ÀÄÔA]Ñ]�Ø+¨t¬{Ô/FÔ/SÐ.TÑT�Ý!œL¨,¨½u¼zÐR^ÔReÐfÑfÔf�	Ø%×,Ò,¨Z¸Ñ;Ô;�	Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàÐ!Ý"œ_¨YÑ7Ô7ˆNà 5× 8Ò 8¸Ô9MÈ}ÔObÑ cÔ cÐØ!×6Ò6°yÐP]Ð6Ñ^Ô^ÐØ%×4Ò4Ð5GÐI^Ñ_Ô_ˆà#0ÀNÐSÐSˆØÔ"Ô)Ô<ð 	,Ø"+ˆF�;Ñà.�$Ô%Ô.ÐKÐK°ÐK¸?ÐKÐKˆàˆr3   rË   r$  )NNNNNNNF)NNNNNF)!r-   r.   r/   r&   r1   r%  r  rÑ  rS   rÖ  r   ÚModulerÙ  rÜ  rÞ  r±  r   r   rH   rI   r˜  r�   r   r   rE   r*   rã  r½  r7   r‰   r  rî  rŽ   r�   s   @r4   rô   rô   û  s‚  ø€ € € € € € ð ÐÐÑØ$€Oà!ÐØ+Ð,ÐðÐ1ð ð ð ð ð ð ð(Bð Bð Bð; r¤yð ;ð ;ð ;ð ;ð:ð :ð :ð :ð :ð :ð1ð 1ð 1ð?ð ?ð ?ð( Øð
 ;?Ø05ð@ð @àÔ'ð@ð !Ô+ð@ð !&Ô 0°4Ñ 7ð	@ð
 #'¨¡+ð@ð Ð+Ô,ð@ð 
Ð8Ñ	8ð@ð @ð @ñ „^ñ Ôð@ðD"¨eÔ.>ð "ÈuÔO`ð "ð "ð "ð "ð Øð
 ;?Ø.2Ø26Ø59Ø:>Ø26Ø*.Ø).ðB
ð B
àÔ'ðB
ð !Ô,ðB
ð !&Ô 0°4Ñ 7ð	B
ð
 Ô$ tÑ+ðB
ð Ô(¨4Ñ/ðB
ð !Ô+¨dÑ2ðB
ð !&Ô 0°4Ñ 7ðB
ð Ô(¨4Ñ/ðB
ð Ô  4Ñ'ðB
ð #'ðB
ð Ð+Ô,ðB
ð 
Ð@Ñ	@ðB
ð B
ð B
ñ „^ñ ÔðB
ðH €U„]�_„_ð 6:Ø:>Ø-1Ø26Ø26Ø).ðDð DàÔ'ðDð !Ô+¨dÑ2ðDð !&Ô 0°4Ñ 7ð	Dð
 Ô# dÑ*ðDð Ô(¨4Ñ/ðDð Ô(¨4Ñ/ðDð #'ðDð 
Ô	ðDð Dð Dñ „_ðDð Dð Dð Dð Dr3   rô   )r‹  rã   rõ   rô   r  )r�   )Tr0   Úcollections.abcr   Údataclassesr   Útypingr   rH   r   Ú r   rò   Úactivationsr	   Ú
generationr
   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   r    Úautor"   r#   r$   Úconfiguration_instructblipr&   r'   r(   Ú
get_loggerr-   r­  r*   r7   ró  rK   r‹   Úfloatr¢   r¤   rÉ   rÕ   rã   r  r  ré   rê   rH  rO  rU  rè   rq  rç   r‹  rõ   rô   Ú__all__r2   r3   r4   ú<module>r	     sè  ðð "Ð !à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø )Ð )Ð )Ð )Ð )Ð )Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oÐ oð 
ˆÔ	˜HÑ	%Ô	%€ð Ø
ð	Pð 	Pð 	Pð 	Pð 	PÐ.Hñ 	Pô 	Pñ „ñ „ð	Pð €ððñ ô ð
 ð
ð 
ð 
ð 
ð 
°kñ 
ô 
ñ „ñô ð
ð<Gð Gð Gð Gð G 2¤9ñ Gô Gð Gðd ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð0G)ð G)ð G)ð G)ð G)˜BœIñ G)ô G)ð G)ðVð ð ð ð �b”iñ ô ð ð ð ð ð ð Ð9ñ ô ð ð@ ð ið  ið  ið  ið  i /ñ  iô  iñ „ð iðH@ð @ð @ð @ð @˜"œ)ñ @ô @ð @ð@3ð 3ð 3ð 3ð 3Ð9ñ 3ô 3ð 3ðlE)ð E)ð E)ð E)ð E)¨B¬Iñ E)ô E)ð E)ðRð ð ð ð  B¤Iñ ô ð ð ð  ð  ð  ð   2¤9ñ  ô  ð  ð4ð ð ð ð  b¤iñ ô ð ð ð ð ð ð  ¤	ñ ô ð ðRð Rð Rð Rð RÐ9ñ Rô Rð Rðl!
ð !
ð !
ð !
ð !
 ¤ñ !
ô !
ð !
ðH/ð /ð /ð /ð / B¤Iñ /ô /ð /ðda
ð a
ð a
ð a
ð a
Ð:ñ a
ô a
ð a
ðH €ððñ ô ð
U
ð U
ð U
ð U
ð U
Ð3ñ U
ô U
ñô ð
U
ðp €ððñ ô ð]ð ]ð ]ð ]ð ]Ð+FÈñ ]ô ]ñô ð]ð@ð ð €€€r3   