Ë
    ÛÓ^j™G  ã                   ó°  — d dl mZ d dl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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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* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1  e«       r
d dl2Z2d dl2m3Z3  ejh                  e5«      Z6 G d„ de(«      Z7e G d„ de'«      «       Z8 G d„ de*«      Z9d1d„Z:e G d„ de,«      «       Z; G d „ d!e3jx                  «      Z= G d"„ d#e«      Z> G d$„ d%e%«      Z? G d&„ d'e?«      Z@ G d(„ d)e$«      ZA ed*¬+«       G d,„ d-e#«      «       ZB ed*¬+«       G d.„ d/e"«      «       ZCg d0¢ZDy)2é    )ÚCallableNé   )ÚACT2FN)Ú
AudioInputÚ make_list_of_audio_chat_template)ÚCache)ÚBatchFeature)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPoolingÚCausalLMOutputWithPast)ÚALL_ATTENTION_FUNCTIONS)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚis_torch_availableÚlogging)Úcan_return_tupleÚmerge_with_config_defaultsÚno_inherit_decorator)Úcapture_outputsé   )Ú&AudioFlamingo3ForConditionalGenerationÚAudioFlamingo3ModelÚ!AudioFlamingo3MultiModalProjectorÚAudioFlamingo3PreTrainedModel)ÚAudioFlamingo3ProcessorÚAudioFlamingo3ProcessorKwargs)ÚGlmRotaryEmbedding)ÚLlamaAttentionÚeager_attention_forwardÚrotate_halfé   )ÚGlmAsrConfigÚGlmAsrEncoderConfig)Únnc                   ó   — e Zd Zy)ÚGlmAsrProcessorKwargsN©Ú__name__Ú
__module__Ú__qualname__© ó    út/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glmasr/modular_glmasr.pyr'   r'   2   ó   … r-   r'   c            	       óv   ‡ — e Zd Z	 	 	 	 d	ˆ fd„	Zd
d„Z	 ddeee   z  ez  deee   z  dz  dee	   de
fd„Zˆ xZS )ÚGlmAsrProcessorNc                 ó0   •— t         ‰| �  ||||||¬«       y)a‡  
        audio_token (`Optional[str]`, *optional*, defaults to `"<|pad|>`"):
            Special token used to represent audio inputs in the chat template.
        default_transcription_prompt (`str`, *optional*, defaults to `"Please transcribe this audio into text"`):
            Default prompt to use for transcription tasks when applying transcription requests.
        max_audio_len (`int`, *optional*, defaults to 655):
            Maximum length of audio sequences in seconds. Audio longer than this will be truncated.
            655 gives approximately 8192 tokens, corresponding to the maximum sequence length of the text model.
        )Úchat_templateÚaudio_tokenÚdefault_transcription_promptÚmax_audio_lenN)ÚsuperÚ__init__)ÚselfÚfeature_extractorÚ	tokenizerr3   r4   r5   r6   Ú	__class__s          €r.   r8   zGlmAsrProcessor.__init__7   s)   ø€ ô$ 	‰ÑØØØ'Ø#Ø)EØ'ð 	õ 	
r-   Úreturnc                 ód   — d}dD ]  \  }}}|d|z  z   |dz
  z
  dz
  |z  dz   }Œ ||z
  |z  dz   }|S )Né   ©)r"   r   r"   )r"   r   r   r   r"   r,   )r9   Úaudio_lengthsÚmerge_factorÚpaddingÚkernel_sizeÚstrideÚ
num_tokenss          r.   Ú_get_audio_token_lengthz'GlmAsrProcessor._get_audio_token_lengthR   sc   € ØˆØ,Bò 	`Ñ(ˆG�[ &Ø*¨Q°©[Ñ8¸KÈ!¹OÑLÈqÑPÐU[Ñ[Ð^_Ñ_‰Mð	`ð $ lÑ2°|ÑCÀaÑGˆ
ØÐr-   ÚaudioÚpromptÚkwargsc           	      óp  — t        t        |«      «      }t        «       rU|D �cg c]J  }t        |t        j
                  «      r,|j                  «       j                  «       j                  «       n|‘ŒL }}t        |«      }|dk(  rt        d«      ‚|€| j                  g|z  }nµt        |t        «      r|g|z  }nžt        |t         t        f«      r}t        |«      |k7  rt        dt        |«      › d|› d�«      ‚g }|D ]L  }|€|j                  | j                  «       Œ!t        |t        «      r|j                  |«       ŒCt        d«      ‚ nt        d«      ‚t!        ||«      D �	�
cg c](  \  }	}
dt        |
t        «      rd	|
d
œnd	|
dœd|	dœgdœg‘Œ* }}	}
 | j"                  |fddddœ|¤ŽS c c}w c c}
}	w )a	  
        Prepare inputs for automatic speech recognition without manually writing the default transcription prompt.

        Args:
            audio (`str`, `list[str]`, `np.ndarray`, `torch.Tensor`, `list[np.ndarray]`, `list[torch.Tensor]`):
                Audio to transcribe. Strings are interpreted as local paths or URLs and will be loaded automatically by
                the chat template loader; NumPy arrays and PyTorch tensors are forwarded directly.
            prompt (`str` or `list[str]`, *optional*):
                Custom prompt(s) to include in the user turn. A list must be the same length as the batch. When `None`,
                each sample uses `"Transcribe the input speech."`.
            **kwargs:
                Additional keyword arguments forwarded to [`~GlmAsrProcessor.apply_chat_template`] (for example
                `text_kwargs`, `audio_kwargs`, ...).

        Returns:
            [`BatchFeature`]: Processor outputs ready to be passed to [`GlmAsrForConditionalGeneration.generate`].

        r   z)`audio` must contain at least one sample.z	Received z prompt(s) for z$ audio sample(s); counts must match.z'Each prompt must be a string or `None`.z<`prompt` must be a string, a sequence of strings, or `None`.ÚuserrH   )ÚtypeÚpath)rM   rH   Útext)rM   rO   )ÚroleÚcontentT)ÚtokenizeÚadd_generation_promptÚreturn_dict)Úlistr   r   Ú
isinstanceÚtorchÚTensorÚdetachÚcpuÚnumpyÚlenÚ
ValueErrorr5   ÚstrÚtupleÚappendÚ	TypeErrorÚzipÚapply_chat_template)r9   rH   rI   rJ   Úaudio_itemsÚelÚ
batch_sizeÚpromptsÚitemÚprompt_textÚ
audio_itemÚconversationss               r.   Úapply_transcription_requestz+GlmAsrProcessor.apply_transcription_requestZ   sß  € ô2 /3Ô3SÐTYÓ3ZÓ.[ˆÜÔØgrÖsÐac¼
À2ÄuÇ|Á|Ô8T˜2Ÿ9™9›;Ÿ?™?Ó,×2Ñ2Ô4ÐZ\Ñ\ÐsˆKÐsä˜Ó%ˆ
Ø˜Š?ÜÐHÓIÐIàˆ>Ø×8Ñ8Ð9¸JÑF‰GÜ˜¤Ô$Ø�h Ñ+‰GÜ˜¤¤u Ô.Ü�6‹{˜jÒ(Ü Ø¤ F£˜}¨O¸J¸<ÐGkÐlóð ð ˆGØò O�Ø�<Ø—N‘N 4×#DÑ#DÕEÜ ¤cÔ*Ø—N‘N 4Õ(ä#Ð$MÓNÐNñOô ÐZÓ[Ð[ô ,/¨w¸Ó+D÷
ñ (�˜Zð #ô & j´#Ô6ð ")°*Ò=à&-¸
ÑCØ!'°Ñ=ð	 ñò
ð
ˆñ 
ð (ˆt×'Ñ'Øð
àØ"&Øñ	
ð
 ñ
ð 	
ùòS tùó4
s   £AF-Å&-F2)Nz<|pad|>z&Please transcribe this audio into texti�  )rA   útorch.Tensorr=   rm   ©N)r)   r*   r+   r8   rG   r^   rU   r   r   r'   r	   rl   Ú__classcell__©r<   s   @r.   r1   r1   5   sp   ø„ ð ØØ%MØõ
ó6ð *.ñJ
à�T˜#‘Y‰ Ñ+ðJ
ð �d˜3‘i‘ $Ñ&ðJ
ð Ð.Ñ/ð	J
ð
 
÷J
r-   r1   c                   ó   — e Zd Zy)ÚGlmAsrRotaryEmbeddingNr(   r,   r-   r.   rr   rr   §   r/   r-   rr   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 )Néÿÿÿÿ.)Údim)Ú	unsqueezeÚshaper!   rW   Úcat)ÚqÚkÚcosÚsinÚposition_idsÚunsqueeze_dimÚ
rotary_dimÚq_rotÚq_passÚk_rotÚk_passÚq_embedÚk_embeds                r.   Ú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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 )ÚGlmAsrAttentionÚconfigÚ	layer_idxc                 ó$  •— t         ‰| �  ||«       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 )NFT)Úbias)r7   r8   Ú	is_causalr%   ÚLinearÚhidden_sizeÚnum_attention_headsÚhead_dimÚq_projÚnum_key_value_headsÚk_projÚv_projÚo_proj©r9   r‰   rŠ   r<   s      €r.   r8   zGlmAsrAttention.__init__¾   sÊ   ø€ Ü‰Ñ˜ Ô+ØˆŒÜ—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-   NÚhidden_statesÚposition_embeddingsrJ   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 )Nrt   r"   r   g        )Úattention_maskÚdropoutÚscaling)rw   r‘   r’   ÚviewÚ	transposer”   r•   r†   r   Úget_interfacer‰   Ú_attn_implementationr    ÚtrainingÚattention_dropoutr�   ÚreshapeÚ
contiguousr–   )r9   r˜   r™   rJ   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesr{   r|   Úattention_interfaceÚattn_outputÚattn_weightss                 r.   Úforwardz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-   rn   ©r)   r*   r+   r#   Úintr8   rW   rX   r_   r   r   r®   ro   rp   s   @r.   rˆ   rˆ   ¼   s~   ø„ ð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 rn   )r7   r8   r%   rŽ   r�   Úintermediate_sizeÚfc1Úfc2r   Ú
hidden_actÚact_fn©r9   r‰   r<   s     €r.   r8   zGlmAsrMLP.__init__ë   s\   ø€ Ü‰ÑÔÜ—9‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÓJˆŒÜ˜V×.Ñ.Ñ/ˆ�r-   r˜   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rn   )rµ   r¸   r¶   )r9   r˜   s     r.   r®   zGlmAsrMLP.forwardñ   s2   € ØŸ™ Ó/ˆØŸ™ MÓ2ˆØŸ™ Ó/ˆØÐr-   )r)   r*   r+   r8   rW   rX   r®   ro   rp   s   @r.   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Š   )r7   r8   r�   rˆ   Ú	self_attnr²   Úmlpr%   Ú	LayerNormÚinput_layernormÚpost_attention_layernormr—   s      €r.   r8   zGlmAsrEncoderLayer.__init__ù   sd   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔä(°À)ÔLˆŒä˜VÓ$ˆŒÜ!Ÿ|™|¨F×,>Ñ,>Ó?ˆÔÜ(*¯©°V×5GÑ5GÓ(HˆÕ%r-   Nr˜   r™   rJ   r=   c                 ó¸   — |}| j                  |«      } | j                  d||dœ|¤Ž\  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|S )N)r˜   r™   r,   )rÁ   r¾   rÂ   r¿   )r9   r˜   r™   rJ   ÚresidualÚ_s         r.   r®   zGlmAsrEncoderLayer.forward  s„   € ð !ˆØ×,Ñ,¨]Ó;ˆà)˜4Ÿ>™>ð 
Ø'Ø 3ñ
ð ñ
Ñˆ�qð
 ! =Ñ0ˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ  =Ñ0ˆØÐr-   rn   r¯   rp   s   @r.   r¼   r¼   ø   sp   ø„ ðI˜|ð I¸õ Ið IMñà—|‘|ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEðð Ð+Ñ,ð	ð
 
�‰÷r-   r¼   c                   ó   — e Zd Zy)ÚGlmAsrPreTrainedModelNr(   r,   r-   r.   rÇ   rÇ     r/   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_featuresrH   r¼   )r˜   Ú
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"   )rD   rC   r   )rD   rE   rC   )r‰   F)r7   r8   r%   ÚConv1dÚnum_mel_binsr�   Úconv1Úconv2Ú
ModuleListÚrangeÚnum_hidden_layersr¼   ÚlayersrÀ   Únormrr   Ú
rotary_embÚgradient_checkpointingÚ	post_initr—   s      €r.   r8   zGlmAsrEncoder.__init__)  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rJ   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   ©Údevice)r}   r™   )Úlast_hidden_state)r%   Ú
functionalÚgelurÏ   rÐ   rŸ   rÖ   rW   Úarangerw   rÛ   rÔ   rÕ   r   )r9   rÊ   rJ   Úinputs_embedsr˜   r™   Úencoder_layers          r.   r®   zGlmAsrEncoder.forward6  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-   )r)   r*   r+   r$   Ú__annotations__Úmain_input_nameÚinput_modalitiesÚ_no_split_modulesr¼   rˆ   Ú_can_record_outputsr8   r   r   r   r   r   r®   ro   rp   s   @r.   rÉ   rÉ     sl   ø… ØÓØ&€OØÐØ-Ð.Ðà+Ø%ñÐð
Ð2õ ð  ØØðK°Ð7IÑ0Jò Kó ó ó  ôKr-   rÉ   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚGlmAsrMultiModalProjectorr‰   c                 ó:  •— t         ‰| �  «        t        j                  |j                  j
                  |j                  j                  dz  «      | _        t        j                  |j                  j                  dz  |j                  j                  «      | _	        y )Nr   )
r7   r8   r%   rŽ   Úaudio_configr´   Útext_configr�   Úlinear_1Úlinear_2r¹   s     €r.   r8   z"GlmAsrMultiModalProjector.__init__K  sm   ø€ Ü‰ÑÔÜŸ	™	 &×"5Ñ"5×"GÑ"GÈ×I[ÑI[×IgÑIgÐjkÑIkÓlˆŒÜŸ	™	 &×"4Ñ"4×"@Ñ"@À1Ñ"DÀf×FXÑFX×FdÑFdÓeˆ�r-   )r)   r*   r+   r#   r8   ro   rp   s   @r.   rè   rè   J  s   ø„ ðf˜|÷ fñ fr-   rè   z~
    The GlmAsr model which consists of a fine-tuned Whisper encoder, a multi-modal projector and a Llama language model.
    ©Úcustom_introc                   óz   — e Zd Ze ed¬«      dej                  dej                  dee	   de
ez  fd„«       «       Zy)	ÚGlmAsrModelzgCompute audio embeddings from log-mel input features using the audio encoder and multi-modal projector.rî   rÊ   Úinput_features_maskrJ   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 )
NrT   Tr   rt   r@   r   r"   r?   rÚ   )Úaudio_towerrÜ   r¤   rw   r‰   rê   r´   Úmulti_modal_projectorÚsumrW   rß   rÛ   ÚtoÚpooler_output)r9   rÊ   rò   rJ   Úaudio_outputsÚaudio_hidden_statesÚaudio_embedsrA   rC   rD   rE   rB   Úpost_lengthsÚ
valid_masks                 r.   Úget_audio_featureszGlmAsrModel.get_audio_featuresW  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-   N)r)   r*   r+   r   r   rW   ÚFloatTensorrX   r   r   r_   r   rþ   r,   r-   r.   rñ   rñ   Q  sb   „ ð ÙØ~ôðà×)Ñ)ðð #Ÿ\™\ðð Ð+Ñ,ð	ð
 
Ð+Ñ	+òóó ñr-   rñ   c                   óZ  ‡ — e Zd ZddiZˆ fd„Z	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
e	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ˆ fd„Zˆ xZS )ÚGlmAsrForConditionalGenerationzlm_head.weightz(model.language_model.embed_tokens.weightc                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y rn   )r7   r8   rñ   ÚmodelrØ   r¹   s     €r.   r8   z'GlmAsrForConditionalGeneration.__init__|  s&   ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ø�‰Õr-   NÚ	input_idsrÊ   rò   r›   r}   Úpast_key_valuesrà   ÚlabelsÚ	use_cacheÚlogits_to_keeprJ   r=   c                 ó4   •— t        ‰| �  d|||||||	|
dœ|¤Ž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  rà   r  r  r  r,   )r7   r®   )r9   r  rÊ   rò   r›   r}   r  rà   r  r  r  rJ   r<   s               €r.   r®   z&GlmAsrForConditionalGeneration.forward�  s>   ø€ ôT ‰w‰ð 

ØØ)Ø%Ø+Ø'ØØØ)ñ

ð ñ

ð 
	
r-   )
NNNNNNNNNr   )r)   r*   r+   Ú_tied_weights_keysr8   rW   Ú
LongTensorrÿ   rX   r   Úboolr°   r   r   r   r®   ro   rp   s   @r.   r  r  t  s  ø„ ð +Ð,VÐWÐôð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ4
à×#Ñ# dÑ*ð4
ð ×)Ñ)¨DÑ0ð4
ð #Ÿ\™\¨DÑ0ð	4
ð
 Ÿ™ tÑ+ð4
ð ×&Ñ&¨Ñ-ð4
ð  ™ð4
ð ×(Ñ(¨4Ñ/ð4
ð × Ñ  4Ñ'ð4
ð ˜$‘;ð4
ð ˜eŸl™lÑ*ð4
ð Ð+Ñ,ð4
ð 
 ÷4
ñ 4
r-   r  )rÉ   r  rñ   r1   rÇ   )Nr"   )EÚcollections.abcr   r[   ÚnpÚactivationsr   Úaudio_utilsr   r   Úcache_utilsr   Úfeature_extraction_utilsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   r   Úutils.output_capturingr   Ú&audioflamingo3.modeling_audioflamingo3r   r   r   r   Ú(audioflamingo3.processing_audioflamingo3r   r   Úglm.modeling_glmr   Úllama.modeling_llamar   r    r!   Úconfiguration_glmasrr#   r$   rW   r%   Ú
get_loggerr)   Úloggerr'   r1   rr   r†   rˆ   ÚModuler²   r¼   rÇ   rÉ   rè   rñ   r  Ú__all__r,   r-   r.   ú<module>r#     sg  ðõ %ã å !ß GÝ  Ý 4Ý 9ß RÝ 5Ý &ß TÓ Tß _Ñ _Ý 5÷ó ÷ nÝ 1ß WÑ Wß Cñ ÔÛÝð 
ˆ×	Ñ	˜HÓ	%€ô @Ð9Ô ?ð ôn
Ð-ó n
ó ðn
ôb 5Ð.Ô 4óð$ ô*)�nó *)ó ð*)ôZ�—	‘	ô ô Ð3ô  ôF @Ð9Ô ?ô(KÐ)ô (KôVfÐ Aô fñ ðôô
Ð%ó óð
ñ< ðôô
<
Ð%Kó <
óð
<
ò~�r-   