
    ^j"                         d dl Zddl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y)    N   )
AudioInput)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y
)MusicFlamingoProcessorKwargspaddingTi>  
max_length)sampling_ratereturn_attention_maskr   ptleft)return_tensorspadding_side)text_kwargsaudio_kwargscommon_kwargsN)__name__
__module____qualname__	_defaults     /var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/musicflamingo/processing_musicflamingo.pyr   r   &   s2     t
 #%)#
 #"
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
 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ed        Zed        Z xZS )MusicFlamingoProcessorNc                     || _         |j                  |      | _        || _        t        |   |||       || _        || _        |j                  |      | _        |j                  |      | _	        y)as  
        audio_token (`Optional[str]`, *optional*, defaults to `"<sound>"`):
            Special token used to represent audio inputs in the chat template.
        audio_bos_token (`Optional[str]`, *optional*, defaults to `"<|sound_bos|>"`):
            Special token used to represent the beginning of audio.
        audio_eos_token (`Optional[str]`, *optional*, defaults to `"<|sound_eos|>"`):
            Special token used to represent the end of audio.
        max_audio_len (`int`, *optional*, defaults to 1200):
            Maximum length of audio sequences in seconds. Audio longer than this will be truncated.
        )chat_templateN)
audio_tokenconvert_tokens_to_idsaudio_token_idmax_audio_lensuper__init__audio_bos_tokenaudio_eos_tokenaudio_bos_token_idaudio_eos_token_id)	selffeature_extractor	tokenizerr%   r&   r,   r-   r)   	__class__s	           r    r+   zMusicFlamingoProcessor.__init__;   ss    ( ''==kJ**I]S.."+"A"A/"R"+"A"A/"Rr   textaudiooutput_labelskwargsreturnc                 J   d|v r*|d   dk7  r"t        | j                  j                   d      |rd|d<   t        |   d||d|}|rM|j                  d      }|d   j                         }d	||d
k7  <   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r5   r4   mm_token_type_ids	input_idsir   labels)datatensor_typer   )

ValueErrorr3   r   r*   __call__popcloner2   pad_token_idr   )	r0   r4   r5   r6   r7   model_inputsr<   r>   r3   s	           r    rB   zMusicFlamingoProcessor.__call__X   s    " v%&1A*Bd*J 7 788]^__15F-.w'Ie$I&I , 0 01D E!+.446F-1F$)*<@F6T^^8889%+L"4@@r   c                     t        |   d||d| |?|<t        |      t        |      k7  r$t        dt        |       dt        |       d      y y y )Nr;   zGot z
 text but z audios; they must match 1:1.r   )r*   validate_inputslenrA   )r0   r5   r4   r7   r3   s       r    rH   z&MusicFlamingoProcessor.validate_inputsx   se     	Ae$A&A 1c$i3u:6MtCI;jUDabcc 7N 1r   c                 2    |dz
  dz  dz   }|dz
  dz  dz   }|S )N      r   )r0   audio_lengthsconv_output_lengthsaudio_tokens_lengthss       r    _get_audio_token_lengthz.MusicFlamingoProcessor._get_audio_token_length   s2    ,q0Q6: 3a 7A=A##r   c           
      6   t        |d   | j                  j                  z        }t        | j                  | j                  j                  z        }g }g }|D ]  }t        |j                  d         }t        d||z   dz
  |z        }	|	|kD  r<t        j                  d||d   z  dd| j                   d| j                   d       |}	|j                  |	       t        ||	|z        }
t        |	      D ]-  }||z  }t        |dz   |z  |
      }|j                  |||        /  | j                  j                  |      } | j                  |fi |}|j                  d	      |d
<   t        j                  t        j                  |d
   j!                  d      |      D cg c]  }|j!                          c}      }| j#                  |      |d<   g }t        t%        |            D ]&  }| j'                  ||      }|j                  |       ( ||fS c c}w )Nr   r   rK   zAudio duration (z.1fzs) exceeds zs; truncating to first zs.attention_maskinput_features_masknum_audio_tokens)	audio_idx)intr1   chunk_lengthr)   shapemaxloggerwarningappendminrangefetch_audiorC   torchstacksplitsumrP   rI   replace_audio_token)r0   r5   r7   window_sizemax_windowsper_sample_windowsflat_chunksaudio_el	n_samplesn_wintime_capistartendaudio_inputssrM   audio_replacementsidxreplacement_texts                       r    _process_audioz%MusicFlamingoProcessor._process_audio   sU   &1D4J4J4W4WWX$,,0F0F0S0SST(*(* 	8HHNN1-.II3a7KGHE{"&y6/3J'J3&O{[_[m[mZn  oF  GK  GY  GY  FZ  Z\  ] $%%e,9ek&9:H5\ 8K1q5K/:""8E##678	8  &&2259-t--kDVD.:.>.>?O.P*+
 #kk,7L*M*Q*QRT*UWijkQUUWk
 ,0+G+G+V'(U$ 	8C#77PS7T%%&67	8 /// ls   !Hrq   rV   c                 d    |d   |   }| j                   | j                  |z  z   | j                  z   S )NrU   )r,   r&   r-   )r0   rq   rV   rU   s       r    re   z*MusicFlamingoProcessor.replace_audio_token   s;    '(:;IF##d&6&69I&IIDL`L```r   c                      t         |   dgz   S )NrS   )r*   model_input_names)r0   r3   s    r    ry   z(MusicFlamingoProcessor.model_input_names   s    w(,A+BBBr   c                     dgS )zNInput names returned always by subprocessors but not used in model's `forward`rU   r   r0   s    r    unused_input_namesz)MusicFlamingoProcessor.unused_input_names   s     ###r   c                 H    | j                   | j                  | j                  gS )N)r(   r.   r/   r{   s    r    audio_token_idsz&MusicFlamingoProcessor.audio_token_ids   s!    ##T%<%<d>U>UVVr   c                 D    t         j                  d       | j                  S )zLDeprecated alias for `audio_token_ids`; will be removed in a future release.z@`audio_ids` is deprecated; please use `audio_token_ids` instead.)r[   warning_oncer~   r{   s    r    	audio_idsz MusicFlamingoProcessor.audio_ids   s     	^_###r   )Nz<sound>z<|sound_bos|>z<|sound_eos|>i  )NF)NN)r   r   r   r   valid_processor_kwargsr+   r
   r	   listr   boolr   r   rB   r   rH   rP   rv   dictrW   strre   propertyry   r|   r~   r   __classcell__)r3   s   @r    r#   r#   7   sm   9 ''S:  $(%*	A$y/)A D A d{	A
 56A 
A AB $(37	dD 	d $y/)D0	d )*		d$
(0J (0Ta a a a C49 C C $DI $ $ W W $ $r   r#   )numpynpaudio_utilsr   feature_extraction_utilsr   processing_utilsr   r   r   tokenization_utils_baser	   utilsr
   r   r   ra   
get_loggerr   r[   r   r#   __all__r   r   r    <module>r      sv   ,  % 4 H H 0 @ @  
		H	%#35 " P$^ P$ P$f $
$r   