§
    ‚ŠtjŽ5  ã                   ó0  — d dl Z d dlmZ d dlmZ d dlZddlmZm	Z	m
Z
  e
¦   «         rd dlZ e	¦   «         r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mZ dd	lmZmZ  G d
„ ded¬¦  «        Z G d„ ded¬¦  «        Ze G d„ de¦  «        ¦   «         ZdgZdS )é    N)ÚPath)ÚAnyé   )Úauto_docstringÚis_soundfile_availableÚis_torch_available)Ú
AudioInputÚmake_list_of_audio)ÚBatchFeature)ÚAudioKwargsÚProcessingKwargsÚProcessorMixinÚUnpack)ÚPreTokenizedInputÚ	TextInputc                   ó4   — e Zd ZU dZeeef         dz  ed<   dS )ÚCsmAudioKwargsaÃ  
    encoded_length_kwargs (`dict[str, Any]`, *optional*):
        Dictionary of keyword arguments used to compute the encoded audio sequence length. This includes parameters
        such as `kernel_sizes`, `strides`, `dilations`, and `use_causal_conv` that define the convolutional layers
        used in audio encoding. The encoded length is used to determine how many audio tokens to generate for each
        audio input in the text sequence.
    NÚencoded_length_kwargs)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚdictÚstrr   Ú__annotations__© ó    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/csm/processing_csm.pyr   r   $   s7   € € € € € € ðð ð    S œ>¨DÑ0Ð0Ð0Ñ0Ð0Ð0r   r   F)Útotalc                   óN   — e Zd ZU eed<   ddddœg d¢g d¢g d¢dd	œd
dœddidœZdS )ÚCsmProcessorKwargsÚaudio_kwargsTÚleftF)ÚpaddingÚpadding_sideÚadd_special_tokens)é   r   é   é   r   r(   é
   r   r(   é   r   r(   é   r   é   )r(   r(   r(   r-   r(   r(   é   r(   r(   é   r(   r(   r)   r(   é   )r(   r(   r(   r(   r(   r(   r(   r(   r(   r(   r(   r(   r(   r(   r(   )Úkernel_sizesÚstridesÚ	dilationsÚuse_causal_conviÀ]  )r   Úsampling_rateÚreturn_tensorsÚpt)Útext_kwargsr"   Úcommon_kwargsN)r   r   r   r   r   Ú	_defaultsr   r   r   r!   r!   0   s�   € € € € € € Ø Ð Ð Ñ ð Ø"Ø"'ð
ð 
ð !QÐ PÐ PØHÐHÐHØJÐJÐJØ#'ð	&ð &ð #ð
ð 
ð +¨DÐ1ðð €I€I€Ir   r!   c                   ó  ‡ — e Zd Z	 dˆ fd„	Zedd„¦   «         Zdedeez  e	eez           z  de
e         fd„Ze	 	 	 dd
eez  e	e         z  e	e         z  dz  dedz  dedz  dedz  de
e         f
d„¦   «         Zed„ ¦   «         Zˆ xZS )ÚCsmProcessorNc                 óŒ  •— t          |d¦  «        s'd| _        |                     | j        ¦  «        | _        n|j        | _        |j        | _        t          |d¦  «        s'd| _        |                     | j        ¦  «        | _        n|j        | _        |j        | _        t          ¦   «                              |||¬¦  «         d S )NÚaudio_tokenz	<|AUDIO|>Úaudio_eos_tokenz<|audio_eos|>)Úchat_template)Úhasattrr>   Úconvert_tokens_to_idsÚaudio_token_idr?   Úaudio_eos_token_idÚsuperÚ__init__)ÚselfÚfeature_extractorÚ	tokenizerr@   Ú	__class__s       €r   rF   zCsmProcessor.__init__G   sÅ   ø€ õ �y -Ñ0Ô0ð 	;Ø*ˆDÔØ"+×"AÒ"AÀ$ÔBRÑ"SÔ"SˆDÔÐà(Ô4ˆDÔØ"+Ô":ˆDÔå�yÐ"3Ñ4Ô4ð 	CØ#2ˆDÔ Ø&/×&EÒ&EÀdÔFZÑ&[Ô&[ˆDÔ#Ð#à#,Ô#<ˆDÔ Ø&/Ô&BˆDÔ#å‰Œ×ÒÐ*¨IÀ]ÐÑSÔSÐSÐSÐSr   c                 ó<  — | }|�|�|�|€|S t          |||¦  «        D ]}\  }}}|dz
  |z  dz   }	||z
  }
|
dz  }|
|z
  }||	z
  |
z   |z  dz   }t          j        |¦  «        dz
  }||z  |z   |
z
  }||z
  }|r|
}|}n||z   }||z   |z   }|||dz
  z  z
  dz
  |z  dz   }Œ~|S )a|  
        Compute the length of the encoded audio sequence.

        Args:
            audio_length (int): The length of the audio sequence.
            kernel_sizes (list[int]): The kernel sizes for the convolutional layers.
            strides (list[int]): The strides for the convolutional layers.
            use_causal_conv (bool): Whether to use causal convolutions.
        Nr(   r0   )ÚzipÚmathÚceil)Úaudio_lengthr1   r2   r3   r4   Ú
cur_lengthÚkernel_sizeÚstrideÚdilationÚeffective_kernel_sizeÚpadding_totalÚpadding_rightÚpadding_leftÚn_framesÚideal_lengthÚextra_paddings                   r   Ú_get_encoded_lengthz CsmProcessor._get_encoded_length]   s  € ð "ˆ
àÐ 7 ?°iÐ6GÈ?ÐKbØÐå-0°¸wÈ	Ñ-RÔ-Rð 	Wð 	WÑ)ˆK˜ Ø%0°1¡_¸Ñ$@À1Ñ$DÐ!Ø'¨&Ñ0ˆMØ)¨QÑ.ˆMØ(¨=Ñ8ˆLà"Ð%:Ñ:¸]ÑJÈfÑTÐWXÑXˆHÝ”y Ñ*Ô*¨QÑ.ˆHØ# fÑ,¨{Ñ:¸]ÑJˆLØ(¨:Ñ5ˆMàð >Ø,�Ø -��à -°Ñ =�à# lÑ2°]ÑBˆJØ$ x°;À±?Ñ'CÑCÀaÑGÈFÑRÐUVÑVˆJˆJàÐr   ÚaudioÚsaving_pathÚkwargsc                 óÆ  — t          ¦   «         st          d¦  «        ‚t          |¦  «        }t          |t          t
          f¦  «        r|g}nDt          |t          t          f¦  «        rt          d„ |D ¦   «         ¦  «        st          d¦  «        ‚t          |¦  «        t          |¦  «        k    rt          d¦  «        ‚ | j        t          fi |¤Ž}|d         }|d         }t          ||¦  «        D ]m\  }}t          |t          j        ¦  «        r8|                     ¦   «                              ¦   «                              ¦   «         }t'          j        |||¦  «         Œnd S )Nz/Please install `soundfile` to save audio files.c              3   óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S ©N)Ú
isinstancer   r   )Ú.0Úps     r   ú	<genexpr>z*CsmProcessor.save_audio.<locals>.<genexpr>“   s3   è è € Ð@qÐ@qÐ`aÅÈAÕPSÕUYÈ{ÑA[ÔA[Ð@qÐ@qÐ@qÐ@qÐ@qÐ@qr   zAInvalid input path. Please provide a string, or a list of stringsz5The number of audio and saving paths must be the samer"   r5   )r   ÚImportErrorr
   rb   r   r   ÚlistÚtupleÚallÚ
ValueErrorÚlenÚ_merge_kwargsr!   rL   ÚtorchÚTensorÚcpuÚfloatÚnumpyÚsfÚwrite)	rG   r\   r]   r^   Úoutput_kwargsr"   r5   Úaudio_valuerd   s	            r   Ú
save_audiozCsmProcessor.save_audioƒ   su  € õ &Ñ'Ô'ð 	QÝÐOÑPÔPÐPõ # 5Ñ)Ô)ˆõ �k¥C­ ;Ñ/Ô/ð 	bØ&˜-ˆKˆKÝ˜[­4µ¨-Ñ8Ô8ð 	b½SÐ@qÐ@qÐepÐ@qÑ@qÔ@qÑ=qÔ=qð 	bÝÐ`ÑaÔaÐaåˆu‰:Œ:�˜[Ñ)Ô)Ò)Ð)ÝÐTÑUÔUÐUà*˜Ô*Ýð
ð 
àð
ð 
ˆð % ^Ô4ˆØ$ _Ô5ˆå! %¨Ñ5Ô5ð 	4ð 	4‰NˆK˜Ý˜+¥u¤|Ñ4Ô4ð @Ø)ŸošoÑ/Ô/×5Ò5Ñ7Ô7×=Ò=Ñ?Ô?�ÝŒH�Q˜ ]Ñ3Ô3Ð3Ð3ð	4ð 	4r   Fç      ð?ÚtextÚoutput_labelsÚdepth_decoder_labels_ratioc           
      ó~	  ‡ ‡‡—  ‰ j         t          fd‰ j        j        i|¤Ž}|d         }|d         }|                     dd¦  «        }	|	dk    rt          ‰ j        j        › d�¦  «        ‚t          |t          ¦  «        r|g}nDt          |t          t          f¦  «        rt          d„ |D ¦   «         ¦  «        st          d	¦  «        ‚ˆ fd
„|D ¦   «         }
d}|�t          |¦  «        }t          |¦  «        }t          |
¦  «        dk    r:|t          |
¦  «        k    r'|€t          d¦  «        ‚t          d|
› d|› d�¦  «        ‚|�í|                     di ¦  «        Šˆˆ fd„|D ¦   «         }|                     ¦   «         }g }|D ]­}g }‰ j        |v rY|                     d¦  «        }‰ j        |z  }|                     |¦  «         |                     ‰ j        dd¦  «        }‰ j        |v °Yd|v r.|                     d|                     d¦  «        d¦  «        }d|v °.|                     |¦  «         Œ®|} ‰ j        |fi |¤Ž}i }|                     |¦  «         |��ƒ|                     dd¦  «         g g }}d}|
D ]ë}|dk    rP|                     t-          j        d¦  «        ¦  «         |                     t1          j        dg¦  «        ¦  «         ŒX|                     t-          j        d„ ||||z   …         D ¦   «         d¬¦  «        ¦  «         |                     t1          j        d„ ||||z   …         D ¦   «         ¦  «                             d¬¦  «        ¦  «         ||z  }Œì ‰ j        |fi |¤Ž}|                     dd¦  «         |                     |¦  «         t;          d„ |D ¦   «         ¦  «        Šˆfd„|D ¦   «         }t1          j        |d¬¦  «        |d<   |rÍ|d         ‰ j        k                          ¦   «         }|j!        d         }|dk    r8t1          j"        |¦  «        dtG          |d|z
  z  ¦  «        …         }||         }n|}t1          j$        |d         ‰ j        k    |d         ‰ j%        k    z  |d         d ¦  «        }d!||dd…df         |dd…df         f<   ||d"<   tM          ||	¬#¦  «        S )$a  
        output_labels (bool, *optional*, default=False):
            Whether to return labels for training. Indices will be in `[config.audio_token_id, -100, -101]`.
            - `config.audio_token_id` indicates an audio frame (considering sequence length elements as frames)
            - `-100` will be ignored in the loss computation
            - `-101` indicates the audio frame will be used only for the backbone model (using the first codebook token as labels)
        depth_decoder_labels_ratio (float, *optional*, default=1.0):
            The ratio of audio frames to keep for the depth decoder labels.

        Returns:
            [`BatchFeature`]: A [`BatchFeature`] with the following fields:

            - **input_ids** -- List of token ids to be fed to a model. Returned when `text` is not `None`.
            - **input_values** -- List of audio values to be fed to a model. Returned when `audio` is not `None`.
            - **attention_mask** -- List of indices specifying which tokens should be attended to by the model (when
              `return_attention_mask=True` or if *"attention_mask"* is in `self.model_input_names` and if `text` is not
              `None`).
            - **labels** -- List of labels for the audio frames. Returned when `output_labels=True`.
        Útokenizer_init_kwargsr8   r"   r6   Nr7   z% only supports `return_tensors='pt'`.c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S ra   )rb   r   )rc   Úts     r   re   z(CsmProcessor.__call__.<locals>.<genexpr>Ð   s-   è è € Ð9[Ð9[ÐQR½*ÀQÍÑ:LÔ:LÐ9[Ð9[Ð9[Ð9[Ð9[Ð9[r   zAInvalid input text. Please provide a string, or a list of stringsc                 óD   •— g | ]}|                      ‰j        ¦  «        ‘ŒS r   )Úcountr>   )rc   r~   rG   s     €r   ú
<listcomp>z)CsmProcessor.__call__.<locals>.<listcomp>Ò   s(   ø€ ÐCÐCÐC¸˜1Ÿ7š7 4Ô#3Ñ4Ô4ÐCÐCÐCr   r   z@No audio were provided, but there are audio tokens in the promptz)The number of audio tokens in each text (z7) should be the same as the number of provided audios (z).r   c                 óB   •— g | ]} ‰j         |j        d          fi ‰¤Ž‘ŒS ©éÿÿÿÿ)r[   Úshape)rc   Úaudio_arrayr   rG   s     €€r   r�   z)CsmProcessor.__call__.<locals>.<listcomp>ä   sE   ø€ ð %ð %ð %Ø]hÐ(�Ô(¨Ô):¸2Ô)>ÐXÐXÐBWÐXÐXð%ð %ð %r   z<placeholder>r(   Úreturn_attention_maskr„   c                 ó’   — g | ]D}t          |t          j        ¦  «        r&|                     ¦   «                              ¦   «         n|‘ŒES r   )rb   rm   rn   ro   rq   ©rc   Úels     r   r�   z)CsmProcessor.__call__.<locals>.<listcomp>
  sQ   € ð ð ð à$&õ 5?¸rÅ5Ä<Ñ4PÔ4PÐ X §¢¡¤§¢Ñ 0Ô 0Ð 0ÐVXðð ð r   )Úaxisc                 ó(   — g | ]}|j         d          ‘ŒS rƒ   ©r…   r‰   s     r   r�   z)CsmProcessor.__call__.<locals>.<listcomp>  s   € Ð%^Ð%^Ð%^°r b¤h¨r¤lÐ%^Ð%^Ð%^r   )ÚdimÚpadding_maskc              3   ó0   K  — | ]}|j         d          V — ŒdS )r„   Nr�   )rc   Úcut_idxss     r   re   z(CsmProcessor.__call__.<locals>.<genexpr>  s)   è è € ÐRÐR°˜(œ.¨Ô,ÐRÐRÐRÐRÐRÐRr   c           	      ó~   •— g | ]9}t           j        j                             |d ‰|j        d         z
  fd¬¦  «        ‘Œ:S )r   r„   )Úvalue)rm   ÚnnÚ
functionalÚpadr…   )rc   r‘   Úmax_lens     €r   r�   z)CsmProcessor.__call__.<locals>.<listcomp>  sU   ø€ ð $ð $ð $àõ ”Ô#×'Ò'¨°1°gÀÄÈrÔ@RÑ6RÐ2SÐ[]Ð'Ñ^Ô^ð$ð $ð $r   Úinput_values_cutoffsÚ	input_idsrw   iœÿÿÿi›ÿÿÿÚlabels)ÚdataÚtensor_type)'rl   r!   rI   Úinit_kwargsÚgetrj   rJ   r   rb   r   rg   rh   ri   r
   rk   ÚsumÚpopÚcopyr>   ÚappendÚreplaceÚupdateÚnpÚzerosrm   ÚtensorÚconcatenateÚcumsumrH   ÚmaxÚstackrC   Únonzeror…   ÚrandpermÚintÚwhererD   r   ) rG   rx   r\   ry   rz   r^   rt   r8   r"   r6   Ún_audio_in_textÚn_audioÚnum_audio_tokens_listÚnum_audio_tokens_list_copyÚexpanded_textÚsampleÚreplace_strÚnum_audio_tokensÚexpanded_audio_tokenÚencodingr›   Úconcatenated_audior˜   ÚoffsetÚaudio_inputsÚaudio_frame_idxsÚn_audio_framesÚ	rand_idxsÚskip_frames_idxsrš   r   r—   s    `                             @@r   Ú__call__zCsmProcessor.__call__¥   s  øøø€ ð: +˜Ô*Ýð
ð 
à"&¤.Ô"<ð
ð ð
ð 
ˆð $ MÔ2ˆØ$ ^Ô4ˆØ$ŸšÐ)9¸4Ñ@Ô@ˆØ˜TÒ!Ð!Ý ¤Ô 7Ð^Ð^Ð^Ñ_Ô_Ð_å�d�CÑ Ô ð 	bØ�6ˆDˆDÝ˜T¥D­% =Ñ1Ô1ð 	bµcÐ9[Ð9[ÐVZÐ9[Ñ9[Ô9[Ñ6[Ô6[ð 	bÝÐ`ÑaÔaÐaØCÐCÐCÐC¸dÐCÑCÔCˆàˆØÐÝ& uÑ-Ô-ˆEÝ˜%‘j”jˆGåˆÑÔ !Ò#Ð#¨µ3°Ñ3GÔ3GÒ(GÐ(GØˆ}Ý Ð!cÑdÔdÐdå ð>Àð >ð >Ø29ð>ð >ð >ñô ð ð
 ÐØ$0×$4Ò$4Ð5LÈbÑ$QÔ$QÐ!ð%ð %ð %ð %ð %Ølqð%ñ %ô %Ð!ð *?×)CÒ)CÑ)EÔ)EÐ&ð ˆMØð -ð -�Ø �ØÔ&¨&Ð0Ð0Ø'A×'EÒ'EÀaÑ'HÔ'HÐ$Ø+/Ô+;Ð>NÑ+NÐ(à×&Ò&Ð';Ñ<Ô<Ð<Ø#Ÿ^š^¨DÔ,<¸oÈqÑQÔQ�Fð Ô&¨&Ð0Ð0ð &¨Ð/Ð/Ø#Ÿ^š^¨O¸[¿_º_ÈQÑ=OÔ=OÐQRÑSÔS�Fð &¨Ð/Ð/à×$Ò$ VÑ,Ô,Ð,Ð,à ˆDà!�4”> $Ð6Ð6¨+Ð6Ð6ˆØˆØ�Š�HÑÔÐàÑØ×ÒÐ4°dÑ;Ô;Ð;à79¸2Ð 4ÐØˆFØ*ð &ð &�Ø˜a’<�<Ø&×-Ò-­b¬h°q©k¬kÑ:Ô:Ð:Ø(×/Ò/µ´¸b¸TÑ0BÔ0BÑCÔCÐCÐCà&×-Ò-Ýœðð à*/°¸À'Ñ9IÐ0IÔ*Jðñ ô ð "$ðñ ô ñô ð ð )×/Ò/ÝœÐ%^Ð%^¸UÀ6ÈFÐU\ÑL\ÐC\Ô=]Ð%^Ñ%^Ô%^Ñ_Ô_×fÒfÐkmÐfÑnÔnñô ð ð ˜gÑ%�F�Fà1˜4Ô1Ð2DÐUÐUÈÐUÐUˆLØ×Ò˜^¨TÑ2Ô2Ð2Ø�KŠK˜Ñ%Ô%Ð%õ ÐRÐRÐ=QÐRÑRÔRÑRÔRˆGð$ð $ð $ð $à 4ð$ñ $ô $Ð õ ,1¬;Ð7KÐQRÐ+SÑ+SÔ+SˆDÐ'Ñ(àð 	$Ø $ [Ô 1°TÔ5HÒ H×QÒQÑSÔSÐØ-Ô3°AÔ6ˆNà)¨SÒ0Ð0Ý!œN¨>Ñ:Ô:Ð;s½SÀÐSTÐWqÑSqÑArÑ=sÔ=sÐ;sÔt�	Ø#3°IÔ#>Ð Ð à#3Ð å”[Ø�kÔ" dÔ&9Ò9¸dÀ;Ô>OÐSWÔSjÒ>jÑkØ�[Ô!Øñô ˆFð
 FJˆFÐ# A A A q DÔ)Ð+;¸A¸A¸A¸q¸DÔ+AÐAÑBà#ˆD�‰Nå °>ÐBÑBÔBÐBr   c                 óv   — | j         j        }| j        j        }d„ |D ¦   «         }t          ||z   dgz   ¦  «        S )Nc                 ó   — g | ]
}|d k    ¯|‘ŒS )r�   r   )rc   Únames     r   r�   z2CsmProcessor.model_input_names.<locals>.<listcomp>>  s$   € Ð(rÐ(rÐ(r°$Ð[_ÐcqÒ[qÐ[q¨Ð[qÐ[qÐ[qr   r˜   )rI   Úmodel_input_namesrH   rg   )rG   Útokenizer_input_namesÚfeature_extractor_input_namess      r   rÅ   zCsmProcessor.model_input_names7  sO   € à $¤Ô @ÐØ(,Ô(>Ô(PÐ%ð )sÐ(rÐ:WÐ(rÑ(rÔ(rÐ%ÝÐ)Ð,IÑIÐMcÐLdÑdÑeÔeÐer   ra   )NNNN)NFrw   )r   r   r   rF   Ústaticmethodr[   r	   r   r   rg   r   r!   rv   r   r   r   Úboolrp   rÁ   ÚpropertyrÅ   Ú__classcell__)rJ   s   @r   r<   r<   E   s|  ø€ € € € € ð ð	Tð Tð Tð Tð Tð Tð, ð#ð #ð #ñ „\ð#ðJ 4àð 4ð ˜4‘Z $ s¨T¡zÔ"2Ñ2ð 4ð Ð+Ô,ð	 4ð  4ð  4ð  4ðD ð $(Ø%*Ø36ðOCð OCàÐ+Ñ+¨d°9¬oÑ=ÀÐEVÔ@WÑWÐZ^Ñ^ðOCð ˜DÑ ðOCð ˜d‘{ð	OCð
 %*¨D¡LðOCð Ð+Ô,ðOCð OCð OCñ „^ðOCðb ðfð fñ „Xðfð fð fð fð fr   r<   )rM   Úpathlibr   Útypingr   rq   r¥   Úutilsr   r   r   rm   Ú	soundfilerr   Úaudio_utilsr	   r
   Úfeature_extraction_utilsr   Úprocessing_utilsr   r   r   r   Útokenization_utils_baser   r   r   r!   r<   Ú__all__r   r   r   ú<module>rÕ      sµ  ðð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð à OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ Oð ÐÑÔð Ø€L€L€LàÐÑÔð ØÐÐÐà 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cð	1ð 	1ð 	1ð 	1ð 	1�[¨ð 	1ñ 	1ô 	1ð 	1ðð ð ð ð Ð)°ð ñ ô ð ð* ðyfð yfð yfð yfð yf�>ñ yfô yfñ „ðyfðx Ð
€€€r   