§
    ‚Štjâ" ã                   ó¨  — d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	Z	d dl
m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! ddl"m#Z#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z=m>Z> ddl?m@Z@mAZAmBZB  ed¦  «         G d„ dejC        ¦  «        ¦   «         ZD G d„ dejC        ¦  «        ZE G d„ d ejC        ¦  «        ZF G d!„ d"ejC        ¦  «        ZG G d#„ d$ejC        ¦  «        ZH G d%„ d&ejC        ¦  «        ZId'„ ZJd(e	jK        d)e	jK        d*e	jK        d+e	jK        d,eLe	jK        e	jK        f         f
d-„ZMd.e	jK        d/eNd,e	jK        fd0„ZO	 dXd2ejC        d3e	jK        d4e	jK        d5e	jK        d6e	jK        dz  d7ePd8ePd9e-e/         fd:„ZQ G d;„ d<ejC        ¦  «        ZR G d=„ d>e!¦  «        ZS G d?„ d@ejC        ¦  «        ZTdA„ ZUdYdB„ZV G dC„ dDejC        ¦  «        ZW G dE„ dFejC        ¦  «        ZX G dG„ dHe!¦  «        ZYe0e G dI„ dJe#¦  «        ¦   «         ¦   «         ZZe0 G dK„ dLe+¦  «        ¦   «         Z[ G dM„ dNe[¦  «        Z\e0 G dO„ dPe[¦  «        ¦   «         Z]e0 G dQ„ dRe[¦  «        ¦   «         Z^e0e G dS„ dTe%¦  «        ¦   «         ¦   «         Z_ G dU„ dVe[e¦  «        Z`g dW¢ZadS )Zé    N)ÚCallable)Ú	dataclass)ÚAnyÚOptional)Ú	LayerNormé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_forward_from_hub)Úcreate_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚCausalLMOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚtorch_compilable_check)Údeprecate_kwarg)Úaccepts_precomputed_kwargsÚis_flash_attention_requestedÚmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputs)Úget_vision_cu_seqlensÚget_vision_position_idsé   )ÚGlm4vConfigÚGlm4vTextConfigÚGlm4vVisionConfigÚRMSNormc                   óT   ‡ — e Zd Zd	deddfˆ fd„Zdej        dej        fd„Zd„ Zˆ xZ	S )
ÚGlm4vRMSNormç�íµ ÷Æ°>ÚepsÚreturnNc                 ó¬   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        || _        dS )z;
        Glm4vRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__ÚnnÚ	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer.   Ú	__class__s      €úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/glm4v/modeling_glm4v.pyr2   zGlm4vRMSNorm.__init__:   sD   ø€ õ 	‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐó    Úhidden_statesc                 ó  — |j         }|                     t          j        ¦  «        }|                     d¦  «                             dd¬¦  «        }|t          j        || j        z   ¦  «        z  }| j        |                     |¦  «        z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor5   Úfloat32ÚpowÚmeanÚrsqrtr8   r7   )r9   r>   Úinput_dtypeÚvariances       r<   ÚforwardzGlm4vRMSNorm.forwardB   s|   € Ø#Ô)ˆØ%×(Ò(­¬Ñ7Ô7ˆØ ×$Ò$ QÑ'Ô'×,Ò,¨R¸Ð,Ñ>Ô>ˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆØŒ{˜]×-Ò-¨kÑ:Ô:Ñ:Ð:r=   c                 óH   — t          | j        j        ¦  «        › d| j        › �S )Nz, eps=)Útupler7   Úshaper8   )r9   s    r<   Ú
extra_reprzGlm4vRMSNorm.extra_reprI   s&   € Ý˜œÔ)Ñ*Ô*ÐIÐI°$Ô2GÐIÐIÐIr=   )r-   )
Ú__name__Ú
__module__Ú__qualname__Úfloatr2   r5   ÚTensorrK   rO   Ú__classcell__©r;   s   @r<   r,   r,   8   sŒ   ø€ € € € € ð$ð $¨ð $¸$ð $ð $ð $ð $ð $ð $ð; U¤\ð ;°e´lð ;ð ;ð ;ð ;ðJð Jð Jð Jð Jð Jð Jr=   r,   c                   ó,   ‡ — e Zd Zddefˆ fd„Zd„ Zˆ xZS )ÚGlm4VisionMlpFÚbiasc                 óŠ  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t          j        | j        | j        |¬¦  «        | _        t          j        | j        | j        |¬¦  «        | _        t          j        | j        | j        |¬¦  «        | _	        t          |j                 | _        d S ©N©rY   )r1   r2   r:   Úout_hidden_sizeÚintermediate_sizer3   ÚLinearÚ	gate_projÚup_projÚ	down_projr
   Ú
hidden_actÚact_fn)r9   ÚconfigrY   r;   s      €r<   r2   zGlm4VisionMlp.__init__N   sŸ   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔØ!'Ô!7ˆÔÝœ 4Ô#3°TÔ5KÐRVÐWÑWÔWˆŒÝ”y Ô!1°4Ô3IÐPTÐUÑUÔUˆŒÝœ 4Ô#9¸4Ô;KÐRVÐWÑWÔWˆŒÝ˜VÔ.Ô/ˆŒˆˆr=   c                 ó¤   — |                       |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        S ©N)rb   rd   r`   ra   ©r9   Úhidden_states     r<   rK   zGlm4VisionMlp.forwardW   s>   € Ø�~Š~˜dŸkšk¨$¯.ª.¸Ñ*FÔ*FÑGÔGÈ$Ï,Ê,ÐWcÑJdÔJdÑdÑeÔeÐer=   ©F)rP   rQ   rR   Úboolr2   rK   rU   rV   s   @r<   rX   rX   M   s_   ø€ € € € € ð0ð 0 Tð 0ð 0ð 0ð 0ð 0ð 0ðfð fð fð fð fð fð fr=   rX   c                   óL   ‡ — e Zd Zdeddfˆ fd„Zdej        dej        fd„Zˆ xZS )ÚGlm4vVisionPatchEmbedre   r/   Nc                 ó  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        |j        | _        | j        | j        | j        g}t          j        | j        | j        ||¬¦  «        | _	        d S )N)Úkernel_sizeÚstride)
r1   r2   Ú
patch_sizeÚtemporal_patch_sizeÚin_channelsr:   Ú	embed_dimr3   ÚConv3dÚproj)r9   re   ro   r;   s      €r<   r2   zGlm4vVisionPatchEmbed.__init__\   sz   ø€ Ý‰Œ×ÒÑÔÐØ Ô+ˆŒØ#)Ô#=ˆÔ Ø!Ô-ˆÔØÔ+ˆŒàÔ/°´À$Ä/ÐRˆÝ”I˜dÔ.°´ÈKÐ`kÐlÑlÔlˆŒ	ˆ	ˆ	r=   r>   c                 ó  — | j         j        j        }|                     d| j        | j        | j        | j        ¦  «        }|                       |                     |¬¦  «        ¦  «                             d| j        ¦  «        }|S )NrA   ©rC   )	rv   r7   rC   Úviewrs   rr   rq   rD   rt   )r9   r>   Útarget_dtypes      r<   rK   zGlm4vVisionPatchEmbed.forwardf   sw   € Ø”yÔ'Ô-ˆØ%×*Ò*Ø�Ô  $Ô":¸D¼OÈTÌ_ñ
ô 
ˆð Ÿ	š	 -×"2Ò"2¸Ð"2Ñ"FÔ"FÑGÔG×LÒLÈRÐQUÔQ_Ñ`Ô`ˆØÐr=   ©	rP   rQ   rR   r)   r2   r5   rT   rK   rU   rV   s   @r<   rm   rm   [   sz   ø€ € € € € ðmÐ0ð m°Tð mð mð mð mð mð mð U¤\ð °e´lð ð ð ð ð ð ð ð r=   rm   c                   óh   ‡ — e Zd ZU ej        ed<   d
dededdfˆ fd„Zdej        dej        fd	„Z	ˆ xZ
S )ÚGlm4vVisionRotaryEmbeddingÚinv_freqç     ˆÃ@ÚdimÚthetar/   Nc                 óê   •— t          ¦   «                              ¦   «          || _        || _        d|t	          j        d|dt          j        ¬¦  «        |z  z  z  }|                      d|d¬¦  «         d S )Nç      ð?r   r@   rx   r~   F©Ú
persistent)r1   r2   r€   r�   r5   ÚarangerS   Úregister_buffer)r9   r€   r�   r~   r;   s       €r<   r2   z#Glm4vVisionRotaryEmbedding.__init__r   sr   ø€ Ý‰Œ×ÒÑÔÐØˆŒØˆŒ
Ø˜%¥E¤L°°C¸Å%Ä+Ð$NÑ$NÔ$NÐQTÑ$TÑUÑVˆØ×Ò˜Z¨¸eÐÑDÔDÐDÐDÐDr=   Úposition_idsc                 ób   — |                      d¦  «        | j        z                       d¦  «        S )NrA   r&   )Ú	unsqueezer~   Úflatten)r9   rˆ   s     r<   rK   z"Glm4vVisionRotaryEmbedding.forwardy   s+   € Ø×&Ò& rÑ*Ô*¨T¬]Ñ:×CÒCÀAÑFÔFÐFr=   )r   )rP   rQ   rR   r5   rT   Ú__annotations__ÚintrS   r2   rK   rU   rV   s   @r<   r}   r}   o   s¡   ø€ € € € € € ØŒlÐÐÑðEð E˜Cð E¨ð E¸Dð Eð Eð Eð Eð Eð EðG E¤Lð G°U´\ð Gð Gð Gð Gð Gð Gð Gð Gr=   r}   c                   óZ   ‡ — e Zd Zddededededdf
ˆ fd„Zd	ej        dej        fd
„Z	ˆ xZ
S )ÚGlm4vVisionPatchMergerFr€   Úcontext_dimrc   rY   r/   Nc                 ó¤  •— t          ¦   «                              ¦   «          t          j        |||¬¦  «        | _        t          |¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _	        t          j
        ¦   «         | _        t          |         | _        d S r[   )r1   r2   r3   r_   rv   r   Úpost_projection_normr`   ra   rb   ÚGELUÚact1r
   rd   )r9   r€   r�   rc   rY   r;   s        €r<   r2   zGlm4vVisionPatchMerger.__init__~   s¤   ø€ Ý‰Œ×ÒÑÔÐÝ”I˜c 3¨TÐ2Ñ2Ô2ˆŒ	Ý$-¨c¡N¤NˆÔ!Ýœ 3¨¸$Ð?Ñ?Ô?ˆŒÝ”y  k¸Ð=Ñ=Ô=ˆŒÝœ ;°¸$Ð?Ñ?Ô?ˆŒÝ”G‘I”IˆŒ	Ý˜ZÔ(ˆŒˆˆr=   ri   c                 ó  — |                       |¦  «        }|                      |                      |¦  «        ¦  «        }|                      |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        S rg   )rv   r”   r’   rb   rd   r`   ra   rh   s     r<   rK   zGlm4vVisionPatchMerger.forwardˆ   sn   € Ø—y’y Ñ.Ô.ˆØ—y’y ×!:Ò!:¸<Ñ!HÔ!HÑIÔIˆØ�~Š~˜dŸkšk¨$¯.ª.¸Ñ*FÔ*FÑGÔGÈ$Ï,Ê,ÐWcÑJdÔJdÑdÑeÔeÐer=   rj   )rP   rQ   rR   r�   Ústrrk   r2   r5   rT   rK   rU   rV   s   @r<   r�   r�   }   s–   ø€ € € € € ð)ð )˜Cð )¨cð )¸sð )È$ð )Ð[_ð )ð )ð )ð )ð )ð )ðf E¤Lð f°U´\ð fð fð fð fð fð fð fð fr=   r�   c                   ó:   ‡ — e Zd Zdefˆ fd„Zdej        fd„Zˆ xZS )ÚGlm4vVisionEmbeddingsre   c                 ó:  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        |j        | _        | j        | j        z  dz  | _        | j        | _        t          j
        | j        | j        ¦  «        | _        d| _        d S )Nr@   Úbicubic)r1   r2   re   r:   rt   Ú
image_sizerq   Únum_patchesÚnum_positionsr3   Ú	EmbeddingÚposition_embeddingÚinterpolated_method©r9   re   r;   s     €r<   r2   zGlm4vVisionEmbeddings.__init__�   s†   ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØ Ô+ˆŒØ Ô+ˆŒà œO¨t¬Ñ>À1ÑDˆÔØ!Ô-ˆÔÝ"$¤,¨tÔ/AÀ4Ä>Ñ"RÔ"RˆÔØ#,ˆÔ Ð Ð r=   r/   c                 ó  — | j         j        }|j        d         }|j        }t	          |t
          ¦  «        r!t          j        ||t          j        ¬¦  «        }|j        d         }	t          |	dz  ¦  «        }
| 
                    |
|
|¦  «                             ddd¦  «                             d¦  «                             |t          j        ¬¦  «        }|j        d         }t          j        ||j        ¬¦  «        }|                     d¦  «        |                     d¦  «                             d¦  «        k                         d¦  «        }||df                              t          j        ¬¦  «        }||df                              t          j        ¬¦  «        }|dz   |z  dz  dz
  }|dz   |z  dz  dz
  }t          j        ||fd¬	¦  «                             d¦  «                             d¦  «        }t'          j        ||| j        d
d¬¦  «        }|                     d¦  «                             d¦  «                             dd¦  «        }|                     |j        ¦  «                             |j        ¦  «        }||z   }|S )a¡  
        Forward pass with integrated position encoding adaptation using 2D interpolation.

        Args:
            embeddings: Input embeddings tensor
            lengths (torch.Tensor): Sequence lengths for each image in the batch.
            image_shapes (torch.Tensor): Tensor of shape [batch_size, 3] representing the image shapes (t, h, w).
            h_coords (torch.Tensor): Tensor of shape [total_seq] representing the h coordinate for each patch.
            w_coords (torch.Tensor): Tensor of shape [total_seq] representing the w coordinate for each patch.

        Returns:
            torch.Tensor: Embeddings with adapted position encoding added.
        r&   ©ÚdevicerC   r   g      à?r@   ©r¤   rx   rA   ©r€   FÚborder)ÚmodeÚalign_cornersÚpadding_mode)rŸ   r7   rN   r¤   Ú
isinstanceÚlistr5   ÚtensorÚlongr�   ry   ÚpermuterŠ   rD   rE   r†   ÚcumsumÚsumÚstackÚFÚgrid_sampler    ÚsqueezerC   )r9   Ú
embeddingsÚlengthsÚimage_shapesÚh_coordsÚw_coordsÚpos_embed_weightr:   r¤   Úorig_size_sqÚ	orig_sizeÚpos_embed_2dÚ
num_tokensÚtoken_positionsÚseq_idsÚtarget_hÚtarget_wÚnorm_wÚnorm_hÚgridÚinterpolated_embed_fp32Úadapted_pos_embed_fp32Úadapted_pos_embeds                          r<   rK   zGlm4vVisionEmbeddings.forward›   si  € ð  Ô2Ô9ÐØ&Ô,¨QÔ/ˆØ!Ô(ˆõ �g�tÑ$Ô$ð 	MÝ”l 7°6ÅÄÐLÑLÔLˆGð (Ô-¨aÔ0ˆÝ˜ cÑ)Ñ*Ô*ˆ	à×!Ò! )¨Y¸ÑDÔDßŠW�Q˜˜1ÑÔßŠY�q‰\Œ\ßŠR�v¥U¤]ˆRÑ3Ô3ð	 	ð  Ô% aÔ(ˆ
Ýœ, z¸*Ô:KÐLÑLÔLˆØ"×,Ò,¨QÑ/Ô/°7·>²>À!Ñ3DÔ3D×3NÒ3NÈqÑ3QÔ3QÒQ×VÒVÐWXÑYÔYˆØ ¨ 
Ô+×.Ò.µU´]Ð.ÑCÔCˆØ ¨ 
Ô+×.Ò.µU´]Ð.ÑCÔCˆð ˜c‘> XÑ-°Ñ2°QÑ6ˆØ˜c‘> XÑ-°Ñ2°QÑ6ˆõ Œ{˜F FÐ+°Ð4Ñ4Ô4×>Ò>¸qÑAÔA×KÒKÈAÑNÔNˆõ #$¤-Ø˜$ TÔ%=ÈUÐaið#
ñ #
ô #
Ðð
 "9×!@Ò!@ÀÑ!CÔ!C×!KÒ!KÈBÑ!OÔ!O×!WÒ!WÐXYÐ[\Ñ!]Ô!]ÐØ2×5Ò5Ð6FÔ6LÑMÔM×PÒPÐQ[ÔQbÑcÔcÐð  Ð"3Ñ3ˆ
ØÐr=   r{   rV   s   @r<   r˜   r˜   Ž   sd   ø€ € € € € ð
-Ð0ð 
-ð 
-ð 
-ð 
-ð 
-ð 
-ð:ÐPUÔP\ð :ð :ð :ð :ð :ð :ð :ð :r=   r˜   c                 óœ   — | dd| j         d         dz  …f         }| d| j         d         dz  d…f         }t          j        | |fd¬¦  «        S )ú*Rotates half the hidden dims of the input..NrA   r@   r¦   )rN   r5   Úcat©ÚxÚx1Úx2s      r<   Úrotate_halfrÑ   Ø   s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r=   ÚqÚkÚcosÚsinr/   c                 óÆ  — | j         }|j         }|                      ¦   «         |                     ¦   «         }} |                     d¦  «                             ¦   «         |                     d¦  «                             ¦   «         }}| |z  t          | ¦  «        |z  z   }||z  t          |¦  «        |z  z   }|                     |¦  «        }|                     |¦  «        }||fS )Néþÿÿÿ)rC   rS   rŠ   rÑ   rD   )rÒ   rÓ   rÔ   rÕ   Úorig_q_dtypeÚorig_k_dtypeÚq_embedÚk_embeds           r<   Úapply_rotary_pos_emb_visionrÜ   ß   sÃ   € ð ”7€LØ”7€LØ�7Š7‰9Œ9�a—g’g‘i”i€q€AØ�}Š}˜RÑ Ô ×&Ò&Ñ(Ô(¨#¯-ª-¸Ñ*;Ô*;×*AÒ*AÑ*CÔ*Cˆ€CØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�jŠj˜Ñ&Ô&€GØ�jŠj˜Ñ&Ô&€GØ�GÐÐr=   r>   Ún_repc                 ó¸   — | j         \  }}}}|dk    r| S | dd…dd…ddd…dd…f                              |||||¦  «        } |                      |||z  ||¦  «        S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r&   N)rN   ÚexpandÚreshape)r>   rÝ   ÚbatchÚnum_key_value_headsÚslenÚhead_dims         r<   Ú	repeat_kvrå   í   s„   € ð
 2?Ô1DÑ.€EÐ  hØ�‚z€zØÐØ! ! ! ! Q Q Q¨¨a¨a¨a°°°Ð"2Ô3×:Ò:¸5ÐBUÐW\Ð^bÐdlÑmÔm€MØ× Ò  Ð(;¸eÑ(CÀTÈ8ÑTÔTÐTr=   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t          || j        ¦  «        }t          || j        ¦  «        }	t          j        ||                     dd¦  «        ¦  «        |z  }
|�|
|z   }
t
          j                             |
dt          j        ¬¦  «         	                    |j
        ¦  «        }
t
          j                             |
|| j        ¬¦  «        }
t          j        |
|	¦  «        }|                     dd¦  «                             ¦   «         }||
fS )Nr@   r   rA   )r€   rC   )ÚpÚtrainingr&   )rå   Únum_key_value_groupsr5   ÚmatmulÚ	transposer3   Ú
functionalÚsoftmaxrE   rD   rC   rí   rñ   Ú
contiguous)rç   rè   ré   rê   rë   rì   rí   rî   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r<   Úeager_attention_forwardrü   ù   sé   € õ ˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r=   c            
       ó²   ‡ — e Zd Zdeddfˆ fd„Z edd¬¦  «        	 ddej        d	ej        d
eej        ej        f         dz  dej        fd„¦   «         Z	ˆ xZ
S )ÚGlm4vVisionAttentionre   r/   Nc                 ó¨  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        | j        | j        z  | _        d| _        t          j        |j        |j        dz  |j	        ¬¦  «        | _
        t          j        |j        |j        d¬¦  «        | _        | j        dz  | _        || _        |j        | _        d| _        d S )Nr&   r   r\   Fç      à¿)r1   r2   r:   r€   Ú	num_headsrä   rò   r3   r_   Úattention_biasÚqkvrv   rì   re   Úattention_dropoutÚ	is_causalr¡   s     €r<   r2   zGlm4vVisionAttention.__init__  s´   ø€ Ý‰Œ×ÒÑÔÐØÔ%ˆŒØÔ)ˆŒØœ D¤NÑ2ˆŒØ$%ˆÔ!Ý”9˜VÔ/°Ô1CÀaÑ1GÈfÔNcÐdÑdÔdˆŒÝ”I˜fÔ0°&Ô2DÈ5ÐQÑQÔQˆŒ	Ø”} dÑ*ˆŒØˆŒØ!'Ô!9ˆÔØˆŒˆˆr=   Úrotary_pos_embúv5.10©Úversionr>   Ú
cu_seqlensÚposition_embeddingsc                 óB  ‡ ‡‡‡— |j         d         }‰                      |¦  «                             |d‰ j        d¦  «                             dddd¦  «                             d¦  «        \  }}}|\  }	}
t          |||	|
¦  «        \  }}|                     dd¦  «                             d¦  «        }|                     dd¦  «                             d¦  «        }|                     dd¦  «                             d¦  «        }t          j
        ‰ j        j        t          ¦  «        Št          ‰ j        ¦  «        rS|dd …         |d d…         z
                       ¦   «         } ‰‰ |||fd ‰ j        ‰ j        sdn‰ j        ||||ddœ‰¤Ž\  }}nS|dd …         |d d…         z
  Šˆfd	„|||fD ¦   «         }ˆˆˆ fd
„t'          |Ž D ¦   «         }t)          j        |d¬¦  «        }|                     |d¦  «                             ¦   «         }‰                      |¦  «        }|S )Nr   r   rA   r&   r@   ræ   F)rë   rì   rí   Úcu_seq_lens_qÚcu_seq_lens_kÚmax_length_qÚmax_length_kr  c                 ób   •— g | ]+}t          j        |‰                     ¦   «         d ¬¦  «        ‘Œ,S )r@   r¦   )r5   ÚsplitÚtolist)Ú.0r­   r·   s     €r<   ú
<listcomp>z0Glm4vVisionAttention.forward.<locals>.<listcomp>L  sA   ø€ ð ð ð ØAG•”˜F G§N¢NÑ$4Ô$4¸!Ð<Ñ<Ô<ðð ð r=   c           
      ól   •— g | ]0\  }}} ‰‰|||fd ‰j         ‰j        sdn‰j        ddœ‰¤Žd         ‘Œ1S )Nræ   F)rë   rì   rí   r  r   )rì   rñ   r  )r  rÒ   rÓ   ÚvÚattention_interfacerî   r9   s       €€€r<   r  z0Glm4vVisionAttention.forward.<locals>.<listcomp>P  s†   ø€ ð ð ð ñ �A�q˜!ð $Ð#ØØØØð	
ð
 $(Ø œLØ'+¤}ÐP˜C˜C¸$Ô:PØ#ð
ð 
ð ð
ð 
ð ô
ðð ð r=   r¦   )rN   r  rà   r  r¯   ÚunbindrÜ   rô   rŠ   r   Úget_interfacere   Ú_attn_implementationrü   r    Úmaxrì   rñ   r  Úzipr5   rÌ   r÷   rv   )r9   r>   r
  r  rî   Ú
seq_lengthÚquery_statesrø   rù   rÔ   rÕ   Ú
max_seqlenrû   Ú_ÚsplitsÚattn_outputsr  r·   s   `   `           @@r<   rK   zGlm4vVisionAttention.forward   s‡  øøøø€ ð #Ô(¨Ô+ˆ
à�HŠH�]Ñ#Ô#×+Ò+¨J¸¸4¼>È2ÑNÔN×VÒVÐWXÐZ[Ð]^Ð`aÑbÔb×iÒiÐjkÑlÔlñ 	/ˆ�j ,ð '‰ˆˆSÝ#>¸|ÈZÐY\Ð^aÑ#bÔ#bÑ ˆ�jà#×-Ò-¨a°Ñ3Ô3×=Ò=¸aÑ@Ô@ˆØ×)Ò)¨!¨QÑ/Ô/×9Ò9¸!Ñ<Ô<ˆ
Ø#×-Ò-¨a°Ñ3Ô3×=Ò=¸aÑ@Ô@ˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðõ (¨¬Ñ4Ô4ð '	9à$ Q R Rœ.¨:°c°r°c¬?Ñ:×?Ò?ÑAÔAˆJØ0Ð0ØØØØð	ð
  $ØœØ#'¤=ÐL˜˜°dÔ6LØ(Ø(Ø'Ø'Øðð ð ðð ‰NˆK˜˜ð" !   ”n z°#°2°#¤Ñ6ˆGðð ð ð ØLXÐZdÐfrÐKsðñ ô ˆFðð ð ð ð ð õ  # F˜|ðñ ô ˆLõ  œ) L°aÐ8Ñ8Ô8ˆKà!×)Ò)¨*°bÑ9Ô9×DÒDÑFÔFˆØ—i’i Ñ,Ô,ˆØÐr=   rg   )rP   rQ   rR   r)   r2   r   r5   rT   rM   rK   rU   rV   s   @r<   rþ   rþ     sÕ   ø€ € € € € ðÐ0ð °Tð ð ð ð ð ð ð €_Ð%¨wÐ7Ñ7Ô7ð
 IMð	Að Aà”|ðAð ”LðAð # 5¤<°´Ð#=Ô>ÀÑEð	Að 
ŒðAð Að Añ 8Ô7ðAð Að Að Að Ar=   rþ   c                   óº   ‡ — e Zd Zdˆ fd„Z edd¬¦  «        e	 ddej        dej        d	eej        ej        f         dz  dej        fd
„¦   «         ¦   «         Z	ˆ xZ
S )ÚGlm4vVisionBlockr/   Nc                 ó  •— t          ¦   «                              ¦   «          t          |j        |j        ¬¦  «        | _        t          |j        |j        ¬¦  «        | _        t          |¦  «        | _        t          |d¬¦  «        | _
        d S )N©r.   Fr\   )r1   r2   r,   r:   Úrms_norm_epsÚnorm1Únorm2rþ   ÚattnrX   Úmlpr¡   s     €r<   r2   zGlm4vVisionBlock.__init__f  st   ø€ Ý‰Œ×ÒÑÔÐÝ! &Ô"4¸&Ô:MÐNÑNÔNˆŒ
Ý! &Ô"4¸&Ô:MÐNÑNÔNˆŒ
Ý(¨Ñ0Ô0ˆŒ	Ý  ¨eÐ4Ñ4Ô4ˆŒˆˆr=   r  r  r  r>   r
  r  c                 óª   — | | j         |                      |¦  «        f||dœ|¤Žz   }||                      |                      |¦  «        ¦  «        z   }|S )zœ
        cu_seqlens (`torch.Tensor`):
            Cumulative sequence lengths used for packed variable-length attention in Flash Attention kernels.
        ©r
  r  )r+  r)  r,  r*  )r9   r>   r
  r  rî   s        r<   rK   zGlm4vVisionBlock.forwardm  sq   € ð &¨	¨¬	Ø�JŠJ�}Ñ%Ô%ð)
à!Ø 3ð)
ð )
ð ð	)
ð )
ñ 
ˆð &¨¯ª°·²¸MÑ1JÔ1JÑ(KÔ(KÑKˆØÐr=   ©r/   Nrg   )rP   rQ   rR   r2   r   r   r5   rT   rM   rK   rU   rV   s   @r<   r%  r%  e  sÃ   ø€ € € € € ð5ð 5ð 5ð 5ð 5ð 5ð €_Ð%¨wÐ7Ñ7Ô7Øð
 IMð	ð à”|ðð ”Lðð # 5¤<°´Ð#=Ô>ÀÑEð	ð 
Œðð ð ñ „^ñ 8Ô7ðð ð ð ð r=   r%  c                   óÚ   ‡ — e Zd ZU ej        ed<   ddefˆ fd„Ze	 	 	 ddedz  de	d         de
dz  ded	ef         fd
„¦   «         Z ej        ¦   «         ed„ ¦   «         ¦   «         Zd„ Zˆ xZS )ÚGlm4vTextRotaryEmbeddingr~   Nre   c                 óö  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        | j        j        d         | _        | j        }| j        dk    rt          | j                 } || j        |¦  «        \  }| _
        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         |j                             dg d¢¦  «        | _        d S )	NÚ	rope_typeÚdefaultr~   Fr„   Úoriginal_inv_freqÚmrope_section)é   é   r8  )r1   r2   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenre   Úrope_parametersr3  Úcompute_default_rope_parametersr   Úattention_scalingr‡   ÚcloneÚgetr6  )r9   re   r¤   Úrope_init_fnr~   r;   s        €r<   r2   z!Glm4vTextRotaryEmbedding.__init__‡  sé   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&Ý.¨t¬~Ô>ˆLØ+7¨<¸¼ÀVÑ+LÔ+LÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUØ#Ô3×7Ò7¸ÈÈÈÑUÔUˆÔÐÐr=   r¤   ztorch.deviceÚseq_lenr/   ztorch.Tensorc                 óV  — | j         d         }| j                              dd¦  «        }t          | dd¦  «        p| j        | j        z  }t          ||z  ¦  «        }d}d|t          j        d|dt          j        ¬¦  «         	                    |t          j
        ¬	¦  «        |z  z  z  }||fS )
a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚpartial_rotary_factorrƒ   rä   Nr   r@   rx   r£   )r<  r@  Úgetattrr:   Únum_attention_headsr�   r5   r†   Úint64rD   rS   )	re   r¤   rB  ÚbaserE  rä   r€   Úattention_factorr~   s	            r<   r=  z8Glm4vTextRotaryEmbedding.compute_default_rope_parameters˜  sº   € ð& Ô% lÔ3ˆØ &Ô 6× :Ò :Ð;RÐTWÑ XÔ XÐÝ˜6 :¨tÑ4Ô4Ðh¸Ô8JÈfÔNhÑ8hˆÝ�(Ð2Ñ2Ñ3Ô3ˆàÐð Ø•U”\ ! S¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r=   c                 ó^  — | j         d d d d …d f                              ¦   «                              d|j        d         dd¦  «        }|d d …d d …d d d …f                              ¦   «         }t	          |j        j        t          ¦  «        r|j        j        dk    r|j        j        nd}t          |d¬¦  «        5  |                     ¦   «         |                     ¦   «         z   	                    dd¦  «        }|  
                    || j        ¦  «        }t          j        ||fd¬	¦  «        }|                     ¦   «         | j        z  }|                     ¦   «         | j        z  }	d d d ¦  «         n# 1 swxY w Y   |                     |j        ¬
¦  «        |	                     |j        ¬
¦  «        fS )Nr   r&   rA   ÚmpsÚcpuF)Údevice_typeÚenabledr@   r¦   rx   )r~   rS   rß   rN   r«   r¤   Útyper–   r!   rô   Úapply_mroper6  r5   rÌ   rÔ   r>  rÕ   rD   rC   )
r9   rÎ   rˆ   Úinv_freq_expandedÚposition_ids_expandedrN  ÚfreqsÚembrÔ   rÕ   s
             r<   rK   z Glm4vTextRotaryEmbedding.forward¸  sÉ  € ð
 !œM¨$°°a°a°a¸Ð*=Ô>×DÒDÑFÔF×MÒMÈaÐQ]ÔQcÐdeÔQfÐhjÐlmÑnÔnÐØ ,¨Q¨Q¨Q°°°°4¸¸¸¨]Ô ;× AÒ AÑ CÔ CÐå'1°!´(´-ÅÑ'EÔ'EÐkÈ!Ì(Ì-Ð[`ÒJ`ÐJ`�a”h”m�mÐfkˆÝ¨¸UÐCÑCÔCð 	5ð 	5Ø&×,Ò,Ñ.Ô.Ð1F×1LÒ1LÑ1NÔ1NÑN×YÒYÐZ[Ð]^Ñ_Ô_ˆEØ×$Ò$ U¨DÔ,>Ñ?Ô?ˆEÝ”)˜U E˜N°Ð3Ñ3Ô3ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð �vŠv˜AœGˆvÑ$Ô$ c§f¢f°1´7 fÑ&;Ô&;Ð;Ð;s   Â9B)E.Å.E2Å5E2c                 ó’   — |}|                      |d¬¦  «        }t          j        d„ t          |¦  «        D ¦   «         d¬¦  «        }|S )NrA   r¦   c                 ó*   — g | ]\  }}||d z           ‘ŒS )r   © )r  ÚiÚchunks      r<   r  z8Glm4vTextRotaryEmbedding.apply_mrope.<locals>.<listcomp>Í  s$   € ÐKÐKÐK©X¨Q°˜E ! a¡%œLÐKÐKÐKr=   )r  r5   rÌ   Ú	enumerate)r9   rT  r6  ÚsectionÚchunksÚresults         r<   rQ  z$Glm4vTextRotaryEmbedding.apply_mropeÊ  sM   € ØˆØ—’˜W¨"�Ñ-Ô-ˆÝ”ÐKÐK½À6Ñ9JÔ9JÐKÑKÔKÐQSÐTÑTÔTˆØˆr=   rg   ©NNN)rP   rQ   rR   r5   rT   rŒ   r(   r2   Ústaticmethodr   r�   rM   rS   r=  Úno_gradr   rK   rQ  rU   rV   s   @r<   r1  r1  „  s  ø€ € € € € € ØŒlÐÐÑðVð V˜ð Vð Vð Vð Vð Vð Vð" à)-Ø+/Ø"ð*ð *Ø $Ñ&ð*à˜Ô(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ô	%ð	*ð *ð *ñ „\ð*ð> €U„]�_„_Øð<ð <ñ Ôñ „_ð<ð ð ð ð ð ð ð r=   r1  c                 óŽ   — | dddd…f         }| dddd…f         }t          j        | |fd¬¦  «                             d¦  «        S )	rË   .r   Nr@   r&   rA   r¦   r×   )r5   r²   r‹   rÍ   s      r<   Úrotate_half_llmrc  Ñ  sQ   € à	
ˆ3���1�ˆ9Œ€BØ	
ˆ3���1�ˆ9Œ€BÝŒ;˜˜˜R�y bÐ)Ñ)Ô)×1Ò1°"Ñ5Ô5Ð5r=   c                 óT  — |                      |¦  «        }|                      |¦  «        }|dd|j        d         dz  …f                              dd¬¦  «        }|dd|j        d         dz  …f                              dd¬¦  «        }|j        d         }| dd|…f         | d|d…f         }}|dd|…f         |d|d…f         }	}||z  t          |¦  «        |z  z   }
||z  t          |¦  «        |z  z   }t	          j        |
|gd¬¦  «        }
t	          j        ||	gd¬¦  «        }|
|fS )a…  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.
        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.
    .NrA   r@   r¦   )rŠ   rN   Úrepeat_interleaverc  r5   rÌ   )rÒ   rÓ   rÔ   rÕ   Úunsqueeze_dimÚ
rotary_dimÚq_rotÚq_passÚk_rotÚk_passrÚ   rÛ   s               r<   Úapply_rotary_pos_embrl  Ø  s\  € ð$ �-Š-˜Ñ
&Ô
&€CØ
�-Š-˜Ñ
&Ô
&€Cð ˆcÐ'�S”Y˜r”] aÑ'Ð'Ð'Ô
(×
:Ò
:¸1À"Ð
:Ñ
EÔ
E€CØ
ˆcÐ'�S”Y˜r”] aÑ'Ð'Ð'Ô
(×
:Ò
:¸1À"Ð
:Ñ
EÔ
E€Cð ”˜2”€JØ�c˜;˜J˜;Ð&Ô'¨¨3°
°°Ð+;Ô)<ˆ6€EØ�c˜;˜J˜;Ð&Ô'¨¨3°
°°Ð+;Ô)<ˆ6€Eð �s‰{�¨uÑ5Ô5¸Ñ;Ñ<€GØ�s‰{�¨uÑ5Ô5¸Ñ;Ñ<€Gõ Œi˜ &Ð)¨rÐ2Ñ2Ô2€GÝŒi˜ &Ð)¨rÐ2Ñ2Ô2€GØ�GÐÐr=   c                   óú   ‡ — e Zd ZdZddededz  fˆ fd„Z	 	 	 ddej        de	ej        ej        f         dz  dej        dz  d	e
dz  d
ee         de	ej        ej        dz  e	ej                 dz  f         fd„Zˆ xZS )ÚGlm4vTextAttentionz†
    Multi-headed attention from 'Attention Is All You Need' paper.
    and "Generating Long Sequences with Sparse Transformers".
    Nre   Ú	layer_idxc                 óÈ  •— t          ¦   «                              ¦   «          || _        || _        |j        | _        |j        | _        | j        | j        z  | _        |j        | _        | j        | j        z  | _	        d| _
        |j        | _        |j        | _        | j        dz  | _        t          j        | j        | j        | j        z  d¬¦  «        | _        t          j        | j        | j        | j        z  d¬¦  «        | _        t          j        | j        | j        | j        z  d¬¦  «        | _        t          j        | j        | j        z  | j        d¬¦  «        | _        d S )NTr   r\   F)r1   r2   re   ro  r:   rG  r  rä   râ   rò   r  r  r<  rì   r3   r_   Úq_projÚk_projÚv_projÚo_proj©r9   re   ro  r;   s      €r<   r2   zGlm4vTextAttention.__init__  s/  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒà!Ô-ˆÔØÔ3ˆŒØÔ(¨D¬NÑ:ˆŒØ#)Ô#=ˆÔ Ø$(¤N°dÔ6NÑ$NˆÔ!ØˆŒØ!'Ô!9ˆÔØ%Ô5ˆÔØ”} dÑ*ˆŒå”i Ô 0°$´.À4Ä=Ñ2PÐW[Ð\Ñ\Ô\ˆŒÝ”i Ô 0°$Ô2JÈTÌ]Ñ2ZÐaeÐfÑfÔfˆŒÝ”i Ô 0°$Ô2JÈTÌ]Ñ2ZÐaeÐfÑfÔfˆŒÝ”i ¤°´Ñ >ÀÔ@PÐW\Ð]Ñ]Ô]ˆŒˆˆr=   r>   r  rë   Úpast_key_valuesrî   r/   c                 ód  — |                      ¦   «         \  }}}|                      |¦  «        }	|                      |¦  «        }
|                      |¦  «        }|	                     ||d| j        ¦  «                             dd¦  «        }	|
                     ||d| j        ¦  «                             dd¦  «        }
|                     ||d| j        ¦  «                             dd¦  «        }|\  }}t          |	|
||¦  «        \  }	}
|�|                     |
|| j	        ¦  «        \  }
}t          j        | j        j        t          ¦  «        } || |	|
||f| j        sdn| j        | j        dœ|¤Ž\  }}|                     ||d¦  «                             ¦   «         }|                      |¦  «        }||fS )NrA   r&   r@   ræ   )rí   rì   )Úsizerq  rr  rs  ry   rä   rô   rl  Úupdatero  r   r  re   r  rü   rñ   r  rì   rà   r÷   rt  )r9   r>   r  rë   rv  rî   ÚbszÚq_lenr!  r  rø   rù   rÔ   rÕ   r  rû   rú   s                    r<   rK   zGlm4vTextAttention.forward  sÎ  € ð &×*Ò*Ñ,Ô,‰ˆˆU�Aà—{’{ =Ñ1Ô1ˆØ—[’[ Ñ/Ô/ˆ
Ø—{’{ =Ñ1Ô1ˆà#×(Ò(¨¨e°R¸¼ÑGÔG×QÒQÐRSÐUVÑWÔWˆØ—_’_ S¨%°°T´]ÑCÔC×MÒMÈaÐQRÑSÔSˆ
Ø#×(Ò(¨¨e°R¸¼ÑGÔG×QÒQÐRSÐUVÑWÔWˆà&‰ˆˆSÝ#7¸ÀjÐRUÐWZÑ#[Ô#[Ñ ˆ�jàÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð "×)Ò)¨#¨u°bÑ9Ô9×DÒDÑFÔFˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r=   rg   r_  )rP   rQ   rR   Ú__doc__r(   r�   r2   r5   rT   rM   r   r   r   rK   rU   rV   s   @r<   rn  rn     s  ø€ € € € € ðð ð
^ð ^˜ð ^¸3À¹:ð ^ð ^ð ^ð ^ð ^ð ^ð. IMØ.2Ø(,ð))ð ))à”|ð))ð # 5¤<°´Ð#=Ô>ÀÑEð))ð œ tÑ+ð	))ð
  ™ð))ð Ð-Ô.ð))ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð))ð ))ð ))ð ))ð ))ð ))ð ))ð ))r=   rn  c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚGlm4vTextMLPc                 ó"  •— t          ¦   «                              ¦   «          || _        t          j        |j        d|j        z  d¬¦  «        | _        t          j        |j        |j        d¬¦  «        | _        t          |j
                 | _        d S )Nr@   Fr\   )r1   r2   re   r3   r_   r:   r^   Úgate_up_projrb   r
   rc   Úactivation_fnr¡   s     €r<   r2   zGlm4vTextMLP.__init__G  sz   ø€ Ý‰Œ×ÒÑÔÐàˆŒÝœI fÔ&8¸!¸fÔ>VÑ:VÐ]bÐcÑcÔcˆÔÝœ 6Ô#;¸VÔ=OÐV[Ð\Ñ\Ô\ˆŒÝ# FÔ$5Ô6ˆÔÐÐr=   r>   r/   c                 óº   — |                       |¦  «        }|                     dd¬¦  «        \  }}||                      |¦  «        z  }|                      |¦  «        S )Nr@   rA   r¦   )r€  rZ  r�  rb   )r9   r>   Ú	up_statesÚgates       r<   rK   zGlm4vTextMLP.forwardO  sX   € Ø×%Ò% mÑ4Ô4ˆ	à#Ÿ/š/¨!°˜/Ñ4Ô4‰ˆˆiØ × 2Ò 2°4Ñ 8Ô 8Ñ8ˆ	à�~Š~˜iÑ(Ô(Ð(r=   )rP   rQ   rR   r2   r5   ÚFloatTensorrK   rU   rV   s   @r<   r~  r~  F  s`   ø€ € € € € ð7ð 7ð 7ð 7ð 7ð) UÔ%6ð )¸5Ô;Lð )ð )ð )ð )ð )ð )ð )ð )r=   r~  c                   ó  ‡ — e Zd Zdedefˆ fd„Ze	 	 	 	 	 ddej        de	ej        ej        f         dz  dej        dz  d	ej
        dz  d
edz  dedz  de	ej        e	ej        ej        f         dz  f         fd„¦   «         Zˆ xZS )ÚGlm4vTextDecoderLayerre   ro  c                 ó²  •— t          ¦   «                              ¦   «          |j        | _        t          ||¦  «        | _        t          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        t          |j        |j        ¬¦  «        | _
        t          |j        |j        ¬¦  «        | _        t          |j        |j        ¬¦  «        | _        d S )Nr'  )r1   r2   r:   rn  Ú	self_attnr~  r,  r,   r(  Úinput_layernormÚpost_attention_layernormÚpost_self_attn_layernormÚpost_mlp_layernormru  s      €r<   r2   zGlm4vTextDecoderLayer.__init__Y  s¶   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔÝ+¨F°IÑ>Ô>ˆŒÝ Ñ'Ô'ˆŒÝ+¨FÔ,>ÀFÔDWÐXÑXÔXˆÔÝ(4°VÔ5GÈVÔM`Ð(aÑ(aÔ(aˆÔ%Ý(4°VÔ5GÈVÔM`Ð(aÑ(aÔ(aˆÔ%Ý".¨vÔ/AÀvÔGZÐ"[Ñ"[Ô"[ˆÔÐÐr=   NFr>   r  rë   rˆ   rv  Ú	use_cacher/   c           
      ó"  — |}|                       |¦  «        } | j        d||||||dœ|¤Ž\  }}	|                      |¦  «        }||z   }|}|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }||z   }|S )N)r>   r  rë   rˆ   rv  rŽ  rX  )rŠ  r‰  rŒ  r‹  r,  r�  )
r9   r>   r  rë   rˆ   rv  rŽ  rî   Úresidualr!  s
             r<   rK   zGlm4vTextDecoderLayer.forwardc  sÉ   € ð !ˆà×,Ò,¨]Ñ;Ô;ˆð *˜4œ>ð 
Ø'Ø 3Ø)Ø%Ø+Øð
ð 
ð ð
ð 
Ñˆ�qð ×5Ò5°mÑDÔDˆØ  =Ñ0ˆð !ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆØ×/Ò/°Ñ>Ô>ˆØ  =Ñ0ˆàÐr=   )NNNNF)rP   rQ   rR   r(   r�   r2   r   r5   rT   rM   Ú
LongTensorr   rk   r…  rK   rU   rV   s   @r<   r‡  r‡  X  s  ø€ € € € € ð\˜ð \¸3ð \ð \ð \ð \ð \ð \ð ð IMØ.2Ø04Ø(,Ø!&ð#ð #à”|ð#ð # 5¤<°´Ð#=Ô>ÀÑEð#ð œ tÑ+ð	#ð
 Ô&¨Ñ-ð#ð  ™ð#ð ˜$‘;ð#ð 
ˆuÔ  %¨Ô(9¸5Ô;LÐ(LÔ"MÐPTÑ"TÐTÔ	Uð#ð #ð #ñ „^ð#ð #ð #ð #ð #r=   r‡  c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚGlm4vModelOutputWithPastá  
    rope_deltas (`torch.LongTensor` of shape `(batch_size, )`, *optional*):
        The rope index difference between sequence length and multimodal rope.
        The attribute is deprecated and will be removed in v5.20, use `model.base_model.rope_deltas` instead.
    NÚrope_deltas©rP   rQ   rR   r|  r•  r5   r‘  rŒ   rX  r=   r<   r“  r“  Š  ó6   € € € € € € ðð ð ,0€K�Ô! DÑ(Ð/Ð/Ñ/Ð/Ð/r=   r“  c                   óT   ‡ — e Zd ZU eed<   dZdZdZddgZdgZ	dZ
dZdZdZˆ fd„Zˆ xZS )	ÚGlm4vPreTrainedModelre   Úmodel)ÚimageÚvideoÚtextTr‡  r%  rv  c                 ó   •— t          ¦   «                              |¦  «         t          |t          ¦  «        rVd|j        t          j        d|j        dt
          j        ¬¦  «        |j        z  z  z  }t          j
        |j        |¦  «         d S d S )Nrƒ   r   r@   rx   )r1   Ú_init_weightsr«   r}   r�   r5   r†   r€   rS   ÚinitÚcopy_r~   )r9   rç   r~   r;   s      €r<   rŸ  z"Glm4vPreTrainedModel._init_weights¤  s…   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ8Ñ9Ô9ð 	2Ø˜fœl­u¬|¸A¸v¼zÈ1ÕTYÔT_Ð/`Ñ/`Ô/`ÐciÔcmÑ/mÑnÑoˆHÝŒJ�v”¨Ñ1Ô1Ð1Ð1Ð1ð	2ð 	2r=   )rP   rQ   rR   r'   rŒ   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphÚ_supports_attention_backendrŸ  rU   rV   s   @r<   r™  r™  –  s„   ø€ € € € € € àÐÐÑØÐØ1ÐØ&*Ð#Ø0Ð2DÐEÐØ#4Ð"5ÐØÐØ€Nà!ÐØ"&Ðð2ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r=   r™  c                   ó´   ‡ — e Zd ZU eed<   dZdgZeedœZ	dˆ fd„Z
d„ Zeeed	ej        d
ej        dee         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚGlm4vVisionModelre   )r›  rœ  r%  ©r>   Ú
attentionsr/   Nc                 óê  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        t	          ‰¦  «        | _        t          ‰¦  «        | _        ‰j        ‰j	        z  }t          |dz  ¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t#          ‰j        ‰j        ‰j        ¬¦  «        | _        t-          ‰j        ‰j        ¬¦  «        | _        t          j        ‰j        ‰j        ‰j        ‰j        ¬¦  «        | _        t-          ‰j        ‰j        ¬¦  «        | _        d| _        |                      ¦   «          d S )Nr@   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS rX  )r%  )r  r!  re   s     €r<   r  z-Glm4vVisionModel.__init__.<locals>.<listcomp>¿  s"   ø€ Ð$[Ð$[Ð$[À!Õ%5°fÑ%=Ô%=Ð$[Ð$[Ð$[r=   )r€   r�   rc   r'  )rs   Úout_channelsro   rp   F)r1   r2   Úspatial_merge_sizerq   r˜   r¶   rm   Úpatch_embedr:   r  r}   r  r3   Ú
ModuleListÚrangeÚdepthÚblocksr�   r]   r^   rc   Úmergerr,   r(  Úpost_conv_layernormÚConv2dÚ
downsampleÚpost_layernormÚgradient_checkpointingÚ	post_init)r9   re   rä   r;   s    ` €r<   r2   zGlm4vVisionModel.__init__´  sS  øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø"(Ô";ˆÔØ Ô+ˆŒå/°Ñ7Ô7ˆŒÝ0°Ñ8Ô8ˆÔàÔ%¨Ô)9Ñ9ˆÝ8¸ÀQ¹ÑGÔGˆÔå”mÐ$[Ð$[Ð$[Ð$[ÅuÈVÌ\ÑGZÔGZÐ$[Ñ$[Ô$[Ñ\Ô\ˆŒÝ,ØÔ&°FÔ4LÐY_ÔYjð
ñ 
ô 
ˆŒõ $0°Ô0BÈÔH[Ð#\Ñ#\Ô#\ˆÔ Ýœ)ØÔ*ØÔ/ØÔ1ØÔ,ð	
ñ 
ô 
ˆŒõ +¨6Ô+=À6ÔCVÐWÑWÔWˆÔà&+ˆÔ#Ø�ŠÑÔÐÐÐr=   c                 ó²   — t          j        d| j        j        › d�t          d¬¦  «         t          || j        ¦  «        }|                      |¦  «        }||fS )Nú`zŸ.rot_pos_emb` is deprecated and will be removed in v5.11. Use `get_vision_position_ids` from `transformers.vision_utils` and apply the rotary embedding module.r@   )Ú
stacklevel)ÚwarningsÚwarnr;   rP   ÚFutureWarningr%   r²  r  )r9   Úgrid_thwrˆ   r  s       r<   Úrot_pos_embzGlm4vVisionModel.rot_pos_embÐ  sr   € ÝŒð I�”Ô'ð  Ið  Ið  IÝØð	
ñ 	
ô 	
ð 	
õ
 /¨x¸Ô9PÑQÔQˆØ×,Ò,¨\Ñ:Ô:ˆØ˜|Ð+Ð+r=   r>   rÅ  rî   c           	      óÆ  — t          || j        |¬¦  «        }t          ||¬¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }t          j        ||fd¬¦  «        }|                     ¦   «         | 	                    ¦   «         f}|dd…         |dd…         z
  }	|  
                    ||	||dd…df                              |j        ¦  «        |dd…df                              |j        ¦  «        ¦  «        }| j        D ]}
 |
|f||dœ|¤Ž}Œ|                      |¦  «        }|                     d| j        | j        |j        d         ¦  «        }|                     dddd	¦  «        }|                      |¦  «                             d| j        j        ¦  «        }|                      |¦  «        }t-          ||¬
¦  «        S )a\  
        hidden_states (`torch.Tensor` of shape `(seq_len, hidden_size)`):
            The final hidden states of the model.
        grid_thw (`torch.Tensor` of shape `(num_images_or_videos, 3)`):
            The temporal, height and width of feature shape of each image in LLM.

        Returns:
            `torch.Tensor`: hidden_states.
        )rî   rA   r¦   r&   Nr   r.  r   r@   )Úlast_hidden_stateÚpooler_output)r%   r²  r$   r³  r¹  r  r5   rÌ   rÔ   rÕ   r¶   rD   r¤   r·  r¼  ry   rN   r¯   r»  re   r]   r¸  r   )r9   r>   rÅ  rî   rˆ   r
  Ú
rotary_embrU  r  ÚseqlensÚblkÚmerged_hidden_statess               r<   rK   zGlm4vVisionModel.forwardÚ  s  € õ /¨x¸Ô9PÐY_Ð`Ñ`Ô`ˆÝ*¨8¸FÐCÑCÔCˆ
à×(Ò(¨Ñ7Ô7ˆØ×0Ò0°Ñ?Ô?ˆØ×(Ò(¨Ñ6Ô6ˆ
ÝŒi˜ ZÐ0°bÐ9Ñ9Ô9ˆØ"Ÿwšw™yœy¨#¯'ª'©)¬)Ð4Ðà˜Q˜R˜R”. :¨c¨r¨c¤?Ñ2ˆØŸšØØØØ˜˜˜˜A˜Ô×!Ò! -Ô"6Ñ7Ô7Ø˜˜˜˜A˜Ô×!Ò! -Ô"6Ñ7Ô7ñ
ô 
ˆð ”;ð 	ð 	ˆCØ˜CØðà%Ø$7ðð ð ð	ð ˆMˆMð ×+Ò+¨MÑ:Ô:ˆà%×*Ò*Ø�Ô'¨Ô)@À-ÔBUÐVXÔBYñ
ô 
ˆð &×-Ò-¨a°°A°qÑ9Ô9ˆØŸš¨Ñ6Ô6×;Ò;¸BÀÄÔ@[Ñ\Ô\ˆà#Ÿ{š{¨=Ñ9Ô9Ðå)Ø+Ø.ð
ñ 
ô 
ð 	
r=   r/  )rP   rQ   rR   r)   rŒ   r£  r¥  r%  rþ   Ú_can_record_outputsr2   rÆ  r"   r#   r   r5   rT   r   r   rM   r   rK   rU   rV   s   @r<   r¬  r¬  «  sá   ø€ € € € € € ØÐÐÑØ)ÐØ+Ð,Ðà)Ø*ðð Ðð
ð ð ð ð ð ð8,ð ,ð ,ð  ØØð3
Ø"œ\ð3
Ø5:´\ð3
ØMSÐTfÔMgð3
à	Ð+Ñ	+ð3
ð 3
ð 3
ñ „^ñ „_ñ  Ôð3
ð 3
ð 3
ð 3
ð 3
r=   r¬  c                   ó  ‡ — e Zd ZU eed<   dZeedœZdefˆ fd„Z	e
ee	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  d	edz  d
ej        dz  dedz  dee         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚGlm4vTextModelre   )r�  r­  c                 óÞ  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        t          j        ‰j        ‰j        | j        ¦  «        | _        t          j	        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        t!          ‰¬¦  «        | _        d| _        |                      ¦   «          d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rX  )r‡  )r  ro  re   s     €r<   r  z+Glm4vTextModel.__init__.<locals>.<listcomp>#  s$   ø€ ÐgÐgÐg¸)Õ" 6¨9Ñ5Ô5ÐgÐgÐgr=   r'  ©re   F)r1   r2   Úpad_token_idÚpadding_idxÚ
vocab_sizer3   rž   r:   Úembed_tokensr´  rµ  Únum_hidden_layersÚlayersr,   r(  Únormr1  rÊ  r½  r¾  r¡   s    `€r<   r2   zGlm4vTextModel.__init__  sÒ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø!Ô.ˆÔØ Ô+ˆŒåœL¨Ô):¸FÔ<NÐPTÔP`ÑaÔaˆÔÝ”mØgÐgÐgÐgÅuÈVÔMeÑGfÔGfÐgÑgÔgñ
ô 
ˆŒõ ! Ô!3¸Ô9LÐMÑMÔMˆŒ	Ý2¸&ÐAÑAÔAˆŒà&+ˆÔ#à�ŠÑÔÐÐÐr=   NÚ	input_idsrë   rˆ   rv  Úinputs_embedsrŽ  rî   r/   c           	      óp  — |d u |d uz  rt          d¦  «        ‚|r5|€3t          j                             ¦   «         st	          | j        ¬¦  «        }|€|                      |¦  «        }|€y|�|                     ¦   «         nd}t          j        |j	        d         |j
        ¬¦  «        |z   }|                     ddd¦  «                             d|j	        d         d¦  «        }n3|j        dk    r(|d	                              d|j	        d         d¦  «        }|j        dk    r$|j	        d         d
k    r|d         }	|dd …         }nd }	| j        ||||	dœ}
t          di |
¤Ž}|}|                      ||¬¦  «        }| j        D ]} ||f||	||dœ|¤Ž}|}Œ|                      |¦  «        }t%          ||¬¦  «        S )Nú:You must specify exactly one of input_ids or inputs_embedsrÓ  r   r&   r¥   rA   r   r@   ©N.é   )re   rÜ  rë   rv  rˆ   )rˆ   )rë   rˆ   rv  r  )rÈ  rv  rX  )Ú
ValueErrorr5   ÚjitÚ
is_tracingr   re   r×  Úget_seq_lengthr†   rN   r¤   ry   rß   Úndimr   rÊ  rÙ  rÚ  r   )r9   rÛ  rë   rˆ   rv  rÜ  rŽ  rî   Úpast_seen_tokensÚtext_position_idsÚmask_kwargsÚcausal_maskr>   r  Údecoder_layerÚlayer_outputss                   r<   rK   zGlm4vTextModel.forward,  s:  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZð ð 	?˜Ð0½¼×9MÒ9MÑ9OÔ9OÐ0Ý*°$´+Ð>Ñ>Ô>ˆOàÐ Ø ×-Ò-¨iÑ8Ô8ˆMð ÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×,Ò,¨Q°°2Ñ6Ô6×=Ò=¸aÀÔATÐUVÔAWÐY[Ñ\Ô\ˆLˆLØÔ !Ò#Ð#Ø'¨	Ô2×9Ò9¸!¸\Ô=OÐPQÔ=RÐTVÑWÔWˆLð Ô Ò!Ð! lÔ&8¸Ô&;¸qÒ&@Ð&@Ø ,¨Q¤ÐØ'¨¨¨Ô+ˆLˆLð !%Ðð ”kØ*Ø,Ø.Ø-ð
ð 
ˆõ )Ð7Ð7¨;Ð7Ð7ˆà%ˆØ"Ÿošo¨mÈ,˜oÑWÔWÐà!œ[ð 		*ð 		*ˆMØ)˜MØðà*Ø.Ø /Ø$7ðð ð ðð ˆMð *ˆMˆMàŸ	š	 -Ñ0Ô0ˆå&Ø+Ø+ð
ñ 
ô 
ð 	
r=   )NNNNNN)rP   rQ   rR   r(   rŒ   r£  r‡  rn  rÎ  r2   r   r"   r#   r5   r‘  rT   r   r…  rk   r   r   rM   r   rK   rU   rV   s   @r<   rÐ  rÐ    sK  ø€ € € € € € àÐÐÑØ Ðà.Ø(ðð Ðð
˜ð ð ð ð ð ð ð  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ðJ
ð J
àÔ# dÑ*ðJ
ð œ tÑ+ðJ
ð Ô&¨Ñ-ð	J
ð
  ™ðJ
ð Ô(¨4Ñ/ðJ
ð ˜$‘;ðJ
ð Ð-Ô.ðJ
ð 
Ð(Ñ	(ðJ
ð J
ð J
ñ „_ñ  Ôñ „^ðJ
ð J
ð J
ð J
ð J
r=   rÐ  c                   óz  ‡ — e Zd ZdZdZddgZˆ fd„Z	 	 	 	 d)ded	eeeef         e	j
        z  d
edededee	j        z  dz  fd„Z	 	 	 d*de	j        de	j        de	j        dz  de	j        dz  de	j
        dz  dee	j
        e	j
        f         fd„Z ed¬¦  «        ee	 d+de	j        de	j        dz  dee         deez  fd„¦   «         ¦   «         ¦   «         Z ed¬¦  «        ee	 d+de	j        de	j        dz  dee         deez  fd„¦   «         ¦   «         ¦   «         Z	 	 d,de	j        de	j        de	j        dz  d e	j        dz  fd!„Z	 	 	 	 	 d-de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  d"e	j
        dz  de	j        dz  de	j
        dz  fd#„Z ed$d%¬&¦  «        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e         deez  fd(„¦   «         ¦   «         ¦   «         Z ˆ xZ!S )/Ú
Glm4vModelrš  Fr‡  r%  c                 ó  •— t          ¦   «                              |¦  «         t                               |j        ¦  «        | _        t                               |j        ¦  «        | _        d | _	        |  
                    ¦   «          d S rg   )r1   r2   r¬  Ú_from_configÚvision_configÚvisualrÐ  Útext_configÚlanguage_modelr•  r¾  r¡   s     €r<   r2   zGlm4vModel.__init__ƒ  sl   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý&×3Ò3°FÔ4HÑIÔIˆŒÝ,×9Ò9¸&Ô:LÑMÔMˆÔØˆÔð 	�ŠÑÔÐÐÐr=   r&   NÚstart_positionrÅ  Útemp_merge_sizer²  Útime_intervalr¤   c                 óü  — |d                               ¦   «         |z  |d                               ¦   «         |z  |d                               ¦   «         |z  }	}}t          j        ||¬¦  «        |z  }
t          j        ||¬¦  «        |z   }t          j        |	|¬¦  «        |z   }t          j        |
||d¬¦  «        \  }}}t          j        |||gd¬¦  «                             dd	¦  «        }|dxx         |z  cc<   |S )
a¢  
        Compute 3D positional indices for vision tokens derived from a single image or video input.

        The positions are generated from the input grid defined by temporal (T), height (H), and
        width (W) dimensions. Temporal and spatial dimensions can be downscaled according to the
        merge sizes used in the vision backbone. The resulting positions are offset by `start_position`.

        Args:
            start_position (`int`):
                Offset added to all computed positional indices.
            grid_thw (`Sequence[int]` or `torch.Tensor` of shape `(3,)`):
                The (T, H, W) grid representing the feature layout of the current image or video after patch embedding.
            temp_merge_size (`int`, *optional*):
                Factor by which the temporal dimension is reduced in the backbone. The temporal grid size is divided
                by this value. Defaults to 1.
            spatial_merge_size (`int`, *optional*):
                Factor by which the spatial dimensions (H and W) are reduced in the backbone. Both H and W are divided
                by this value. Defaults to 1.
            time_interval (`int`, *optional*):
                Spacing factor applied between consecutive temporal position indices.Defaults to 1.
            device (`str` or `torch.device`, *optional*):
                Device on which the resulting tensor is allocated. If `None`, uses the current default device.

        Returns:
            torch.LongTensor of shape (3, sequence_length):
                Positional indices for temporal, height, and width dimensions,
                flattened into sequence form and offset by `start_position`.
        r   r&   r@   r¥   Úij)Úindexingr¦   r   rA   )Úitemr5   r†   Úmeshgridr²   rà   )r9   rô  rÅ  rõ  r²  rö  r¤   Ú
llm_grid_tÚ
llm_grid_hÚ
llm_grid_wÚposition_temporalÚposition_heightÚposition_widthÚT_gridÚH_gridÚW_gridÚvision_position_idss                    r<   r%   z"Glm4vModel.get_vision_position_idsŒ  s  € ðL �QŒK×ÒÑÔ /Ñ1Ø�QŒK×ÒÑÔÐ"4Ñ4Ø�QŒK×ÒÑÔÐ"4Ñ4ð !+�Jˆ
õ "œL¨¸FÐCÑCÔCÀmÑSÐÝœ, z¸&ÐAÑAÔAÀNÑRˆÝœ j¸Ð@Ñ@Ô@À>ÑQˆå!&¤Ð0AÀ?ÐTbÐmqÐ!rÑ!rÔ!rÑˆ�˜Ý#œk¨6°6¸6Ð*BÈÐJÑJÔJ×RÒRÐSTÐVXÑYÔYÐØ˜AÐÐÔ .Ñ0ÐÐÑØ"Ð"r=   rÛ  Úmm_token_type_idsÚimage_grid_thwÚvideo_grid_thwrë   r/   c           	      ó´  — |�*t          j        ||dd…df         d¬¦  «        }d|dd…df<   | j        j        j        }g }t          j        d|j        d         |j        d         |j        |j        ¬¦  «        }	|�t          |¦  «        nd|�t          |¦  «        nddœ}
t          |¦  «        D �]w\  }}||         }|�@|||                              ¦   «                  }|||                              ¦   «                  }g }t          j        t          |                     ¦   «         ¦  «        d„ ¦  «        D ]K\  }}t          |¦  «        }|d         d         }|d	         d         dz   }|                     |||f¦  «         ŒLd}g }|D ]Û\  }}}|dk    rd||z
  }|                     t          j        ||j        ¬
¦  «                             dd	¦  «                             dd	¦  «        |z   ¦  «         ||z  }Œpt)          |
|         ¦  «        }|                      ||d||j        ¬
¦  «        }|                     |¦  «         |t-          |d         |d         ¦  «        |z  z  }ŒÜt          j        |d¬¦  «                             dd	¦  «        }|�;|                     |	j        ¦  «        |	dd…|||                              ¦   «         f<   n!|                     |	j        ¦  «        |	dd…|f<   |                     |                     ¦   «         dz   t5          |¦  «        z
  ¦  «         �Œyt          j        ||j        ¬
¦  «                             d¦  «        }|	|fS )aÙ  
        Difference from Qwen2VL/Qwen2.5VL's get_rope_index:
        - GLM4V uses timestamps to separate each video frame, so the video_grid_thw should also be split too.

        Args:
            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
                Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide
                it.
            mm_token_type_ids (`torch.IntTensor` of shape `(batch_size, sequence_length)`):
                Token type ids matching each modality to a different value in the input sequence, i.e. text (0), image (1), video (2).
            image_grid_thw (`torch.LongTensor` of shape `(num_images, 3)`, *optional*):
                The temporal, height and width of feature shape of each image in LLM.
            video_grid_thw (`torch.LongTensor` of shape `(num_videos, 3)`, *optional*):
                The temporal, height and width of feature shape of each video in LLM.
            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**.

        Returns:
            position_ids (`torch.LongTensor` of shape `(3, batch_size, sequence_length)`)
            mrope_position_deltas (`torch.Tensor` of shape `(batch_size)`)
        Nr   r¦   r&   r   ©rC   r¤   )r&   r@   c                 ó   — | d         S )Nr&   rX  )rÎ   s    r<   ú<lambda>z+Glm4vModel.get_rope_index.<locals>.<lambda>ü  s   € Ð`aÐbcÔ`d€ r=   rA   r¥   r@   )r5   re  re   rð  r²  ÚzerosrN   rC   r¤   Úiterr[  rk   Ú	itertoolsÚgroupbyr  r¬   Úappendr†   ry   rß   Únextr%   r  rÌ   rà   rD   Úlenr­   rŠ   )r9   rÛ  r  r  r  rë   rî   r²  Úmrope_position_deltasrˆ   Ú
grid_itersÚ	batch_idxÚcurrent_input_idsÚinput_token_typeÚinput_type_groupré   ÚgroupÚstart_indexÚ	end_indexÚcurrent_posÚllm_pos_ids_listÚmodality_typeÚ	start_idxÚend_idxÚtext_lenrÅ  r  Úllm_positionss                               r<   Úget_rope_indexzGlm4vModel.get_rope_indexÀ  sÇ  € ðF Ð%Ý"Ô4°^À^ÐTUÐTUÐTUÐWXÐTXÔEYÐ_`ÐaÑaÔaˆNØ#$ˆN˜1˜1˜1˜a˜4Ñ Ø!œ[Ô6ÔIÐà "ÐÝ”{ØØŒO˜AÔØŒO˜AÔØ”/ØÔ#ð
ñ 
ô 
ˆð (6Ð'A�t�NÑ#Ô#Ð#ÀtØ'5Ð'A�t�NÑ#Ô#Ð#Àtð
ð 
ˆ
õ
 -6°iÑ,@Ô,@ð $	[ñ $	[Ñ(ˆIÐ(Ø0°Ô;ÐØÐ)Ø$5°nÀYÔ6O×6TÒ6TÑ6VÔ6VÔ$WÐ!Ø#3°NÀ9Ô4M×4RÒ4RÑ4TÔ4TÔ#UÐ à!ÐÝ'Ô/µ	Ð:J×:QÒ:QÑ:SÔ:SÑ0TÔ0TÐVdÐVdÑeÔeð Gð G‘
��UÝ˜U™œ�Ø# Aœh qœk�Ø! "œI aœL¨1Ñ,�	Ø ×'Ò'¨¨k¸9Ð(EÑFÔFÐFÐFàˆKØ!ÐØ5Eð Wð WÑ1�˜y¨'à  AÒ%Ð%Ø&¨Ñ2�HØ$×+Ò+Ýœ X°iÔ6FÐGÑGÔG×LÒLÈQÐPRÑSÔS×ZÒZÐ[\Ð^`ÑaÔaÐdoÑoñô ð ð   8Ñ+�K�Kõ  $ J¨}Ô$=Ñ>Ô>�HØ*.×*FÒ*FØ# X¨qÐ2DÈYÔM]ð +Gñ +ô +Ð'ð %×+Ò+Ð,?Ñ@Ô@Ð@Ø¥3 x°¤{°H¸Q´KÑ#@Ô#@ÐDVÑ#VÑV�K�KÝ!œIÐ&6¸AÐ>Ñ>Ô>×FÒFÀqÈ"ÑMÔMˆMØÐ)ØO\×O_ÒO_Ð`lÔ`sÑOtÔOt�˜Q˜Q˜Q 	¨>¸)Ô+D×+IÒ+IÑ+KÔ+KÐKÑLÐLà-:×-=Ò-=¸lÔ>QÑ-RÔ-R�˜Q˜Q˜Q 	˜\Ñ*Ø!×(Ò(¨×):Ò):Ñ)<Ô)<¸qÑ)@Å3ÐGXÑCYÔCYÑ)YÑZÔZÐZÑZÝ %¤Ð-BÈ9ÔK[Ð \Ñ \Ô \× fÒ fÐghÑ iÔ iÐØÐ2Ð2Ð2r=   rœ  )ÚmodalityÚpixel_values_videosrî   c                 óê  — |                      | j        j        ¦  «        }|dd…df         }|dd…dd…f         }t          j        ||d¬¦  «        }|                     |j        d         d¦  «        }t          j        ||gd¬¦  «        } | j        |f|ddœ|¤Ž}	|                     d¦  «        | j        j	        dz  z   
                    ¦   «         }
t          j        |	j        |
¦  «        }||	_        |	S )	á[  
        pixel_values_videos (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
            The tensors corresponding to the input videos.
        video_grid_thw (`torch.LongTensor` of shape `(num_videos, 3)`, *optional*):
            The temporal, height and width of feature shape of each video in LLM.
        Nr   r&   r¦   T)rÅ  Úreturn_dictrA   r@   )rP  rñ  rC   r5   re  Únew_onesrN   rÌ   Úprodr²  r  r  rÉ  )r9   r&  r  rî   ÚtÚhwÚflattened_hwÚprefix_onesÚflattened_video_grid_thwÚvision_outputsÚsplit_sizesÚvideo_embedss               r<   Úget_video_featureszGlm4vModel.get_video_features  s  € ð 2×6Ò6°t´{Ô7HÑIÔIÐà˜1˜1˜1˜a˜4Ô ˆØ˜A˜A˜A˜q˜r˜r˜EÔ"ˆåÔ.¨r°1¸!Ð<Ñ<Ô<ˆØ$×-Ò-¨lÔ.@ÀÔ.CÀQÑGÔGˆÝ#(¤9¨k¸<Ð-HÈaÐ#PÑ#PÔ#PÐ Ø$˜œØð
Ø*BÐPTð
ð 
ØX^ð
ð 
ˆð &×*Ò*¨2Ñ.Ô.°$´+Ô2PÐRSÑ2SÑS×[Ò[Ñ]Ô]ˆÝ”{ >Ô#?ÀÑMÔMˆØ'3ˆÔ$àÐr=   r›  Úpixel_valuesc                 ó  — |                      | j        j        ¦  «        } | j        |fd|i|¤Ž}|                     d¦  «        | j        j        dz  z                       ¦   «         }t          j        |j        |¦  «        }||_        |S )áT  
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
            The tensors corresponding to the input images.
        image_grid_thw (`torch.LongTensor` of shape `(num_images, 3)`, *optional*):
            The temporal, height and width of feature shape of each image in LLM.
        rÅ  rA   r@   )	rP  rñ  rC   r+  r²  r  r5   r  rÉ  )r9   r5  r  rî   r1  r2  Úimage_embedss          r<   Úget_image_featureszGlm4vModel.get_image_features=  s‹   € ð $×(Ò(¨¬Ô):Ñ;Ô;ˆØ$˜œ \ÐUÐU¸NÐUÈfÐUÐUˆØ%×*Ò*¨2Ñ.Ô.°$´+Ô2PÐRSÑ2SÑS×[Ò[Ñ]Ô]ˆÝ”{ >Ô#?ÀÑMÔMˆØ'3ˆÔ$àÐr=   rÜ  Úimage_featuresÚvideo_featuresc                 ó   — |€É| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }n || j        j        k    }|| j        j        k    }| 	                    ¦   «         }| 
                    d¦  «                             |j        ¦  «        }|�Et          ||j        d         z  |                     ¦   «         k    d|› d|j        d         › �¦  «         | 	                    ¦   «         }| 
                    d¦  «                             |j        ¦  «        }|�Et          ||j        d         z  |                     ¦   «         k    d|› d|j        d         › �¦  «         ||fS )zï
        Obtains multimodal placeholder mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
        equal to the length of multimodal features. If the lengths are different, an error is raised.
        Nr
  rA   z6Image features and image tokens do not match, tokens: z, features: r   z6Video features and video tokens do not match, tokens: )Úget_input_embeddingsr5   r­   re   Úimage_token_idr®   r¤   ÚallÚvideo_token_idr±   rŠ   rD   r   rN   Únumel)	r9   rÛ  rÜ  r:  r;  Úspecial_image_maskÚspecial_video_maskÚn_image_tokensÚn_video_tokenss	            r<   Úget_placeholder_maskzGlm4vModel.get_placeholder_maskT  s  € ð ÐØ!.Ð2M°$×2KÒ2KÑ2MÔ2MÝ”˜Tœ[Ô7½u¼zÐR_ÔRfÐgÑgÔgñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐØ!.Ð2M°$×2KÒ2KÑ2MÔ2MÝ”˜Tœ[Ô7½u¼zÐR_ÔRfÐgÑgÔgñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐÐð "+¨d¬kÔ.HÒ!HÐØ!*¨d¬kÔ.HÒ!HÐà+×/Ò/Ñ1Ô1ˆØ/×9Ò9¸"Ñ=Ô=×@Ò@ÀÔAUÑVÔVÐØÐ%Ý"Ø Ô!4°RÔ!8Ñ8¸N×<PÒ<PÑ<RÔ<RÒRØ~ÈÐ~Ð~ÐesÔeyÐz{Ôe|Ð~Ð~ñô ð ð
 ,×/Ò/Ñ1Ô1ˆØ/×9Ò9¸"Ñ=Ô=×@Ò@ÀÔAUÑVÔVÐØÐ%Ý"Ø Ô!4°RÔ!8Ñ8¸N×<PÒ<PÑ<RÔ<RÒRØ~ÈÐ~Ð~ÐesÔeyÐz{Ôe|Ð~Ð~ñô ð ð "Ð#5Ð5Ð5r=   rv  c                 ó”  — |€dn|                      ¦   «         }|d up|d u}	|	r|€|�t          d¦  «        ‚|d uo|d uo|	}
|
r3| j        �|dk    r&|                      |||||¬¦  «        \  }}|| _        �nS| j        ��I|dk    s|�€@|j        \  }}}|�‰|                     ¦   «                              d¦  «        dz
  }|                     |dk    d¦  «        }|                     d|d¦  «         	                    ddd¦  «         
                    |j        ¦  «        }n\t          j        |||z   ¦  «        }|                     ddd¦  «                             d|d¦  «         
                    |j        ¦  «        }| j                             || j        j        d         z  d¬¦  «        }|| 
                    |j        ¬¦  «        z   }nd }|S )	Nr   a  Multimodal data was passed (via `image_grid_thw` or `video_grid_thw`) but `mm_token_type_ids` is missing. Please pass `mm_token_type_ids` to the model so that multimodal RoPE (M-RoPE) can be computed correctly. `mm_token_type_ids` is returned by the processor alongside `input_ids`.)r  r  rë   r  rA   r&   r   r¦   r¥   )rä  rá  r•  r$  rN   r®   r°   Úmasked_fillry   ÚrepeatrD   r¤   r5   r†   rß   re  )r9   rÛ  rÜ  r  r  rë   rv  r  Úpast_key_values_lengthÚhas_multimodalÚcan_compute_mroperˆ   r•  Ú
batch_sizer  r!  Údeltas                    r<   Úcompute_3d_position_idsz"Glm4vModel.compute_3d_position_ids~  s+  € ð '6Ð&=  À?×CaÒCaÑCcÔCcÐØ'¨tÐ3ÐQ°~ÈTÐ7QˆØð 	Ð/Ð7¸IÐ<QÝðnñô ð ð
 &¨TÐ1ÐfÐ6GÈtÐ6SÐfÐXfÐàð 	  $Ô"2Ð":Ð>TÐXYÒ>YÐ>YØ(,×(;Ò(;ØØ-Ø-Ø-Ø"3ð )<ñ )ô )Ñ%ˆL˜+ð  +ˆDÔÑð
 ÔÑ)Ð/EÈÒ/IÐ/IÈYÑM^Ø(5Ô(;Ñ%ˆJ˜
 AØÐ)Ø-×2Ò2Ñ4Ô4×;Ò;¸BÑ?Ô?À!ÑC�Ø+×7Ò7¸È!Ò8KÈQÑOÔO�Ø+×0Ò0°°JÀÑCÔC×JÒJÈ1ÈaÐQRÑSÔS×VÒVÐWdÔWkÑlÔl��å$œ|Ð,BÐDZÐ]gÑDgÑhÔh�Ø+×0Ò0°°A°rÑ:Ô:×AÒAÀ!ÀZÐQSÑTÔT×WÒWÐXeÔXlÑmÔm�ØÔ$×6Ò6°zÀTÔEUÔE[Ð\]ÔE^Ñ7^ÐdeÐ6ÑfÔfˆEØ'¨%¯(ª(¸-Ô:N¨(Ñ*OÔ*OÑOˆLˆLð  ˆLØÐr=   r•  r  r  rˆ   c           	      óð  — |du |duz  rt          d¦  «        ‚|€ |                      ¦   «         |¦  «        }|�{ | j        ||fddi|¤Žj        }t	          j        |d¬¦  «                             |j        |j        ¦  «        }|  	                    |||¬¦  «        \  }}| 
                    ||¦  «        }|�{ | j        ||	fddi|¤Žj        }t	          j        |d¬¦  «                             |j        |j        ¦  «        }|  	                    |||¬¦  «        \  }}| 
                    ||¦  «        }|€|                      |||	||||
¬	¦  «        } | j        dd||||d
œ|¤Ž}t          di |¤d| j        i¤ŽS )aU  
        image_grid_thw (`torch.LongTensor` of shape `(num_images, 3)`, *optional*):
            The temporal, height and width of feature shape of each image in LLM.
        video_grid_thw (`torch.LongTensor` of shape `(num_videos, 3)`, *optional*):
            The temporal, height and width of feature shape of each video in LLM.
        NrÞ  r)  Tr   r¦   )r:  )r;  )rÛ  r  r  rÜ  rë   rv  r  )rÛ  rˆ   rë   rv  rÜ  r•  rX  )rá  r=  r9  rÉ  r5   rÌ   rD   r¤   rC   rF  Úmasked_scatterr4  rO  ró  r“  r•  )r9   rÛ  rë   rˆ   rv  rÜ  r5  r&  r  r  r  rî   r8  Ú
image_maskr!  r3  Ú
video_maskÚoutputss                     r<   rK   zGlm4vModel.forward¯  s&  € ð. ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàÐ#Ø2˜4Ô2Ø˜nðð Ø:>ðØBHðð äð õ !œ9 \°qÐ9Ñ9Ô9×<Ò<¸]Ô=QÐS`ÔSfÑgÔgˆLØ ×5Ò5°iÀÐ_kÐ5ÑlÔl‰MˆJ˜Ø)×8Ò8¸À\ÑRÔRˆMàÐ*Ø2˜4Ô2Ø# ^ðð ØAEðØIOðð äð õ !œ9 \°qÐ9Ñ9Ô9×<Ò<¸]Ô=QÐS`ÔSfÑgÔgˆLØ ×5Ò5°iÀÐ_kÐ5ÑlÔl‰MˆAˆzØ)×8Ò8¸À\ÑRÔRˆMàÐØ×7Ò7Ø#Ø-Ø-Ø+Ø-Ø /Ø"3ð 8ñ ô ˆLð &�$Ô%ð 
ØØ%Ø)Ø+Ø'ð
ð 
ð ð
ð 
ˆõ (ð 
ð 
Øð
ð 
àÔ(ð
ð 
ð 
ð 	
r=   )r&   r&   r&   Nr_  rg   )NN)NNNNN)
NNNNNNNNNN)"rP   rQ   rR   r¢  Úaccepts_loss_kwargsr¥  r2   r�   r¬   r5   rT   r–   r¤   r%   r‘  Ú	IntTensorrM   r$  r   r   r   r…  r   r   r   r4  r9  rF  rO  r   r   r“  rK   rU   rV   s   @r<   rí  rí  |  sÓ  ø€ € € € € àÐàÐØ0Ð2DÐEÐðð ð ð ð ð  !Ø"#ØØ,0ð2#ð 2#àð2#ð �s˜C �}Ô%¨¬Ñ4ð2#ð ð	2#ð
  ð2#ð ð2#ð �e”lÑ" TÑ)ð2#ð 2#ð 2#ð 2#ðp 37Ø26Ø.2ð[3ð [3àÔ#ð[3ð !œ?ð[3ð Ô(¨4Ñ/ð	[3ð
 Ô(¨4Ñ/ð[3ð œ tÑ+ð[3ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð[3ð [3ð [3ð [3ðz  Ð¨Ð1Ñ1Ô1ØØð 37ðð à"Ô.ðð Ô(¨4Ñ/ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñ „^ñ Ôñ 2Ô1ðð:  Ð¨Ð1Ñ1Ô1ØØð 37ðð àÔ'ðð Ô(¨4Ñ/ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñ „^ñ Ôñ 2Ô1ðð0 48Ø37ð(6ð (6àÔ#ð(6ð Ô(ð(6ð Ô)¨DÑ0ð	(6ð
 Ô)¨DÑ0ð(6ð (6ð (6ð (6ð\ /3Ø.2Ø.2Ø/3Ø48ð/ð /à”< $Ñ&ð/ð ”| dÑ*ð/ð œ tÑ+ð	/ð
 œ tÑ+ð/ð œ tÑ+ð/ð œ¨Ñ,ð/ð !œ?¨TÑ1ð/ð 
Œ˜Ñ	ð/ð /ð /ð /ðb €_�]¨GÐ4Ñ4Ô4ØØð .2Ø.2Ø04Ø(,Ø26Ø,0Ø8<Ø26Ø26Ø48ðA
ð A
àÔ# dÑ*ðA
ð œ tÑ+ðA
ð Ô&¨Ñ-ð	A
ð
  ™ðA
ð Ô(¨4Ñ/ðA
ð ”l TÑ)ðA
ð #Ô.°Ñ5ðA
ð Ô(¨4Ñ/ðA
ð Ô(¨4Ñ/ðA
ð !œ?¨TÑ1ðA
ð Ð+Ô,ðA
ð 
Ð)Ñ	)ðA
ð A
ð A
ñ Ôñ „^ñ 5Ô4ðA
ð A
ð A
ð A
ð A
r=   rí  c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚGlm4vCausalLMOutputWithPastr”  Nr•  r–  rX  r=   r<   rX  rX  ö  r—  r=   rX  c            !       ó"  ‡ — e Zd ZddiZdZˆ fd„Ze	 d#dej        dej	        dz  de
e         d	eez  fd
„¦   «         Ze	 d#dej        dej	        dz  de
e         d	eez  fd„¦   «         Z edd¬¦  «        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j        dz  deej        z  de
e         d	eez  fd„¦   «         ¦   «         ¦   «         Z	 	 	 	 	 	 	 	 	 	 d%ˆ fd„	Zˆ fd„Z	 d#dej	        dz  dej        dz  d	eej        ej        f         fd„Z	 	 	 d&d ed!edej	        dz  d	eej	        eeef         f         fd"„Zˆ xZ S )'ÚGlm4vForConditionalGenerationzlm_head.weightz(model.language_model.embed_tokens.weightFc                 óú   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        j        |j        j        d¬¦  «        | _	        |  
                    ¦   «          d S )NFr\   )r1   r2   rí  rš  r3   r_   rò  r:   rÖ  Úlm_headr¾  r¡   s     €r<   r2   z&Glm4vForConditionalGeneration.__init__  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý Ñ'Ô'ˆŒ
Ý”y Ô!3Ô!?ÀÔASÔA^ÐejÐkÑkÔkˆŒà�ŠÑÔÐÐÐr=   Nr&  r  rî   r/   c                 ó*   —  | j         j        ||fi |¤ŽS )r(  )rš  r4  )r9   r&  r  rî   s       r<   r4  z0Glm4vForConditionalGeneration.get_video_features  s%   € ð -ˆtŒzÔ,Ð-@À.Ð[Ð[ÐTZÐ[Ð[Ð[r=   r5  r  c                 ó*   —  | j         j        ||fi |¤ŽS )r7  )rš  r9  )r9   r5  r  rî   s       r<   r9  z0Glm4vForConditionalGeneration.get_image_features  s#   € ð -ˆtŒzÔ,¨\¸>ÐTÐTÈVÐTÐTÐTr=   r•  r  r  r   rÛ  rë   rˆ   rv  rÜ  Úlabelsr  Úlogits_to_keepc                 ó~  —  | j         d||||	|
|||||dœ
|¤Ž}|d         }t          |t          ¦  «        rt          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }d}|�'|                      ||| j        j        j        ¬¦  «        }t          |||j
        |j        |j        |j        ¬¦  «        S )a¸  
        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]`.
        image_grid_thw (`torch.LongTensor` of shape `(num_images, 3)`, *optional*):
            The temporal, height and width of feature shape of each image in LLM.
        video_grid_thw (`torch.LongTensor` of shape `(num_videos, 3)`, *optional*):
            The temporal, height and width of feature shape of each video in LLM.

        Example:

        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, Glm4vForConditionalGeneration

        >>> model = Glm4vForConditionalGeneration.from_pretrained("zai-org/GLM-4.1V-9B-Thinking")
        >>> processor = AutoProcessor.from_pretrained("zai-org/GLM-4.1V-9B-Thinking")

        >>> messages = [
            {
                "role": "user",
                "content": [
                    {"type": "image", "url": "https://www.ilankelman.org/stopsigns/australia.jpg"},
                    {"type": "text", "text": "What is shown in this image?"},
                ],
            },
        ]
        >>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
        >>> inputs = processor(text=[text], images=[image], vision_infos=[vision_infos])

        >>> # Generate
        >>> generate_ids = model.generate(inputs.input_ids, max_length=30)
        >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "The image shows a street scene with a red stop sign in the foreground. In the background, there is a large red gate with Chinese characters ..."
        ```)
rÛ  r5  r&  r  r  r  rˆ   rë   rv  rÜ  r   N)Úlogitsr_  rÖ  )Úlossrb  rv  r>   r®  r•  rX  )rš  r«   r�   Úslicer\  Úloss_functionre   rò  rÖ  rX  rv  r>   r®  r•  )r9   rÛ  rë   rˆ   rv  rÜ  r_  r5  r&  r  r  r  r`  rî   rT  r>   Úslice_indicesrb  rc  s                      r<   rK   z%Glm4vForConditionalGeneration.forward,  s  € ðz �$”*ð 
ØØ%Ø 3Ø)Ø)Ø/Ø%Ø)Ø+Ø'ð
ð 
ð ð
ð 
ˆð   œ
ˆõ 9CÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ×%Ò%¨V¸FÈtÌ{ÔOfÔOqÐ%ÑrÔrˆDå*ØØØ#Ô3Ø!Ô/ØÔ)ØÔ+ð
ñ 
ô 
ð 	
r=   Tc                 ón   •—  t          ¦   «         j        |f|||||||	|
||dœ
|¤Ž}|s|r
d |d<   d |d<   |S )N)
rv  rë   rÜ  rˆ   r5  r&  r  r  rŽ  Úis_first_iterationr5  r&  )r1   Úprepare_inputs_for_generation)r9   rÛ  rv  rë   rÜ  rˆ   rŽ  r5  r&  r  r  rh  rî   Úmodel_inputsr;   s                 €r<   ri  z;Glm4vForConditionalGeneration.prepare_inputs_for_generationŠ  s~   ø€ ð" =•u‘w”wÔ<Øð
à+Ø)Ø'Ø%Ø%Ø 3Ø)Ø)ØØ1ð
ð 
ð ð
ð 
ˆð "ð 	7 ið 	7Ø+/ˆL˜Ñ(Ø26ˆLÐ.Ñ/àÐr=   c                 ó¼  •— t          ¦   «                              ||¦  «        }d}|                     d¦  «        x}�|                     ¦   «         }|dk    r#| j        j        �|d         | j        j        z   }|S d|v r|d         j        d         dk    r|d         }t          |j        ¦  «        dk    o|j        t          j
        t          j        fv }|r€|                     d¦  «        �k|                     d¦  «        €|                     d	¦  «        �Ad
„ |                     ¦   «         D ¦   «         } | j        j        |fi |¤Ž\  }}	|	| j        _        nf|                     d¦  «                             ddd¦  «        }t          j        |j        d         dt          j        |j        ¬¦  «        | j        _        |d         }t          j        ||gd¬¦  «        }|S )Nr   rv  rß  rÛ  r&   r@   r  r  r  c                 ó&   — i | ]\  }}|d k    ¯||“ŒS )rÛ  rX  )r  rÓ   r  s      r<   ú
<dictcomp>zVGlm4vForConditionalGeneration._prepare_position_ids_for_generation.<locals>.<dictcomp>Ç  s(   € ÐVÐVÐV¡T Q¨ÀQÈ+ÒEUÐEU˜A˜qÐEUÐEUÐEUr=   r   rA   r
  r¦   )r1   Ú$_prepare_position_ids_for_generationr@  rä  rš  r•  rN   r  rC   r5   r�   r®   Úitemsr$  rŠ   rß   r  r¤   rÌ   )r9   Úinputs_tensorÚmodel_kwargsÚtext_positionsÚpast_lengthÚcacherˆ   Úis_input_idsÚvision_positionsr•  r;   s             €r<   rn  zBGlm4vForConditionalGeneration._prepare_position_ids_for_generation°  sö  ø€ õ ™œ×EÒEÀmÐUaÑbÔbˆð ˆØ!×%Ò%Ð&7Ñ8Ô8Ð8ˆEÐEØ×.Ò.Ñ0Ô0ˆKØ˜!ÒÐ ¤
Ô 6Ð BØ)¨)Ô4°t´zÔ7MÑMˆLØÐð ˜,Ð&Ð&¨<¸Ô+DÔ+JÈ1Ô+MÐPQÒ+QÐ+QØ(¨Ô5ˆMå˜=Ô.Ñ/Ô/°1Ò4Ðg¸Ô9LÕQVÔQZÕ\aÔ\fÐPgÐ9gˆàð	à× Ò Ð!4Ñ5Ô5ÐAØ×!Ò!Ð"2Ñ3Ô3Ð?À<×CSÒCSÐTdÑCeÔCeÐCqàVÐV¨\×-?Ò-?Ñ-AÔ-AÐVÑVÔVˆLØ,E¨D¬JÔ,EÀmÐ,dÐ,dÐWcÐ,dÐ,dÑ)Ð˜kØ%0ˆDŒJÔ"Ð"à-×7Ò7¸Ñ:Ô:×AÒAÀ!ÀRÈÑLÔLÐÝ%*¤[ØÔ# AÔ&¨µ´ÀMÔDXð&ñ &ô &ˆDŒJÔ"ð
 (¨	Ô2ˆÝ”y .Ð2BÐ!CÈÐKÑKÔKˆàÐr=   c                 óZ  — |�� | |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    d         }| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    d         }| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    d         }n0|| j        j        k    }|| j        j        k    }|| j        j        k    }t          j	        | 
                    ¦   «         | 
                    ¦   «         z
  d¬¦  «        }|dk    }|| z  }|                     d¬¦  «        }	|                     d¬¦  «        }
|	|
fS )aa  
        Get the number of images and videos for each sample to calculate the separation length of the sample tensor.
        These parameters are not passed through the processor to avoid unpredictable impacts from interface modifications.

        Args:
            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
                Indices of input sequence tokens in the vocabulary.

        Returns:
            image_nums (`torch.LongTensor` of shape `(batch_size, num_images_sample)`)
            video_nums (`torch.LongTensor` of shape `(batch_size, num_videos_sample)`)
        Nr
  ).r   r&   r¦   r   )r=  r5   r­   re   Úimage_start_token_idr®   r¤   Úvideo_start_token_idÚvideo_end_token_idr°   r�   r±   )r9   rÛ  rÜ  Úis_imageÚis_video_startÚis_video_endÚvideo_levelÚinside_videoÚstandalone_imagesÚimage_countsÚvideo_countss              r<   Ú_get_image_nums_and_video_numsz<Glm4vForConditionalGeneration._get_image_nums_and_video_numsÖ  s®  € ð$ Ñ$àØ.�4×,Ò,Ñ.Ô.Ý”L ¤Ô!AÍÌÐ\iÔ\pÐqÑqÔqñô òð ôˆHð Ø.�4×,Ò,Ñ.Ô.Ý”L ¤Ô!AÍÌÐ\iÔ\pÐqÑqÔqñô òð ôˆNð Ø.�4×,Ò,Ñ.Ô.Ý”L ¤Ô!?ÅuÄzÐZgÔZnÐoÑoÔoñô òð ôˆLˆLð ! D¤KÔ$DÒDˆHØ&¨$¬+Ô*JÒJˆNØ$¨¬Ô(FÒFˆLõ ”l >×#5Ò#5Ñ#7Ô#7¸,×:JÒ:JÑ:LÔ:LÑ#LÐRSÐTÑTÔTˆØ" Q’ˆð %¨¨Ñ6Ðð )×,Ò,°Ð,Ñ3Ô3ˆØ%×)Ò)¨aÐ)Ñ0Ô0ˆà˜\Ð)Ð)r=   r&   Úexpand_sizeÚis_encoder_decoderc                 ó  ‡ ‡‡‡‡— ‰dk    r‰‰fS g d¢Šˆˆˆˆ fd„}ˆˆfd„} |‰¦  «        Š‰�‰                      ‰d¬¦  «        Š |‰¦  «        Š|r8‰                     d¦  «        €t          d¦  «        ‚ |‰d         ¦  «        ‰d<   ‰‰fS )	Nr&   )r5  r  r&  r  Úsecond_per_grid_tsc                 ó  •— ‰                      dd ¦  «        }‰                      dd ¦  «        }‰                     ‰
‰                      dd ¦  «        ¬¦  «        \  }}d„ }| D �]}|dk    rFt          j        |t	          |¦  «        ¦  «        }d„ |D ¦   «         } || |         |‰	¬¦  «        | |<   ŒO|dk    r't	          |¦  «        } || |         |‰	¬¦  «        | |<   Œ||d	k    rFt          j        |t	          |¦  «        ¦  «        }d
„ |D ¦   «         } || |         |‰	¬¦  «        | |<   ŒÈ|dk    r't	          |¦  «        } || |         |‰	¬¦  «        | |<   Œõ|dk    r$ || |         t	          |¦  «        ‰	¬¦  «        | |<   �Œ!| S )Nr  r  rÜ  )rÜ  c                 ó´   ‡— t          j        | |¦  «        }|gdg|                      ¦   «         dz
  z  z   Št          j        ˆfd„|D ¦   «         d¬¦  «        }|S )Nr&   c                 ó$   •— g | ]} |j         ‰Ž ‘ŒS rX  )rI  )r  ÚsampleÚrepeat_argss     €r<   r  zŸGlm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>._repeat_interleave_samples.<locals>.<listcomp>)  s"   ø€ Ð#VÐ#VÐ#VÀF M F¤M°;Ð$?Ð#VÐ#VÐ#Vr=   r   r¦   )r5   r  r€   rÌ   )rÎ   r·   Úrepeat_timesÚsamplesr^  rŒ  s        @r<   Ú_repeat_interleave_samplesz‹Glm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>._repeat_interleave_samples&  sb   ø€ Ýœ+ a¨Ñ1Ô1�Ø+˜n°¨s°a·e²e±g´gÀ±kÑ/BÑB�ÝœÐ#VÐ#VÐ#VÐ#VÈgÐ#VÑ#VÔ#VÐ\]Ð^Ñ^Ô^�Ø�r=   r5  c                 ó^   — g | ]*}t          j        |d ¬¦  «                             ¦   «         ‘Œ+S ©r&   r¦   ©r5   r+  r±   ©r  r‹  s     r<   r  z{Glm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>.<listcomp>1  ó3   € ÐUÐUÐUÀ6�uœz¨&°aÐ8Ñ8Ô8×<Ò<Ñ>Ô>ÐUÐUÐUr=   )r·   r�  r&  c                 ó^   — g | ]*}t          j        |d ¬¦  «                             ¦   «         ‘Œ+S r‘  r’  r“  s     r<   r  z{Glm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>.<listcomp>=  r”  r=   r‡  )r@  rƒ  r5   r  r¬   )Údict_to_expandr  r  Ú
image_numsÚ
video_numsr�  ré   rŽ  r·   r„  rÛ  rq  r9   s            €€€€r<   Ú"_expand_dict_for_generation_visualzgGlm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual  s  ø€ Ø)×-Ò-Ð.>ÀÑEÔEˆNØ)×-Ò-Ð.>ÀÑEÔEˆNØ%)×%HÒ%HØ¨×)9Ò)9¸/È4Ñ)PÔ)Pð &Iñ &ô &Ñ"ˆJ˜
ðð ð ð &ð ñ �Ø˜.Ò(Ð(å#œk¨.½$¸zÑ:JÔ:JÑKÔK�GàUÐUÈWÐUÑUÔU�GØ*DÐ*DØ& sÔ+°WÈ;ð+ñ +ô +�N 3Ñ'Ð'ð Ð,Ò,Ð,å" :Ñ.Ô.�GØ*DÐ*DØ& sÔ+°WÈ;ð+ñ +ô +�N 3Ñ'Ð'ð Ð1Ò1Ð1Ý#œk¨.½$¸zÑ:JÔ:JÑKÔK�GØUÐUÈWÐUÑUÔU�GØ*DÐ*DØ& sÔ+°WÈ;ð+ñ +ô +�N 3Ñ'Ð'ð Ð,Ò,Ð,Ý" :Ñ.Ô.�GØ*DÐ*DØ& sÔ+°WÈ;ð+ñ +ô +�N 3Ñ'Ð'ð Ð0Ò0Ð0Ø*DÐ*DØ& sÔ+µT¸*Ñ5EÔ5EÐT_ð+ñ +ô +�N 3Ñ'ùð "Ð!r=   c                 ó  •— | D ]†}|dk    r2| |         j         dk    r!| |                              ‰d¬¦  «        | |<   Œ:| |         �Dt          | |         t          j        ¦  «        r$|‰vr | |                              ‰d¬¦  «        | |<   Œ‡| S )Nrˆ   r   r&   r¦   r   )rå  re  r«   r5   rT   )r–  ré   r„  Úvisual_keyss     €€r<   Ú_expand_dict_for_generationz`Glm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generationL  s²   ø€ Ø%ð dð d�Ø˜.Ò(Ð(¨^¸CÔ-@Ô-EÈÒ-JÐ-JØ*8¸Ô*=×*OÒ*OÐP[ÐabÐ*OÑ*cÔ*c�N 3Ñ'Ð'à" 3Ô'Ð3Ý" >°#Ô#6½¼ÑEÔEð 4à ;Ð.Ð.à*8¸Ô*=×*OÒ*OÐP[ÐabÐ*OÑ*cÔ*c�N 3Ñ'øØ!Ð!r=   r   r¦   Úencoder_outputszMIf `is_encoder_decoder` is True, make sure that `encoder_outputs` is defined.)re  r@  rá  )r9   r„  r…  rÛ  rq  r™  rœ  r›  s   `` ``  @r<   Ú_expand_inputs_for_generationz;Glm4vForConditionalGeneration._expand_inputs_for_generation  s  øøøøø€ ð ˜!ÒÐØ˜lÐ*Ð*àwÐwÐwˆð+	"ð +	"ð +	"ð +	"ð +	"ð +	"ð +	"ð +	"ðZ
	"ð 
	"ð 
	"ð 
	"ð 
	"ð 
	"ð :Ð9¸,ÑGÔGˆàÐ Ø!×3Ò3°KÀQÐ3ÑGÔGˆIà2Ð2°<Ñ@Ô@ˆàð 	kØ×ÒÐ 1Ñ2Ô2Ð:Ý Ð!pÑqÔqÐqØ.IÐ.IÈ,ÐWhÔJiÑ.jÔ.jˆLÐ*Ñ+à˜,Ð&Ð&r=   rg   )NNNNNNNNNNNr   )
NNNNTNNNNF)r&   FN)!rP   rQ   rR   Ú_tied_weights_keysrU  r2   r   r5   r…  r‘  r   r   rM   r   r4  r9  r   r   rT   r   rV  r�   rX  rK   ri  rn  rƒ  rk   Údictr–   r   rž  rU   rV   s   @r<   rZ  rZ    sÁ  ø€ € € € € Ø*Ð,VÐWÐàÐðð ð ð ð ð ð 37ð\ð \à"Ô.ð\ð Ô(¨4Ñ/ð\ð Ð+Ô,ð	\ð
 
Ð+Ñ	+ð\ð \ð \ñ „^ð\ð ð 37ðUð UàÔ'ðUð Ô(¨4Ñ/ðUð Ð+Ô,ð	Uð
 
Ð+Ñ	+ðUð Uð Uñ „^ðUð €_�]¨GÐ4Ñ4Ô4ØØð .2Ø.2Ø04Ø(,Ø26Ø*.Ø,0Ø8<Ø26Ø26Ø48Ø-.ðY
ð Y
àÔ# dÑ*ðY
ð œ tÑ+ðY
ð Ô&¨Ñ-ð	Y
ð
  ™ðY
ð Ô(¨4Ñ/ðY
ð Ô  4Ñ'ðY
ð ”l TÑ)ðY
ð #Ô.°Ñ5ðY
ð Ô(¨4Ñ/ðY
ð Ô(¨4Ñ/ðY
ð !œ?¨TÑ1ðY
ð ˜eœlÑ*ðY
ð Ð+Ô,ðY
ð 
Ð,Ñ	,ðY
ð Y
ð Y
ñ „^ñ Ôñ 5Ô4ðY
ð| ØØØØØØ ØØØ ð$ð $ð $ð $ð $ð $ðL$ð $ð $ð $ð $ðR .2ð6*ð 6*àÔ# dÑ*ð6*ð ”| dÑ*ð6*ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð	6*ð 6*ð 6*ð 6*ðt Ø#(Ø-1ð	V'ð V'àðV'ð !ðV'ð Ô# dÑ*ð	V'ð 
ˆuÔ  c¨3 h¤Ð/Ô	0ðV'ð V'ð V'ð V'ð V'ð V'ð V'ð V'r=   rZ  )rZ  rí  r™  rÐ  r¬  )ræ   )r&   )br  rÂ  Úcollections.abcr   Údataclassesr   Útypingr   r   r5   Útorch.nnr3   Útorch.nn.functionalrõ   r³   r   Ú r	   r   Úactivationsr
   Úcache_utilsr   r   Ú
generationr   Úintegrationsr   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.deprecationr   Úutils.genericr   r    r!   r"   Úutils.output_capturingr#   Úvision_utilsr$   r%   Úconfiguration_glm4vr'   r(   r)   ÚModuler,   rX   rm   r}   r�   r˜   rÑ   rT   rM   rÜ   r�   rå   rS   rü   rþ   r%  r1  rc  rl  rn  r~  r‡  r“  r™  r¬  rÐ  rí  rX  rZ  Ú__all__rX  r=   r<   ú<module>rº     s©  ðð( Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aØ 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ Pð Ð˜YÑ'Ô'ðJð Jð Jð Jð J�2”9ñ Jô Jñ (Ô'ðJð(fð fð fð fð f�B”Iñ fô fð fðð ð ð ð ˜BœIñ ô ð ð(Gð Gð Gð Gð G ¤ñ Gô Gð Gðfð fð fð fð f˜RœYñ fô fð fð"Gð Gð Gð Gð G˜BœIñ Gô Gð GðT(ð (ð (ðØ„|ðØœðØ+0¬<ðØ>C¼lðà
ˆ5Œ<˜œÐ%Ô&ðð ð ð ð	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð& ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð2Pð Pð Pð Pð P˜2œ9ñ Pô Pð Pðfð ð ð ð Ð1ñ ô ð ð>Jð Jð Jð Jð J˜rœyñ Jô Jð JðZ6ð 6ð 6ð%ð %ð %ð %ðPC)ð C)ð C)ð C)ð C)˜œñ C)ô C)ð C)ðL)ð )ð )ð )ð )�2”9ñ )ô )ð )ð$/ð /ð /ð /ð /Ð6ñ /ô /ð /ðd Ø
ð0ð 0ð 0ð 0ð 0Ð6ñ 0ô 0ñ „ñ „ð0ð ð2ð 2ð 2ð 2ð 2˜?ñ 2ô 2ñ „ð2ð(e
ð e
ð e
ð e
ð e
Ð+ñ e
ô e
ð e
ðP ðe
ð e
ð e
ð e
ð e
Ð)ñ e
ô e
ñ „ðe
ðP ðv
ð v
ð v
ð v
ð v
Ð%ñ v
ô v
ñ „ðv
ðr Ø
ð0ð 0ð 0ð 0ð 0Ð"8ñ 0ô 0ñ „ñ „ð0ðb'ð b'ð b'ð b'ð b'Ð$8¸/ñ b'ô b'ð b'ðJ xÐ
wÐ
w€€€r=   