Ë
    ÛÓ^j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,jZ                  «      Z.d„ Z/de+j`                  de1de+j`                  fd„Z2	 d?de,jZ                  de+j`                  de+j`                  d e+j`                  d!e+j`                  dz  d"e3d#e3d$ee   fd%„Z4d@d&„Z5 G d'„ d(e,jZ                  «      Z6 G d)„ d*e,jZ                  «      Z7 G d+„ d,e«      Z8e G d-„ d.e«      «       Z9 G d/„ d0e9«      Z: G d1„ d2e,jZ                  «      Z;e G d3„ d4e«      «       Z< ed5¬6«       G d7„ d8e9«      «       Z= ed9¬6«      e G d:„ d;e«      «       «       Z> ed5¬6«       G d<„ d=e9e«      «       Z?g d>¢Z@y)Aé    )Ú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k7  rt        | j                     } || j
                  |«      \  }| _
        | j                  d|d¬«       | j                  d|j                  «       d¬«       y )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        €úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glmasr/modeling_glmasr.pyr,   zGlmAsrRotaryEmbedding.__init__5   s¶   ø€ Ü‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆ�$Ô(à×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÕUó    r6   ztorch.deviceÚseq_lenÚreturnztorch.Tensorc                 ón  — | j                   d   }| j                   j                  dd«      }t        | dd«      xs | j                  | j                  z  }t        ||z  «      }d}d|t        j                  d|dt        j                  ¬«      j                  |t        j                  ¬	«      |z  z  z  }||fS )
a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚpartial_rotary_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Ñ 6× :Ñ :Ð;RÐTWÓ XÐÜ˜6 :¨tÓ4Òh¸×8JÑ8JÈf×NhÑNhÑ8hˆÜ�(Ð2Ñ2Ó3ˆàÐð Ø”U—\‘\ ! S¨!´5·;±;Ô?×BÑBÈ&ÔX]×XcÑXcÐBÓdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r:   c                 óN  — | j                   d d d …d f   j                  «       j                  |j                  d   dd«      j	                  |j
                  «      }|d d …d d d …f   j                  «       }t        |j
                  j                  t        «      r/|j
                  j                  dk7  r|j
                  j                  nd}t        |d¬«      5  |j                  «       |j                  «       z  j                  dd«      }t        j                  ||fd¬	«      }|j                  «       | j                  z  }|j                  «       | j                  z  }	d d d «       j	                  |j                   ¬
«      	j	                  |j                   ¬
«      fS # 1 sw Y   ŒAxY w)Nr   éÿÿÿÿr   Ú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   sR  € ð !ŸM™M¨$²°4¨-Ñ8×>Ñ>Ó@×GÑGÈ×HZÑHZÐ[\ÑH]Ð_aÐcdÓe×hÑhÐij×iqÑiqÓrÐØ ,ªQ°²a¨ZÑ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ¨¸UÔCñ 	5Ø&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÑN×YÑYÐZ[Ð]^Ó_ˆEÜ—)‘)˜U E˜N°Ô3ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆC÷		5ð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷	5ð 	5ús   ÃBFÆF$©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‰lÓñ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   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰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   j                  |||||«      } | j                  |||z  ||«      S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r   N)rX   rW   Úreshape)rv   rw   ÚbatchÚnum_key_value_headsÚslenr@   s         r9   Ú	repeat_kvr}   |   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr:   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	t        j                  ||j	                  dd«      «      |z  }
|�|
|z   }
t
        j                  j                  |
dt        j                  ¬«      j                  |j                  «      }
t
        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j	                  dd«      j                  «       }||
fS )Nr   r   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ÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r:   c                 óh  — |j                  |«      }|j                  |«      }|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°CÑ7Ñ8€GØ�s‰{œ{¨5Ó1°CÑ7Ñ8€Gô �i‰i˜ &Ð)¨rÔ2€GÜ�i‰i˜ &Ð)¨rÔ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¬«      | _        y )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Ñ4FÈ&×JdÑJdÑ4dÓeˆŒØ$*×$>Ñ$>À&×B\ÑB\Ñ$\ˆÔ!Ø—}‘} dÑ*ˆŒØ!'×!9Ñ!9ˆÔØˆŒÜ—i‘i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Ñ4^ÐeiÔjˆŒÜ—i‘i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Ñ4^ÐejÔkˆŒÜ—i‘i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Ñ4^ÐeiÔjˆŒÜ—i‘i × :Ñ :¸T¿]¹]Ñ JÈF×L^ÑL^ÐeiÔjˆ�r:   Nrv   Úposition_embeddingsr…   r<   c                 óÆ  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }|\  }	}
t        |||	|
«      \  }}t        j                  | j                  j                  t        «      } || |||fd | j                  sdn| j                  | j                  dœ|¤Ž\  }} |j                   g |¢d‘­Ž j#                  «       }| j%                  |«      }||fS )NrQ   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Ä   sk  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØð		%
ð
  Ø#Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓ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ðk˜|ð k¸õ kð" IMñ!)à—|‘|ð!)ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð!)ð Ð+Ñ,ð	!)ð
 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷!)r:   r¢   c                   ó>   ‡ — 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                     | _
        y 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‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÓJˆŒÜ˜V×.Ñ.Ñ/ˆ�r:   rv   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rg   )r¾   rÁ   r¿   )r5   rv   s     r9   rf   zGlmAsrMLP.forwardï   s2   € ØŸ™ Ó/ˆØŸ™ MÓ2ˆØŸ™ Ó/ˆØÐr:   )rh   ri   rj   r,   rH   rk   rf   rp   rq   s   @r9   r»   r»   è   s   ø„ ô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                  «      | _
        y )N)r%   r£   )r+   r,   rE   r¢   Ú	self_attnr»   Úmlpr!   Ú	LayerNormÚinput_layernormÚpost_attention_layernormr®   s      €r9   r,   zGlmAsrEncoderLayer.__init__÷   sd   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔä(°À)ÔLˆŒä˜VÓ$ˆŒÜ!Ÿ|™|¨F×,>Ñ,>Ó?ˆÔÜ(*¯©°V×5GÑ5GÓ(HˆÕ%r:   Nrv   r¯   r…   r<   c                 ó¸   — |}| j                  |«      } | j                  d||dœ|¤Ž\  }}||z   }|}| j                  |«      }| j                  |«      }||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ˆØŸ™ Ó/ˆØ  =Ñ0ˆØÐr:   rg   )rh   ri   rj   r   rG   r,   rH   rk   rn   r   r   rf   rp   rq   s   @r9   rÅ   rÅ   ö   sp   ø„ ð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y)Ú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Ñ     s=   … àÓØÐØ(ÐØ&*Ð#Ø*Ð+ÐØ#4Ð"5ÐØÐØ€NØ"&Ñr:   rÑ   c                   óx   ‡ — 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                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        j                  |j
                  «      | _        t        |¬«      | _        d| _        | j%                  «        y c c}w )Nr   r   )Úkernel_sizeÚpaddingr   )rã   Ústriderä   )r%   F)r+   r,   r!   ÚConv1dÚnum_mel_binsrE   Úconv1Úconv2Ú
ModuleListÚrangeÚnum_hidden_layersrÅ   ÚlayersrÉ   Únormr#   Ú
rotary_embÚgradient_checkpointingÚ	post_initr®   s      €r9   r,   zGlmAsrEncoder.__init__1  sÈ   ø€ Ü‰Ñ˜Ô Ü—Y‘Y˜v×2Ñ2°F×4FÑ4FÐTUÐ_`ÔaˆŒ
Ü—Y‘Y˜v×1Ñ1°6×3EÑ3EÐSTÐ]^ÐhiÔjˆŒ
ä—m‘mÜDIÈ&×JbÑJbÓDcÖd°yÔ ¨	Õ2Òdó
ˆŒô —L‘L ×!3Ñ!3Ó4ˆŒ	Ü/°vÔ>ˆŒØ&+ˆÔ#Ø�‰Õùò es   ÂDr…   c                 óà  — t         j                  j                  | j                  |«      «      }t         j                  j                  | j	                  |«      «      }|j                  dd«      }|}| j                  |t        j                  |j                  d   |j                  ¬«      d d d …f   ¬«      }| j                  D ]  } ||fd|i|¤Ž}Œ | j                  |«      }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ÓFˆÜŸ™×*Ñ*¨4¯:©:°mÓ+DÓEˆØ%×/Ñ/°°1Ó5ˆà%ˆØ"Ÿo™oØ¬¯©°]×5HÑ5HÈÑ5KÐTa×ThÑThÔ(iÐjnÒpqÐjqÑ(rð .ó 
Ðð "Ÿ[™[ò 	lˆMÙ)¨-ÑkÐM`ÐkÐdjÑk‰Mð	lð Ÿ	™	 -Ó0ˆÜ)¸MÔ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ß   '  sl   ø… ØÓØ&€OØÐØ-Ð.Ðà+Ø%ñÐð
Ð2õ ð  ØØðK°Ð7IÑ0Jò 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                 ój  •— t         ‰| �  «        t        j                  |j                  j
                  |j                  j                  dz  «      | _        t        |j                     | _        t        j                  |j                  j                  dz  |j                  j                  «      | _        y )Nr   )r+   r,   r!   r©   Úaudio_configr½   Útext_configrE   Úlinear_1r   Úprojector_hidden_actÚactÚlinear_2rÂ   s     €r9   r,   z"GlmAsrMultiModalProjector.__init__X  s   ø€ Ü‰ÑÔÜŸ	™	 &×"5Ñ"5×"GÑ"GÈ×I[ÑI[×IgÑIgÐjkÑIkÓlˆŒÜ˜&×5Ñ5Ñ6ˆŒÜŸ	™	 &×"4Ñ"4×"@Ñ"@À1Ñ"DÀf×FXÑFX×FdÑFdÓeˆ�r:   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rg   )rÿ   r  r  )r5   Úaudio_featuresrv   s      r9   rf   z!GlmAsrMultiModalProjector.forward^  s2   € ØŸ™ nÓ5ˆØŸ™ Ó/ˆØŸ™ mÓ4ˆØÐr:   )rh   ri   rj   r¹   r   r,   rf   rp   rq   s   @r9   rû   rû   R  s   ø„ ñð
f˜|õ för:   rû   c                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)Ú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  s   … ñð
 59Ð˜×*Ñ*¨TÑ1Ô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        |«      | _	        | j                  «        y rg   )r+   r,   r   Úfrom_configrý   Úaudio_towerrþ   Úlanguage_modelrû   Úmulti_modal_projectorrñ   rÂ   s     €r9   r,   zGlmAsrModel.__init__y  sY   ø€ Ü‰Ñ˜Ô Ü$×0Ñ0°×1DÑ1DÓEˆÔÜ'×3Ñ3°F×4FÑ4FÓGˆÔÜ%>¸vÓ%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                  |j                  d   d| j                  j
                  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                  |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€  s<  € ð  )˜×(Ñ(¨ÑTÀTÐTÈVÑTˆØ+×=Ñ=ÐØ1×9Ñ9Ø× Ñ  Ñ# R¨¯©×)AÑ)A×)SÑ)Só
Ðð ×1Ñ1Ð2EÓFˆà+×/Ñ/°Ó3ˆØ,Bò 	`Ñ(ˆG�[ &Ø*¨Q°©[Ñ8¸KÈ!¹OÑLÈqÑPÐU[Ñ[Ð^_Ñ_‰Mð	`àˆØ%¨Ñ4¸ÑEÈÑIˆä—\‘\ ,×"4Ñ"4°QÑ"7À×@SÑ@SÔTÐUYÒ[\ÐU\Ñ]Ð`lÒmnÐptÐmtÑ`uÑuˆ
Ø&2°:·=±=À×ATÑATÓ3UÑ&VˆÔ#àÐr:   Ú	input_idsrö   r  c                 ó.  — |€m| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  }|j                  d«      }n|| j                  j                  k(  }|j                  «       }|j                  d   }|j                  d«      j                  |«      j                  |j                  «      }t        ||   j                  «       |j                  «       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.
        )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Ü—‘˜TŸ[™[×7Ñ7¼u¿z¹zÐR_×RfÑRfÔgó3ñ "Ðð "4×!7Ñ!7¸Ó!;Ñà!*¨d¯k©k×.HÑ.HÑ!HÐà+×/Ñ/Ó1ˆØ)×/Ñ/°Ñ2ÐØ/×9Ñ9¸"Ó=×GÑGÈÓV×YÑYÐZg×ZnÑZnÓoÐÜØÐ,Ñ-×3Ñ3Ó5¸×9MÑ9MÓ9OÑOØDÀ^ÐDTÐT`ÐaqÐ`rÐsô	
ð "Ð!r:   r‚   ra   rÕ   Ú	use_cachec	           	      ó˜  — |€ | j                  «       |«      }d}
|�_|�]| j                  ||d¬«      j                  }
| j                  |||
¬«      }|j	                  ||
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¸	ÓBˆMàˆØÐ%¨)Ð*?Ø×2Ñ2°>ÐCVÐdhÐ2Ói×wÑwˆLð "&×!:Ñ!:Ø¨À|ð ";ó "Ðð *×8Ñ8Ð9KÈ\Ï_É_Ð]j×]qÑ]qÓMrÓsˆMà%�$×%Ñ%ð 
Ø'Ø)Ø%Ø+Øñ
ð ñ
ˆô )Ø%×7Ñ7Ø#×3Ñ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Ñ:Kð"Ø]b×]nÑ]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<   y)	Ú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¹   r7  rH   r  rl   r8  rÕ   r   rv   rn   rá   r  rÍ   r:   r9   r6  r6  ë  s‹   … ñ	ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø$(€O�U˜T‘\Ó(Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6Ø48Ð˜×*Ñ*¨TÑ1Ô8r:   r6  c                   óŒ  ‡ — 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¬«      | _	        | j                  «        y )NFr¥   )r+   r,   r  rÒ   r!   r©   rþ   rE   Ú
vocab_sizeÚlm_headrñ   rÂ   s     €r9   r,   z'GlmAsrForConditionalGeneration.__init__  sS   ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ü—y‘y ×!3Ñ!3×!?Ñ!?À×ASÑAS×A^ÑA^ÐejÔ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‰z×,Ñ,¨^Ð=PÑ[ÐTZÑ[Ð[r:   Nr  rà   r  r‚   ra   rÕ   rö   Úlabelsr,  Úlogits_to_keepr…   r<   c                 ó¦  —  | j                   d||||||||	dœ|¤Ž}|j                  }t        |
t        «      rt	        |
 d«      n|
}| j                  |dd…|dd…f   «      }d}|�4 | 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)r8  r@  r=  )r7  r8  rÕ   rv   rá   r  rÍ   )rÒ   rô   rY   rG   Úslicer>  Úloss_functionr%   rþ   r=  r6  rÕ   rv   rá   r  )r5   r  rà   r  r‚   ra   rÕ   rö   r@  r,  rA  r…   r/  rv   Úslice_indicesr8  r7  s                    r9   rf   z&GlmAsrForConditionalGeneration.forward  sø   € ðX �$—*‘*ð 

ØØ)Ø 3Ø)Ø%Ø+Ø'Øñ

ð ñ

ˆð  ×1Ñ1ˆÜ8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ð Ø f¸¿¹×9PÑ9P×9[Ñ9[ñØ_eñˆDô ,ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø '× ;Ñ ;ô
ð 	
r:   F)Úis_first_iterationrF  c                ó²   •— |j                  dd «      }|j                  dd «      }t        ‰| �  |i |¤Ž}|s|j                  dd«      s|�||d<   |�||d<   |S )Nrà   r  r,  F)Úpopr+   Úprepare_inputs_for_generationrC   )r5   rF  Úargsr…   rà   r  Úmodel_inputsr8   s          €r9   rI  z<GlmAsrForConditionalGeneration.prepare_inputs_for_generationb  st   ø€ ØŸ™Ð$4°dÓ;ˆØ$Ÿj™jÐ)>ÀÓEÐä‘wÑ<¸dÐMÀfÑMˆá \×%5Ñ%5°kÀ5Ô%IØÐ)Ø1?�Ð-Ñ.Ø"Ð.Ø6I�Ð2Ñ3àÐr:   )
NNNNNNNNNr   )rh   ri   rj   r2  Ú_tied_weights_keysr,   r  r   r   rH   r3  r  rk   r   r4  rG   r   r   r   rf   rI  rp   rq   s   @r9   r:  r:    s^  ø„ ð %6Ð#6Ð Ø*Ð,VÐWÐôò\ð Øð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñG
à×#Ñ# dÑ*ðG
ð ×)Ñ)¨DÑ0ðG
ð #Ÿ\™\¨DÑ0ð	G
ð
 Ÿ™ tÑ+ðG
ð ×&Ñ&¨Ñ-ðG
ð  ™ðG
ð ×(Ñ(¨4Ñ/ðG
ð × Ñ  4Ñ'ðG
ð ˜$‘;ðG
ð ˜eŸl™lÑ*ð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  r6  r:  Ú__all__rÍ   r:   r9   ú<module>r_     s   ðõ* %Ý !Ý å !Ý  Ý )Ý 9÷ó ÷ Lß FÝ &ß cÓ cß YÑ YÝ 5Ý ß Cñ ÔÛÝô@<˜BŸI™Iô @<òF(ð	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ó2ô$2)�b—i‘iô 2)ôj�—	‘	ô ô Ð3ô  ðF ô	'˜Oó 	'ó ð	'ô(KÐ)ô (KôV §	¡	ô ð& ô9Ð 7ó 9ó ð9ñ ðôô
t
Ð'ó t
óð
t
ñn ðôð
 ô9 ;ó 9ó óð9ñ( ðôô
dÐ%:¸Oó dóð
dòN f�r:   