Ë
    ÜÓ^jÉ3  ã                   óÀ   — d dl mZ d dlZddlmZmZ ddlmZ  G d„ d«      Z G d„ d	e«      Z	e G d
„ de«      «       Z
 G d„ de«      Z G d„ de«      Z G d„ de«      Zy)é    )Ú	dataclassNé   )ÚGenerationMixinÚStoppingCriteria)ÚModelOutputc                   ó"   — e Zd Zd„ Zd„ Z	 dd„Zy)ÚParakeetRNNTDecoderCachec                 óJ   — || _         d | _        d | _        d | _        d| _        y )NF)ÚconfigÚcacheÚhidden_stateÚ
cell_stateÚis_initialized)Úselfr   s     ú{/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/parakeet/generation_parakeet.pyÚ__init__z!ParakeetRNNTDecoderCache.__init__   s'   € ØˆŒØ*.ˆŒ
Ø15ˆÔØ/3ˆŒØ$)ˆÕó    c                 óP  — t        j                  |j                  d   d| j                  j                  |j
                  |j                  ¬«      | _        t        j                  | j                  j                  |j                  d   | j                  j                  |j
                  |j                  ¬«      | _	        t        j                  | j                  j                  |j                  d   | j                  j                  |j
                  |j                  ¬«      | _
        t         j                  j                  | j                  «       t         j                  j                  | j                  «       t         j                  j                  | j                  «       d| _        y )Nr   é   ©ÚdeviceÚdtypeT)ÚtorchÚzerosÚshaper   Údecoder_hidden_sizer   r   r   Únum_decoder_layersr   r   Ú_dynamoÚmark_static_addressr   )r   Úhidden_statess     r   Úlazy_initializationz,ParakeetRNNTDecoderCache.lazy_initialization   s)  € Ü—[‘[Ø×Ñ Ñ"ØØ�K‰K×+Ñ+Ø ×'Ñ'Ø×%Ñ%ô
ˆŒ
ô "ŸK™KØ�K‰K×*Ñ*Ø×Ñ Ñ"Ø�K‰K×+Ñ+Ø ×'Ñ'Ø×%Ñ%ô
ˆÔô  Ÿ+™+Ø�K‰K×*Ñ*Ø×Ñ Ñ"Ø�K‰K×+Ñ+Ø ×'Ñ'Ø×%Ñ%ô
ˆŒô 	�‰×)Ñ)¨$¯*©*Ô5Ü�‰×)Ñ)¨$×*;Ñ*;Ô<Ü�‰×)Ñ)¨$¯/©/Ô:à"ˆÕr   Nc                 ój  — | j                   s| j                  |«       |€R| j                  j                  |«       | j                  j                  |«       | j
                  j                  |«       y |j                  |j                  «      }|j                  d   }|j                  d|d«      }|j                  |dd«      }t        j                  ||| j
                  «      | _        t        j                  ||| j                  «      | _        t        j                  ||| j                  «      | _        y )Nr   r   )r   r!   r   Úcopy_r   r   Útor   r   Úviewr   Úwhere)r   Údecoder_outputr   r   ÚmaskÚ
batch_sizeÚmask_hÚmask_ds           r   ÚupdatezParakeetRNNTDecoderCache.update<   sí   € ð ×"Ò"Ø×$Ñ$ ^Ô4àˆ<Ø×Ñ×#Ñ# LÔ1Ø�O‰O×!Ñ! *Ô-Ø�J‰J×Ñ˜^Õ,ð —7‘7˜>×0Ñ0Ó1ˆDØ'×-Ñ-¨aÑ0ˆJØ—Y‘Y˜q *¨aÓ0ˆFØ—Y‘Y˜z¨1¨aÓ0ˆFÜŸ™ V¨^¸T¿Z¹ZÓHˆDŒJÜ %§¡¨F°LÀ$×BSÑBSÓ TˆDÔÜ#Ÿk™k¨&°*¸d¿o¹oÓNˆD�Or   ©N)Ú__name__Ú
__module__Ú__qualname__r   r!   r,   © r   r   r	   r	      s   „ ò*ò#ðD ôOr   r	   c                   ó   — e Zd Zy)ÚParakeetTDTDecoderCacheN)r.   r/   r0   r1   r   r   r3   r3   V   s   … r   r3   c                   óÀ   — e Zd ZU dZej
                  ed<   dZej
                  dz  ed<   dZe	e	ej                        dz  ed<   dZe	e	ej                        dz  ed<   y)ÚParakeetRNNTGenerateOutputaó  
    Outputs of Parakeet transducer (RNN-T / TDT) generation.

    Args:
        sequences (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            Generated token sequences (including blank tokens).
        durations (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Per-step durations in frames. Combined with `sequences`, this is sufficient
            to reconstruct full timestamp information (frame indices are the cumulative sum
            of durations).
        attentions (`tuple(tuple(torch.FloatTensor))`, *optional*):
            Encoder attention weights per layer.
        hidden_states (`tuple(tuple(torch.FloatTensor))`, *optional*):
            Encoder hidden states per layer.
    Ú	sequencesNÚ	durationsÚ
attentionsr    )r.   r/   r0   Ú__doc__r   Ú
LongTensorÚ__annotations__r7   r8   ÚtupleÚFloatTensorr    r1   r   r   r5   r5   Y   sh   … ñð  ×ÑÓØ)-€Iˆu×Ñ $Ñ&Ó-Ø9=€J��e˜E×-Ñ-Ñ.Ñ/°$Ñ6Ó=Ø<@€M�5˜˜u×0Ñ0Ñ1Ñ2°TÑ9Ô@r   r5   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚEncoderExhaustedCriteriazVStops generation when all batch elements have walked past their encoder output length.c                 ó   — || _         y r-   )Úmodel)r   rA   s     r   r   z!EncoderExhaustedCriteria.__init__t   s	   € Øˆ�
r   c                 óÔ   — | j                   j                  €=t        j                  |j                  d   t        j
                  |j                  ¬«      S | j                   j                  S )Nr   ©r   r   )rA   Ú_encoder_finishedr   r   r   Úboolr   )r   Ú	input_idsÚscoresÚkwargss       r   Ú__call__z!EncoderExhaustedCriteria.__call__w   sH   € Ø�:‰:×'Ñ'Ð/Ü—;‘;˜yŸ™¨qÑ1¼¿¹ÈI×L\ÑL\Ô]Ð]Ø�z‰z×+Ñ+Ð+r   N)r.   r/   r0   r9   r   rI   r1   r   r   r?   r?   q   s   „ Ù`òó,r   r?   c                   ó\   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ fd„Zˆ fd„Zd„ Zˆ fd„Z	d	ˆ fd„	Z
ˆ xZS )
ÚParakeetRNNTGenerationMixinaË  Generation mixin for Parakeet RNN-T models, and the base for all Parakeet transducer generation.

    Handles the transducer machinery shared by RNN-T and TDT: encoder frame tracking, decoder cache
    preparation, encoder-exhaustion stopping, and output-buffer sizing. For RNN-T greedy decoding the encoder
    frame pointer advances by one frame on every blank emission and stays put on every non-blank emission; a
    ``max_symbols_per_step`` guard forces an advance after too many consecutive non-blank emissions at the same
    frame, mirroring NeMo's greedy RNN-T decoding. The duration-aware [`ParakeetTDTGenerationMixin`] extends this
    by advancing the frame pointer by a predicted duration instead.
    c                 óZ   •— t        ‰| �  |i |¤Ž}|j                  t        | «      «       |S r-   )ÚsuperÚ_get_stopping_criteriaÚappendr?   )r   ÚargsrH   ÚcriteriaÚ	__class__s       €r   rN   z2ParakeetRNNTGenerationMixin._get_stopping_criteriaˆ   s.   ø€ Ü‘7Ñ1°4ÐB¸6ÑBˆØ�‰Ô0°Ó6Ô7Øˆr   c                 ó’  •— t        ‰| �  |g|¢­i |¤Ž}|j                  d d …dd d …f   }|j                  d¬«      }|| j                  j
                  k(  }| j                  €t        j                  |«      | _        t        j                  |t        j                  | j                  «      | j                  dz   «      }|| j                  k\  }	t        j                  ||	z  t        j                  |«      |«      | _        ||	z  j                  «       }
|d   |
z   |d<   | j                  j                  |
«       |d   |d   k\  | _        |S )Néÿÿÿÿ©Údimr   Úencoder_frame_idxsÚencoder_valid_lengths)rM   Ú#_update_model_kwargs_for_generationÚlogitsÚargmaxr   Úblank_token_idÚ_symbols_at_framer   Ú
zeros_liker&   Úmax_symbols_per_stepÚlongÚ_step_durationsrO   rD   )r   ÚoutputsrP   rH   Úmodel_kwargsrZ   ÚtokensÚ
blank_maskÚsymbolsÚforce_advanceÚadvancerR   s              €r   rY   z?ParakeetRNNTGenerationMixin._update_model_kwargs_for_generation�   s>  ø€ Ü‘wÑBÀ7Ð\ÈTÒ\ÐU[Ñ\ˆà—‘¢ 2¢q Ñ)ˆØ—‘ 2�Ó&ˆØ˜tŸ{™{×9Ñ9Ñ9ˆ
ð ×!Ñ!Ð)Ü%*×%5Ñ%5°fÓ%=ˆDÔ"Ü—+‘+˜j¬%×*:Ñ*:¸4×;QÑ;QÓ*RÐTX×TjÑTjÐmnÑTnÓoˆØ 4×#<Ñ#<Ñ<ˆÜ!&§¡¨Z¸-Ñ-GÌ×IYÑIYÐZaÓIbÐdkÓ!lˆÔð  Ñ-×3Ñ3Ó5ˆØ-9Ð:NÑ-OÐRYÑ-YˆÐ)Ñ*ð 	×Ñ×#Ñ# GÔ,Ø!-Ð.BÑ!CÀ|ÐTkÑGlÑ!lˆÔàÐr   c                 ó   •— |rx|j                   €l| j                  j                  t        j                  |j
                  d   g|j                  ¬«      «      j                  «       }| j                  |z  |_	        d}t        ‰| �-  ||||||«      S )Nr   )r   F)Úmax_new_tokensÚencoderÚ_get_subsampling_output_lengthr   Útensorr   r   Úitemr_   Ú
max_lengthrM   Ú_prepare_generated_length)	r   Úgeneration_configÚhas_default_max_lengthÚhas_default_min_lengthÚmodel_input_nameÚinput_ids_lengthÚinputs_tensorÚencoder_seq_lenrR   s	           €r   rp   z5ParakeetRNNTGenerationMixin._prepare_generated_length¥   s”   ø€ ñ "Ð&7×&FÑ&FÐ&NØ"Ÿl™l×IÑIÜ—‘˜m×1Ñ1°!Ñ4Ð5¸m×>RÑ>RÔSóç‰d‹fð ð ,0×+DÑ+DÀÑ+VÐÔ(Ø%*Ð"Ü‰wÑ0ØØ"Ø"ØØØó
ð 	
r   c                 óÄ  •— t        ‰| �  |i |¤Ž\  }}}h d£}d}|j                  «       D ��	ci c]  \  }}	||vr|j                  |«      s||	“Œ }
}}	 | j                  d||j                  dd «      ddœ|
¤Ž}||d<   |j                  �|j                  j                  d«      }nl|j                  j                  d   }t        j                  |f|j                  j                  d	   t        j                  |j                  j                  ¬
«      }||d<   t        j                  |j                  d   |j                  t        j                  ¬«      |d<   |||fS c c}	}w )N>   Úattention_maskÚinput_featuresÚoutput_attention_mask)Údecoder_Ú
cross_attnÚ	use_cacheÚpast_key_valuesÚcache_paramsry   T)rz   ry   r{   Úencoder_outputsrT   r   r   rC   rX   r   rW   r1   )rM   Ú_prepare_model_inputsÚitemsÚ
startswithÚget_audio_featuresÚgetry   ÚsumÚlast_hidden_stater   r   Úfullr`   r   r   )r   rP   rH   ÚinputsÚ
input_namerc   ÚexplicitÚirrelevant_prefixÚkeyÚvalueÚencoder_kwargsr�   rX   r)   rR   s                 €r   r‚   z1ParakeetRNNTGenerationMixin._prepare_model_inputsÀ   s|  ø€ Ü+0©7Ñ+HÈ$Ð+YÐRXÑ+YÑ(ˆ�
˜LÚPˆØfÐð +×0Ñ0Ó2÷
á��UØ˜(Ñ"¨3¯>©>Ð:KÔ+Lð �‰Jð
ˆñ 
ð 2˜$×1Ñ1ð 
Ø!Ø'×+Ñ+Ð,<¸dÓCØ"&ñ
ð ñ	
ˆð +:ˆÐ&Ñ'à×)Ñ)Ð5Ø$3×$BÑ$B×$FÑ$FÀrÓ$JÑ!à(×:Ñ:×@Ñ@ÀÑCˆJÜ$)§J¡JØ�Ø×1Ñ1×7Ñ7¸Ñ:Ü—j‘jØ&×8Ñ8×?Ñ?ô	%Ð!ð 1FˆÐ,Ñ-ä-2¯[©[Ø�L‰L˜‰OØ—=‘=Ü—*‘*ô.
ˆÐ)Ñ*ð �z <Ð/Ð/ùóA
s   ®"Ec                 ó4   — t        | j                  «      |d<   y )NÚdecoder_cache)r	   r   )r   rq   rc   rP   rH   s        r   Ú_prepare_cache_for_generationz9ParakeetRNNTGenerationMixin._prepare_cache_for_generationæ   s   € Ü(@ÀÇÁÓ(Mˆ�_Ò%r   c                 óv  •— ddl m} t        ‰
| �  |g|¢­i |¤Ž}|j	                  d«      j                  |d   j                  j                  «      }|d   j                  }|j                  d   |j                  d   }	}|j                  |	dz
  ¬«      } ||t        j                  |«      |d f   ¬«      |d<   |S )Nr   )ÚParakeetEncoderModelOutputrW   r�   r   )Úmax)Úpooler_output)Úmodeling_parakeetr•   rM   Úprepare_inputs_for_generationÚpopr$   r—   r   r   Úclampr   Úarange)r   rF   rP   rH   r•   Úmodel_inputsrW   r—   r)   Úmax_encoder_lenrR   s             €r   r™   z9ParakeetRNNTGenerationMixin.prepare_inputs_for_generationé   sÐ   ø€ ÝAä‘wÑ<¸YÐXÈÒXÐQWÑXˆØ)×-Ñ-Ð.BÓC×FÑFØÐ*Ñ+×9Ñ9×@Ñ@ó
Ðð %Ð%6Ñ7×EÑEˆØ&3×&9Ñ&9¸!Ñ&<¸m×>QÑ>QÐRSÑ>T�Oˆ
Ø/×5Ñ5¸/ÈAÑ:MÐ5ÓNÐÙ*DØ'¬¯©°ZÓ(@ÐBTÐVZÐ(ZÑ[ô+
ˆÐ&Ñ'ð Ðr   c                 ó   •— d | _         d | _        g | _        t        ‰| �  d||dœ|¤Ž}t        j                  | j                  d¬«      }t        j                  t        j                  |j                  d   d|j                  |j                  ¬«      |gd¬«      }| ` | `| `t        t        |t        «      r|j                  |¬«      S ||¬«      S )N)rŠ   rq   r   rU   r   rC   )r6   r7   r1   )rD   r]   ra   rM   Úgenerater   ÚstackÚcatr   r   r   r   r5   Ú
isinstancer   r6   )r   rŠ   rq   rH   rb   r7   rR   s         €r   r    z$ParakeetRNNTGenerationMixin.generateú   sÌ   ø€ à!%ˆÔØ!%ˆÔØ!ˆÔä‘'Ñ"Ð`¨&ÐDUÑ`ÐY_Ñ`ˆä—K‘K × 4Ñ 4¸!Ô<ˆ	ä—I‘IÜ�[‰[˜Ÿ™¨Ñ+¨Q°i·o±oÈi×N^ÑN^Ô_ÐajÐkÐqrô
ˆ	ð Ð" DÐ$:¸DÐ<Pä)Ü+5°g¼{Ô+K�g×'Ñ'Øô
ð 	
ØQXØô
ð 	
r   )NN)r.   r/   r0   r9   rN   rY   rp   r‚   r“   r™   r    Ú__classcell__)rR   s   @r   rK   rK   }   s2   ø„ ñôô
ô0
ô6$0òLNô÷"
ñ 
r   rK   c                   ó   — e Zd ZdZd„ Zy)ÚParakeetTDTGenerationMixina¥  Generation mixin for Parakeet TDT models.

    Extends [`ParakeetRNNTGenerationMixin`] with duration-aware decoding: instead of advancing the encoder frame
    pointer by one on each blank emission, the joint network predicts a per-step duration and the pointer advances
    by that amount. The shared setup (encoder frame tracking, decoder cache, stopping criteria, output buffer
    sizing) is inherited unchanged.
    c                 ó   — t        j                  | |g|¢­i |¤Ž}|j                  d d …dd d …f   }|d d …d | j                  j                  …f   j                  d¬«      }|d d …| j                  j                  d …f   j                  d¬«      }|| j                  j                  k(  }t        j                  ||dk(  z  t        j                  |«      |«      }|d   |z   |d<   | j                  j                  |«       |d   |d   k\  | _        |S )NrT   rU   r   rW   rX   )r   rY   rZ   r   Ú
vocab_sizer[   r\   r   r&   Ú	ones_likera   rO   rD   )	r   rb   rP   rH   rc   rZ   rd   r7   re   s	            r   rY   z>ParakeetTDTGenerationMixin._update_model_kwargs_for_generation  s  € ô '×JÑJÈ4ÐQXÐjÐ[_ÒjÐciÑjˆð —‘¢ 2¢q Ñ)ˆØšÐ3˜TŸ[™[×3Ñ3Ð3Ð3Ñ4×;Ñ;ÀÐ;ÓCˆØš1˜dŸk™k×4Ñ4Ñ6Ð6Ñ7×>Ñ>À2Ð>ÓFˆ	ð ˜tŸ{™{×9Ñ9Ñ9ˆ
Ü—K‘K 
¨i¸1©nÑ =¼u¿¹ÈyÓ?YÐ[dÓeˆ	Ø-9Ð:NÑ-OÐR[Ñ-[ˆÐ)Ñ*Ø×Ñ×#Ñ# IÔ.ð ".Ð.BÑ!CÀ|ÐTkÑGlÑ!lˆÔàÐr   N)r.   r/   r0   r9   rY   r1   r   r   r¦   r¦     s   „ ñór   r¦   )Údataclassesr   r   Ú
generationr   r   Úutilsr   r	   r3   r5   r?   rK   r¦   r1   r   r   ú<module>r­      sr   ðõ "ã ç ;Ý  ÷;Oñ ;Oô~ =Ð6Ô <ð ôA ó Aó ðAô.	,Ð/ô 	,ôO
 /ô O
ôdÐ!<õ r   