§
    ‚Štjg3  ã                   óì   — d dl 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mZ ddlmZmZmZ  e¦   «         rd dlZ ej        e¦  «        Z G d„ d	ed
¬¦  «        Ze G d„ de	¦  «        ¦   «         ZdgZdS )é    Né   )Ú
AudioInputÚ make_list_of_audio_chat_template)ÚBatchFeature)ÚProcessingKwargsÚProcessorMixinÚUnpack)Ú	TextInput)Úauto_docstringÚis_torch_availableÚloggingc                   ó,   — e Zd Zddiddddœdddœd	œZd
S )ÚGlmAsrProcessorKwargsÚpaddingTi€>  Ú
max_length)Úsampling_rateÚreturn_attention_maskr   ÚptÚleft)Úreturn_tensorsÚpadding_side)Útext_kwargsÚaudio_kwargsÚcommon_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/glmasr/processing_glmasr.pyr   r   &   sM   € € € € € ð �tð
ð #Ø%)Ø#ð
ð 
ð #Ø"ð
ð 
ðð €I€I€Ir    r   F)Útotalc                   óÊ  ‡ — e Zd ZeZ	 	 	 	 dˆ fd„	Ze	 	 ddeee         z  de	dz  d	e
dz  d
ee         def
ˆ fd„¦   «         Z	 	 dde	dz  deee         z  dz  d
ee         fˆ fd„Zd d„Zde	fd„Zdededefd„Zedee         fˆ fd„¦   «         Zedee         f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ddœd„Zd„ Zdedefd„Zˆ xZS )"ÚGlmAsrProcessorNú<|pad|>ú&Please transcribe this audio into texté�  c                 ó®   •— || _         |                     |¦  «        | _        || _        || _        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_templateN)Úaudio_tokenÚconvert_tokens_to_idsÚaudio_token_idÚdefault_transcription_promptÚmax_audio_lenÚsuperÚ__init__)ÚselfÚfeature_extractorÚ	tokenizerr)   r*   r-   r.   Ú	__class__s          €r!   r0   zGlmAsrProcessor.__init__;   sY   ø€ ð$ 'ˆÔØ'×=Ò=¸kÑJÔJˆÔØ,HˆÔ)Ø*ˆÔÝ‰Œ×ÒÐ*¨IÀ]ÐÑSÔSÐSÐSÐSr    FÚtextÚaudioÚoutput_labelsÚkwargsÚreturnc                 óh  •— d|v r(|d         dk    rt          | j        j        › d�¦  «        ‚|rd|d<    t          ¦   «         j        d||dœ|¤Ž}|rP|                     d¦  «        }|d                              ¦   «         }d	||d
k    <   d	||| j        j        k    <   ||d<   t          |d¬¦  «        S )a0  
        output_labels (bool, *optional*, default=False):
            Whether to return labels for training.

        Returns:
            [`BatchFeature`]: A dictionary with tokenized text (`input_ids`, `attention_mask`) and
            audio features (`input_features`, `input_features_mask`).
        r   r   z% only supports `return_tensors='pt'`.TÚreturn_mm_token_type_ids©r6   r5   Úmm_token_type_idsÚ	input_idsiœÿÿÿr   Úlabels)ÚdataÚtensor_typer   )
Ú
ValueErrorr4   r   r/   Ú__call__ÚpopÚcloner3   Úpad_token_idr   )	r1   r5   r6   r7   r8   Úmodel_inputsr=   r?   r4   s	           €r!   rC   zGlmAsrProcessor.__call__S   sæ   ø€ ð" ˜vÐ%Ð%¨&Ð1AÔ*BÀdÒ*JÐ*JÝ ¤Ô 7Ð^Ð^Ð^Ñ_Ô_Ð_àð 	6Ø15ˆFÐ-Ñ.Ø'•u‘w”wÔ'ÐI¨e¸$ÐIÐIÀ&ÐIÐIˆàð 	,Ø ,× 0Ò 0Ð1DÑ EÔ EÐØ! +Ô.×4Ò4Ñ6Ô6ˆFØ-1ˆFÐ$¨Ò)Ñ*Ø<@ˆF�6˜Tœ^Ô8Ò8Ñ9Ø%+ˆL˜Ñ"Ý ¸4Ð@Ñ@Ô@Ð@r    c                 óð   •—  t          ¦   «         j        d||dœ|¤Ž |�R|�Rt          |¦  «        t          |¦  «        k    r4t          dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚d S d S d S )Nr<   zGot z
 text but z audios; they must match 1:1.r   )r/   Úvalidate_inputsÚlenrB   )r1   r6   r5   r8   r4   s       €r!   rI   zGlmAsrProcessor.validate_inputss   sŒ   ø€ ð 	 �‰ŒÔÐA e°$ÐAÐA¸&ÐAÐAÐAàÐ Ð 1µc¸$±i´iÅ3ÀuÁ:Ä:Ò6MÐ6MÝÐb¥C¨¡I¤IÐbÐb½¸U¹¼ÐbÐbÐbÑcÔcÐcð ÐÐ 1Ð 1Ð6MÐ6Mr    Úaudio_lengthsútorch.Tensorc                 ó`   — d}dD ]\  }}}|d|z  z   |dz
  z
  dz
  |z  dz   }Œ||z
  |z  dz   }|S )Né   ))é   r   rO   )rO   r   é   rP   rO   r   )r1   rK   Úmerge_factorr   Úkernel_sizeÚstrideÚ
num_tokenss          r!   Ú_get_audio_token_lengthz'GlmAsrProcessor._get_audio_token_length~   sc   € ØˆØ,Bð 	`ð 	`Ñ(ˆG�[ &Ø*¨Q°©[Ñ8¸KÈ!¹OÑLÈqÑPÐU[Ñ[Ð^_Ñ_ˆMˆMà# lÑ2°|ÑCÀaÑGˆ
ØÐr    c           
      óJ  — t          |d         | j        j        z  ¦  «        }t          | j        | j        j        z  ¦  «        }g }g }|D ]ç}t          |j        d         ¦  «        }t          d||z   dz
  |z  ¦  «        }	|	|k    r:t                               d||d         z  d›d| j        › d| j        › d�¦  «         |}	|                     |	¦  «         t          ||	|z  ¦  «        }
t          |	¦  «        D ]:}||z  }t          |dz   |z  |
¦  «        }|                     |||…         ¦  «         Œ;Œè| j                             |¦  «        } | j        |fi |¤Ž}|                     d	¦  «        |d
<   t          j        d„ t          j        |d
                              d¦  «        |¦  «        D ¦   «         ¦  «        }|                      |¦  «        |d<   g }t          t%          |¦  «        ¦  «        D ].}|                      ||¬¦  «        }|                     |¦  «         Œ/||fS )Nr   r   rO   zAudio duration (z.1fzs) exceeds zs; truncating to first zs.Úattention_maskÚinput_features_maskc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )Úsum)Ú.0Úss     r!   ú
<listcomp>z2GlmAsrProcessor._process_audio.<locals>.<listcomp>¥   s    € ÐkÐkÐk˜ˆQ�UŠU‰WŒWÐkÐkÐkr    éÿÿÿÿÚnum_audio_tokens)Ú	audio_idx)Úintr2   Úchunk_lengthr.   ÚshapeÚmaxÚloggerÚwarningÚappendÚminÚrangeÚfetch_audiorD   ÚtorchÚstackÚsplitrZ   rU   rJ   Úreplace_audio_token)r1   r6   r8   Úwindow_sizeÚmax_windowsÚper_sample_windowsÚflat_chunksÚaudio_elÚ	n_samplesÚn_winÚtime_capÚiÚstartÚendÚaudio_inputsrK   Úaudio_replacementsÚidxÚreplacement_texts                      r!   Ú_process_audiozGlmAsrProcessor._process_audio†   s•  € å˜& Ô1°DÔ4JÔ4WÑWÑXÔXˆÝ˜$Ô,°Ô0FÔ0SÑSÑTÔTˆà(*ÐØ(*ˆØð 	8ð 	8ˆHÝ˜HœN¨1Ô-Ñ.Ô.ˆIÝ˜˜I¨Ñ3°aÑ7¸KÑGÑHÔHˆEØ�{Ò"Ð"Ý—’ð ] y°6¸/Ô3JÑ'Jð  ]ð  ]ð  ]Ð[_Ô[mð  ]ð  ]ð  GKô  GYð  ]ð  ]ð  ]ñô ð ð $�Ø×%Ò% eÑ,Ô,Ð,å˜9 e¨kÑ&9Ñ:Ô:ˆHÝ˜5‘\”\ð 8ð 8�Ø˜K™�Ý˜1˜q™5 KÑ/°Ñ:Ô:�Ø×"Ò" 8¨E°#¨IÔ#6Ñ7Ô7Ð7Ð7ð8ð
 Ô&×2Ò2°5Ñ9Ô9ˆØ-�tÔ-¨kÐDÐD¸VÐDÐDˆØ.:×.>Ò.>Ð?OÑ.PÔ.PˆÐ*Ñ+õ
 œØkÐk�eœk¨,Ð7LÔ*M×*QÒ*QÐRTÑ*UÔ*UÐWiÑjÔjÐkÑkÔkñ
ô 
ˆð ,0×+GÒ+GÈÑ+VÔ+VˆÐ'Ñ(àÐÝ�˜U™œÑ$Ô$ð 	8ð 	8ˆCØ#×7Ò7¸ÐPSÐ7ÑTÔTÐØ×%Ò%Ð&6Ñ7Ô7Ð7Ð7àÐ/Ð/Ð/r    rz   r`   c                 ó2   — |d         |         }| j         |z  S )Nr_   )r*   )r1   rz   r`   r_   s       r!   rn   z#GlmAsrProcessor.replace_audio_token°   s"   € Ø'Ð(:Ô;¸IÔFÐØÔÐ"2Ñ2Ð2r    c                 ó2   •— t          ¦   «         j        dgz   S )NrX   )r/   Úmodel_input_names)r1   r4   s    €r!   r�   z!GlmAsrProcessor.model_input_names´   s   ø€ å‰wŒwÔ(Ð,AÐ+BÑBÐBr    c                 ó   — dgS )zNInput names returned always by subprocessors but not used in model's `forward`r_   r   )r1   s    r!   Úunused_input_namesz"GlmAsrProcessor.unused_input_names¸   s   € ð #Ð#Ð#r    Úpromptc                 óà  — 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   )Ú
isinstancerk   ÚTensorÚdetachÚcpuÚnumpy)r[   Úels     r!   r]   z?GlmAsrProcessor.apply_transcription_request.<locals>.<listcomp>Ø   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 )Úuserr6   )ÚtypeÚpath)r�   r6   r5   )r�   r5   )ÚroleÚcontent)r‡   Ústr)r[   Úprompt_textÚ
audio_items      r!   r]   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   rJ   rB   r-   r‡   r“   Útuplerg   Ú	TypeErrorÚzipÚapply_chat_template)	r1   r6   r„   r8   Úaudio_itemsÚ
batch_sizeÚpromptsÚitemÚconversationss	            r!   Úapply_transcription_requestz+GlmAsrProcessor.apply_transcription_request½   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    )Ústrip_prefixc                óL   ‡ —  ‰ j         j        |i |¤Ž}|rˆ fd„|D ¦   «         }|S )aj  
        Forward arguments to [`~PreTrainedTokenizer.decode`] and optionally remove the assistant framing the model
        was trained to produce.

        AF3 transcription requests respond with sentences such as `"The spoken content of the audio is "..."."`.
        Setting `strip_prefix=True` trims the fixed prefix for just the transcription text.
        c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )Ú"_strip_assistant_prefix_and_quotes)r[   r5   r1   s     €r!   r]   z*GlmAsrProcessor.decode.<locals>.<listcomp>  s'   ø€ ÐYÐYÐYÈ�t×>Ò>¸tÑDÔDÐYÐYÐYr    )r3   Údecode)r1   r¤   Úargsr8   Údecodeds   `    r!   r¨   zGlmAsrProcessor.decode	  sF   ø€ ð (�$”.Ô'¨Ð8°Ð8Ð8ˆØð 	ZØYÐYÐYÐYÐQXÐYÑYÔYˆGØˆr    c                 ó   —  | j         |i |¤ŽS )z)BC as previous examples used batch_decode)r¨   )r1   r©   r8   s      r!   Úbatch_decodezGlmAsrProcessor.batch_decode  s   € àˆtŒ{˜DÐ+ FÐ+Ð+Ð+r    c                 ó°  — |                      ¦   «         }dD ]B}|                     |¦  «        r+|t          |¦  «        d…                               ¦   «         } nŒC|                     d¦  «        r|dd…                               ¦   «         }t          |¦  «        dk    r8|d         |d         k    r&|d         dv r|dd…                               ¦   «         }|S )	zi
        Remove the assistant prefix and surrounding quotes from a decoded transcription string.
        )z"The spoken content of the audio isz!The transcription of the audio isz!The content of the input audio isNú.r^   rP   r   >   ú"ú'rO   )ÚstripÚ
startswithrJ   Úendswith)r1   r5   ÚstrippedÚprefixs       r!   r§   z2GlmAsrProcessor._strip_assistant_prefix_and_quotes  så   € ð
 —:’:‘<”<ˆð
ð 	ð 	ˆFð
 ×"Ò" 6Ñ*Ô*ð Ø#¥C¨¡K¤K M MÔ2×8Ò8Ñ:Ô:�Ø�ðð ×Ò˜SÑ!Ô!ð 	-Ø   ”}×*Ò*Ñ,Ô,ˆHåˆx‰=Œ=˜AÒÐ (¨1¤+°¸"´Ò"=Ð"=À(È1Ä+ÐQ[ÐB[ÐB[Ø  " ”~×+Ò+Ñ-Ô-ˆHàˆr    )Nr%   r&   r'   )NF)NN)rK   rL   r9   rL   )N)r   r   r   r   Úvalid_processor_kwargsr0   r   r
   r™   r   Úboolr	   r   rC   r   rI   rU   r~   Údictra   r“   rn   Úpropertyr�   rƒ   r£   r¨   r¬   r§   Ú__classcell__)r4   s   @r!   r$   r$   7   sÊ  ø€ € € € € à2Ðð ØØ%MØðTð Tð Tð Tð Tð Tð0 ð $(Ø%*ð	Að Aà˜$˜yœ/Ñ)ðAð ˜DÑ ðAð ˜d‘{ð	Að
 Ð.Ô/ðAð 
ðAð Að Að Að Añ „^ðAðB $(Ø37ð	dð 	dà˜DÑ ð	dð ˜$˜yœ/Ñ)¨DÑ0ð	dð Ð)Ô*ð		dð 	dð 	dð 	dð 	dð 	dðð ð ð ð(0 Jð (0ð (0ð (0ð (0ðT3°ð 3Àð 3Èð 3ð 3ð 3ð 3ð ðC 4¨¤9ð Cð Cð Cð Cð Cñ „XðCð ð$ D¨¤Ið $ð $ð $ñ „Xð$ð *.ðJ
ð J
à�T˜#”Y‰ Ñ+ðJ
ð �d˜3”i‘ $Ñ&ðJ
ð Ð.Ô/ð	J
ð
 
ðJ
ð J
ð J
ð J
ðX */ð ð ð ð ð ð,ð ,ð ,ð°sð ¸sð ð ð ð ð ð ð ð r    r$   )r‹   ÚnpÚaudio_utilsr   r   Úfeature_extraction_utilsr   Úprocessing_utilsr   r   r	   Útokenization_utils_baser
   Úutilsr   r   r   rk   Ú
get_loggerr   re   r   r$   Ú__all__r   r    r!   ú<module>rÃ      s:  ðð, Ð Ð Ð à GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @ð ÐÑÔð Ø€L€L€Lð 
ˆÔ	˜HÑ	%Ô	%€ðð ð ð ð Ð,°Eð ñ ô ð ð" ðxð xð xð xð x�nñ xô xñ „ðxðv Ð
€€€r    