§
    ‚Štji  ã                   óÂ  — d dl mZ d dlmZ d dlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZmZmZmZ dd
lmZ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 ddl m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z*  e¦   «         r
d dl+Z+d dl+m,Z,  G d„ de,j-        ¦  «        Z.d„ Z/de+j0        de1de+j0        fd„Z2	 d@de,j-        de+j0        d e+j0        d!e+j0        d"e+j0        dz  d#e3d$e3d%ee         fd&„Z4dAd'„Z5 G d(„ d)e,j-        ¦  «        Z6 G d*„ d+e,j-        ¦  «        Z7 G d,„ d-e¦  «        Z8e G d.„ d/e¦  «        ¦   «         Z9 G d0„ d1e9¦  «        Z: G d2„ d3e,j-        ¦  «        Z;e G d4„ d5e¦  «        ¦   «         Z< ed6¬7¦  «         G d8„ d9e9¦  «        ¦   «         Z= ed:¬7¦  «        e G d;„ d<e¦  «        ¦   «         ¦   «         Z> ed6¬7¦  «         G d=„ d>e9e¦  «        ¦   «         Z?g d?¢Z@dS )Bé    )ÚCallable)Ú	dataclass)ÚOptionalé   )ÚACT2FN)ÚCache)ÚGenerationMixin)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚCausalLMOutputWithPastÚModelOutput)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚis_torch_availableÚtorch_compilable_check)Úcan_return_tupleÚmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )Ú	AutoModelé   )ÚGlmAsrConfigÚGlmAsrEncoderConfigN)Únnc                   óÔ   ‡ — 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ˆ xZS )ÚGlmAsrRotaryEmbeddingÚinv_freqNÚconfigc                 ó²  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        | j        j        d         | _        | j        }| j        dk    rt          | j                 } || j        |¦  «        \  }| _
        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         d S )NÚ	rope_typeÚdefaultr$   F)Ú
persistentÚoriginal_inv_freq)ÚsuperÚ__init__Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr%   Úrope_parametersr'   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)Úselfr%   ÚdeviceÚrope_init_fnr$   Ú	__class__s        €úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/glmasr/modeling_glmasr.pyr,   zGlmAsrRotaryEmbedding.__init__5   sÊ   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&Ý.¨t¬~Ô>ˆLØ+7¨<¸¼ÀVÑ+LÔ+LÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUÐUÐUó    r6   ztorch.deviceÚseq_lenÚreturnztorch.Tensorc                 óV  — | j         d         }| j                              dd¦  «        }t          | dd¦  «        p| j        | j        z  }t          ||z  ¦  «        }d}d|t          j        d|dt          j        ¬¦  «         	                    |t          j
        ¬	¦  «        |z  z  z  }||fS )
a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚpartial_rotary_factorg      ð?Úhead_dimNr   r   ©Údtype)r6   rB   )r0   ÚgetÚgetattrÚhidden_sizeÚnum_attention_headsÚintÚtorchÚarangeÚint64ÚtoÚfloat)	r%   r6   r;   Úbaser?   r@   ÚdimÚattention_factorr$   s	            r9   r1   z5GlmAsrRotaryEmbedding.compute_default_rope_parametersE   sº   € ð& Ô% lÔ3ˆØ &Ô 6× :Ò :Ð;RÐTWÑ XÔ XÐÝ˜6 :¨tÑ4Ô4Ðh¸Ô8JÈfÔNhÑ8hˆÝ�(Ð2Ñ2Ñ3Ô3ˆàÐð Ø•U”\ ! S¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r:   c                 óN  — | j         d d d …d f                              ¦   «                              |j        d         dd¦  «                             |j        ¦  «        }|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¦  «        }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   ÚmpsÚcpuF)Údevice_typeÚenabledr   ©rN   rA   )r$   rL   ÚexpandÚshaperK   r6   Ú
isinstanceÚtypeÚstrr   Ú	transposerH   ÚcatÚcosr2   ÚsinrB   )
r5   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrT   ÚfreqsÚembr^   r_   s
             r9   ÚforwardzGlmAsrRotaryEmbedding.forwarde   s·  € ð !œM¨$°°°°4¨-Ô8×>Ò>Ñ@Ô@×GÒGÈÔHZÐ[\ÔH]Ð_aÐcdÑeÔe×hÒhÐijÔiqÑrÔrÐØ ,¨Q¨Q¨Q°°a°a°a¨ZÔ 8× >Ò >Ñ @Ô @Ðå'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 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   ÃBE&Å&E*Å-E*©N)NNN)Ú__name__Ú
__module__Ú__qualname__rH   ÚTensorÚ__annotations__r   r,   Ústaticmethodr   rG   ÚtuplerL   r1   Úno_gradr   rf   Ú__classcell__©r8   s   @r9   r#   r#   2   sù   ø€ € € € € € ØŒlÐÐÑðVð V˜|ð Vð Vð Vð Vð Vð Vð  à&*Ø+/Ø"ð*ð *Ø˜tÑ#ð*à˜Ô(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ô	%ð	*ð *ð *ñ „\ð*ð> €U„]�_„_Øð<ð <ñ Ôñ „_ð<ð <ð <ð <ð <r:   r#   c                 óœ   — | dd| j         d         dz  …f         }| d| j         d         dz  d…f         }t          j        | |fd¬¦  «        S )z*Rotates half the hidden dims of the input..NrQ   r   rV   )rX   rH   r]   )r`   Úx1Úx2s      r9   Úrotate_halfru   u   s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r:   Úhidden_statesÚn_repr<   c                 ó¸   — | j         \  }}}}|dk    r| S | dd…dd…ddd…dd…f                              |||||¦  «        } |                      |||z  ||¦  «        S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r   N)rX   rW   Úreshape)rv   rw   ÚbatchÚnum_key_value_headsÚslenr@   s         r9   Ú	repeat_kvr}   |   s„   € ð
 2?Ô1DÑ.€EÐ  hØ�‚z€zØÐØ! ! ! ! Q Q Q¨¨a¨a¨a°°°Ð"2Ô3×:Ò:¸5ÐBUÐW\Ð^bÐdlÑmÔm€MØ× Ò  Ð(;¸eÑ(CÀTÈ8ÑTÔTÐTr:   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t          || j        ¦  «        }t          || j        ¦  «        }	t          j        ||                     dd¦  «        ¦  «        |z  }
|�|
|z   }
t
          j                             |
dt          j        ¬¦  «         	                    |j
        ¦  «        }
t
          j                             |
|| j        ¬¦  «        }
t          j        |
|	¦  «        }|                     dd¦  «                             ¦   «         }||
fS )Nr   r   rQ   )rN   rB   )ÚpÚtrainingr   )r}   Únum_key_value_groupsrH   Úmatmulr\   r!   Ú
functionalÚsoftmaxÚfloat32rK   rB   r…   r‰   Ú
contiguous)r   r€   r�   r‚   rƒ   r„   r…   r†   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r9   Úeager_attention_forwardr”   ˆ   sé   € õ ˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r:   c                 ó˜  — |                      |¦  «        }|                      |¦  «        }|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 )NrQ   .rV   )Ú	unsqueezerX   ru   rH   r]   )ÚqÚkr^   r_   ra   Úunsqueeze_dimÚ
rotary_dimÚq_rotÚq_passÚk_rotÚk_passÚq_embedÚk_embeds                r9   Úapply_rotary_pos_embr¡   ¡   sð   € Ø
�-Š-˜Ñ
&Ô
&€CØ
�-Š-˜Ñ
&Ô
&€Cà”˜2”€JØ�c˜;˜J˜;Ð&Ô'¨¨3°
°°Ð+;Ô)<ˆ6€EØ�c˜;˜J˜;Ð&Ô'¨¨3°
°°Ð+;Ô)<ˆ6€Eð �s‰{�{¨5Ñ1Ô1°CÑ7Ñ8€GØ�s‰{�{¨5Ñ1Ô1°CÑ7Ñ8€Gõ Œi˜ &Ð)¨rÐ2Ñ2Ô2€GÝŒi˜ &Ð)¨rÐ2Ñ2Ô2€GØ�GÐÐr:   c                   ó¬   ‡ — e Zd ZdZdedefˆ fd„Z	 ddej        de	ej        ej        f         dz  de
e         d	e	ej        ej        f         fd
„Zˆ xZS )ÚGlmAsrAttentionz=Multi-headed attention from 'Attention Is All You Need' paperr%   Ú	layer_idxc                 ó†  •— t          ¦   «                              ¦   «          || _        || _        t	          |d|j        |j        z  ¦  «        | _        |j        |j        z  | _	        | j        dz  | _
        |j        | _        d| _        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 )Nr@   g      à¿FT©Úbias)r+   r,   r%   r¤   rD   rE   rF   r@   r{   rŠ   r„   Úattention_dropoutÚ	is_causalr!   ÚLinearÚq_projÚk_projÚv_projÚo_proj©r5   r%   r¤   r8   s      €r9   r,   zGlmAsrAttention.__init__¶   s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒÝ ¨
°FÔ4FÈ&ÔJdÑ4dÑeÔeˆŒØ$*Ô$>À&ÔB\Ñ$\ˆÔ!Ø”} dÑ*ˆŒØ!'Ô!9ˆÔØˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐeiÐjÑjÔjˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐejÐkÑkÔkˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐeiÐjÑjÔjˆŒÝ”i Ô :¸T¼]Ñ JÈFÔL^ÐeiÐjÑjÔjˆŒˆˆr:   Nrv   Úposition_embeddingsr†   r<   c                 óà  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|\  }	}
t          |||	|
¦  «        \  }}t          j	        | j
        j        t          ¦  «        } || |||fd | j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )NrQ   r   r   r~   )rƒ   r…   r„   )rX   r@   r«   Úviewr\   r¬   r­   r¡   r   Úget_interfacer%   Ú_attn_implementationr”   r‰   r¨   r„   ry   r�   r®   )r5   rv   r°   r†   Úinput_shapeÚhidden_shapeÚquery_statesr�   r‘   r^   r_   Úattention_interfacer“   r’   s                 r9   rf   zGlmAsrAttention.forwardÄ   sš  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆà&‰ˆˆSÝ#7¸ÀjÐRUÐWZÑ#[Ô#[Ñ ˆ�jå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØð		%
ð
  Ø#œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r:   rg   )rh   ri   rj   Ú__doc__r   rG   r,   rH   rk   rn   r   r   rf   rp   rq   s   @r9   r£   r£   ³   sÈ   ø€ € € € € ØGÐGðk˜|ð k¸ð kð kð kð kð kð kð" IMð!)ð !)à”|ð!)ð # 5¤<°´Ð#=Ô>ÀÑEð!)ð Ð+Ô,ð	!)ð
 
ˆuŒ|˜Uœ\Ð)Ô	*ð!)ð !)ð !)ð !)ð !)ð !)ð !)ð !)r:   r£   c                   ó4   ‡ — e Zd Zˆ fd„Zdej        fd„Zˆ xZS )Ú	GlmAsrMLPc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        t          |j	                 | _
        d S rg   )r+   r,   r!   rª   rE   Úintermediate_sizeÚfc1Úfc2r   Ú
hidden_actÚact_fn©r5   r%   r8   s     €r9   r,   zGlmAsrMLP.__init__é   s^   ø€ Ý‰Œ×ÒÑÔÐÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒÝ˜VÔ.Ô/ˆŒˆˆr:   rv   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rg   )r¾   rÁ   r¿   )r5   rv   s     r9   rf   zGlmAsrMLP.forwardï   s;   € ØŸš Ñ/Ô/ˆØŸš MÑ2Ô2ˆØŸš Ñ/Ô/ˆØÐr:   )rh   ri   rj   r,   rH   rk   rf   rp   rq   s   @r9   r»   r»   è   sU   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð U¤\ð ð ð ð ð ð ð ð r:   r»   c            	       óŽ   ‡ — e Zd Zdedefˆ fd„Z	 d
dej        deej        ej        f         dz  de	e
         dej        fd	„Zˆ xZS )ÚGlmAsrEncoderLayerr%   r¤   c                 ó,  •— t          ¦   «                              ¦   «          |j        | _        t          ||¬¦  «        | _        t          |¦  «        | _        t          j        |j        ¦  «        | _	        t          j        |j        ¦  «        | _
        d S )N)r%   r¤   )r+   r,   rE   r£   Ú	self_attnr»   Úmlpr!   Ú	LayerNormÚinput_layernormÚpost_attention_layernormr¯   s      €r9   r,   zGlmAsrEncoderLayer.__init__÷   sw   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔå(°À)ÐLÑLÔLˆŒå˜VÑ$Ô$ˆŒÝ!œ|¨FÔ,>Ñ?Ô?ˆÔÝ(*¬°VÔ5GÑ(HÔ(HˆÔ%Ð%Ð%r:   Nrv   r°   r†   r<   c                 óÆ   — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)rv   r°   © )rÊ   rÇ   rË   rÈ   )r5   rv   r°   r†   ÚresidualÚ_s         r9   rf   zGlmAsrEncoderLayer.forward  s•   € ð !ˆØ×,Ò,¨]Ñ;Ô;ˆà)˜4œ>ð 
Ø'Ø 3ð
ð 
ð ð
ð 
Ñˆ�qð
 ! =Ñ0ˆð !ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆØÐr:   rg   )rh   ri   rj   r   rG   r,   rH   rk   rn   r   r   rf   rp   rq   s   @r9   rÅ   rÅ   ö   s¶   ø€ € € € € ðI˜|ð I¸ð Ið Ið Ið Ið Ið Ið IMðð à”|ðð # 5¤<°´Ð#=Ô>ÀÑEðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð r:   rÅ   c                   ó>   — e Zd ZU eed<   dZdZdZdgZdgZ	dZ
dZdZdS )ÚGlmAsrPreTrainedModelr%   Úmodel)ÚaudioÚtextTr£   Úpast_key_valuesN)rh   ri   rj   r   rl   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_attention_backendrÍ   r:   r9   rÑ   rÑ     sS   € € € € € € àÐÐÑØÐØ(ÐØ&*Ð#Ø*Ð+ÐØ#4Ð"5ÐØÐØ€NØ"&ÐÐÐr:   rÑ   c                   ó�   ‡ — e Zd ZU eed<   dZdZdgZee	dœZ
defˆ fd„Zeeedee         fd„¦   «         ¦   «         ¦   «         Zˆ xZS )	ÚGlmAsrEncoderr%   Úinput_featuresrÓ   rÅ   )rv   Ú
attentionsc                 óô  •‡— t          ¦   «                              ‰¦  «         t          j        ‰j        ‰j        dd¬¦  «        | _        t          j        ‰j        ‰j        ddd¬¦  «        | _        t          j        ˆfd„t          ‰j
        ¦  «        D ¦   «         ¦  «        | _        t          j        ‰j        ¦  «        | _        t          ‰¬¦  «        | _        d| _        |                      ¦   «          d S )	Nr   r   )Úkernel_sizeÚpaddingr   )rã   Ústriderä   c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rÍ   )rÅ   )Ú.0r¤   r%   s     €r9   ú
<listcomp>z*GlmAsrEncoder.__init__.<locals>.<listcomp>7  s$   ø€ ÐdÐdÐd°yÕ ¨	Ñ2Ô2ÐdÐdÐdr:   )r%   F)r+   r,   r!   ÚConv1dÚnum_mel_binsrE   Úconv1Úconv2Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersrÉ   Únormr#   Ú
rotary_embÚgradient_checkpointingÚ	post_initrÂ   s    `€r9   r,   zGlmAsrEncoder.__init__1  sÞ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”Y˜vÔ2°FÔ4FÐTUÐ_`ÐaÑaÔaˆŒ
Ý”Y˜vÔ1°6Ô3EÐSTÐ]^ÐhiÐjÑjÔjˆŒ
å”mØdÐdÐdÐdÅEÈ&ÔJbÑDcÔDcÐdÑdÔdñ
ô 
ˆŒõ ”L Ô!3Ñ4Ô4ˆŒ	Ý/°vÐ>Ñ>Ô>ˆŒØ&+ˆÔ#Ø�ŠÑÔÐÐÐr:   r†   c                 óø  — t           j                             |                      |¦  «        ¦  «        }t           j                             |                      |¦  «        ¦  «        }|                     dd¦  «        }|}|                      |t          j        |j	        d         |j
        ¬¦  «        d d d …f         ¬¦  «        }| j        D ]} ||fd|i|¤Ž}Œ|                      |¦  «        }t          |¬¦  «        S )Nr   r   ©r6   )ra   r°   )Úlast_hidden_state)r!   rŒ   Úgelurë   rì   r\   rò   rH   rI   rX   r6   rð   rñ   r   )r5   rà   r†   Úinputs_embedsrv   r°   Úencoder_layers          r9   rf   zGlmAsrEncoder.forward>  s  € õ œ×*Ò*¨4¯:ª:°nÑ+EÔ+EÑFÔFˆÝœ×*Ò*¨4¯:ª:°mÑ+DÔ+DÑEÔEˆØ%×/Ò/°°1Ñ5Ô5ˆà%ˆØ"ŸošoØ­¬°]Ô5HÈÔ5KÐTaÔThÐ(iÑ(iÔ(iÐjnÐpqÐpqÐpqÐjqÔ(rð .ñ 
ô 
Ðð "œ[ð 	lð 	lˆMØ)˜M¨-ÐkÐkÐM`ÐkÐdjÐkÐkˆMˆMàŸ	š	 -Ñ0Ô0ˆÝ)¸MÐJÑJÔJÐJr:   )rh   ri   rj   r    rl   Úmain_input_namer×   rÙ   rÅ   r£   Ú_can_record_outputsr,   r   r   r   r   r   rf   rp   rq   s   @r9   rß   rß   '  sÅ   ø€ € € € € € ØÐÐÑØ&€OØÐØ-Ð.Ðà+Ø%ðð Ðð
Ð2ð ð ð ð ð ð ð  ØØðK°Ð7IÔ0Jð Kð Kð Kñ „^ñ „_ñ  ÔðKð Kð Kð Kð Kr:   rß   c                   ó.   ‡ — e Zd ZdZdefˆ fd„Zd„ Zˆ xZS )ÚGlmAsrMultiModalProjectorz�
    Audio adaptor (small MLP) that projects GlmAsrEncoder features
    to the LLM embedding space so they can replace `<sound>` tokens.
    r%   c                 ó:  •— t          ¦   «                              ¦   «          t          j        |j        j        |j        j        dz  ¦  «        | _        t          |j
                 | _        t          j        |j        j        dz  |j        j        ¦  «        | _        d S )Nr   )r+   r,   r!   rª   Úaudio_configr½   Útext_configrE   Úlinear_1r   Úprojector_hidden_actÚactÚlinear_2rÂ   s     €r9   r,   z"GlmAsrMultiModalProjector.__init__X  su   ø€ Ý‰Œ×ÒÑÔÐÝœ	 &Ô"5Ô"GÈÔI[ÔIgÐjkÑIkÑlÔlˆŒÝ˜&Ô5Ô6ˆŒÝœ	 &Ô"4Ô"@À1Ñ"DÀfÔFXÔFdÑeÔeˆŒˆˆr:   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rg   )r  r  r  )r5   Úaudio_featuresrv   s      r9   rf   z!GlmAsrMultiModalProjector.forward^  s;   € ØŸš nÑ5Ô5ˆØŸš Ñ/Ô/ˆØŸš mÑ4Ô4ˆØÐr:   )rh   ri   rj   r¹   r   r,   rf   rp   rq   s   @r9   rþ   rþ   R  sd   ø€ € € € € ðð ð
f˜|ð fð fð fð fð fð fðð ð ð ð ð ð r:   rþ   c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚGlmAsrModelOutputWithPastzg
    audio_hidden_states (`torch.FloatTensor`, *optional*):
        Projected audio hidden states.
    NÚaudio_hidden_states)rh   ri   rj   r¹   r
  rH   ÚFloatTensorrl   rÍ   r:   r9   r	  r	  e  s7   € € € € € € ðð ð
 59Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð8r:   r	  z~
    The GlmAsr model which consists of a fine-tuned Whisper encoder, a multi-modal projector and a Llama language model.
    ©Úcustom_introc                   ó®  ‡ — e Zd ZdZdZdZˆ fd„Ze ed¬¦  «        de	j
        de	j        dee         deez  fd	„¦   «         ¦   «         Zd
e	j        de	j
        de	j
        fd„Zee	 	 	 	 	 	 	 	 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dz  de	j
        dz  dedz  dee         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚGlmAsrModelNc                 ó  •— t          ¦   «                              |¦  «         t          j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        t          |¦  «        | _	        |  
                    ¦   «          d S rg   )r+   r,   r   Úfrom_configr   Úaudio_towerr  Úlanguage_modelrþ   Úmulti_modal_projectorrô   rÂ   s     €r9   r,   zGlmAsrModel.__init__y  sm   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý$Ô0°Ô1DÑEÔEˆÔÝ'Ô3°FÔ4FÑGÔGˆÔÝ%>¸vÑ%FÔ%FˆÔ"Ø�ŠÑÔÐÐÐr:   zgCompute audio embeddings from log-mel input features using the audio encoder and multi-modal projector.r  rà   Úinput_features_maskr†   r<   c                 ó
  —  | j         |fddi|¤Ž}|j        }|                     |j        d         d| j        j        j        ¦  «        }|                      |¦  «        }|                     d¦  «        }dD ]\  }}	}
|d|z  z   |	dz
  z
  dz
  |
z  dz   }Œd}||z
  |z  dz   }t          j
        |j        d         |j        ¬	¦  «        d
d
d
…f         |d
d
…d
f         k     }||                     |j        ¦  «                 |_        |S )a1  
        input_features (`torch.FloatTensor`):
            Float values of mel features extracted from the raw speech waveform.
        input_features_mask (`torch.Tensor` of shape `(batch_size, feature_sequence_length)`):
            Mask to avoid performing attention on padded feature indices.
        Úreturn_dictTr   rQ   ))r   r   r   )r   r   r   r   r   é   rö   N)r  r÷   ry   rX   r%   r   r½   r  ÚsumrH   rI   r6   rK   Úpooler_output)r5   rà   r  r†   Úaudio_outputsr
  Úaudio_embedsÚaudio_lengthsrä   rã   rå   Úmerge_factorÚpost_lengthsÚ
valid_masks                 r9   Úget_audio_featureszGlmAsrModel.get_audio_features€  sH  € ð  )˜Ô(¨ÐTÐTÀTÐTÈVÐTÐTˆØ+Ô=ÐØ1×9Ò9ØÔ  Ô# R¨¬Ô)AÔ)Sñ
ô 
Ðð ×1Ò1Ð2EÑFÔFˆà+×/Ò/°Ñ3Ô3ˆØ,Bð 	`ð 	`Ñ(ˆG�[ &Ø*¨Q°©[Ñ8¸KÈ!¹OÑLÈqÑPÐU[Ñ[Ð^_Ñ_ˆMˆMØˆØ%¨Ñ4¸ÑEÈÑIˆå”\ ,Ô"4°QÔ"7ÀÔ@SÐTÑTÔTÐUYÐ[\Ð[\Ð[\ÐU\Ô]Ð`lÐmnÐmnÐmnÐptÐmtÔ`uÒuˆ
Ø&2°:·=²=ÀÔATÑ3UÔ3UÔ&VˆÔ#àÐr:   Ú	input_idsrù   r  c                 ó>  — |€e| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }n|| j        j        k    }|                     ¦   «         }|j	        d         }| 
                    d¦  «                             |¦  «                             |j        ¦  «        }t          ||                              ¦   «         |                     ¦   «         k    d|› d|› �¦  «         |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)rB   r6   rQ   r   z6Audio features and audio tokens do not match, tokens: z, features: )Úget_input_embeddingsrH   Útensorr%   Úaudio_token_idÚlongr6   Úallr  rX   r–   Ú	expand_asrK   r   Únumel)r5   r"  rù   r  Úspecial_audio_maskÚn_audio_tokensÚn_audio_featuress          r9   Úget_placeholder_maskz GlmAsrModel.get_placeholder_mask¢  s  € ð ÐØ!.Ð2M°$×2KÒ2KÑ2MÔ2MÝ”˜Tœ[Ô7½u¼zÐR_ÔRfÐgÑgÔgñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐÐà!*¨d¬kÔ.HÒ!HÐà+×/Ò/Ñ1Ô1ˆØ)Ô/°Ô2ÐØ/×9Ò9¸"Ñ=Ô=×GÒGÈÑVÔV×YÒYÐZgÔZnÑoÔoÐÝØÐ,Ô-×3Ò3Ñ5Ô5¸×9MÒ9MÑ9OÔ9OÒOØsÀ^ÐsÐsÐaqÐsÐsñ	
ô 	
ð 	
ð "Ð!r:   rƒ   ra   rÕ   Ú	use_cachec	           	      óˆ  — |€ |                       ¦   «         |¦  «        }d}
|�e|�c|                      ||d¬¦  «        j        }
|                      |||
¬¦  «        }|                     ||
                     |j        ¦  «        ¦  «        } | j        d|||||dœ|	¤Ž}t          |j	        |j
        |j        |j        |
¬¦  «        S )z³
        input_features_mask (`torch.Tensor` of shape `(batch_size, feature_sequence_length)`):
            Mask to avoid performing attention on padding feature indices.
        NT)r  )rù   r  )rù   rƒ   ra   rÕ   r/  )r÷   rÕ   rv   rá   r
  rÍ   )r$  r!  r  r.  Úmasked_scatterrK   r6   r  r	  r÷   rÕ   rv   rá   )r5   r"  rà   r  rƒ   ra   rÕ   rù   r/  r†   r  r+  Úoutputss                r9   rf   zGlmAsrModel.forwardº  s  € ð$ Ð Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàˆØÐ%¨)Ð*?Ø×2Ò2°>ÐCVÐdhÐ2ÑiÔiÔwˆLð "&×!:Ò!:Ø¨À|ð ";ñ "ô "Ðð *×8Ò8Ð9KÈ\Ï_Ê_Ð]jÔ]qÑMrÔMrÑsÔsˆMà%�$Ô%ð 
Ø'Ø)Ø%Ø+Øð
ð 
ð ð
ð 
ˆõ )Ø%Ô7Ø#Ô3Ø!Ô/ØÔ)Ø ,ð
ñ 
ô 
ð 	
r:   )NNNNNNNN)rh   ri   rj   Ú_tp_planÚ_pp_planÚ_keep_in_fp32_modules_strictr,   r   r   rH   r  rk   r   r   rn   r   r!  Ú
LongTensorr.  r   Úboolr	  rf   rp   rq   s   @r9   r  r  o  sæ  ø€ € € € € ð €HØ€HØ#'Ð ðð ð ð ð ð Ø€^Ø~ðñ ô ðàÔ)ðð #œ\ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñô ñ Ôðð<"ØÔ)ð"Ø:?Ô:Kð"Ø]bÔ]nð"ð "ð "ð "ð0 Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø!%ð,
ð ,
àÔ# dÑ*ð,
ð Ô)¨DÑ0ð,
ð #œ\¨DÑ0ð	,
ð
 œ tÑ+ð,
ð Ô&¨Ñ-ð,
ð  ™ð,
ð Ô(¨4Ñ/ð,
ð ˜$‘;ð,
ð Ð+Ô,ð,
ð 
Ð*Ñ	*ð,
ð ,
ð ,
ñ „^ñ Ôð,
ð ,
ð ,
ð ,
ð ,
r:   r  zR
    Base class for GlmAsr causal language model (or autoregressive) outputs.
    c                   óÖ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
dz  ed<   dZeej                 dz  ed<   dZeej                 dz  ed<   dZej        dz  ed<   dS )	ÚGlmAsrCausalLMOutputWithPastaV  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head.
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance.
    audio_hidden_states (`torch.FloatTensor`, *optional*):
        Hidden states of the audio encoder after projection.
    NÚlossÚlogitsrÕ   rv   rá   r
  )rh   ri   rj   r¹   r:  rH   r  rl   r;  rÕ   r   rv   rn   rá   r
  rÍ   r:   r9   r9  r9  ë  sµ   € € € € € € ð	ð 	ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø$(€O�U˜T‘\Ð(Ð(Ñ(Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø48Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ð8Ð8r:   r9  c                   óN  ‡ — e Zd ZdgZddiZˆ fd„Zd„ Zee	 	 	 	 	 	 	 	 	 	 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dz  de	j        dz  de	j
        dz  dedz  dee	j        z  dee         defd„¦   «         ¦   «         Zddœdefˆ fd„Zˆ xZS )ÚGlmAsrForConditionalGenerationÚembed_positionszlm_head.weightz(model.language_model.embed_tokens.weightc                 óú   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        j        |j        j        d¬¦  «        | _	        |  
                    ¦   «          d S )NFr¦   )r+   r,   r  rÒ   r!   rª   r  rE   Ú
vocab_sizeÚlm_headrô   rÂ   s     €r9   r,   z'GlmAsrForConditionalGeneration.__init__  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý  Ñ(Ô(ˆŒ
Ý”y Ô!3Ô!?ÀÔASÔA^ÐejÐkÑkÔkˆŒØ�ŠÑÔÐÐÐr:   c                 ó*   —  | j         j        ||fi |¤ŽS rg   )rÒ   r!  )r5   rà   r  r†   s       r9   r!  z1GlmAsrForConditionalGeneration.get_audio_features  s#   € Ø,ˆtŒzÔ,¨^Ð=PÐ[Ð[ÐTZÐ[Ð[Ð[r:   Nr   r"  rà   r  rƒ   ra   rÕ   rù   Úlabelsr/  Úlogits_to_keepr†   r<   c                 ój  —  | j         d||||||||	dœ|¤Ž}|j        }t          |
t          ¦  «        rt	          |
 d¦  «        n|
}|                      |dd…|dd…f         ¦  «        }d}|�  | j        d||| j        j        j	        dœ|¤Ž}t          |||j        |j        |j        |j        ¬¦  «        S )a  
        input_features_mask (`torch.Tensor` of shape `(batch_size, feature_sequence_length)`):
            Mask to avoid performing attention on padding feature indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

        ```python
        >>> from transformers import GlmAsrForConditionalGeneration, AutoProcessor

        >>> model_id = "zai-org/GLM-ASR-Nano-2512"
        >>> processor = AutoProcessor.from_pretrained(model_id)
        >>> model = GlmAsrForConditionalGeneration.from_pretrained(model_id, dtype="auto", device_map="auto")
        >>> inputs = processor.apply_transcription_request("https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/bcn_weather.mp3")

        >>> inputs = inputs.to(model.device, dtype=model.dtype)

        >>> outputs = model.generate(**inputs, do_sample=False, max_new_tokens=500)

        >>> decoded_outputs = processor.batch_decode(outputs[:, inputs.input_ids.shape[1] :], skip_special_tokens=True)
        >>> print(decoded_outputs)
        ```)r"  rà   r  rƒ   ra   rÕ   rù   r/  N)r;  rC  r@  )r:  r;  rÕ   rv   rá   r
  rÍ   )rÒ   r÷   rY   rG   ÚslicerA  Úloss_functionr%   r  r@  r9  rÕ   rv   rá   r
  )r5   r"  rà   r  rƒ   ra   rÕ   rù   rC  r/  rD  r†   r2  rv   Úslice_indicesr;  r:  s                    r9   rf   z&GlmAsrForConditionalGeneration.forward  s  € ðX �$”*ð 

ØØ)Ø 3Ø)Ø%Ø+Ø'Øð

ð 

ð ð

ð 

ˆð  Ô1ˆÝ8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô%ð Ø f¸¼Ô9PÔ9[ðð Ø_eðð ˆDõ ,ØØØ#Ô3Ø!Ô/ØÔ)Ø 'Ô ;ð
ñ 
ô 
ð 	
r:   F)Úis_first_iterationrI  c                óÞ   •— |                      dd ¦  «        }|                      dd ¦  «        } t          ¦   «         j        |i |¤Ž}|s|                     dd¦  «        s|�||d<   |�||d<   |S )Nrà   r  r/  F)Úpopr+   Úprepare_inputs_for_generationrC   )r5   rI  Úargsr†   rà   r  Úmodel_inputsr8   s          €r9   rL  z<GlmAsrForConditionalGeneration.prepare_inputs_for_generationb  s�   ø€ ØŸšÐ$4°dÑ;Ô;ˆØ$ŸjšjÐ)>ÀÑEÔEÐà<•u‘w”wÔ<¸dÐMÀfÐMÐMˆàð 	J \×%5Ò%5°kÀ5Ñ%IÔ%Ið 	JØÐ)Ø1?�Ð-Ñ.Ø"Ð.Ø6I�Ð2Ñ3àÐr:   )
NNNNNNNNNr   )rh   ri   rj   r5  Ú_tied_weights_keysr,   r!  r   r   rH   r6  r  rk   r   r7  rG   r   r   r   rf   rL  rp   rq   s   @r9   r=  r=    sº  ø€ € € € € ð %6Ð#6Ð Ø*Ð,VÐWÐðð ð ð ð ð\ð \ð \ð Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ðG
ð G
àÔ# dÑ*ðG
ð Ô)¨DÑ0ðG
ð #œ\¨DÑ0ð	G
ð
 œ tÑ+ðG
ð Ô&¨Ñ-ðG
ð  ™ðG
ð Ô(¨4Ñ/ðG
ð Ô  4Ñ'ðG
ð ˜$‘;ðG
ð ˜eœlÑ*ðG
ð Ð+Ô,ðG
ð 
 ðG
ð G
ð G
ñ „^ñ ÔðG
ðR OTð ð ð Àtð ð ð ð ð ð ð ð ð ð r:   r=  )rß   r=  r  rÑ   )r~   )Nr   )AÚcollections.abcr   Údataclassesr   Útypingr   Úactivationsr   Úcache_utilsr   Ú
generationr	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   r   Úutils.output_capturingr   Úautor   Úconfiguration_glmasrr   r    rH   r!   ÚModuler#   ru   rk   rG   r}   rL   r”   r¡   r£   r»   rÅ   rÑ   rß   rþ   r	  r  r9  r=  Ú__all__rÍ   r:   r9   ú<module>rb     s0  ðð* %Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ø )Ð )Ð )Ð )Ð )Ð )Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð LÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cÐ cØ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cð ÐÑÔð Ø€L€L€LØÐÐÐÐÐð@<ð @<ð @<ð @<ð @<˜BœIñ @<ô @<ð @<ðF(ð (ð (ð	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð& ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð2ð ð ð ð$2)ð 2)ð 2)ð 2)ð 2)�b”iñ 2)ô 2)ð 2)ðjð ð ð ð �”	ñ ô ð ð ð  ð  ð  ð  Ð3ñ  ô  ð  ðF ð	'ð 	'ð 	'ð 	'ð 	'˜Oñ 	'ô 	'ñ „ð	'ð(Kð (Kð (Kð (Kð (KÐ)ñ (Kô (Kð (KðVð ð ð ð  ¤	ñ ô ð ð& ð9ð 9ð 9ð 9ð 9Ð 7ñ 9ô 9ñ „ð9ð €ððñ ô ð
t
ð t
ð t
ð t
ð t
Ð'ñ t
ô t
ñô ð
t
ðn €ððñ ô ð
 ð9ð 9ð 9ð 9ð 9 ;ñ 9ô 9ñ „ñô ð9ð( €ððñ ô ð
dð dð dð dð dÐ%:¸Oñ dô dñô ð
dðN fÐ
eÐ
e€€€r:   