§
    ‚Štj™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j4        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!e3j<        ¦  «        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¢ZDdS )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dS )ÚGlmAsrProcessorKwargsN©Ú__name__Ú
__module__Ú__qualname__© ó    úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/glmasr/modular_glmasr.pyr'   r'   2   ó   € € € € € € € r-   r'   c            	       óˆ   ‡ — 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 )ÚGlmAsrProcessorNú<|pad|>ú&Please transcribe this audio into texté�  c                 óV   •— t          ¦   «                              ||||||¬¦  «         dS )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Ú	tokenizerr6   r7   r8   r9   Ú	__class__s          €r.   r;   zGlmAsrProcessor.__init__7   sB   ø€ õ$ 	‰Œ×ÒØØØ'Ø#Ø)EØ'ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r-   Úaudio_lengthsútorch.TensorÚreturnc                 ó`   — 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,   )r<   r@   Ú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ˆMà# lÑ2°|ÑCÀaÑGˆ
ØÐr-   ÚaudioÚpromptÚkwargsc                 óà  — t          t          |¦  «        ¦  «        }t          ¦   «         rd„ |D ¦   «         }t          |¦  «        }|dk    rt	          d¦  «        ‚|€| j        g|z  }nÛt          |t          ¦  «        r|g|z  }n¿t          |t           t          f¦  «        r”t          |¦  «        |k    r#t	          dt          |¦  «        › d|› d�¦  «        ‚g }|D ]X}|€| 	                    | j        ¦  «         Œt          |t          ¦  «        r| 	                    |¦  «         ŒJt          d¦  «        ‚nt          d	¦  «        ‚d
„ t          ||¦  «        D ¦   «         } | j        |fddddœ|¤ŽS )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`].

        c                 ó¶   — g | ]V}t          |t          j        ¦  «        r8|                     ¦   «                              ¦   «                              ¦   «         n|‘ŒWS r,   )Ú
isinstanceÚtorchÚTensorÚdetachÚcpuÚnumpy)Ú.0Úels     r.   ú
<listcomp>z?GlmAsrProcessor.apply_transcription_request.<locals>.<listcomp>u   sN   € ÐsÐsÐsÐac½
À2ÅuÄ|Ñ8TÔ8TÐ\˜2Ÿ9š9™;œ;Ÿ?š?Ñ,Ô,×2Ò2Ñ4Ô4Ð4ÐZ\ÐsÐsÐsr-   r   z)`audio` must contain at least one sample.Nz	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`.c                 ód   — g | ]-\  }}d t          |t          ¦  «        rd|dœnd|dœd|dœgdœg‘Œ.S )ÚuserrL   )ÚtypeÚpath)r\   rL   Útext)r\   r^   )ÚroleÚcontent)rQ   Ústr)rW   Úprompt_textÚ
audio_items      r.   rY   z?GlmAsrProcessor.apply_transcription_request.<locals>.<listcomp>�   sz   € ð 
ð 
ð 
ñ (�˜Zð #õ & jµ#Ñ6Ô6ðD °*Ð=Ð=Ð=à&-¸
ÐCÐCØ!'°Ð=Ð=ð	 ðð ð
ð
ð 
ð 
r-   T)ÚtokenizeÚadd_generation_promptÚreturn_dict)Úlistr   r   ÚlenÚ
ValueErrorr8   rQ   ra   ÚtupleÚappendÚ	TypeErrorÚzipÚapply_chat_template)	r<   rL   rM   rN   Úaudio_itemsÚ
batch_sizeÚpromptsÚitemÚconversationss	            r.   Úapply_transcription_requestz+GlmAsrProcessor.apply_transcription_requestZ   s×  € õ2 /3Õ3SÐTYÑ3ZÔ3ZÑ.[Ô.[ˆÝÑÔð 	tØsÐsÐgrÐsÑsÔsˆKå˜Ñ%Ô%ˆ
Ø˜Š?ˆ?ÝÐHÑIÔIÐIàˆ>ØÔ8Ð9¸JÑFˆGˆGÝ˜¥Ñ$Ô$ð 	\Ø�h Ñ+ˆGˆGÝ˜¥¥u Ñ.Ô.ð 	\Ý�6‰{Œ{˜jÒ(Ð(Ý Øl¥ F¡¤ÐlÐl¸JÐlÐlÐlñô ð ð ˆGØð Oð O�Ø�<Ø—N’N 4Ô#DÑEÔEÐEÐEÝ ¥cÑ*Ô*ð OØ—N’N 4Ñ(Ô(Ð(Ð(å#Ð$MÑNÔNÐNðOõ ÐZÑ[Ô[Ð[ð
ð 
õ ,/¨w¸Ñ+DÔ+Dð
ñ 
ô 
ˆð (ˆtÔ'Øð
àØ"&Øð	
ð 
ð
 ð
ð 
ð 	
r-   )Nr2   r3   r4   )r@   rA   rB   rA   ©N)r)   r*   r+   r;   rK   ra   rg   r   r   r'   r	   rt   Ú__classcell__©r?   s   @r.   r1   r1   5   sÐ   ø€ € € € € ð ØØ%MØð
ð 
ð 
ð 
ð 
ð 
ð6ð ð ð ð *.ðJ
ð J
à�T˜#”Y‰ Ñ+ðJ
ð �d˜3”i‘ $Ñ&ðJ
ð Ð.Ô/ð	J
ð
 
ðJ
ð J
ð J
ð J
ð J
ð J
ð J
ð J
r-   r1   c                   ó   — e Zd ZdS )ÚGlmAsrRotaryEmbeddingNr(   r,   r-   r.   ry   ry   §   r/   r-   ry   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 )Néÿÿÿÿ.)Údim)Ú	unsqueezeÚshaper!   rR   Ú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Ô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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¬¦  «        | _        d S )NFT)Úbias)r:   r;   Ú	is_causalr%   ÚLinearÚhidden_sizeÚnum_attention_headsÚhead_dimÚq_projÚnum_key_value_headsÚk_projÚv_projÚo_proj©r<   r�   r‘   r?   s      €r.   r;   zGlmAsrAttention.__init__¾   sÆ   ø€ Ý‰Œ×Ò˜ Ñ+Ô+Ð+ØˆŒÝ”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-   NÚhidden_statesÚposition_embeddingsrN   rB   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 )Nr{   r"   r   g        )Úattention_maskÚdropoutÚscaling)r~   r˜   r™   ÚviewÚ	transposer›   rœ   r�   r   Úget_interfacer�   Ú_attn_implementationr    ÚtrainingÚattention_dropoutr¤   ÚreshapeÚ
contiguousr�   )r<   rŸ   r    rN   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesr‚   rƒ   Úattention_interfaceÚattn_outputÚattn_weightss                 r.   Úforwardz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-   ru   ©r)   r*   r+   r#   Úintr;   rR   rS   rj   r   r   rµ   rv   rw   s   @r.   r�   r�   ¼   sÂ   ø€ € € € € ð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 ru   )r:   r;   r%   r•   r–   Úintermediate_sizeÚfc1Úfc2r   Ú
hidden_actÚact_fn©r<   r�   r?   s     €r.   r;   zGlmAsrMLP.__init__ë   s^   ø€ Ý‰Œ×ÒÑÔÐÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒÝ˜VÔ.Ô/ˆŒˆˆr-   rŸ   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ru   )r¼   r¿   r½   )r<   rŸ   s     r.   rµ   zGlmAsrMLP.forwardñ   s;   € ØŸš Ñ/Ô/ˆØŸš MÑ2Ô2ˆØŸš Ñ/Ô/ˆØÐr-   )r)   r*   r+   r;   rR   rS   rµ   rv   rw   s   @r.   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;   r–   r�   Ú	self_attnr¹   Úmlpr%   Ú	LayerNormÚinput_layernormÚpost_attention_layernormrž   s      €r.   r;   zGlmAsrEncoderLayer.__init__ù   sw   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔå(°À)ÐLÑLÔLˆŒå˜VÑ$Ô$ˆŒÝ!œ|¨FÔ,>Ñ?Ô?ˆÔÝ(*¬°VÔ5GÑ(HÔ(HˆÔ%Ð%Ð%r-   NrŸ   r    rN   rB   c                 óÆ   — |}|                       |¦  «        } | j        d||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)rŸ   r    r,   )rÈ   rÅ   rÉ   rÆ   )r<   rŸ   r    rN   ÚresidualÚ_s         r.   rµ   zGlmAsrEncoderLayer.forward  s•   € ð !ˆØ×,Ò,¨]Ñ;Ô;ˆà)˜4œ>ð 
Ø'Ø 3ð
ð 
ð ð
ð 
Ñˆ�qð
 ! =Ñ0ˆð !ˆØ×5Ò5°mÑDÔDˆØŸš Ñ/Ô/ˆØ  =Ñ0ˆØÐr-   ru   r¶   rw   s   @r.   rÃ   rÃ   ø   s¶   ø€ € € € € ðI˜|ð I¸ð Ið Ið Ið Ið Ið Ið IMðð à”|ðð # 5¤<°´Ð#=Ô>ÀÑEðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð r-   rÃ   c                   ó   — e Zd ZdS )ÚGlmAsrPreTrainedModelNr(   r,   r-   r.   rÎ   rÎ     r/   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_featuresrL   rÃ   )rŸ   Ú
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"   )rH   rG   r   )rH   rI   rG   c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r,   )rÃ   )rW   r‘   r�   s     €r.   rY   z*GlmAsrEncoder.__init__.<locals>.<listcomp>/  s$   ø€ ÐdÐdÐd°yÕ ¨	Ñ2Ô2ÐdÐdÐdr-   )r�   F)r:   r;   r%   ÚConv1dÚnum_mel_binsr–   Úconv1Úconv2Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersrÇ   Únormry   Ú
rotary_embÚgradient_checkpointingÚ	post_initrÀ   s    `€r.   r;   zGlmAsrEncoder.__init__)  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-   rN   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   ©Údevice)r„   r    )Úlast_hidden_state)r%   Ú
functionalÚgelur×   rØ   r¦   rÞ   rR   Úaranger~   rã   rÜ   rÝ   r   )r<   rÑ   rN   Úinputs_embedsrŸ   r    Úencoder_layers          r.   rµ   zGlmAsrEncoder.forward6  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-   )r)   r*   r+   r$   Ú__annotations__Úmain_input_nameÚinput_modalitiesÚ_no_split_modulesrÃ   r�   Ú_can_record_outputsr;   r   r   r   r   r   rµ   rv   rw   s   @r.   rÐ   rÐ     sÅ   ø€ € € € € € ØÐÐÑØ&€OØÐØ-Ð.Ðà+Ø%ðð Ðð
Ð2ð ð ð ð ð ð ð  ØØðK°Ð7IÔ0Jð Kð Kð Kñ „^ñ „_ñ  ÔðKð Kð Kð 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        ¦  «        | _	        d S )Nr   )
r:   r;   r%   r•   Úaudio_configr»   Útext_configr–   Úlinear_1Úlinear_2rÀ   s     €r.   r;   z"GlmAsrMultiModalProjector.__init__K  sf   ø€ Ý‰Œ×ÒÑÔÐÝœ	 &Ô"5Ô"GÈÔI[ÔIgÐjkÑIkÑlÔlˆŒÝœ	 &Ô"4Ô"@À1Ñ"DÀfÔFXÔFdÑeÔeˆŒˆˆr-   )r)   r*   r+   r#   r;   rv   rw   s   @r.   rð   rð   J  sO   ø€ € € € € ðf˜|ð fð fð fð fð fð fð fð 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                   ó€   — e Zd Ze ed¬¦  «        dej        dej        dee	         de
ez  fd„¦   «         ¦   «         ZdS )	ÚGlmAsrModelzgCompute audio embeddings from log-mel input features using the audio encoder and multi-modal projector.rö   rÑ   Úinput_features_maskrN   rB   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 )
Nrf   Tr   r{   rE   r   r"   rD   râ   )Úaudio_towerrä   r«   r~   r�   rò   r»   Úmulti_modal_projectorÚsumrR   rç   rã   ÚtoÚpooler_output)r<   rÑ   rú   rN   Úaudio_outputsÚaudio_hidden_statesÚaudio_embedsr@   rG   rH   rI   rF   Úpost_lengthsÚ
valid_masks                 r.   Úget_audio_featureszGlmAsrModel.get_audio_featuresW  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-   N)r)   r*   r+   r   r   rR   ÚFloatTensorrS   r   r   rj   r   r  r,   r-   r.   rù   rù   Q  s�   € € € € € ð Ø€^Ø~ðñ ô ðàÔ)ðð #œ\ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñô ñ Ôðð ð r-   rù   c                   ó  ‡ — 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                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S ru   )r:   r;   rù   Úmodelrà   rÀ   s     €r.   r;   z'GlmAsrForConditionalGeneration.__init__|  s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý  Ñ(Ô(ˆŒ
Ø�ŠÑÔÐÐÐr-   Nr   Ú	input_idsrÑ   rú   r¢   r„   Úpast_key_valuesrè   ÚlabelsÚ	use_cacheÚlogits_to_keeprN   rB   c                 óH   •—  t          ¦   «         j        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,   )r:   rµ   )r<   r  rÑ   rú   r¢   r„   r  rè   r  r  r  rN   r?   s               €r.   rµ   z&GlmAsrForConditionalGeneration.forward�  sL   ø€ ðT �u‰wŒwŒð 

ØØ)Ø%Ø+Ø'ØØØ)ð

ð 

ð ð

ð 

ð 
	
r-   )
NNNNNNNNNr   )r)   r*   r+   Ú_tied_weights_keysr;   rR   Ú
LongTensorr  rS   r   Úboolr·   r   r   r   rµ   rv   rw   s   @r.   r	  r	  t  sJ  ø€ € € € € ð +Ð,VÐWÐðð ð ð ð ð .2Ø37Ø37Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ð4
ð 4
àÔ# dÑ*ð4
ð Ô)¨DÑ0ð4
ð #œ\¨DÑ0ð	4
ð
 œ tÑ+ð4
ð Ô&¨Ñ-ð4
ð  ™ð4
ð Ô(¨4Ñ/ð4
ð Ô  4Ñ'ð4
ð ˜$‘;ð4
ð ˜eœlÑ*ð4
ð Ð+Ô,ð4
ð 
 ð4
ð 4
ð 4
ð 4
ð 4
ð 4
ð 4
ð 4
ð 4
ð 4
r-   r	  )rÐ   r	  rù   r1   rÎ   )Nr"   )EÚcollections.abcr   rV   Ú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$   rR   r%   Ú
get_loggerr)   Úloggerr'   r1   ry   r�   r�   ÚModuler¹   rÃ   rÎ   rÐ   rð   rù   r	  Ú__all__r,   r-   r.   ú<module>r+     sP  ðð %Ð $Ð $Ð $Ð $Ð $à Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ  Ð  Ð  Ð  Ð  Ð  Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø &Ð &Ð &Ð &Ð &Ð &Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ _Ð _Ð _Ð _Ð _Ð _Ð _Ð _Ð _Ð _Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð nÐ mÐ mÐ mÐ mÐ mÐ mÐ mØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cð ÐÑÔð Ø€L€L€LØÐÐÐÐÐð 
ˆÔ	˜HÑ	%Ô	%€ð @Ð ?Ð ?Ð ?Ð ?Ð9Ñ ?Ô ?Ð ?ð ðn
ð n
ð n
ð n
ð n
Ð-ñ n
ô n
ñ „ðn
ðb 5Ð 4Ð 4Ð 4Ð 4Ð.Ñ 4Ô 4Ð 4ðð ð ð ð$ ð*)ð *)ð *)ð *)ð *)�nñ *)ô *)ñ Ôð*)ðZð ð ð ð �”	ñ ô ð ð ð  ð  ð  ð  Ð3ñ  ô  ð  ðF @Ð ?Ð ?Ð ?Ð ?Ð9Ñ ?Ô ?Ð ?ð(Kð (Kð (Kð (Kð (KÐ)ñ (Kô (Kð (KðVfð fð fð fð fÐ Añ fô fð fð €ððñ ô ð
ð ð ð ð Ð%ñ ô ñô ð
ð< €ððñ ô ð
<
ð <
ð <
ð <
ð <
Ð%Kñ <
ô <
ñô ð
<
ð~ð ð €€€r-   