Ë
    ÛÓ^jâ" ã                   óØ  — 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j†                  «      «       ZD G d„ dej†                  «      ZE G d„ d ej†                  «      ZF G d!„ d"ej†                  «      ZG G d#„ d$ej†                  «      ZH G d%„ d&ej†                  «      ZId'„ ZJd(e	j–                  d)e	j–                  d*e	j–                  d+e	j–                  d,eLe	j–                  e	j–                  f   f
d-„ZMd.e	j–                  d/eNd,e	j–                  fd0„ZO	 dWd1ej†                  d2e	j–                  d3e	j–                  d4e	j–                  d5e	j–                  dz  d6ePd7ePd8e-e/   fd9„ZQ G d:„ d;ej†                  «      ZR G d<„ d=e!«      ZS G d>„ d?ej†                  «      ZTd@„ ZUdXdA„ZV G dB„ dCej†                  «      ZW G dD„ dEej†                  «      ZX G dF„ dGe!«      ZYe0e G dH„ dIe#«      «       «       ZZe0 G dJ„ dKe+«      «       Z[ G dL„ dMe[«      Z\e0 G dN„ dOe[«      «       Z]e0 G dP„ dQe[«      «       Z^e0e G dR„ dSe%«      «       «       Z_ G dT„ dUe[e«      Z`g dV¢Zay)Yé    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                   óh   ‡ — 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
                  |«      «      | _        || _        y)z;
        Glm4vRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__ÚnnÚ	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer-   Ú	__class__s      €ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glm4v/modeling_glm4v.pyr1   zGlm4vRMSNorm.__init__:   s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕó    Úhidden_statesc                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor4   Úfloat32ÚpowÚmeanÚrsqrtr7   r6   )r8   r=   Úinput_dtypeÚvariances       r;   ÚforwardzGlm4vRMSNorm.forwardB   sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r<   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)Útupler6   Úshaper7   )r8   s    r;   Ú
extra_reprzGlm4vRMSNorm.extra_reprI   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr<   )g�íµ ÷Æ°>)
Ú__name__Ú
__module__Ú__qualname__Úfloatr1   r4   ÚTensorrJ   rN   Ú__classcell__©r:   s   @r;   r,   r,   8   s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr<   r,   c                   ó,   ‡ — e Zd Zddefˆ fd„Zd„ Zˆ xZS )ÚGlm4VisionMlpÚbiasc                 ó¼  •— t         ‰| �  «        |j                  | _        |j                  | _        t        j                  | j                  | j                  |¬«      | _        t        j                  | j                  | j                  |¬«      | _        t        j                  | j                  | j                  |¬«      | _	        t        |j                     | _        y ©N©rX   )r0   r1   r9   Úout_hidden_sizeÚintermediate_sizer2   ÚLinearÚ	gate_projÚup_projÚ	down_projr
   Ú
hidden_actÚact_fn)r8   ÚconfigrX   r:   s      €r;   r1   zGlm4VisionMlp.__init__N   sŸ   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔØ!'×!7Ñ!7ˆÔÜŸ™ 4×#3Ñ#3°T×5KÑ5KÐRVÔWˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPTÔUˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRVÔWˆŒÜ˜V×.Ñ.Ñ/ˆ�r<   c                 ó„   — | j                  | j                  | j                  |«      «      | j                  |«      z  «      S ©N)ra   rc   r_   r`   ©r8   Úhidden_states     r;   rJ   zGlm4VisionMlp.forwardW   s2   € Ø�~‰~˜dŸk™k¨$¯.©.¸Ó*FÓGÈ$Ï,É,ÐWcÓJdÑdÓeÐer<   ©F)rO   rP   rQ   Úboolr1   rJ   rT   rU   s   @r;   rW   rW   M   s   ø„ ñ0 Tõ 0öfr<   rW   c                   ó`   ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚGlm4vVisionPatchEmbedrd   r.   Nc                 óT  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        | j                  | j                  | j                  g}t        j                  | j                  | j                  ||¬«      | _	        y )N)Úkernel_sizeÚstride)
r0   r1   Ú
patch_sizeÚtemporal_patch_sizeÚin_channelsr9   Ú	embed_dimr2   ÚConv3dÚproj)r8   rd   rn   r:   s      €r;   r1   zGlm4vVisionPatchEmbed.__init__\   s   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Ø!×-Ñ-ˆÔØ×+Ñ+ˆŒà×/Ñ/°·±À$Ç/Á/ÐRˆÜ—I‘I˜d×.Ñ.°·±ÈKÐ`kÔlˆ�	r<   r=   c                 ó6  — | j                   j                  j                  }|j                  d| j                  | j
                  | j                  | j                  «      }| j                  |j                  |¬«      «      j                  d| j                  «      }|S )Nr@   ©rB   )	ru   r6   rB   Úviewrr   rq   rp   rC   rs   )r8   r=   Útarget_dtypes      r;   rJ   zGlm4vVisionPatchEmbed.forwardf   s~   € Ø—y‘y×'Ñ'×-Ñ-ˆØ%×*Ñ*Ø�× Ñ  $×":Ñ":¸D¿O¹OÈTÏ_É_ó
ˆð Ÿ	™	 -×"2Ñ"2¸Ð"2Ó"FÓG×LÑLÈRÐQU×Q_ÑQ_Ó`ˆØÐr<   ©	rO   rP   rQ   r)   r1   r4   rS   rJ   rT   rU   s   @r;   rl   rl   [   s5   ø„ ðmÐ0ð m°Tõ mð U§\¡\ð °e·l±l÷ r<   rl   c                   ó†   ‡ — 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  }| j                  d|d¬«       y )Nç      ð?r   r?   rw   r}   F©Ú
persistent)r0   r1   r~   r   r4   ÚarangerR   Úregister_buffer)r8   r~   r   r}   r:   s       €r;   r1   z#Glm4vVisionRotaryEmbedding.__init__r   sY   ø€ Ü‰ÑÔØˆŒØˆŒ
Ø˜%¤E§L¡L°°C¸Ä%Ç+Á+Ô$NÐQTÑ$TÑUÑVˆØ×Ñ˜Z¨¸eÐÕDr<   Úposition_idsc                 ó\   — |j                  d«      | j                  z  j                  d«      S )Nr@   r&   )Ú	unsqueezer}   Úflatten)r8   r†   s     r;   rJ   z"Glm4vVisionRotaryEmbedding.forwardy   s'   € Ø×&Ñ& rÓ*¨T¯]©]Ñ:×CÑCÀAÓFÐFr<   )g     ˆÃ@)rO   rP   rQ   r4   rS   Ú__annotations__ÚintrR   r1   rJ   rT   rU   s   @r;   r|   r|   o   sI   ø… Ø�l‰lÓñE˜Cð E¨ð E¸Dõ EðG E§L¡Lð G°U·\±\÷ Gr<   r|   c                   ón   ‡ — 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 )ÚGlm4vVisionPatchMergerr~   Úcontext_dimrb   rX   r.   Nc                 óx  •— t         ‰| �  «        t        j                  |||¬«      | _        t        |«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _	        t        j                  «       | _        t        |   | _        y rZ   )r0   r1   r2   r^   ru   r   Úpost_projection_normr_   r`   ra   ÚGELUÚact1r
   rc   )r8   r~   rŽ   rb   rX   r:   s        €r;   r1   zGlm4vVisionPatchMerger.__init__~   sƒ   ø€ Ü‰ÑÔÜ—I‘I˜c 3¨TÔ2ˆŒ	Ü$-¨c£NˆÔ!ÜŸ™ 3¨¸$Ô?ˆŒÜ—y‘y  k¸Ô=ˆŒÜŸ™ ;°¸$Ô?ˆŒÜ—G‘G“IˆŒ	Ü˜ZÑ(ˆ�r<   rh   c                 óæ   — | j                  |«      }| j                  | j                  |«      «      }| j                  | j	                  | j                  |«      «      | j                  |«      z  «      S rf   )ru   r’   r�   ra   rc   r_   r`   rg   s     r;   rJ   zGlm4vVisionPatchMerger.forwardˆ   sY   € Ø—y‘y Ó.ˆØ—y‘y ×!:Ñ!:¸<Ó!HÓIˆØ�~‰~˜dŸk™k¨$¯.©.¸Ó*FÓGÈ$Ï,É,ÐWcÓJdÑdÓeÐer<   ri   )rO   rP   rQ   r‹   Ústrrj   r1   r4   rS   rJ   rT   rU   s   @r;   r�   r�   }   sJ   ø„ ñ)˜Cð )¨cð )¸sð )È$ð )Ð[_õ )ðf E§L¡Lð f°U·\±\÷ fr<   r�   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚGlm4vVisionEmbeddingsrd   c                 óf  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  | _        | j
                  | j                  z  dz  | _        | j                  | _        t        j                  | j                  | j                  «      | _        d| _        y )Nr?   Úbicubic)r0   r1   rd   r9   rs   Ú
image_sizerp   Únum_patchesÚnum_positionsr2   Ú	EmbeddingÚposition_embeddingÚinterpolated_method©r8   rd   r:   s     €r;   r1   zGlm4vVisionEmbeddings.__init__�   s‰   ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒà ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-ˆÔÜ"$§,¡,¨t×/AÑ/AÀ4Ç>Á>Ó"RˆÔØ#,ˆÕ r<   r.   c                 óè  — | j                   j                  }|j                  d   }|j                  }t	        |t
        «      r&t        j                  ||t        j                  ¬«      }|j                  d   }	t        |	dz  «      }
|j                  |
|
|«      j                  ddd«      j                  d«      j                  |t        j                  ¬«      }|j                  d   }t        j                  ||j                  ¬«      }|j                  d«      |j!                  d«      j                  d«      k\  j#                  d«      }||df   j                  t        j                  ¬«      }||df   j                  t        j                  ¬«      }|dz   |z  dz  dz
  }|dz   |z  dz  dz
  }t        j$                  ||fd¬	«      j                  d«      j                  d«      }t'        j(                  ||| j*                  d
d¬«      }|j-                  d«      j-                  d«      j                  dd«      }|j                  |j.                  «      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&   ©ÚdevicerB   r   g      à?r?   ©r¢   rw   r@   ©r~   FÚborder)ÚmodeÚalign_cornersÚpadding_mode)r�   r6   rM   r¢   Ú
isinstanceÚlistr4   ÚtensorÚlongr‹   rx   Úpermuterˆ   rC   rD   r„   ÚcumsumÚsumÚstackÚFÚgrid_samplerž   ÚsqueezerB   )r8   Ú
embeddingsÚlengthsÚimage_shapesÚh_coordsÚw_coordsÚpos_embed_weightr9   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;   rJ   zGlm4vVisionEmbeddings.forward›   s=  € ð  ×2Ñ2×9Ñ9ÐØ&×,Ñ,¨QÑ/ˆØ!×(Ñ(ˆô �gœtÔ$Ü—l‘l 7°6ÄÇÁÔLˆGð (×-Ñ-¨aÑ0ˆÜ˜ cÑ)Ó*ˆ	à×!Ñ! )¨Y¸ÓDß‰W�Q˜˜1Óß‰Y�q‹\ß‰R�v¤U§]¡]ˆRÓ3ð	 	ð  ×%Ñ% aÑ(ˆ
ÜŸ,™, z¸*×:KÑ:KÔLˆØ"×,Ñ,¨QÓ/°7·>±>À!Ó3D×3NÑ3NÈqÓ3QÑQ×VÑVÐWXÓYˆØ ¨ 
Ñ+×.Ñ.´U·]±]Ð.ÓCˆØ ¨ 
Ñ+×.Ñ.´U·]±]Ð.ÓCˆð ˜c‘> XÑ-°Ñ2°QÑ6ˆØ˜c‘> XÑ-°Ñ2°QÑ6ˆô �{‰{˜F FÐ+°Ô4×>Ñ>¸qÓA×KÑKÈAÓNˆô #$§-¡-Ø˜$ T×%=Ñ%=ÈUÐaiô#
Ðð
 "9×!@Ñ!@ÀÓ!C×!KÑ!KÈBÓ!O×!WÑ!WÐXYÐ[\Ó!]ÐØ2×5Ñ5Ð6F×6LÑ6LÓM×PÑPÐQ[×QbÑQbÓcÐð  Ð"3Ñ3ˆ
ØÐr<   rz   rU   s   @r;   r–   r–   Ž   s#   ø„ ð
-Ð0õ 
-ð:ÐPU×P\Ñ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..Nr@   r?   r¤   )rM   r4   Úcat©ÚxÚx1Úx2s      r;   Úrotate_halfrÏ   Ø   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r<   ÚqÚkÚcosÚsinr.   c                 óŠ  — | j                   }|j                   }| j                  «       |j                  «       }} |j                  d«      j                  «       |j                  d«      j                  «       }}| |z  t        | «      |z  z   }||z  t        |«      |z  z   }|j	                  |«      }|j	                  |«      }||fS )Néþÿÿÿ)rB   rR   rˆ   rÏ   rC   )rÐ   rÑ   rÒ   rÓ   Úorig_q_dtypeÚorig_k_dtypeÚq_embedÚk_embeds           r;   Úapply_rotary_pos_emb_visionrÚ   ß   s­   € ð —7‘7€LØ—7‘7€LØ�7‰7‹9�a—g‘g“i€q€AØ�}‰}˜RÓ ×&Ñ&Ó(¨#¯-©-¸Ó*;×*AÑ*AÓ*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   j                  |||||«      } | j                  |||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)rM   ÚexpandÚreshape)r=   rÛ   ÚbatchÚnum_key_value_headsÚslenÚhead_dims         r;   Ú	repeat_kvrã   í   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr<   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	t        j                  ||j	                  dd«      «      |z  }
|�|
|z   }
t
        j                  j                  |
dt        j                  ¬«      j                  |j                  «      }
t
        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j	                  dd«      j                  «       }||
fS )Nr?   r   r@   )r~   rB   )ÚpÚtrainingr&   )rã   Únum_key_value_groupsr4   ÚmatmulÚ	transposer2   Ú
functionalÚsoftmaxrD   rC   rB   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ÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓ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 )ÚGlm4vVisionAttentionrd   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| _        y )Nr&   r   r[   Fç      à¿)r0   r1   r9   r~   Ú	num_headsrâ   rï   r2   r^   Úattention_biasÚqkvru   ré   rd   Úattention_dropoutÚ	is_causalrŸ   s     €r;   r1   zGlm4vVisionAttention.__init__  s»   ø€ Ü‰ÑÔØ×%Ñ%ˆŒØ×)Ñ)ˆŒØŸ™ D§N¡NÑ2ˆŒØ$%ˆÔ!Ü—9‘9˜V×/Ñ/°×1CÑ1CÀaÑ1GÈf×NcÑNcÔdˆŒÜ—I‘I˜f×0Ñ0°&×2DÑ2DÈ5ÔQˆŒ	Ø—}‘} dÑ*ˆŒØˆŒØ!'×!9Ñ!9ˆÔØˆ�r<   Úrotary_pos_embúv5.10©Úversionr=   Ú
cu_seqlensÚposition_embeddingsc                 ó´  — |j                   d   }| j                  |«      j                  |d| j                  d«      j	                  dddd«      j                  d«      \  }}}|\  }	}
t        |||	|
«      \  }}|j                  dd«      j                  d«      }|j                  dd«      j                  d«      }|j                  dd«      j                  d«      }t        j                  | j                  j                  t        «      }t        | j                  «      rT|dd  |d d z
  j                  «       } || |||fd | j                   | j"                  sdn| j$                  ||||ddœ|¤Ž\  }}n©|dd  |d d z
  }|||fD �cg c](  }t'        j(                  ||j+                  «       d¬	«      ‘Œ* }}t-        |Ž D ���cg c]<  \  }}} || |||fd | j                   | j"                  sdn| j$                  dd
œ|¤Žd   ‘Œ> }}}}t'        j.                  |d¬	«      }|j                  |d«      j1                  «       }| j3                  |«      }|S c c}w c c}}}w )Nr   r   r@   r&   r?   ç        F)rè   ré   rê   Úcu_seq_lens_qÚcu_seq_lens_kÚmax_length_qÚmax_length_kr  r¤   )rè   ré   rê   r  )rM   r   rÞ   rþ   r­   ÚunbindrÚ   rñ   rˆ   r   Úget_interfacerd   Ú_attn_implementationrù   r    Úmaxré   rî   r  r4   ÚsplitÚtolistÚziprÊ   rô   ru   )r8   r=   r  r  rë   Ú
seq_lengthÚquery_statesrõ   rö   rÒ   rÓ   Úattention_interfaceÚ
max_seqlenrø   Ú_rµ   r«   ÚsplitsrÐ   rÑ   ÚvÚattn_outputss                         r;   rJ   zGlm4vVisionAttention.forward   s‘  € ð #×(Ñ(¨Ñ+ˆ
à�H‰H�]Ó#×+Ñ+¨J¸¸4¿>¹>È2ÓN×VÑVÐWXÐZ[Ð]^Ð`aÓb×iÑiÐjkÓlñ 	/ˆ�j ,ð '‰ˆˆSÜ#>¸|ÈZÐY\Ð^aÓ#bÑ ˆ�jà#×-Ñ-¨a°Ó3×=Ñ=¸aÓ@ˆØ×)Ñ)¨!¨QÓ/×9Ñ9¸!Ó<ˆ
Ø#×-Ñ-¨a°Ó3×=Ñ=¸aÓ@ˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðô (¨¯©Ô4à$ Q R˜.¨:°c°r¨?Ñ:×?Ñ?ÓAˆJÙ0ØØØØð	ð
  $ØŸ™Ø#'§=¢=™°d×6LÑ6LØ(Ø(Ø'Ø'Øñð ñ‰NˆK™ð" !  �n z°#°2 Ñ6ˆGàLXÐZdÐfrÐKsöØAG”—‘˜F G§N¡NÓ$4¸!Ö<ðˆFð ô   # F˜|÷ð ñ �A�q˜!ñ $ØØØØð	
ð
 $(Ø ŸL™LØ'+§}¢}™C¸$×:PÑ:PØ#ñ
ð ñ
ð ó
ðˆLò ô  Ÿ)™) L°aÔ8ˆKà!×)Ñ)¨*°bÓ9×DÑDÓFˆØ—i‘i Ó,ˆØÐùò-ùôs   Æ-IÆ?AIrf   )rO   rP   rQ   r)   r1   r   r4   rS   rL   rJ   rT   rU   s   @r;   rû   rû     s‰   ø„ ðÐ0ð °Tõ ñ Ð%¨wÔ7ð
 IMñ	Aà—|‘|ðAð —L‘LðAð # 5§<¡<°·±Ð#=Ñ>ÀÑEð	Að 
�‰òAó 8ô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¬«      | _
        y )N©r-   Fr[   )r0   r1   r,   r9   Úrms_norm_epsÚnorm1Únorm2rû   ÚattnrW   ÚmlprŸ   s     €r;   r1   zGlm4vVisionBlock.__init__f  s\   ø€ Ü‰ÑÔÜ! &×"4Ñ"4¸&×:MÑ:MÔNˆŒ
Ü! &×"4Ñ"4¸&×:MÑ:MÔNˆŒ
Ü(¨Ó0ˆŒ	Ü  ¨eÔ4ˆ�r<   r  r  r  r=   r  r  c                 óœ   — | | j                   | j                  |«      f||dœ|¤Žz   }|| j                  | j                  |«      «      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$  )r8   r=   r  r  rë   s        r;   rJ   zGlm4vVisionBlock.forwardm  s`   € ð &¨	¨¯	©	Ø�J‰J�}Ó%ð)
à!Ø 3ñ)
ð ñ	)
ñ 
ˆð &¨¯©°·±¸MÓ1JÓ(KÑKˆØÐr<   ©r.   Nrf   )rO   rP   rQ   r1   r   r   r4   rS   rL   rJ   rT   rU   s   @r;   r  r  e  s|   ø„ õ5ñ Ð%¨wÔ7Øð
 IMñ	à—|‘|ðð —L‘Lðð # 5§<¡<°·±Ð#=Ñ>ÀÑEð	ð 
�‰òó ó 8ô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}   Nrd   c                 óô  •— t         ‰| �  «        |j                  | _        |j                  | _        || _        | j
                  j                  d   | _        | j                  }| j                  dk7  rt        | j                     } || j
                  |«      \  }| _
        | j                  d|d¬«       | j                  d|j                  «       d¬«       |j                  j                  dg d¢«      | _        y )	NÚ	rope_typeÚdefaultr}   Fr‚   Úoriginal_inv_freqÚmrope_section)é   é   r2  )r0   r1   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenrd   Úrope_parametersr-  Úcompute_default_rope_parametersr   Úattention_scalingr…   ÚcloneÚgetr0  )r8   rd   r¢   Úrope_init_fnr}   r:   s        €r;   r1   z!Glm4vTextRotaryEmbedding.__init__‡  sÑ   ø€ Ü‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆ�$Ô(à×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÔUØ#×3Ñ3×7Ñ7¸ÊÓUˆÕr<   r¢   ztorch.deviceÚseq_lenr.   ztorch.Tensorc                 ón  — | j                   d   }| j                   j                  dd«      }t        | dd«      xs | j                  | j                  z  }t        ||z  «      }d}d|t        j                  d|dt        j                  ¬«      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?   rw   r¡   )r6  r:  Úgetattrr9   Únum_attention_headsr‹   r4   r„   Úint64rC   rR   )	rd   r¢   r<  Úbaser?  râ   r~   Úattention_factorr}   s	            r;   r7  z8Glm4vTextRotaryEmbedding.compute_default_rope_parameters˜  s»   € ð& ×%Ñ% lÑ3ˆØ &× 6Ñ 6× :Ñ :Ð;RÐTWÓ XÐÜ˜6 :¨tÓ4Òh¸×8JÑ8JÈf×NhÑNhÑ8hˆÜ�(Ð2Ñ2Ó3ˆàÐð Ø”U—\‘\ ! S¨!´5·;±;Ô?×BÑBÈ&ÔX]×XcÑXcÐBÓdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r<   c                 ó^  — | j                   d d d d …d f   j                  «       j                  d|j                  d   dd«      }|d d …d d …d d d …f   j                  «       }t	        |j
                  j                  t        «      r/|j
                  j                  dk7  r|j
                  j                  nd}t        |d¬«      5  |j                  «       |j                  «       z  j                  dd«      }| j                  || j                  «      }t        j                  ||fd¬	«      }|j                  «       | j                  z  }|j!                  «       | j                  z  }	d d d «       j#                  |j$                  ¬
«      	j#                  |j$                  ¬
«      fS # 1 sw Y   ŒAxY w)Nr   r&   r@   ÚmpsÚcpuF)Údevice_typeÚenabledr?   r¤   rw   )r}   rR   rÝ   rM   r©   r¢   Útyper”   r!   rñ   Úapply_mroper0  r4   rÊ   rÒ   r8  rÓ   rC   rB   )
r8   rÌ   r†   Úinv_freq_expandedÚposition_ids_expandedrH  ÚfreqsÚembrÒ   rÓ   s
             r;   rJ   z Glm4vTextRotaryEmbedding.forward¸  s`  € ð
 !ŸM™M¨$°²a¸Ð*=Ñ>×DÑDÓF×MÑMÈaÐQ]×QcÑQcÐdeÑQfÐhjÐlmÓnÐØ ,ªQ²°4º¨]Ñ ;× AÑ AÓ CÐä'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ¨¸UÔCñ 	5Ø&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÑN×YÑYÐZ[Ð]^Ó_ˆEØ×$Ñ$ U¨D×,>Ñ,>Ó?ˆEÜ—)‘)˜U E˜N°Ô3ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆC÷	5ð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷	5ð 	5ús   ÃB!F#Æ#F,c           	      ó®   — |}|j                  |d¬«      }t        j                  t        |«      D ��cg c]  \  }}||dz     ‘Œ c}}d¬«      }|S c c}}w )Nr@   r¤   r   )r  r4   rÊ   Ú	enumerate)r8   rN  r0  ÚsectionÚchunksÚiÚchunkÚresults           r;   rK  z$Glm4vTextRotaryEmbedding.apply_mropeÊ  sQ   € ØˆØ—‘˜W¨"�Ó-ˆÜ—‘¼À6Ó9J×K©X¨Q°˜E ! a¡%›LÓKÐQSÔTˆØˆùó Ls   ³A
rf   ©NNN)rO   rP   rQ   r4   rS   rŠ   r(   r1   Ústaticmethodr   r‹   rL   rR   r7  Úno_gradr   rJ   rK  rT   rU   s   @r;   r+  r+  „  s�   ø… Ø�l‰lÓñV˜õ Vð" à)-Ø+/Ø"ñ*Ø $Ñ&ð*à˜Ñ(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ñ	%ò	*ó ð*ð> €U‡]�]ƒ_Øñ<ó ó ð<ö r<   r+  c                 ó|   — | dddd…f   }| dddd…f   }t        j                  | |fd¬«      j                  d«      S )	rÉ   .r   Nr?   r&   r@   r¤   rÕ   )r4   r°   r‰   rË   s      r;   Úrotate_half_llmr[  Ñ  sJ   € à	
ˆ3���1�ˆ9‰€BØ	
ˆ3���1�ˆ9‰€BÜ�;‰;˜˜˜R�y bÔ)×1Ñ1°"Ó5Ð5r<   c                 ó  — |j                  |«      }|j                  |«      }|dd|j                  d   dz  …f   j                  dd¬«      }|dd|j                  d   dz  …f   j                  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.
    .Nr@   r?   r¤   )rˆ   rM   Úrepeat_interleaver[  r4   rÊ   )rÐ   rÑ   rÒ   rÓ   Úunsqueeze_dimÚ
rotary_dimÚq_rotÚq_passÚk_rotÚk_passrØ   rÙ   s               r;   Úapply_rotary_pos_embrd  Ø  sD  € ð$ �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€Cð ˆcÐ'�S—Y‘Y˜r‘] aÑ'Ð'Ð'Ñ
(×
:Ñ
:¸1À"Ð
:Ó
E€CØ
ˆcÐ'�S—Y‘Y˜r‘] aÑ'Ð'Ð'Ñ
(×
:Ñ
:¸1À"Ð
:Ó
E€Cð —‘˜2‘€JØ�c˜;˜J˜;Ð&Ñ'¨¨3°
±Ð+;Ñ)<ˆ6€EØ�c˜;˜J˜;Ð&Ñ'¨¨3°
±Ð+;Ñ)<ˆ6€Eð �s‰{œ¨uÓ5¸Ñ;Ñ<€GØ�s‰{œ¨uÓ5¸Ñ;Ñ<€Gô �i‰i˜ &Ð)¨rÔ2€GÜ�i‰i˜ &Ð)¨rÔ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".
    Nrd   Ú	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¬«      | _        y )NTrý   r[   F)r0   r1   rd   rg  r9   rA  rþ   râ   rà   rï   r  r  r6  ré   r2   r^   Úq_projÚk_projÚv_projÚo_proj©r8   rd   rg  r:   s      €r;   r1   zGlm4vTextAttention.__init__  sI  ø€ Ü‰ÑÔØˆŒØ"ˆŒà!×-Ñ-ˆÔØ×3Ñ3ˆŒØ×(Ñ(¨D¯N©NÑ:ˆŒØ#)×#=Ñ#=ˆÔ Ø$(§N¡N°d×6NÑ6NÑ$NˆÔ!ØˆŒØ!'×!9Ñ!9ˆÔØ%×5Ñ5ˆÔØ—}‘} dÑ*ˆŒä—i‘i × 0Ñ 0°$·.±.À4Ç=Á=Ñ2PÐW[Ô\ˆŒÜ—i‘i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Ñ2ZÐaeÔfˆŒÜ—i‘i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Ñ2ZÐaeÔfˆŒÜ—i‘i §¡°·±Ñ >À×@PÑ@PÐW\Ô]ˆ�r<   r=   r  rè   Úpast_key_valuesrë   r.   c                 óF  — |j                  «       \  }}}| j                  |«      }	| j                  |«      }
| j                  |«      }|	j	                  ||d| j
                  «      j                  dd«      }	|
j	                  ||d| j
                  «      j                  dd«      }
|j	                  ||d| j
                  «      j                  dd«      }|\  }}t        |	|
||«      \  }	}
|� |j                  |
|| j                  «      \  }
}t        j                  | j                  j                  t        «      } || |	|
||f| j                  sdn| j                   | j"                  dœ|¤Ž\  }}|j%                  ||d«      j'                  «       }| j)                  |«      }||fS )Nr@   r&   r?   r
  )rê   ré   )Úsizeri  rj  rk  rx   râ   rñ   rd  Úupdaterg  r   r  rd   r  rù   rî   r  ré   rÞ   rô   rl  )r8   r=   r  rè   rn  rë   ÚbszÚq_lenr  r  rõ   rö   rÒ   rÓ   r  rø   r÷   s                    r;   rJ   zGlm4vTextAttention.forward  s¢  € ð &×*Ñ*Ó,‰ˆˆU�Aà—{‘{ =Ó1ˆØ—[‘[ Ó/ˆ
Ø—{‘{ =Ó1ˆà#×(Ñ(¨¨e°R¸¿¹ÓG×QÑQÐRSÐUVÓWˆØ—_‘_ S¨%°°T·]±]ÓC×MÑMÈaÐQRÓSˆ
Ø#×(Ñ(¨¨e°R¸¿¹ÓG×QÑQÐRSÐUVÓWˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jàÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð "×)Ñ)¨#¨u°bÓ9×DÑDÓFˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r<   rf   rW  )rO   rP   rQ   Ú__doc__r(   r‹   r1   r4   rS   rL   r   r   r   rJ   rT   rU   s   @r;   rf  rf     sÃ   ø„ ññ
^˜ð ^¸3À¹:õ ^ð. IMØ.2Ø(,ñ))à—|‘|ð))ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð))ð Ÿ™ tÑ+ð	))ð
  ™ð))ð Ð-Ñ.ð))ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷))r<   rf  c                   óV   ‡ — 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                     | _        y )Nr?   Fr[   )r0   r1   rd   r2   r^   r9   r]   Úgate_up_projra   r
   rb   Úactivation_fnrŸ   s     €r;   r1   zGlm4vTextMLP.__init__G  sp   ø€ Ü‰ÑÔàˆŒÜŸI™I f×&8Ñ&8¸!¸f×>VÑ>VÑ:VÐ]bÔcˆÔÜŸ™ 6×#;Ñ#;¸V×=OÑ=OÐV[Ô\ˆŒÜ# F×$5Ñ$5Ñ6ˆÕr<   r=   r.   c                 óš   — | j                  |«      }|j                  dd¬«      \  }}|| j                  |«      z  }| j                  |«      S )Nr?   r@   r¤   )rx  rU  ry  ra   )r8   r=   Ú	up_statesÚgates       r;   rJ   zGlm4vTextMLP.forwardO  sL   € Ø×%Ñ% mÓ4ˆ	à#Ÿ/™/¨!°˜/Ó4‰ˆˆiØ × 2Ñ 2°4Ó 8Ñ8ˆ	à�~‰~˜iÓ(Ð(r<   )rO   rP   rQ   r1   r4   ÚFloatTensorrJ   rT   rU   s   @r;   rv  rv  F  s'   ø„ ô7ð) U×%6Ñ%6ð )¸5×;LÑ;L÷ )r<   rv  c                   óD  ‡ — 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 )ÚGlm4vTextDecoderLayerrd   rg  c                 ó¶  •— t         ‰| �  «        |j                  | _        t        ||«      | _        t        |«      | _        t        |j                  |j                  ¬«      | _	        t        |j                  |j                  ¬«      | _
        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        y )Nr!  )r0   r1   r9   rf  Ú	self_attnrv  r&  r,   r"  Úinput_layernormÚpost_attention_layernormÚpost_self_attn_layernormÚpost_mlp_layernormrm  s      €r;   r1   zGlm4vTextDecoderLayer.__init__Y  s¢   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔÜ+¨F°IÓ>ˆŒÜ Ó'ˆŒÜ+¨F×,>Ñ,>ÀF×DWÑDWÔXˆÔÜ(4°V×5GÑ5GÈV×M`ÑM`Ô(aˆÔ%Ü(4°V×5GÑ5GÈV×M`ÑM`Ô(aˆÔ%Ü".¨v×/AÑ/AÀv×GZÑGZÔ"[ˆÕr<   Nr=   r  rè   r†   rn  Ú	use_cacher.   c           
      ó  — |}| j                  |«      } | j                  d||||||dœ|¤Ž\  }}	| j                  |«      }||z   }|}| j                  |«      }| j	                  |«      }| j                  |«      }||z   }|S )N)r=   r  rè   r†   rn  r†  © )r‚  r�  r„  rƒ  r&  r…  )
r8   r=   r  rè   r†   rn  r†  rë   Úresidualr  s
             r;   rJ   zGlm4vTextDecoderLayer.forwardc  s²   € ð !ˆà×,Ñ,¨]Ó;ˆð *˜4Ÿ>™>ð 
Ø'Ø 3Ø)Ø%Ø+Øñ
ð ñ
Ñˆ�qð ×5Ñ5°mÓDˆØ  =Ñ0ˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ×/Ñ/°Ó>ˆØ  =Ñ0ˆàÐr<   )NNNNF)rO   rP   rQ   r(   r‹   r1   r   r4   rS   rL   Ú
LongTensorr   rj   r}  rJ   rT   rU   s   @r;   r  r  X  sç   ø„ ð\˜ð \¸3õ \ð ð IMØ.2Ø04Ø(,Ø!&ñ#à—|‘|ð#ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð#ð Ÿ™ tÑ+ð	#ð
 ×&Ñ&¨Ñ-ð#ð  ™ð#ð ˜$‘;ð#ð 
ˆu× Ñ  %¨×(9Ñ(9¸5×;LÑ;LÐ(LÑ"MÐPTÑ"TÐTÑ	Uò#ó ô#r<   r  c                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)Ú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©rO   rP   rQ   rt  rŽ  r4   rŠ  rŠ   rˆ  r<   r;   rŒ  rŒ  Š  ó   … ñð ,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 )	ÚGlm4vPreTrainedModelrd   Úmodel)ÚimageÚvideoÚtextTr  r  rn  c                 ó"  •— t         ‰| �  |«       t        |t        «      rod|j                  t        j                  d|j                  dt
        j                  ¬«      |j                  z  z  z  }t        j                  |j                  |«       y y )Nr�   r   r?   rw   )r0   Ú_init_weightsr©   r|   r   r4   r„   r~   rR   ÚinitÚcopy_r}   )r8   rä   r}   r:   s      €r;   r˜  z"Glm4vPreTrainedModel._init_weights¤  sk   ø€ Ü‰Ñ˜fÔ%Ü�fÔ8Ô9Ø˜fŸl™l¬u¯|©|¸A¸v¿z¹zÈ1ÔTY×T_ÑT_Ô/`Ðci×cmÑcmÑ/mÑnÑoˆHÜ�J‰J�v—‘¨Õ1ð :r<   )rO   rP   rQ   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˜  rT   rU   s   @r;   r’  r’  –  sQ   ø… àÓØÐØ1ÐØ&*Ð#Ø0Ð2DÐEÐØ#4Ð"5ÐØÐØ€Nà!ÐØ"&Ð÷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 )ÚGlm4vVisionModelrd   )r”  r•  r  ©r=   Ú
attentionsr.   c                 óF  •— t         ‰| �  |«       |j                  | _        |j                  | _        t	        |«      | _        t        |«      | _        |j                  |j                  z  }t        |dz  «      | _        t        j                  t        |j                  «      D �cg c]  }t!        |«      ‘Œ c}«      | _        t%        |j&                  |j(                  |j*                  ¬«      | _        t/        |j                  |j0                  ¬«      | _        t        j4                  |j                  |j&                  |j                  |j                  ¬«      | _        t/        |j                  |j0                  ¬«      | _        d| _        | j=                  «        y c c}w )Nr?   )r~   rŽ   rb   r!  )rr   Úout_channelsrn   ro   F)r0   r1   Úspatial_merge_sizerp   r–   r´   rl   Úpatch_embedr9   rþ   r|   r  r2   Ú
ModuleListÚrangeÚdepthr  Úblocksr�   r\   r]   rb   Úmergerr,   r"  Úpost_conv_layernormÚConv2dÚ
downsampleÚpost_layernormÚgradient_checkpointingÚ	post_init)r8   rd   râ   r  r:   s       €r;   r1   zGlm4vVisionModel.__init__´  sA  ø€ Ü‰Ñ˜Ô Ø"(×";Ñ";ˆÔØ ×+Ñ+ˆŒä/°Ó7ˆŒÜ0°Ó8ˆÔà×%Ñ%¨×)9Ñ)9Ñ9ˆÜ8¸ÀQ¹ÓGˆÔä—m‘mÄuÈVÏ\É\ÓGZÖ$[À!Ô%5°fÕ%=Ò$[Ó\ˆŒÜ,Ø×&Ñ&°F×4LÑ4LÐY_×YjÑYjô
ˆŒô $0°×0BÑ0BÈ×H[ÑH[Ô#\ˆÔ ÜŸ)™)Ø×*Ñ*Ø×/Ñ/Ø×1Ñ1Ø×,Ñ,ô	
ˆŒô +¨6×+=Ñ+=À6×CVÑCVÔWˆÔà&+ˆÔ#Ø�‰Õùò %\s   Â%Fc                 óÀ   — t        j                  d| j                  j                  › d�t        d¬«       t        || j                  «      }| 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:   rO   ÚFutureWarningr%   rª  r  )r8   Úgrid_thwr†   r  s       r;   Úrot_pos_embzGlm4vVisionModel.rot_pos_embÐ  sa   € Ü�‰Ø�—‘×'Ñ'Ð(ð  )Hð  IÜØõ	
ô
 /¨x¸×9PÑ9PÓQˆØ×,Ñ,¨\Ó:ˆØ˜|Ð+Ð+r<   r=   r½  rë   c           	      óx  — t        || j                  |¬«      }t        ||¬«      }| j                  |«      }| j	                  |«      }| j                  |«      }t        j                  ||fd¬«      }|j                  «       |j                  «       f}|dd |dd z
  }	| j                  ||	||dd…df   j                  |j                  «      |dd…df   j                  |j                  «      «      }| j                  D ]  }
 |
|f||dœ|¤Ž}Œ | j                  |«      }|j                  d| j                  | j                  |j                   d   «      }|j#                  dddd	«      }| j%                  |«      j                  d| j&                  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ë   r@   r¤   r&   Nr   r(  r   r?   )Úlast_hidden_stateÚpooler_output)r%   rª  r$   r«  r±  r  r4   rÊ   rÒ   rÓ   r´   rC   r¢   r¯  r´  rx   rM   r­   r³  rd   r\   r°  r   )r8   r=   r½  rë   r†   r  Ú
rotary_embrO  r  ÚseqlensÚblkÚmerged_hidden_statess               r;   rJ   zGlm4vVisionModel.forwardÚ  sÁ  € ô /¨x¸×9PÑ9PÐY_Ô`ˆÜ*¨8¸FÔCˆ
à×(Ñ(¨Ó7ˆØ×0Ñ0°Ó?ˆØ×(Ñ(¨Ó6ˆ
Ü�i‰i˜ ZÐ0°bÔ9ˆØ"Ÿw™w›y¨#¯'©'«)Ð4Ðà˜Q˜R�. :¨c¨r ?Ñ2ˆØŸ™ØØØØš˜A˜Ñ×!Ñ! -×"6Ñ"6Ó7Øš˜A˜Ñ×!Ñ! -×"6Ñ"6Ó7ó
ˆð —;‘;ò 	ˆCÙØðà%Ø$7ñð ñ	‰Mð	ð ×+Ñ+¨MÓ:ˆà%×*Ñ*Ø�×'Ñ'¨×)@Ñ)@À-×BUÑBUÐVXÑBYó
ˆð &×-Ñ-¨a°°A°qÓ9ˆØŸ™¨Ó6×;Ñ;¸BÀÇÁ×@[Ñ@[Ó\ˆà#Ÿ{™{¨=Ó9Ðä)Ø+Ø.ô
ð 	
r<   r)  )rO   rP   rQ   r)   rŠ   rœ  rž  r  rû   Ú_can_record_outputsr1   r¾  r"   r#   r   r4   rS   r   r   rL   r   rJ   rT   rU   s   @r;   r¥  r¥  «  sˆ   ø… ØÓØ)ÐØ+Ð,Ðà)Ø*ñÐõ
ò8,ð  ØØð3
Ø"Ÿ\™\ð3
Ø5:·\±\ð3
ØMSÐTfÑMgð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 )ÚGlm4vTextModelrd   )r–  r¦  c           	      ó  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        j                  |j                  |j                  | j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |j                  |j                  ¬«      | _        t#        |¬«      | _        d| _        | j)                  «        y c c}w )Nr!  ©rd   F)r0   r1   Úpad_token_idÚpadding_idxÚ
vocab_sizer2   rœ   r9   Úembed_tokensr¬  r­  Únum_hidden_layersr  Úlayersr,   r"  Únormr+  rÂ  rµ  r¶  rm  s      €r;   r1   zGlm4vTextModel.__init__  sÄ   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔÜ—m‘mÜGLÈV×MeÑMeÓGfÖg¸)Ô" 6¨9Õ5Ògó
ˆŒô ! ×!3Ñ!3¸×9LÑ9LÔMˆŒ	Ü2¸&ÔAˆŒà&+ˆÔ#à�‰Õùò hs   ÂDNÚ	input_idsrè   r†   rn  Úinputs_embedsr†  rë   r.   c           	      óT  — |d u |d uz  rt        d«      ‚|r6|€4t        j                  j                  «       st	        | j
                  ¬«      }|€| j                  |«      }|€w|�|j                  «       nd}t        j                  |j                  d   |j                  ¬«      |z   }|j                  ddd«      j                  d|j                  d   d«      }n2|j                  dk(  r#|d	   j                  d|j                  d   d«      }|j                  dk(  r|j                  d   d
k(  r|d   }	|dd  }nd }	| j
                  ||||	dœ}
t        di |
¤Ž}|}| j                  ||¬«      }| j                   D ]  } ||f||	||dœ|¤Ž}|}Œ | j#                  |«      }t%        ||¬«      S )Nú:You must specify exactly one of input_ids or inputs_embedsrÊ  r   r&   r£   r@   r   r?   ©N.é   )rd   rÓ  rè   rn  r†   )r†   )rè   r†   rn  r  )rÀ  rn  rˆ  )Ú
ValueErrorr4   ÚjitÚ
is_tracingr   rd   rÎ  Úget_seq_lengthr„   rM   r¢   rx   rÝ   Úndimr   rÂ  rÐ  rÑ  r   )r8   rÒ  rè   r†   rn  rÓ  r†  rë   Úpast_seen_tokensÚtext_position_idsÚmask_kwargsÚcausal_maskr=   r  Údecoder_layerÚlayer_outputss                   r;   rJ   zGlm4vTextModel.forward,  sñ  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZñ ˜Ð0¼¿¹×9MÑ9MÔ9OÜ*°$·+±+Ô>ˆOàÐ Ø ×-Ñ-¨iÓ8ˆMð ÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×,Ñ,¨Q°°2Ó6×=Ñ=¸aÀ×ATÑATÐUVÑAWÐY[Ó\‰LØ×Ñ !Ò#Ø'¨	Ñ2×9Ñ9¸!¸\×=OÑ=OÐPQÑ=RÐTVÓWˆLð ×Ñ Ò! l×&8Ñ&8¸Ñ&;¸qÒ&@Ø ,¨Q¡ÐØ'¨¨Ð+‰Lð !%Ðð —k‘kØ*Ø,Ø.Ø-ñ
ˆô )Ñ7¨;Ñ7ˆà%ˆØ"Ÿo™o¨mÈ,˜oÓWÐà!Ÿ[™[ò 		*ˆMÙ)Øðà*Ø.Ø /Ø$7ñð ñˆMð *‰Mð		*ð Ÿ	™	 -Ó0ˆä&Ø+Ø+ô
ð 	
r<   )NNNNNN)rO   rP   rQ   r(   rŠ   rœ  r  rf  rÆ  r1   r   r"   r#   r4   rŠ  rS   r   r}  rj   r   r   rL   r   rJ   rT   rU   s   @r;   rÈ  rÈ    s÷   ø… àÓØ Ðà.Ø(ñÐð
˜õ ð  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñJ
à×#Ñ# dÑ*ðJ
ð Ÿ™ tÑ+ðJ
ð ×&Ñ&¨Ñ-ð	J
ð
  ™ðJ
ð ×(Ñ(¨4Ñ/ðJ
ð ˜$‘;ðJ
ð Ð-Ñ.ðJ
ð 
Ð(Ñ	(òJ
ó ó  ó ôJ
r<   rÈ  c                   óh  ‡ — 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                  |j                  «      | _        t        j                  |j                  «      | _        d | _	        | j                  «        y rf   )r0   r1   r¥  Ú_from_configÚvision_configÚvisualrÈ  Útext_configÚlanguage_modelrŽ  r¶  rŸ   s     €r;   r1   zGlm4vModel.__init__ƒ  sU   ø€ Ü‰Ñ˜Ô Ü&×3Ñ3°F×4HÑ4HÓIˆŒÜ,×9Ñ9¸&×:LÑ:LÓMˆÔØˆÔð 	�‰Õr<   NÚstart_positionr½  Útemp_merge_sizerª  Útime_intervalr¢   c                 óÎ  — |d   j                  «       |z  |d   j                  «       |z  |d   j                  «       |z  }	}}t        j                  ||¬«      |z  }
t        j                  ||¬«      |z   }t        j                  |	|¬«      |z   }t        j                  |
||d¬«      \  }}}t        j                  |||gd¬«      j                  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   r@   )Úitemr4   r„   Úmeshgridr°   rÞ   )r8   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™L¨¸FÔCÀmÑSÐÜŸ,™, z¸&ÔAÀNÑRˆÜŸ™ j¸Ô@À>ÑQˆä!&§¡Ð0AÀ?ÐTbÐmqÔ!rÑˆ�˜Ü#Ÿk™k¨6°6¸6Ð*BÈÔJ×RÑRÐSTÐVXÓ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 �]  \  }}||   }|�,|||   j                  «          }|||   j                  «          }g }t        j                  t        |j                  «       «      d„ «      D ]7  \  }}t        |«      }|d   d   }|d	   d   dz   }|j!                  |||f«       Œ9 d}g }|D ]À  \  }}}|dk(  r^||z
  }|j!                  t        j"                  ||j                  ¬
«      j%                  dd	«      j'                  dd	«      |z   «       ||z  }Œjt)        |
|   «      }| j+                  ||d||j                  ¬
«      }|j!                  |«       |t-        |d   |d   «      |z  z  }ŒÂ t        j.                  |d¬«      j1                  dd	«      }|�5|j3                  |	j                  «      |	dd…|||   j                  «       f<   n"|j3                  |	j                  «      |	dd…|f<   |j!                  |j-                  «       dz   t5        |«      z
  «       �Œ t        j6                  ||j                  ¬
«      j9                  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   ©rB   r¢   )r&   r?   c                 ó   — | d   S )Nr&   rˆ  )rÌ   s    r;   ú<lambda>z+Glm4vModel.get_rope_index.<locals>.<lambda>ü  s   € Ð`aÐbcÑ`d€ r<   r@   r£   r?   )r4   r]  rd   rç  rª  ÚzerosrM   rB   r¢   ÚiterrQ  rj   Ú	itertoolsÚgroupbyr  rª   Úappendr„   rx   rÝ   Únextr%   r  rÊ   rÞ   rC   Úlenr«   rˆ   )r8   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À  sO  € ðF Ð%Ü"×4Ñ4°^À^ÒTUÐWXÐTXÑEYÐ_`ÔaˆNØ#$ˆNš1˜a˜4Ñ Ø!Ÿ[™[×6Ñ6×IÑIÐà "ÐÜ—{‘{ØØ�O‰O˜AÑØ�O‰O˜AÑØ—/‘/Ø×#Ñ#ô
ˆð (6Ð'AŒt�NÔ#ÀtØ'5Ð'AŒt�NÔ#Àtñ
ˆ
ô
 -6°iÓ,@ó $	[Ñ(ˆIÐ(Ø0°Ñ;ÐØÐ)Ø$5°nÀYÑ6O×6TÑ6TÓ6VÑ$WÐ!Ø#3°NÀ9Ñ4M×4RÑ4RÓ4TÑ#UÐ à!ÐÜ'×/Ñ/´	Ð:J×:QÑ:QÓ:SÓ0TÑVdÓeò G‘
��UÜ˜U›�Ø# A™h q™k�Ø! "™I a™L¨1Ñ,�	Ø ×'Ñ'¨¨k¸9Ð(EÕFð	Gð ˆKØ!ÐØ5Eò WÑ1�˜y¨'à  AÒ%Ø&¨Ñ2�HØ$×+Ñ+ÜŸ™ X°i×6FÑ6FÔG×LÑLÈQÐPRÓS×ZÑZÐ[\Ð^`ÓaÐdoÑoôð   8Ñ+‘Kô  $ J¨}Ñ$=Ó>�HØ*.×*FÑ*FØ# X¨qÐ2DÈY×M]ÑM]ð +Gó +Ð'ð %×+Ñ+Ð,?Ô@Ø¤3 x°¡{°H¸Q±KÓ#@ÐDVÑ#VÑV‘KðWô  "ŸI™IÐ&6¸AÔ>×FÑFÀqÈ"ÓMˆMØÐ)ØO\×O_ÑO_Ð`l×`sÑ`sÓOt�šQ 	¨>¸)Ñ+D×+IÑ+IÓ+KÐKÒLà-:×-=Ñ-=¸l×>QÑ>QÓ-R�šQ 	˜\Ñ*Ø!×(Ñ(¨×):Ñ):Ó)<¸qÑ)@Ä3ÐGXÓCYÑ)YÖZðI$	[ôJ !&§¡Ð-BÈ9×K[ÑK[Ô \× fÑ fÐghÓ iÐØÐ2Ð2Ð2r<   r•  )ÚmodalityÚpixel_values_videosrë   c                 ó  — |j                  | j                  j                  «      }|dd…df   }|dd…dd…f   }t        j                  ||d¬«      }|j                  |j                  d   d«      }t        j                  ||gd¬«      } | j                  |f|ddœ|¤Ž}	|j                  d«      | j                  j                  dz  z  j                  «       }
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_dictr@   r?   )rJ  rè  rB   r4   r]  Únew_onesrM   rÊ   Úprodrª  r  r  rÁ  )r8   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Ñ7HÓIÐàš1˜a˜4Ñ ˆØšA˜q™r˜EÑ"ˆä×.Ñ.¨r°1¸!Ô<ˆØ$×-Ñ-¨l×.@Ñ.@ÀÑ.CÀQÓGˆÜ#(§9¡9¨k¸<Ð-HÈaÔ#PÐ Ø$˜Ÿ™Øð
Ø*BÐPTñ
ØX^ñ
ˆð &×*Ñ*¨2Ó.°$·+±+×2PÑ2PÐRSÑ2SÑS×[Ñ[Ó]ˆÜ—{‘{ >×#?Ñ#?ÀÓMˆØ'3ˆÔ$àÐr<   r”  Úpixel_valuesc                 ó:  — |j                  | j                  j                  «      } | j                  |fd|i|¤Ž}|j                  d«      | j                  j                  dz  z  j                  «       }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½  r@   r?   )	rJ  rè  rB   r"  rª  r  r4   r  rÁ  )r8   r,  rþ  rë   r(  r)  Úimage_embedss          r;   Úget_image_featureszGlm4vModel.get_image_features=  sŠ   € ð $×(Ñ(¨¯©×):Ñ):Ó;ˆØ$˜Ÿ™ \ÑU¸NÐUÈfÑUˆØ%×*Ñ*¨2Ó.°$·+±+×2PÑ2PÐRSÑ2SÑS×[Ñ[Ó]ˆÜ—{‘{ >×#?Ñ#?ÀÓMˆØ'3ˆÔ$àÐr<   rÓ  Úimage_featuresÚvideo_featuresc                 ó  — |€Ù| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  }|j                  d«      }| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  }|j                  d«      }n2|| j                  j                  k(  }|| j                  j                  k(  }|j                  «       }|j                  d«      j                  |j                  «      }|�@t        ||j                  d   z  |j                  «       k(  d|› d|j                  d   › �«       |j                  «       }|j                  d«      j                  |j                  «      }|�@t        ||j                  d   z  |j                  «       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.
        r  r@   z6Image features and image tokens do not match, tokens: z, features: r   z6Video features and video tokens do not match, tokens: )Úget_input_embeddingsr4   r«   rd   Úimage_token_idr¬   r¢   ÚallÚvideo_token_idr¯   rˆ   rC   r   rM   Únumel)	r8   rÒ  rÓ  r1  r2  Ú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Ü—‘˜TŸ[™[×7Ñ7¼u¿z¹zÐR_×RfÑRfÔgó3ñ "Ðð "4×!7Ñ!7¸Ó!;ÐØ!.Ð2M°$×2KÑ2KÓ2MÜ—‘˜TŸ[™[×7Ñ7¼u¿z¹zÐR_×RfÑRfÔgó3ñ "Ðð "4×!7Ñ!7¸Ó!;Ñð "+¨d¯k©k×.HÑ.HÑ!HÐØ!*¨d¯k©k×.HÑ.HÑ!HÐà+×/Ñ/Ó1ˆØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐØÐ%Ü"Ø ×!4Ñ!4°RÑ!8Ñ8¸N×<PÑ<PÓ<RÑRØHÈÐHXÐXdÐes×eyÑeyÐz{Ñe|Ðd}Ð~ôð
 ,×/Ñ/Ó1ˆØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐØÐ%Ü"Ø ×!4Ñ!4°RÑ!8Ñ8¸N×<PÑ<PÓ<RÑRØHÈÐHXÐXdÐes×eyÑeyÐz{Ñe|Ðd}Ð~ôð "Ð#5Ð5Ð5r<   rn  c                 ó‚  — |€dn|j                  «       }|d uxs |d u}	|	r|€|�t        d«      ‚|d uxr |d uxr |	}
|
r3| j                  �|dk(  r"| j                  |||||¬«      \  }}|| _        |S | j                  ��=|dkD  s|�€5|j                  \  }}}|�u|j                  «       j                  d«      dz
  }|j                  |dk(  d«      }|j                  d|d«      j                  ddd«      j                  |j                  «      }nVt        j                  |||z   «      }|j                  ddd«      j                  d|d«      j                  |j                  «      }| j                  j                  || j                  j                  d   z  d¬«      }||j                  |j                  ¬«      z   }|S 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ý  r@   r&   r   r¤   r£   )rÛ  rØ  rŽ  r  rM   r¬   r®   Úmasked_fillrx   ÚrepeatrC   r¢   r4   r„   rÝ   r]  )r8   rÒ  rÓ  rþ  rÿ  rè   rn  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ÐØ'¨tÐ3ÒQ°~ÈTÐ7QˆÙÐ/Ð7¸IÐ<QÜðnóð ð
 &¨TÐ1ÒfÐ6GÈtÐ6SÒfÐXfÐá $×"2Ñ"2Ð":Ð>TÐXYÒ>YØ(,×(;Ñ(;ØØ-Ø-Ø-Ø"3ð )<ó )Ñ%ˆL˜+ð  +ˆDÔð& Ðð ×ÑÑ)Ð/EÈÒ/IÈYÑM^Ø(5×(;Ñ(;Ñ%ˆJ˜
 AØÐ)Ø-×2Ñ2Ó4×;Ñ;¸BÓ?À!ÑC�Ø+×7Ñ7¸È!Ñ8KÈQÓO�Ø+×0Ñ0°°JÀÓC×JÑJÈ1ÈaÐQRÓS×VÑVÐWd×WkÑWkÓl‘ä$Ÿ|™|Ð,BÐDZÐ]gÑDgÓh�Ø+×0Ñ0°°A°rÓ:×AÑAÀ!ÀZÐQSÓT×WÑWÐXe×XlÑXlÓm�Ø×$Ñ$×6Ñ6°zÀT×EUÑEU×E[ÑE[Ð\]ÑE^Ñ7^ÐdeÐ6ÓfˆEØ'¨%¯(©(¸-×:NÑ:N¨(Ó*OÑOˆLð Ðð  ˆLØÐr<   rŽ  r  r  r†   c           	      ó  — |du |duz  rt        d«      ‚|€ | j                  «       |«      }|�„ | j                  ||fddi|¤Žj                  }t	        j
                  |d¬«      j                  |j                  |j                  «      }| j                  |||¬«      \  }}|j                  ||«      }|�„ | j                  ||	fddi|¤Žj                  }t	        j
                  |d¬«      j                  |j                  |j                  «      }| j                  |||¬«      \  }}|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¤   )r1  )r2  )rÒ  rþ  rÿ  rÓ  rè   rn  rý  )rÒ  r†   rè   rn  rÓ  rŽ  rˆ  )rØ  r4  r0  rÁ  r4   rÊ   rC   r¢   rB   r=  Úmasked_scatterr+  rF  rê  rŒ  rŽ  )r8   rÒ  rè   r†   rn  rÓ  r,  r  rþ  rÿ  rý  rë   r/  Ú
image_maskr  r*  Ú
video_maskÚoutputss                     r;   rJ   zGlm4vModel.forward¯  sâ  € ð. ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø7˜D×5Ñ5Ó7¸	ÓBˆMàÐ#Ø2˜4×2Ñ2Ø˜nñØ:>ðØBHñç‰mð ô !Ÿ9™9 \°qÔ9×<Ñ<¸]×=QÑ=QÐS`×SfÑSfÓgˆLØ ×5Ñ5°iÀÐ_kÐ5Ól‰MˆJ˜Ø)×8Ñ8¸À\ÓRˆMàÐ*Ø2˜4×2Ñ2Ø# ^ñØAEðØIOñç‰mð ô !Ÿ9™9 \°qÔ9×<Ñ<¸]×=QÑ=QÐS`×SfÑSfÓgˆLØ ×5Ñ5°iÀÐ_kÐ5Ól‰MˆAˆzØ)×8Ñ8¸À\ÓRˆMàÐØ×7Ñ7Ø#Ø-Ø-Ø+Ø-Ø /Ø"3ð 8ó ˆLð &�$×%Ñ%ð 
ØØ%Ø)Ø+Ø'ñ
ð ñ
ˆô (ñ 
Øñ
à×(Ñ(ò
ð 	
r<   )r&   r&   r&   NrW  rf   )NN)NNNNN)
NNNNNNNNNN)"rO   rP   rQ   r›  Úaccepts_loss_kwargsrž  r1   r‹   rª   r4   rS   r”   r¢   r%   rŠ  Ú	IntTensorrL   r  r   r   r   r}  r   r   r   r+  r0  r=  rF  r   r   rŒ  rJ   rT   rU   s   @r;   rä  rä  |  s>  ø„ àÐàÐØ0Ð2DÐEÐôð  !Ø"#ØØ,0ñ2#àð2#ð �s˜C �}Ñ%¨¯©Ñ4ð2#ð ð	2#ð
  ð2#ð ð2#ð �e—l‘lÑ" TÑ)ó2#ðp 37Ø26Ø.2ñ[3à×#Ñ#ð[3ð !Ÿ?™?ð[3ð ×(Ñ(¨4Ñ/ð	[3ð
 ×(Ñ(¨4Ñ/ð[3ð Ÿ™ tÑ+ð[3ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*ó[3ñz  ¨Ô1ØØð 37ñà"×.Ñ.ðð ×(Ñ(¨4Ñ/ðð Ð+Ñ,ð	ð
 
Ð+Ñ	+òó ó ó 2ðñ:  ¨Ô1ØØð 37ñà×'Ñ'ðð ×(Ñ(¨4Ñ/ðð Ð+Ñ,ð	ð
 
Ð+Ñ	+òó ó ó 2ðð0 48Ø37ñ(6à×#Ñ#ð(6ð ×(Ñ(ð(6ð ×)Ñ)¨DÑ0ð	(6ð
 ×)Ñ)¨DÑ0ó(6ð\ /3Ø.2Ø.2Ø/3Ø48ñ/à—<‘< $Ñ&ð/ð —|‘| dÑ*ð/ð Ÿ™ tÑ+ð	/ð
 Ÿ™ tÑ+ð/ð Ÿ™ tÑ+ð/ð Ÿ™¨Ñ,ð/ð !Ÿ?™?¨TÑ1ð/ð 
�‰˜Ñ	ó/ñb �]¨GÔ4ØØð .2Ø.2Ø04Ø(,Ø26Ø,0Ø8<Ø26Ø26Ø48ñA
à×#Ñ# dÑ*ðA
ð Ÿ™ tÑ+ðA
ð ×&Ñ&¨Ñ-ð	A
ð
  ™ðA
ð ×(Ñ(¨4Ñ/ðA
ð —l‘l TÑ)ðA
ð #×.Ñ.°Ñ5ðA
ð ×(Ñ(¨4Ñ/ðA
ð ×(Ñ(¨4Ñ/ðA
ð !Ÿ?™?¨TÑ1ðA
ð Ð+Ñ,ðA
ð 
Ð)Ñ	)òA
ó ó ó 5ôA
r<   rä  c                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)ÚGlm4vCausalLMOutputWithPastr�  NrŽ  r�  rˆ  r<   r;   rO  rO  ö  r�  r<   rO  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¬«      | _	        | j                  «        y )NFr[   )r0   r1   rä  r“  r2   r^   ré  r9   rÍ  Úlm_headr¶  rŸ   s     €r;   r1   z&Glm4vForConditionalGeneration.__init__  sS   ø€ Ü‰Ñ˜Ô Ü Ó'ˆŒ
Ü—y‘y ×!3Ñ!3×!?Ñ!?À×ASÑAS×A^ÑA^ÐejÔkˆŒà�‰Õr<   Nr  rÿ  rë   r.   c                 ó>   —  | j                   j                  ||fi |¤ŽS )r  )r“  r+  )r8   r  rÿ  rë   s       r;   r+  z0Glm4vForConditionalGeneration.get_video_features  s$   € ð -ˆt�z‰z×,Ñ,Ð-@À.Ñ[ÐTZÑ[Ð[r<   r,  rþ  c                 ó>   —  | j                   j                  ||fi |¤ŽS )r.  )r“  r0  )r8   r,  rþ  rë   s       r;   r0  z0Glm4vForConditionalGeneration.get_image_features  s"   € ð -ˆt�z‰z×,Ñ,¨\¸>ÑTÈVÑTÐTr<   rŽ  r  r  rÒ  rè   r†   rn  rÓ  Úlabelsrý  Úlogits_to_keepc                 ó˜  —  | j                   d||||	|
|||||dœ
|¤Ž}|d   }t        |t        «      rt        | d«      n|}| j	                  |dd…|dd…f   «      }d}|�2| j                  ||| 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Ò  r,  r  rþ  rÿ  rý  r†   rè   rn  rÓ  r   N)ÚlogitsrV  rÍ  )ÚlossrY  rn  r=   r§  rŽ  rˆ  )r“  r©   r‹   ÚslicerS  Úloss_functionrd   ré  rÍ  rO  rn  r=   r§  rŽ  )r8   rÒ  rè   r†   rn  rÓ  rV  r,  r  rþ  rÿ  rý  rW  rë   rK  r=   Úslice_indicesrY  rZ  s                      r;   rJ   z%Glm4vForConditionalGeneration.forward,  sî   € ðz �$—*‘*ð 
ØØ%Ø 3Ø)Ø)Ø/Ø%Ø)Ø+Ø'ñ
ð ñ
ˆð   ™
ˆô 9CÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ×%Ñ%¨V¸FÈtÏ{É{×OfÑOf×OqÑOqÐ%ÓrˆDä*ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø×+Ñ+ô
ð 	
r<   c                 óZ   •— t        ‰| �  |f|||||||	|
||dœ
|¤Ž}|s|r
d |d<   d |d<   |S )N)
rn  rè   rÓ  r†   r,  r  rþ  rÿ  r†  Úis_first_iterationr,  r  )r0   Úprepare_inputs_for_generation)r8   rÒ  rn  rè   rÓ  r†   r†  r,  r  rþ  rÿ  r_  rë   Úmodel_inputsr:   s                 €r;   r`  z;Glm4vForConditionalGeneration.prepare_inputs_for_generationŠ  sf   ø€ ô" ‘wÑ<Øð
à+Ø)Ø'Ø%Ø%Ø 3Ø)Ø)ØØ1ñ
ð ñ
ˆñ "¡iØ+/ˆL˜Ñ(Ø26ˆLÐ.Ñ/àÐr<   c                 óò  •— t         ‰| �  ||«      }d}|j                  d«      x}�|j                  «       }|dk7  r4| j                  j
                  �|d   | j                  j
                  z   }|S d|v r|d   j                  d   dkD  r|d   }t        |j                  «      dk(  xr, |j                  t        j                  t        j                  fv }|rŽ|j                  d«      �}|j                  d«      €|j                  d	«      �[|j                  «       D ��	ci c]  \  }}	|dk7  sŒ||	“Œ }}}	 | j                  j                  |fi |¤Ž\  }
}|| j                  _        no|j                  d«      j                  d
dd«      }
t        j                   |j                  d   dt        j                  |j"                  ¬«      | j                  _        |d   }t        j$                  ||
gd¬«      }|S c c}	}w )Nr   rn  rÖ  rÒ  r&   r?   rý  rþ  rÿ  r   r@   r  r¤   )r0   Ú$_prepare_position_ids_for_generationr:  rÛ  r“  rŽ  rM   r
  rB   r4   r‹   r¬   Úitemsr  rˆ   rÝ   r  r¢   rÊ   )r8   Úinputs_tensorÚmodel_kwargsÚtext_positionsÚpast_lengthÚcacher†   Úis_input_idsrÑ   r  Úvision_positionsrŽ  r:   s               €r;   rc  zBGlm4vForConditionalGeneration._prepare_position_ids_for_generation°  sï  ø€ ô ™ÑEÀmÐUaÓbˆð ˆØ!×%Ñ%Ð&7Ó8Ð8ˆEÐEØ×.Ñ.Ó0ˆKØ˜!Ò §
¡
× 6Ñ 6Ð BØ)¨)Ñ4°t·z±z×7MÑ7MÑMˆLØÐð ˜,Ñ&¨<¸Ñ+D×+JÑ+JÈ1Ñ+MÐPQÒ+QØ(¨Ñ5ˆMä˜=×.Ñ.Ó/°1Ñ4Òg¸×9LÑ9LÔQV×QZÑQZÔ\a×\fÑ\fÐPgÐ9gˆáØ× Ñ Ð!4Ó5ÐAØ×!Ñ!Ð"2Ó3Ð?À<×CSÑCSÐTdÓCeÐCqà-9×-?Ñ-?Ó-A×V¡T Q¨ÀQÈ+ÓEU˜A˜q™DÐVˆLÑVØ,E¨D¯J©J×,EÑ,EÀmÑ,dÐWcÑ,dÑ)Ð˜kØ%0ˆD�J‰JÕ"à-×7Ñ7¸Ó:×AÑAÀ!ÀRÈÓLÐÜ%*§[¡[Ø×#Ñ# AÑ&¨´·±ÀM×DXÑDXô&ˆD�J‰JÔ"ð
 (¨	Ñ2ˆÜ—y‘y .Ð2BÐ!CÈÔKˆàÐùó Ws   ÄG3Ä*G3c                 ó¦  — |��| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  d   }| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  d   }| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  d   }nK|| j                  j                  k(  }|| j                  j                  k(  }|| j                  j                  k(  }t        j                  |j                  «       |j                  «       z
  d¬«      }|dkD  }|| z  }|j                  d¬«      }	|j                  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)`)
        r  ).r   r&   r¤   r   )r4  r4   r«   rd   Úimage_start_token_idr¬   r¢   Úvideo_start_token_idÚvideo_end_token_idr®   r‹   r¯   )r8   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‘L §¡×!AÑ!AÌÏÉÐ\i×\pÑ\pÔqóñð ñˆHð Ø.�4×,Ñ,Ó.Ü—L‘L §¡×!AÑ!AÌÏÉÐ\i×\pÑ\pÔqóñð ñˆNð Ø.�4×,Ñ,Ó.Ü—L‘L §¡×!?Ñ!?ÄuÇzÁzÐZg×ZnÑZnÔoóñð ñ‰Lð ! D§K¡K×$DÑ$DÑDˆHØ&¨$¯+©+×*JÑ*JÑJˆNØ$¨¯©×(FÑ(FÑFˆLô —l‘l >×#5Ñ#5Ó#7¸,×:JÑ:JÓ:LÑ#LÐRSÔTˆØ" Q‘ˆð %¨¨Ñ6Ðð )×,Ñ,°Ð,Ó3ˆØ%×)Ñ)¨aÐ)Ó0ˆà˜\Ð)Ð)r<   Úexpand_sizeÚis_encoder_decoderc                 óì   ‡ ‡‡‡‡— ‰dk(  r‰‰fS g d¢Šˆˆˆˆ fd„}ˆˆfd„} |‰«      Š‰�‰j                  ‰d¬«      Š |‰«      Š|r*‰j                  d«      €t        d«      ‚ |‰d   «      ‰d<   ‰‰fS )	Nr&   )r,  rþ  r  rÿ  Úsecond_per_grid_tsc                 ó4  •— ‰j                  dd «      }‰j                  dd «      }‰j                  ‰‰j                  dd «      ¬«      \  }}d„ }| D �]9  }|dk(  rct        j                  |t	        |«      «      }|D �cg c]'  }t        j
                  |d¬«      j                  «       ‘Œ) }	} || |   |	‰
¬	«      | |<   Œl|dk(  rt	        |«      }	 || |   |	‰
¬	«      | |<   ŒŽ|d
k(  rct        j                  |t	        |«      «      }|D �cg c]'  }t        j
                  |d¬«      j                  «       ‘Œ) }	} || |   |	‰
¬	«      | |<   Œö|dk(  rt	        |«      }	 || |   |	‰
¬	«      | |<   �Œ|dk(  s�Œ  || |   t	        |«      ‰
¬	«      | |<   �Œ< | S c c}w c c}w )Nrþ  rÿ  rÓ  )rÓ  c                 óÖ   — t        j                  | |«      }|gdg| j                  «       dz
  z  z   }t        j                  |D �cg c]  } |j                  |Ž ‘Œ c}d¬«      }|S c c}w )Nr&   r   r¤   )r4   r  r~   rÊ   r@  )rÌ   rµ   Úrepeat_timesÚsamplesÚrepeat_argsÚsamplerV  s          r;   Ú_repeat_interleave_samplesz‹Glm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>._repeat_interleave_samples&  sa   € ÜŸ+™+ a¨Ó1�Ø+˜n°¨s°a·e±e³gÀ±kÑ/BÑB�ÜŸ™ÈgÖ#VÀF M F§M¡M°;Ò$?Ò#VÐ\]Ô^�Ø�ùò $Ws   ÁA&r,  r&   r¤   )rµ   r  r  r|  )r:  rx  r4   r  rª   r"  r¯   )Údict_to_expandrþ  rÿ  Ú
image_numsÚ
video_numsrƒ  ræ   r€  r‚  rµ   ry  rÒ  rf  r8   s             €€€€r;   Ú"_expand_dict_for_generation_visualzgGlm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual  sÍ  ø€ Ø)×-Ñ-Ð.>ÀÓEˆNØ)×-Ñ-Ð.>ÀÓEˆNØ%)×%HÑ%HØ¨×)9Ñ)9¸/È4Ó)Pð &Ió &Ñ"ˆJ˜
òð &ó �Ø˜.Ò(ä#Ÿk™k¨.¼$¸zÓ:JÓK�GàMTÖUÀ6œuŸz™z¨&°aÔ8×<Ñ<Õ>ÐU�GÐUÙ*DØ& sÑ+°WÈ;ô+�N 3Ò'ð Ð,Ò,ä" :Ó.�GÙ*DØ& sÑ+°WÈ;ô+�N 3Ò'ð Ð1Ò1Ü#Ÿk™k¨.¼$¸zÓ:JÓK�GØMTÖUÀ6œuŸz™z¨&°aÔ8×<Ñ<Õ>ÐU�GÐUÙ*DØ& sÑ+°WÈ;ô+�N 3Ò'ð Ð,Ò,Ü" :Ó.�GÙ*DØ& sÑ+°WÈ;ô+�N 3Ó'ð Ð0Ô0Ù*DØ& sÑ+´T¸*Ó5EÐT_ô+�N 3Ó'ð7ð< "Ð!ùò3 Vùò Vs   Á=,FÄ,Fc                 óü   •— | D ]u  }|dk(  r,| |   j                   dk(  r| |   j                  ‰d¬«      | |<   Œ4| |   €Œ:t        | |   t        j                  «      sŒX|‰vsŒ]| |   j                  ‰d¬«      | |<   Œw | S )Nr†   r   r&   r¤   r   )rÜ  r]  r©   r4   rS   )r„  ræ   ry  Úvisual_keyss     €€r;   Ú_expand_dict_for_generationz`Glm4vForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generationL  sž   ø€ Ø%ò d�Ø˜.Ò(¨^¸CÑ-@×-EÑ-EÈÒ-JØ*8¸Ñ*=×*OÑ*OÐP[ÐabÐ*OÓ*c�N 3Ò'à" 3Ñ'Ñ3Ü" >°#Ñ#6¼¿¹ÕEØ ;Ò.à*8¸Ñ*=×*OÑ*OÐP[ÐabÐ*OÓ*c�N 3Ò'ðdð "Ð!r<   r   r¤   Úencoder_outputszMIf `is_encoder_decoder` is True, make sure that `encoder_outputs` is defined.)r]  r:  rØ  )r8   ry  rz  rÒ  rf  r‡  rŠ  r‰  s   `` ``  @r;   Ú_expand_inputs_for_generationz;Glm4vForConditionalGeneration._expand_inputs_for_generation  s›   ü€ ð ˜!ÒØ˜lÐ*Ð*âwˆ÷+	"õZ
	"ñ :¸,ÓGˆàÐ Ø!×3Ñ3°KÀQÐ3ÓGˆIá2°<Ó@ˆáØ×ÑÐ 1Ó2Ð:Ü Ð!pÓqÐqÙ.IÈ,ÐWhÑJiÓ.jˆLÐ*Ñ+à˜,Ð&Ð&r<   rf   )NNNNNNNNNNNr   )
NNNNTNNNNF)r&   FN)!rO   rP   rQ   Ú_tied_weights_keysrL  r1   r   r4   r}  rŠ  r   r   rL   r   r+  r0  r   r   rS   r   rM  r‹   rO  rJ   r`  rc  rx  rj   Údictr”   r   rŒ  rT   rU   s   @r;   rQ  rQ    s"  ø„ Ø*Ð,VÐWÐàÐôð ð 37ñ\à"×.Ñ.ð\ð ×(Ñ(¨4Ñ/ð\ð Ð+Ñ,ð	\ð
 
Ð+Ñ	+ò\ó ð\ð ð 37ñUà×'Ñ'ðUð ×(Ñ(¨4Ñ/ðUð Ð+Ñ,ð	Uð
 
Ð+Ñ	+òUó ðUñ �]¨GÔ4ØØð .2Ø.2Ø04Ø(,Ø26Ø*.Ø,0Ø8<Ø26Ø26Ø48Ø-.ñY
à×#Ñ# dÑ*ðY
ð Ÿ™ tÑ+ðY
ð ×&Ñ&¨Ñ-ð	Y
ð
  ™ðY
ð ×(Ñ(¨4Ñ/ðY
ð × Ñ  4Ñ'ðY
ð —l‘l TÑ)ðY
ð #×.Ñ.°Ñ5ðY
ð ×(Ñ(¨4Ñ/ðY
ð ×(Ñ(¨4Ñ/ðY
ð !Ÿ?™?¨TÑ1ðY
ð ˜eŸl™lÑ*ðY
ð Ð+Ñ,ðY
ð 
Ð,Ñ	,òY
ó ó ó 5ðY
ð| ØØØØØØ ØØØ õ$ôL$ðR .2ñ6*à×#Ñ# dÑ*ð6*ð —|‘| dÑ*ð6*ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*ó	6*ðt Ø#(Ø-1ñ	V'àðV'ð !ðV'ð ×#Ñ# dÑ*ð	V'ð 
ˆu×Ñ  c¨3 h¡Ð/Ñ	0÷V'r<   rQ  )rQ  rä  r’  rÈ  r¥  )r
  )r&   )br  rº  Úcollections.abcr   Údataclassesr   Útypingr   r   r4   Útorch.nnr2   Ú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,   rW   rl   r|   r�   r–   rÏ   rS   rL   rÚ   r‹   rã   rR   rù   rû   r  r+  r[  rd  rf  rv  r  rŒ  r’  r¥  rÈ  rä  rO  rQ  Ú__all__rˆ  r<   r;   ú<module>r¨     s  ðó( Û Ý $Ý !ß  ã Ý ß Ð Ý å &Ý !ß .Ý )Ý 7Ý /Ý BÝ 9ß kÑ kß Kß FÝ &ß aÓ aÝ 0÷ó õ 6ß Jß PÑ Pñ ˜YÓ'ôJ�2—9‘9ó Jó (ðJô(f�B—I‘Iô fô˜BŸI™Iô ô(G §¡ô Gôf˜RŸY™Yô fô"G˜BŸI™Iô GòT(ðØ‡|�|ðØŸ™ðØ+0¯<©<ðØ>C¿l¹lðà
ˆ5�<‰<˜Ÿ™Ð%Ñ&óð	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ô2P˜2Ÿ9™9ô PôfÐ1ô ô>J˜rŸy™yô JòZ6ó%ôPC)˜Ÿ™ô C)ôL)�2—9‘9ô )ô$/Ð6ô /ðd Ø
ô0Ð6ó 0ó ó ð0ð ô2˜?ó 2ó ð2ô(e
Ð+ô e
ðP ôe
Ð)ó e
ó ðe
ðP ôv
Ð%ó v
ó ðv
ðr Ø
ô0Ð"8ó 0ó ó ð0ôb'Ð$8¸/ô b'òJ x�r<   