§
    ‚ŠtjÃÎ  ã                   ó<  — d dl Z d dlmZ d dl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 ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZm Z  ddl!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZH ddlImJZJ ddlKmLZLmMZM  e,jN        eO¦  «        ZP e*d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         ZQ e*d¬¦  «        e G d„ d e¦  «        ¦   «         ¦   «         ZR e*d¬¦  «        e G d!„ d"e¦  «        ¦   «         ¦   «         ZS G d#„ d$e;¦  «        ZT G d%„ d&eC¦  «        ZU G d'„ d(e?¦  «        ZV G d)„ d*e@¦  «        ZW G d+„ d,ejX        ¦  «        ZY G d-„ d.ejX        ¦  «        ZZ G d/„ d0eG¦  «        Z[ G d1„ d2eH¦  «        Z\ G d3„ d4e<¦  «        Z]d5„ Z^dQd7„Z_ G d8„ d9ejX        ¦  «        Z` G d:„ d;e:¦  «        Za G d<„ d=e¦  «        Zb G d>„ d?eD¦  «        Zc G d@„ dAeE¦  «        Zd G dB„ dCed¦  «        Ze G dD„ dEeF¦  «        Zf G dF„ dGeJ¦  «        Zg G dH„ dIeA¦  «        Zh G dJ„ dKeB¦  «        Zi G dL„ dMeM¦  «        Zj G dN„ dOeL¦  «        Zkg dP¢ZldS )Ré    N)ÚCallable)Ústrict)Ú	LayerNormé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚPreTrainedConfig)Úcreate_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚBaseModelOutputWithPooling)ÚRopeParameters)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚtorch_compilable_check)Údeprecate_kwarg)Úaccepts_precomputed_kwargsÚmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputs)Úget_vision_cu_seqlensÚget_vision_position_idsé   )ÚGlm4MLPÚGlm4RMSNormÚGlm4RotaryEmbeddingÚeager_attention_forward)
ÚQwen2_5_VisionPatchEmbedÚQwen2_5_VisionRotaryEmbeddingÚ Qwen2_5_VLCausalLMOutputWithPastÚ"Qwen2_5_VLForConditionalGenerationÚQwen2_5_VLMLPÚQwen2_5_VLModelOutputWithPastÚQwen2_5_VLPreTrainedModelÚQwen2_5_VLTextModelÚQwen2_5_VLVisionAttentionÚQwen2_5_VLVisionBlock)ÚQwen2VLModel)ÚQwen2VLProcessorÚQwen2VLProcessorKwargszzai-org/GLM-4.1V-9B-Thinking)Ú
checkpointc                   ól  — e Zd ZU dZdZdZdZeed<   dZ	eed<   dZ
eed	<   d
Zeed<   dZeez  ed<   dZeed<   dZeed<   dZeee         z  eeef         z  ed<   dZeee         z  eeef         z  ed<   dZeed<   dZeed<   dZeee         z  eeef         z  ed<   dZeed<   dZeed<   dZeed <   d!S )"ÚGlm4vVisionConfiga,  
    out_hidden_size (`int`, *optional*, defaults to 4096):
        The output hidden size of the vision model.

    Example:

    ```python
    >>> from transformers import Glm4vVisionConfig, Glm4vVisionModel

    >>> # Initializing a Glm4vVisionConfig GLM-4.1V-9B style configuration
    >>> configuration = Glm4vVisionConfig()

    >>> # Initializing a model (with random weights) from the GLM-4.1V-9B configuration
    >>> model = Glm4vVisionModel(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```Úglm4v_visionÚvision_configé   Údepthi   Úhidden_sizeÚsiluÚ
hidden_actFÚattention_biasç        Úattention_dropouté   Ú	num_headsr   Úin_channelsiP  Ú
image_sizeé   Ú
patch_sizeçñhãˆµøä>Úrms_norm_epsr!   Úspatial_merge_sizeÚtemporal_patch_sizeé   Úout_hidden_sizeé€5  Úintermediate_sizeç{®Gáz”?Úinitializer_rangeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typeÚbase_config_keyr9   ÚintÚ__annotations__r:   r<   Ústrr=   Úboolr?   ÚfloatrA   rB   rC   ÚlistÚtuplerE   rG   rH   rI   rK   rM   rO   © ó    úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/glm4v/modular_glm4v.pyr5   r5   E   s]  € € € € € € ðð ð&  €JØ%€Oà€Eˆ3€O€O�OØ€K�ÐÐÑØ€J�ÐÐÑØ €N�DÐ Ð Ñ Ø%(Ð�u˜s‘{Ð(Ð(Ñ(Ø€IˆsÐÐÑØ€K�ÐÐÑØ47€J��d˜3”i‘ %¨¨S¨¤/Ñ1Ð7Ð7Ñ7Ø46€J��d˜3”i‘ %¨¨S¨¤/Ñ1Ð6Ð6Ñ6Ø€L�%ÐÐÑØÐ˜ÐÐÑØ=>Ð˜˜t Cœy™¨5°°c°¬?Ñ:Ð>Ð>Ñ>Ø€O�SÐÐÑØ"Ð�sÐ"Ð"Ñ"Ø#Ð�uÐ#Ð#Ñ#Ð#Ð#r^   r5   c                   óR  ‡ — e Zd ZU dZdZdZdgZddddddd	œZd
gdgfddgdgfdgdgfdœZdhZ	dZ
eed<   dZeed<   dZeed<   dZeed<   dZeed<   dZedz  ed<   dZeed<   dZeed <   d!Zeed"<   d#Zeed$<   d%Zeed&<   d'Zeez  ed(<   dZeez  dz  ed)<   dZedz  ed*<   ˆ fd+„Zˆ xZ S ),ÚGlm4vTextConfiga„  
    Example:

    ```python
    >>> from transformers import Glm4vTextModel, Glm4vConfig

    >>> # Initializing a GLM-4.1V style configuration
    >>> configuration = Glm4vConfig()

    >>> # Initializing a model from the GLM-4.1V style configuration
    >>> model = Glm4vTextModel(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```Ú
glm4v_textÚtext_configÚpast_key_valuesÚcolwiseÚrowwiseÚcolwise_gather_outputÚrowwise_split_input)zlayers.*.self_attn.q_projzlayers.*.self_attn.k_projzlayers.*.self_attn.v_projzlayers.*.self_attn.o_projzlayers.*.mlp.gate_up_projzlayers.*.mlp.down_projÚ	input_idsÚinputs_embedsÚhidden_statesÚattention_mask)Úembed_tokensÚlayersÚnormÚmrope_sectioni P Ú
vocab_sizerJ   r:   rL   rM   é(   Únum_hidden_layersé    Únum_attention_headsr!   NÚnum_key_value_headsr;   r<   i €  Úmax_position_embeddingsrN   rO   rF   rG   TÚ	use_cacher>   r?   Úrope_parametersÚpad_token_idc                 ó`   •— | j         €| j        | _          t          ¦   «         j        di |¤Ž d S )Nr]   )rv   ru   ÚsuperÚ__post_init__©ÚselfÚkwargsÚ	__class__s     €r_   r}   zGlm4vTextConfig.__post_init__¤   s:   ø€ ØÔ#Ð+Ø'+Ô'?ˆDÔ$à�‰ŒÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'r^   )!rP   rQ   rR   rS   rT   rU   Úkeys_to_ignore_at_inferenceÚbase_model_tp_planÚbase_model_pp_planÚignore_keys_at_rope_validationrq   rV   rW   r:   rM   rs   ru   rv   r<   rX   rw   rO   rZ   rG   rx   rY   r?   ry   r   Údictrz   r}   Ú__classcell__©r�   s   @r_   ra   ra   o   s½  ø€ € € € € € ðð ð  €JØ#€OØ#4Ð"5Ðð &/Ø%.Ø%.Ø%.Ø%<Ø"7ðð Ðð &˜¨Ð(9Ð:Ø#Ð%5Ð6¸Ð8IÐJØ!Ð" _Ð$5Ð6ðð Ðð
 '6Ð%6Ð"à€J�ÐÐÑØ€K�ÐÐÑØ"Ð�sÐ"Ð"Ñ"ØÐ�sÐÐÑØ!Ð˜Ð!Ð!Ñ!Ø&'Ð˜˜t™Ð'Ð'Ñ'Ø€J�ÐÐÑØ#(Ð˜SÐ(Ð(Ñ(Ø#Ð�uÐ#Ð#Ñ#Ø€L�%ÐÐÑØ€IˆtÐÐÑØ%(Ð�u˜s‘{Ð(Ð(Ñ(Ø48€O�^ dÑ*¨TÑ1Ð8Ð8Ñ8Ø#€L�#˜‘*Ð#Ð#Ñ#ð(ð (ð (ð (ð (ð (ð (ð (ð (r^   ra   c                   óÎ   ‡ — e Zd ZU dZdZeedœZdgZdZ	e
ez  dz  ed<   dZe
ez  dz  ed<   dZeed	<   d
Zeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   ˆ fd„Zˆ xZS )ÚGlm4vConfiga™  
    image_start_token_id (`int`, *optional*, defaults to 151339):
        The image start token index to encode the start of image.
    image_end_token_id (`int`, *optional*, defaults to 151340):
        The image end token index to encode the end of image.
    video_start_token_id (`int`, *optional*, defaults to 151341):
        The video start token index to encode the start of video.
    video_end_token_id (`int`, *optional*, defaults to 151342):
        The video end token index to encode the end of video.

    ```python
    >>> from transformers import Glm4vForConditionalGeneration, Glm4vConfig

    >>> # Initializing a GLM-4.1V style configuration
    >>> configuration = Glm4vConfig()

    >>> # Initializing a model from the GLM-4.1V style configuration
    >>> model = Glm4vForConditionalGeneration(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```Úglm4v)r7   rc   rd   Nrc   r7   i/O Úimage_token_idi0O Úvideo_token_idi+O Úimage_start_token_idi,O Úimage_end_token_idi-O Úvideo_start_token_idi.O Úvideo_end_token_idFÚtie_word_embeddingsc                 ó–  •— t          | j        t          ¦  «        r | j        d         di | j        ¤Ž| _        n| j        € | j        d         di |¤Ž| _        t          | j        t          ¦  «        r | j        d         di | j        ¤Ž| _        n| j        € | j        d         di |¤Ž| _         t          ¦   «         j        di |¤Ž d S )Nr7   rc   r]   )Ú
isinstancer7   r†   Úsub_configsrc   r|   r}   r~   s     €r_   r}   zGlm4vConfig.__post_init__Ó   sð   ø€ Ý�dÔ(­$Ñ/Ô/ð 	MØ!B Ô!1°/Ô!BÐ!XÐ!XÀTÔEWÐ!XÐ!XˆDÔÐØÔÐ'Ø!B Ô!1°/Ô!BÐ!LÐ!LÀVÐ!LÐ!LˆDÔå�dÔ&­Ñ-Ô-ð 	IØ>˜tÔ/°Ô>ÐRÐRÀÔAQÐRÐRˆDÔÐØÔÐ%Ø>˜tÔ/°Ô>ÐHÐHÀÐHÐHˆDÔà�‰ŒÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'r^   )rP   rQ   rR   rS   rT   r5   ra   r•   r‚   rc   r†   r   rW   r7   rŒ   rV   r�   rŽ   r�   r�   r‘   r’   rY   r}   r‡   rˆ   s   @r_   rŠ   rŠ   «   s  ø€ € € € € € ðð ð. €JØ$5ÀoÐVÐV€KØ#4Ð"5Ðà26€K�Ð(Ñ(¨4Ñ/Ð6Ð6Ñ6Ø48€M�4Ð*Ñ*¨TÑ1Ð8Ð8Ñ8Ø €N�CÐ Ð Ñ Ø €N�CÐ Ð Ñ Ø &Ð˜#Ð&Ð&Ñ&Ø$Ð˜Ð$Ð$Ñ$Ø &Ð˜#Ð&Ð&Ñ&Ø$Ð˜Ð$Ð$Ñ$Ø %Ð˜Ð%Ð%Ñ%ð(ð (ð (ð (ð (ð (ð (ð (ð (r^   rŠ   c                   ó   — e Zd ZdS )ÚGlm4vRMSNormN©rP   rQ   rR   r]   r^   r_   r—   r—   â   ó   € € € € € Ø€Dr^   r—   c                   ó&   ‡ — e Zd Zddefˆ fd„Zˆ xZS )ÚGlm4VisionMlpFÚbiasc                 ód   •— t          ¦   «                              ||¦  «         |j        | _        d S ©N)r|   Ú__init__rK   rM   )r   Úconfigrœ   r�   s      €r_   rŸ   zGlm4VisionMlp.__init__ç   s.   ø€ Ý‰Œ×Ò˜ Ñ&Ô&Ð&Ø!'Ô!7ˆÔÐÐr^   ©F)rP   rQ   rR   rY   rŸ   r‡   rˆ   s   @r_   r›   r›   æ   sI   ø€ € € € € ð8ð 8 Tð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r^   r›   c                   ó   — e Zd Zdeddfd„ZdS )ÚGlm4vVisionPatchEmbedr    ÚreturnNc                 ó  — t           j                             | ¦  «         |j        | _        |j        | _        |j        | _        |j        | _        | j        | j        | j        g}t          j        | j        | j        ||¬¦  «        | _	        d S )N)Úkernel_sizeÚstride)
ÚnnÚModulerŸ   rE   rI   rB   r:   Ú	embed_dimÚConv3dÚproj)r   r    r¦   s      r_   rŸ   zGlm4vVisionPatchEmbed.__init__í   sy   € Ý
Œ	×Ò˜4Ñ Ô Ð Ø Ô+ˆŒØ#)Ô#=ˆÔ Ø!Ô-ˆÔØÔ+ˆŒàÔ/°´À$Ä/ÐRˆÝ”I˜dÔ.°´ÈKÐ`kÐlÑlÔlˆŒ	ˆ	ˆ	r^   )rP   rQ   rR   r5   rŸ   r]   r^   r_   r£   r£   ì   s?   € € € € € ðmÐ0ð m°Tð mð mð mð mð mð mr^   r£   c                   ó   — e Zd ZdS )ÚGlm4vVisionRotaryEmbeddingNr˜   r]   r^   r_   r®   r®   ø   r™   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 )ÚGlm4vVisionPatchMergerFÚdimÚcontext_dimr<   rœ   r¤   Nc                 ó¤  •— t          ¦   «                              ¦   «          t          j        |||¬¦  «        | _        t          |¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _	        t          j
        ¦   «         | _        t          |         | _        d S )N©rœ   )r|   rŸ   r¨   ÚLinearr¬   r   Úpost_projection_normÚ	gate_projÚup_projÚ	down_projÚGELUÚact1r   Úact_fn)r   r±   r²   r<   rœ   r�   s        €r_   rŸ   zGlm4vVisionPatchMerger.__init__ý   s¤   ø€ Ý‰Œ×ÒÑÔÐÝ”I˜c 3¨TÐ2Ñ2Ô2ˆŒ	Ý$-¨c¡N¤NˆÔ!Ýœ 3¨¸$Ð?Ñ?Ô?ˆŒÝ”y  k¸Ð=Ñ=Ô=ˆŒÝœ ;°¸$Ð?Ñ?Ô?ˆŒÝ”G‘I”IˆŒ	Ý˜ZÔ(ˆŒˆˆr^   Úhidden_statec                 ó  — |                       |¦  «        }|                      |                      |¦  «        ¦  «        }|                      |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        S rž   )r¬   r»   r¶   r¹   r¼   r·   r¸   )r   r½   s     r_   Úforwardz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^   r¡   )rP   rQ   rR   rV   rX   rY   rŸ   ÚtorchÚTensorr¿   r‡   rˆ   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 )ÚGlm4vVisionEmbeddingsr    c                 ó:  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        |j        | _        | j        | j        z  dz  | _        | j        | _        t          j
        | j        | j        ¦  «        | _        d| _        d S )Nr!   Úbicubic)r|   rŸ   r    r:   rª   rC   rE   Únum_patchesÚnum_positionsr¨   Ú	EmbeddingÚposition_embeddingÚinterpolated_method©r   r    r�   s     €r_   rŸ   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.
        é   )ÚdeviceÚdtyper   g      à?r!   ©rÎ   ©rÏ   éÿÿÿÿ©r±   FÚborder)ÚmodeÚalign_cornersÚpadding_mode)rÉ   ÚweightÚshaperÎ   r”   r[   rÀ   ÚtensorÚlongrV   ÚviewÚpermuteÚ	unsqueezeÚtoÚfloat32ÚarangeÚcumsumÚsumÚstackÚFÚgrid_samplerÊ   ÚsqueezerÏ   )r   Ú
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_   r¿   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^   )	rP   rQ   rR   r5   rŸ   rÀ   rÁ   r¿   r‡   rˆ   s   @r_   rÃ   rÃ     sd   ø€ € € € € ð
-Ð0ð 
-ð 
-ð 
-ð 
-ð 
-ð 
-ð:ÐPUÔP\ð :ð :ð :ð :ð :ð :ð :ð :r^   rÃ   c                   ó(   ‡ — e Zd Zdeddfˆ fd„Zˆ xZS )ÚGlm4vVisionAttentionr    r¤   Nc                 ó
  •— t          ¦   «                              |¦  «         |j        | _        t          j        |j        |j        dz  |j        ¬¦  «        | _        t          j        |j        |j        d¬¦  «        | _        d S )Nr   r´   F)	r|   rŸ   r?   r¨   rµ   r:   r=   Úqkvr¬   rË   s     €r_   rŸ   zGlm4vVisionAttention.__init__X  sn   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø!'Ô!9ˆÔÝ”9˜VÔ/°Ô1CÀaÑ1GÈfÔNcÐdÑdÔdˆŒÝ”I˜fÔ0°&Ô2DÈ5ÐQÑQÔQˆŒ	ˆ	ˆ	r^   )rP   rQ   rR   r5   rŸ   r‡   rˆ   s   @r_   rý   rý   W  sX   ø€ € € € € ðRÐ0ð R°Tð Rð Rð Rð Rð Rð Rð Rð Rð Rð Rr^   rý   c                   ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚGlm4vVisionBlockr¤   Nc                 ó  •— t          ¦   «                              |¦  «         t          |j        |j        ¬¦  «        | _        t          |j        |j        ¬¦  «        | _        t          |¦  «        | _        t          |d¬¦  «        | _
        d S )N©ÚepsFr´   )r|   rŸ   r—   r:   rG   Únorm1Únorm2rý   Úattnr›   ÚmlprË   s     €r_   rŸ   zGlm4vVisionBlock.__init__`  sv   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý! &Ô"4¸&Ô:MÐNÑNÔNˆŒ
Ý! &Ô"4¸&Ô:MÐNÑNÔNˆŒ
Ý(¨Ñ0Ô0ˆŒ	Ý  ¨eÐ4Ñ4Ô4ˆŒˆˆr^   ©r¤   N)rP   rQ   rR   rŸ   r‡   rˆ   s   @r_   r  r  _  s=   ø€ € € € € ð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5r^   r  c                   ó2   ‡ — e Zd Zddefˆ fd„Zd„ Zd„ Zˆ xZS )ÚGlm4vTextRotaryEmbeddingNr    c                 óŒ   •— t          ¦   «                              ¦   «          |j                             dg d¢¦  «        | _        d S )Nrp   )é   r@   r@   )r|   rŸ   ry   Úgetrp   )r   r    rÎ   r�   s      €r_   rŸ   z!Glm4vTextRotaryEmbedding.__init__i  s>   ø€ Ý‰Œ×ÒÑÔÐØ#Ô3×7Ò7¸ÈÈÈÑUÔUˆÔÐÐ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Í   rÒ   ÚmpsÚcpuF)Údevice_typeÚenabledr!   rÓ   rÑ   )Úinv_freqrZ   ÚexpandrÙ   r”   rÎ   ÚtyperX   r   Ú	transposeÚapply_mroperp   rÀ   ÚcatÚcosÚattention_scalingÚsinrß   rÏ   )
r   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedr  ÚfreqsÚembr  r  s
             r_   r¿   z Glm4vTextRotaryEmbedding.forwardm  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 )NrÒ   rÓ   c                 ó*   — g | ]\  }}||d z           ‘ŒS )r   r]   )Ú.0ÚiÚchunks      r_   ú
<listcomp>z8Glm4vTextRotaryEmbedding.apply_mrope.<locals>.<listcomp>€  s$   € ÐKÐKÐK©X¨Q°˜E ! a¡%œLÐKÐKÐKr^   )ÚsplitrÀ   r  Ú	enumerate)r   r!  rp   ÚsectionÚchunksÚresults         r_   r  z$Glm4vTextRotaryEmbedding.apply_mrope}  sM   € ØˆØ—’˜W¨"�Ñ-Ô-ˆÝ”ÐKÐK½À6Ñ9JÔ9JÐKÑKÔKÐQSÐTÑTÔTˆØˆr^   rž   )rP   rQ   rR   ra   rŸ   r¿   r  r‡   rˆ   s   @r_   r  r  h  so   ø€ € € € € ðVð V˜ð Vð Vð Vð Vð Vð Vð<ð <ð <ð ð ð ð ð ð ð r^   r  c                 óŽ   — | dddd…f         }| dddd…f         }t          j        | |fd¬¦  «                             d¦  «        S )	z*Rotates half the hidden dims of the input..r   Nr!   rÍ   rÒ   rÓ   éþÿÿÿ)rÀ   rä   Úflatten)r  Úx1Úx2s      r_   Úrotate_half_llmr3  „  sQ   € à	
ˆ3���1�ˆ9Œ€BØ	
ˆ3���1�ˆ9Œ€BÝŒ;˜˜˜R�y bÐ)Ñ)Ô)×1Ò1°"Ñ5Ô5Ð5r^   rÍ   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.
    .NrÒ   r!   rÓ   )rÞ   rÙ   Úrepeat_interleaver3  rÀ   r  )ÚqÚkr  r  Úunsqueeze_dimÚ
rotary_dimÚq_rotÚq_passÚk_rotÚk_passÚq_embedÚk_embeds               r_   Úapply_rotary_pos_embr@  ‹  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".
    Nr    Ú	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 )NTg      à¿r´   F)r|   rŸ   r    rC  r:   ru   rA   Úhead_dimrv   Únum_key_value_groupsÚ	is_causalr?   ry   Úscalingr¨   rµ   Úq_projÚk_projÚv_projÚo_proj©r   r    rC  r�   s      €r_   rŸ   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^   rk   Úposition_embeddingsrl   rd   r€   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 )NrÒ   rÍ   r!   r>   )ÚdropoutrH  )ÚsizerI  rJ  rK  rÜ   rE  r  r@  ÚupdaterC  r   Úget_interfacer    Ú_attn_implementationr%   Útrainingr?   rH  ÚreshapeÚ
contiguousrL  )r   rk   rN  rl   rd   r€   ÚbszÚq_lenÚ_Úquery_statesÚ
key_statesÚvalue_statesr  r  Úattention_interfaceÚattn_outputÚattn_weightss                    r_   r¿   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^   rž   )NNN)rP   rQ   rR   rS   ra   rV   rŸ   rÀ   rÁ   r\   r	   r   r   r¿   r‡   rˆ   s   @r_   rB  rB  ³  s  ø€ € € € € ðð ð
^ð ^˜ð ^¸3À¹:ð ^ð ^ð ^ð ^ð ^ð ^ð. IMØ.2Ø(,ð))ð ))à”|ð))ð # 5¤<°´Ð#=Ô>ÀÑEð))ð œ tÑ+ð	))ð
  ™ð))ð Ð-Ô.ð))ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð))ð ))ð ))ð ))ð ))ð ))ð ))ð ))r^   rB  c                   ó   — e Zd ZdS )ÚGlm4vTextMLPNr˜   r]   r^   r_   rb  rb  ù  r™   r^   rb  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 )ÚGlm4vTextDecoderLayerr    rC  c                 ó²  •— t          ¦   «                              ¦   «          |j        | _        t          ||¦  «        | _        t          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        t          |j        |j        ¬¦  «        | _
        t          |j        |j        ¬¦  «        | _        t          |j        |j        ¬¦  «        | _        d S )Nr  )r|   rŸ   r:   rB  Ú	self_attnrb  r  r—   rG   Úinput_layernormÚpost_attention_layernormÚpost_self_attn_layernormÚpost_mlp_layernormrM  s      €r_   rŸ   zGlm4vTextDecoderLayer.__init__þ  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^   NFrk   rN  rl   r  rd   rx   r¤   c           
      ó"  — |}|                       |¦  «        } | j        d||||||dœ|¤Ž\  }}	|                      |¦  «        }||z   }|}|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }||z   }|S )N)rk   rN  rl   r  rd   rx   r]   )rg  rf  ri  rh  r  rj  )
r   rk   rN  rl   r  rd   rx   r€   ÚresidualrZ  s
             r_   r¿   zGlm4vTextDecoderLayer.forward  sÉ   € ð !ˆà×,Ò,¨]Ñ;Ô;ˆð *˜4œ>ð 
Ø'Ø 3Ø)Ø%Ø+Øð
ð 
ð ð
ð 
Ñˆ�qð ×5Ò5°mÑDÔDˆØ  =Ñ0ˆð !ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆØ×/Ò/°Ñ>Ô>ˆØ  =Ñ0ˆàÐr^   )NNNNF)rP   rQ   rR   ra   rV   rŸ   r   rÀ   rÁ   r\   Ú
LongTensorr	   rY   ÚFloatTensorr¿   r‡   rˆ   s   @r_   rd  rd  ý  s  ø€ € € € € ð\˜ð \¸3ð \ð \ð \ð \ð \ð \ð ð IMØ.2Ø04Ø(,Ø!&ð#ð #à”|ð#ð # 5¤<°´Ð#=Ô>ÀÑEð#ð œ tÑ+ð	#ð
 Ô&¨Ñ-ð#ð  ™ð#ð ˜$‘;ð#ð 
ˆuÔ  %¨Ô(9¸5Ô;LÐ(LÔ"MÐPTÑ"TÐTÔ	Uð#ð #ð #ñ „^ð#ð #ð #ð #ð #r^   rd  c                   ó   — e Zd ZdS )ÚGlm4vModelOutputWithPastNr˜   r]   r^   r_   rp  rp  /  r™   r^   rp  c                   ó   — e Zd ZddgZd„ ZdS )ÚGlm4vPreTrainedModelrd  r  c                 ó  — t          j        | |¦  «         t          |t          ¦  «        rVd|j        t          j        d|j        dt
          j        ¬¦  «        |j        z  z  z  }t          j
        |j        |¦  «         d S d S )Ng      ð?r   r!   rÑ   )r   Ú_init_weightsr”   r®   ÚthetarÀ   rá   r±   rZ   ÚinitÚcopy_r  )r   Úmoduler  s      r_   rt  z"Glm4vPreTrainedModel._init_weights6  s   € ÝÔ% d¨FÑ3Ô3Ð3Ý�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^   N)rP   rQ   rR   Ú_no_split_modulesrt  r]   r^   r_   rr  rr  3  s/   € € € € € Ø0Ð2DÐEÐð2ð 2ð 2ð 2ð 2r^   rr  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 )ÚGlm4vVisionModelr    )ÚimageÚvideor  ©rk   Ú
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 r]   )r  )r%  rZ  r    s     €r_   r(  z-Glm4vVisionModel.__init__.<locals>.<listcomp>Q  s"   ø€ Ð$[Ð$[Ð$[À!Õ%5°fÑ%=Ô%=Ð$[Ð$[Ð$[r^   )r±   r²   r<   r  )rB   Úout_channelsr¦   r§   F)r|   rŸ   rH   rE   rÃ   rè   r£   Úpatch_embedr:   rA   r®   Úrotary_pos_embr¨   Ú
ModuleListÚranger9   Úblocksr°   rK   rM   r<   Úmergerr—   rG   Úpost_conv_layernormÚConv2dÚ
downsampleÚpost_layernormÚgradient_checkpointingÚ	post_init)r   r    rE  r�   s    ` €r_   rŸ   zGlm4vVisionModel.__init__F  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    rH   r„  )r   Úgrid_thwr  r„  s       r_   Úrot_pos_embzGlm4vVisionModel.rot_pos_embb  sr   € ÝŒð I�”Ô'ð  Ið  Ið  IÝØð	
ñ 	
ô 	
ð 	
õ
 /¨x¸Ô9PÑQÔQˆØ×,Ò,¨\Ñ:Ô:ˆØ˜|Ð+Ð+r^   rk   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€   rÒ   rÓ   rÍ   Nr   )Ú
cu_seqlensrN  r   r!   )Úlast_hidden_stateÚpooler_output)r    rH   r   rƒ  r‰  r„  rÀ   r  r  r  rè   rß   rÎ   r‡  rŒ  rÜ   rÙ   rÝ   r‹  r    rK   rˆ  r   )r   rk   r•  r€   r  r˜  Ú
rotary_embr"  rN  ÚseqlensÚblkÚmerged_hidden_statess               r_   r¿   zGlm4vVisionModel.forwardl  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   r5   rW   Úinput_modalitiesry  r  rý   Ú_can_record_outputsrŸ   r–  r   r   r   rÀ   rÁ   r   r   r\   r   r¿   r‡   rˆ   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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 )ÚGlm4vTextModelr~  r    c                 ó,  •‡— t          ¦   «                              ‰¦  «         t          j        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          ‰j        ‰j	        ¬¦  «        | _
        t          ‰¬¦  «        | _        | `| `d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r]   )rd  )r%  rC  r    s     €r_   r(  z+Glm4vTextModel.__init__.<locals>.<listcomp>®  s$   ø€ ÐgÐgÐg¸)Õ" 6¨9Ñ5Ô5ÐgÐgÐgr^   r  ©r    )r|   rŸ   r¨   r…  r†  rs   rn   r—   r:   rG   ro   r  r›  rT  Úhas_sliding_layersrË   s    `€r_   rŸ   zGlm4vTextModel.__init__«  s‘   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”mØgÐgÐgÐgÅuÈVÔMeÑGfÔGfÐgÑgÔgñ
ô 
ˆŒõ ! Ô!3¸Ô9LÐMÑMÔMˆŒ	Ý2¸&ÐAÑAÔAˆŒØÐ%ØÐ#Ð#Ð#r^   Nri   rl   r  rd   rj   rx   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Ð   rÒ   r   r!   )N.é   )r    rj   rl   rd   r  )r  )rl   r  rd   rN  )r™  rd   r]   )Ú
ValueErrorrÀ   ÚjitÚ
is_tracingr
   r    rm   Úget_seq_lengthrá   rÙ   rÎ   rÜ   r  Úndimr   r›  rn   ro   r   )r   ri   rl   r  rd   rj   rx   r€   Úpast_seen_tokensÚtext_position_idsÚmask_kwargsÚcausal_maskrk   rN  Údecoder_layerÚlayer_outputss                   r_   r¿   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   rd  rB  r   ra   rŸ   r   r   r   rÀ   rm  rÁ   r	   rn  rY   r   r   r\   r   r¿   r‡   rˆ   s   @r_   r¢  r¢  ¥  s7  ø€ € € € € à.Ø(ðð Ðð
$˜ð $ð $ð $ð $ð $ð $ð ØØð .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                   óŒ  ‡ — e Zd Zddg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ej        ej        f         fˆ 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 )Ú
Glm4vModelrd  r  c                 ó’   •— t          ¦   «                              |¦  «         t                               |j        ¦  «        | _        d S rž   )r|   rŸ   r{  Ú_from_configr7   ÚvisualrË   s     €r_   rŸ   zGlm4vModel.__init__  s7   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý&×3Ò3°FÔ4HÑIÔIˆŒˆˆr^   r}  )ÚmodalityNÚpixel_values_videosÚvideo_grid_thwr€   r¤   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 )	a[  
        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!   )r  r¹  rÏ   rÀ   r5  Únew_onesrÙ   r  ÚprodrH   Útolistr)  rš  )r   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^   ri   rj   Ú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.
        N©rÏ   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_embeddingsrÀ   rÚ   r    rŒ   rÛ   rÎ   Úallr�   rã   rÞ   rß   r   rÙ   Únumel)	r   ri   rj   rË  rÌ  Úspecial_image_maskÚspecial_video_maskÚn_image_tokensÚn_video_tokenss	            r_   Úget_placeholder_maskzGlm4vModel.get_placeholder_mask,  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^   c                 ó’   •— |�*t          j        ||dd…df         d¬¦  «        }d|dd…df<    t          ¦   «         j        dd|i|¤Ž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¼  r]   )rÀ   r5  r|   Úget_rope_index)r   r¼  Úsuper_kwargsr�   s      €r_   rØ  zGlm4vModel.get_rope_indexV  si   ø€ ð> Ð%Ý"Ô4°^À^ÐTUÐTUÐTUÐWXÐTXÔEYÐ_`ÐaÑaÔaˆNØ#$ˆN˜1˜1˜1˜a˜4Ñ à%�u‰wŒwÔ%ÐTÐT°^ÐTÀ|ÐTÐTÐTr^   Úrope_deltaszv5.10)Úversionrl   r  rd   Úpixel_valuesÚimage_grid_thwÚmm_token_type_idsc           	      óð  — |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Ì  )ri   rÝ  r¼  rj   rl   rd   rÞ  )ri   r  rl   rd   rj   rÚ  r]   )rª  rÏ  Úget_image_featuresrš  rÀ   r  rß   rÎ   rÏ   rÖ  Úmasked_scatterrÊ  Úcompute_3d_position_idsÚlanguage_modelrp  rÚ  )r   ri   rl   r  rd   rj   rÜ  r»  rÝ  r¼  rÞ  r€   Úimage_embedsÚ
image_maskrZ  rÉ  Ú
video_maskÚoutputss                     r_   r¿   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ž   )NN)
NNNNNNNNNN)rP   rQ   rR   ry  rŸ   r   r   r   rÀ   rn  rm  r   r   r\   r   rÊ  rÖ  rÁ   rØ  r   r	   Ú	IntTensorrp  r¿   r‡   rˆ   s   @r_   r¶  r¶    s×  ø€ € € € € Ø0Ð2DÐEÐðJð Jð Jð Jð Jð  Ð¨Ð1Ñ1Ô1ØØð 37ðð à"Ô.ðð Ô(¨4Ñ/ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñ „^ñ Ôñ 2Ô1ððB 48Ø37ð(6ð (6àÔ#ð(6ð Ô(ð(6ð Ô)¨DÑ0ð	(6ð
 Ô)¨DÑ0ð(6ð (6ð (6ð (6ðX 37ð#Uð #UàÔ(¨4Ñ/ð#Uð 
ˆuŒ|˜Uœ\Ð)Ô	*ð	#Uð #Uð #Uð #Uð #Uð #UðJ €_�]¨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                   ó   — e Zd ZdS )ÚGlm4vCausalLMOutputWithPastNr˜   r]   r^   r_   rê  rê  Â  r™   r^   rê  c                   ó²  ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 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	 ddej        dz  dej        dz  deej        ej        f         fd„Zˆ xZS )ÚGlm4vForConditionalGenerationNr   ri   rl   r  rd   rj   ÚlabelsrÜ  r»  rÝ  r¼  rÞ  Úlogits_to_keepr€   r¤   c                 ó~  —  | 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 ..."
        ```)
ri   rÜ  r»  rÝ  r¼  rÞ  r  rl   rd   rj   r   N)Úlogitsrí  rq   )Úlossrð  rd   rk   r  rÚ  r]   )Úmodelr”   rV   ÚsliceÚlm_headÚloss_functionr    rc   rq   rê  rd   rk   r  rÚ  )r   ri   rl   r  rd   rj   rí  rÜ  r»  rÝ  r¼  rÞ  rî  r€   rç  rk   Úslice_indicesrð  rñ  s                      r_   r¿   z%Glm4vForConditionalGeneration.forwardÇ  s  € ðt �$”*ð 
ØØ%Ø 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^   TFc                 ón   •—  t          ¦   «         j        |f|||||||	|
||dœ
|¤Ž}|s|r
d |d<   d |d<   |S )N)
rd   rl   rj   r  rÜ  r»  rÝ  r¼  rx   Úis_first_iterationrÜ  r»  )r|   Úprepare_inputs_for_generation)r   ri   rd   rl   rj   r  rx   rÜ  r»  rÝ  r¼  rø  r€   Úmodel_inputsr�   s                 €r_   rù  z;Glm4vForConditionalGeneration.prepare_inputs_for_generation"  s~   ø€ ð" =•u‘w”wÔ<Øð
à+Ø)Ø'Ø%Ø%Ø 3Ø)Ø)ØØ1ð
ð 
ð ð
ð 
ˆð "ð 	7 ið 	7Ø+/ˆL˜Ñ(Ø26ˆLÐ.Ñ/àÐ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Ï  rÀ   rÚ   r    rŽ   rÛ   rÎ   r�   r‘   râ   rV   rã   )r   ri   rj   Ú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_numsH  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^   )NNNNNNNNNNNr   )
NNNNTNNNNFrž   )rP   rQ   rR   rÀ   rm  rÁ   r	   rn  rè  rV   r   r   r\   rê  r¿   rù  r  r‡   rˆ   s   @r_   rì  rì  Æ  sö  ø€ € € € € ð .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
ð Y
ð| ØØØØØØ ØØØ ð$ð $ð $ð $ð $ð $ðR .2ð6*ð 6*àÔ# dÑ*ð6*ð ”| dÑ*ð6*ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð	6*ð 6*ð 6*ð 6*ð 6*ð 6*ð 6*ð 6*r^   rì  c                   ó$   — e Zd ZddddœddidœZdS )ÚGlm4vProcessorKwargsFT)ÚpaddingÚreturn_token_type_idsÚreturn_mm_token_type_idsÚreturn_metadata)Útext_kwargsÚvideos_kwargsN)rP   rQ   rR   Ú	_defaultsr]   r^   r_   r  r  �  s9   € € € € € ð Ø%*Ø(,ð
ð 
ð
 ,¨TÐ2ðð €I€I€Ir^   r  c                   ój   ‡ — e Zd Zdˆ fd„	Zdededefd„Zdedeee                  fd„Z	dd
efd„Z
ˆ xZS )ÚGlm4vProcessorNc                 ó2  •— t          ¦   «                              ||||¬¦  «         t          |d¦  «        sdn|j        | _        t          |d¦  «        sdn|j        | _        |                     d¦  «        | _        |                     d¦  «        | _        d S )N)Úchat_templateÚimage_tokenz	<|image|>Úvideo_tokenz	<|video|>z<|begin_of_video|>z<|end_of_video|>)r|   rŸ   Úhasattrr  r  Úconvert_tokens_to_idsÚvideo_start_idÚvideo_end_id)r   Úimage_processorÚ	tokenizerÚvideo_processorr  r€   r�   s         €r_   rŸ   zGlm4vProcessor.__init__�  s—   ø€ Ý‰Œ×Ò˜¨)°_ÐTaÐÑbÔbÐbÝ.5°iÀÑ.OÔ.OÐj˜;˜;ÐU^ÔUjˆÔÝ.5°iÀÑ.OÔ.OÐj˜;˜;ÐU^ÔUjˆÔØ'×=Ò=Ð>RÑSÔSˆÔØ%×;Ò;Ð<NÑOÔOˆÔÐÐr^   Úvideo_inputsÚ	video_idxr¤   c                 óÈ  — | j         j        dz  }|d         |         d         }|d         |                              ¦   «         |z  |z  }|d         |         }d}|j        €t                               d¦  «         |j        €dn|j        |_        |j        d d d…         }g }	t          dt          |¦  «        ¦  «        D ]}
|	 	                    ||
         ¦  «         Œ|	d |…         }t          |¦  «        |k     r2| 	                    |r|d         nd¦  «         t          |¦  «        |k     °2t          |¦  «        D ]&}||         }|  
                    ||¬	¦  «        }||z  }Œ'|S )
Nr!   r¼  r   Úvideo_metadataÚ a  GLM4V requires frame timestamps to construct prompts, but the `fps` of the input video could not be inferred. Probably `video_metadata` was missing from inputs and you passed pre-sampled frames. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.r8   rÒ   )Únum_image_tokens)r  Ú
merge_sizerÀ  ÚfpsÚloggerÚwarning_onceÚ
timestampsr†  ÚlenÚappendÚreplace_frame_token_id)r   r  r  Úmerge_lengthÚ
num_framesr   ÚmetadataÚvideo_structurer%  Úunique_timestampsÚidxÚselected_timestampsÚ	frame_idxÚtimestamp_secÚframe_structures                  r_   Úreplace_video_tokenz"Glm4vProcessor.replace_video_token”  s   € ØÔ+Ô6¸Ñ9ˆØ!Ð"2Ô3°IÔ>¸qÔAˆ
Ø'Ð(8Ô9¸)ÔD×IÒIÑKÔKÈ|Ñ[Ð_iÑiÐØÐ 0Ô1°)Ô<ˆØˆàŒ<ÐÝ×Òðeñô ð ð
 &œ\Ð1�r�r°x´|ˆŒØÔ(¨¨¨1¨Ô-ˆ
àÐÝ˜�C 
™OœOÑ,Ô,ð 	6ð 	6ˆCØ×$Ò$ Z°¤_Ñ5Ô5Ð5Ð5à/°°°Ô<ÐÝÐ%Ñ&Ô&¨Ò3Ð3Ø×&Ò&ÐBUÐ'\Ð':¸2Ô'>Ð'>Ð[\Ñ]Ô]Ð]õ Ð%Ñ&Ô&¨Ò3Ð3õ ˜zÑ*Ô*ð 	/ð 	/ˆIØ/°	Ô:ˆMØ"×9Ò9¸-ÐZjÐ9ÑkÔkˆOØ˜Ñ.ˆOˆOàÐr^   ri   c                 ó€  — g }|D ]¸}t          j        |¦  «        }t          j        |¦  «        }t          j        || j        k    d¬¦  «        }t          j        || j        k    d¬¦  «        }||k    }d||| j        k    |z  <   d||| j        k    | z  <   |                     |                     ¦   «         ¦  «         Œ¹|S )Nr   )Úaxisr!   rÍ   )	ÚnpÚarrayÚ
zeros_likerâ   r  r  rŒ   r'  rÁ  )	r   ri   rÞ  ÚinputÚ	array_idsÚmm_token_typesÚstartsÚendsÚis_video_modalitys	            r_   Úcreate_mm_token_type_idsz'Glm4vProcessor.create_mm_token_type_ids³  sÕ   € ð ÐØð 	>ð 	>ˆEÝœ ™œˆIÝœ]¨5Ñ1Ô1ˆNõ
 ”Y˜y¨DÔ,?Ò?ÀaÐHÑHÔHˆFÝ”9˜Y¨$Ô*;Ò;À!ÐDÑDÔDˆDØ &¨¢ÐàUVˆN˜I¨Ô)<Ò<Ð@QÑQÑRØXYˆN˜I¨Ô)<Ò<ÐBSÐASÑTÑUØ×$Ò$ ^×%:Ò%:Ñ%<Ô%<Ñ=Ô=Ð=Ð=Ø Ð r^   rÍ   r   c                 ó<   — d| j         |z  › dt          |¦  «        › �S )Nz<|begin_of_image|>z<|end_of_image|>)r  rV   )r   r1  r   s      r_   r(  z%Glm4vProcessor.replace_frame_token_idÈ  s+   € Øm DÔ$4Ð7GÑ$GÐmÐmÕY\Ð]jÑYkÔYkÐmÐmÐmr^   )NNNN©rÍ   )rP   rQ   rR   rŸ   r†   rV   rX   r3  r[   r?  r(  r‡   rˆ   s   @r_   r  r  Œ  sÀ   ø€ € € € € ðPð Pð Pð Pð Pð Pð°ð Àð Èð ð ð ð ð>!°$ð !¸4ÀÀSÄ	¼?ð !ð !ð !ð !ð*nð nÀcð nð nð nð nð nð nð nð nr^   r  )	rŠ   ra   r5   rì  r¶  rr  r  r¢  r{  rA  )mr’  Úcollections.abcr   Únumpyr6  rÀ   Útorch.nnr¨   Útorch.nn.functionalÚ
functionalrå   Úhuggingface_hub.dataclassesr   r   r  r   rv  Úactivationsr   Úcache_utilsr	   r
   Úconfiguration_utilsr   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.deprecationr   Úutils.genericr   r   r   Úutils.output_capturingr   Úvision_utilsr   r    Úglm4.modeling_glm4r"   r#   r$   r%   Úqwen2_5_vl.modeling_qwen2_5_vlr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   Úqwen2_vl.modeling_qwen2_vlr0   Úqwen2_vl.processing_qwen2_vlr1   r2   Ú
get_loggerrP   r#  r5   ra   rŠ   r—   r›   r£   r®   r©   r°   rÃ   rý   r  r  r3  r@  rB  rb  rd  rp  rr  r{  r¢  r¶  rê  rì  r  r  Ú__all__r]   r^   r_   ú<module>r]     sø  ðð €€€Ø $Ð $Ð $Ð $Ð $Ð $à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ø cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð 
ˆÔ	˜HÑ	%Ô	%€ð €Ð9Ð:Ñ:Ô:Øð%$ð %$ð %$ð %$ð %$Ð(ñ %$ô %$ñ „ñ ;Ô:ð%$ðP €Ð9Ð:Ñ:Ô:Øð7(ð 7(ð 7(ð 7(ð 7(Ð&ñ 7(ô 7(ñ „ñ ;Ô:ð7(ðt €Ð9Ð:Ñ:Ô:Øð1(ð 1(ð 1(ð 1(ð 1(Ð"ñ 1(ô 1(ñ „ñ ;Ô:ð1(ðj	ð 	ð 	ð 	ð 	�;ñ 	ô 	ð 	ð8ð 8ð 8ð 8ð 8�Mñ 8ô 8ð 8ð	mð 	mð 	mð 	mð 	mÐ4ñ 	mô 	mð 	mð	ð 	ð 	ð 	ð 	Ð!>ñ 	ô 	ð 	ðfð fð fð fð f˜RœYñ fô fð fð"Gð Gð Gð Gð G˜BœIñ Gô Gð GðTRð Rð Rð Rð RÐ4ñ Rô Rð Rð5ð 5ð 5ð 5ð 5Ð,ñ 5ô 5ð 5ðð ð ð ð Ð2ñ ô ð ð86ð 6ð 6ð%ð %ð %ð %ðPC)ð C)ð C)ð C)ð C)˜œñ C)ô C)ð C)ðL	ð 	ð 	ð 	ð 	�7ñ 	ô 	ð 	ð/ð /ð /ð /ð /Ð6ñ /ô /ð /ðd	ð 	ð 	ð 	ð 	Ð<ñ 	ô 	ð 	ð2ð 2ð 2ð 2ð 2Ð4ñ 2ô 2ð 2ðe
ð e
ð e
ð e
ð e
Ð+ñ e
ô e
ð e
ðP]
ð ]
ð ]
ð ]
ð ]
Ð(ñ ]
ô ]
ð ]
ð@z
ð z
ð z
ð z
ð z
�ñ z
ô z
ð z
ðz	ð 	ð 	ð 	ð 	Ð"Bñ 	ô 	ð 	ðx*ð x*ð x*ð x*ð x*Ð$Fñ x*ô x*ð x*ðvð ð ð ð Ð1ñ ô ð ð=nð =nð =nð =nð =nÐ%ñ =nô =nð =nð@
ð 
ð 
€€€r^   