§
    ‚ŠtjÉ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dS )é    )Ú	dataclassNé   )ÚGenerationMixinÚStoppingCriteria)ÚModelOutputc                   ó$   — e Zd Zd„ Zd„ Z	 dd„ZdS )ÚParakeetRNNTDecoderCachec                 óL   — || _         d | _        d | _        d | _        d| _        d S )NF)ÚconfigÚcacheÚhidden_stateÚ
cell_stateÚis_initialized)Úselfr   s     ún/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/parakeet/generation_parakeet.pyÚ__init__z!ParakeetRNNTDecoderCache.__init__   s-   € ØˆŒØ*.ˆŒ
Ø15ˆÔØ/3ˆŒØ$)ˆÔÐÐó    c                 ó‚  — 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        ¦  «         t           j                             | j	        ¦  «         t           j                             | j
        ¦  «         d| _        d S )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Ô+Ø Ô'ØÔ%ð
ñ 
ô 
ˆŒõ 	Œ×)Ò)¨$¬*Ñ5Ô5Ð5ÝŒ×)Ò)¨$Ô*;Ñ<Ô<Ð<ÝŒ×)Ò)¨$¬/Ñ:Ô:Ð:à"ˆÔÐÐr   Nc                 óL  — | j         s|                      |¦  «         |€P| j                             |¦  «         | j                             |¦  «         | j                             |¦  «         d S |                     |j        ¦  «        }|j        d         }| 	                    d|d¦  «        }| 	                    |dd¦  «        }t          j        ||| j        ¦  «        | _        t          j        ||| j        ¦  «        | _        t          j        ||| j        ¦  «        | _        d S )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	  € ð Ô"ð 	5Ø×$Ò$ ^Ñ4Ô4Ð4àˆ<ØÔ×#Ò# LÑ1Ô1Ð1ØŒO×!Ò! *Ñ-Ô-Ð-ØŒJ×Ò˜^Ñ,Ô,Ð,Ð,Ð,ð —7’7˜>Ô0Ñ1Ô1ˆDØ'Ô-¨aÔ0ˆJØ—Y’Y˜q *¨aÑ0Ô0ˆFØ—Y’Y˜z¨1¨aÑ0Ô0ˆFÝœ V¨^¸T¼ZÑHÔHˆDŒJÝ %¤¨F°LÀ$ÔBSÑ TÔ TˆDÔÝ#œk¨&°*¸d¼oÑNÔNˆDŒOˆOˆOr   ©N)Ú__name__Ú
__module__Ú__qualname__r   r!   r,   © r   r   r	   r	      sR   € € € € € ð*ð *ð *ð#ð #ð #ðD ðOð Oð Oð Oð Oð Or   r	   c                   ó   — e Zd ZdS )Ú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<   dS )Ú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   s‰   € € € € € € ðð ð  ÔÐÐÑØ)-€IˆuÔ $Ñ&Ð-Ð-Ñ-Ø9=€J��e˜EÔ-Ô.Ô/°$Ñ6Ð=Ð=Ñ=Ø<@€M�5˜˜uÔ0Ô1Ô2°TÑ9Ð@Ð@Ñ@Ð@Ð@r   r5   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚEncoderExhaustedCriteriazVStops generation when all batch elements have walked past their encoder output length.c                 ó   — || _         d S r-   )Úmodel)r   rA   s     r   r   z!EncoderExhaustedCriteria.__init__t   s   € ØˆŒ
ˆ
ˆ
r   c                 ó”   — | j         j        €1t          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   s;   € ØŒ:Ô'Ð/Ý”;˜yœ¨qÔ1½¼ÈIÔL\Ð]Ñ]Ô]Ð]ØŒzÔ+Ð+r   N)r.   r/   r0   r9   r   rI   r1   r   r   r?   r?   q   s8   € € € € € Ø`Ð`ðð ð ð,ð ,ð ,ð ,ð ,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                 ó~   •—  t          ¦   «         j        |i |¤Ž}|                     t          | ¦  «        ¦  «         |S r-   )ÚsuperÚ_get_stopping_criteriaÚappendr?   )r   ÚargsrH   ÚcriteriaÚ	__class__s       €r   rN   z2ParakeetRNNTGenerationMixin._get_stopping_criteriaˆ   s>   ø€ Ø1•5‘7”7Ô1°4ÐB¸6ÐBÐBˆØ�ŠÕ0°Ñ6Ô6Ñ7Ô7Ð7Øˆr   c                 ó‚  •—  t          ¦   «         j        |g|¢R i |¤Ž}|j        d d …dd d …f         }|                     d¬¦  «        }|| j        j        k    }| j        €t          j        |¦  «        | _        t          j	        |t          j        | j        ¦  «        | j        dz   ¦  «        }|| j
        k    }	t          j	        ||	z  t          j        |¦  «        |¦  «        | _        ||	z                       ¦   «         }
|d         |
z   |d<   | 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�   sK  ø€ ØB•u‘w”wÔBÀ7Ð\ÈTÐ\Ð\Ð\ÐU[Ð\Ð\ˆà”    2 q q q Ô)ˆØ—’ 2�Ñ&Ô&ˆØ˜tœ{Ô9Ò9ˆ
ð Ô!Ð)Ý%*Ô%5°fÑ%=Ô%=ˆDÔ"Ý”+˜j­%Ô*:¸4Ô;QÑ*RÔ*RÐTXÔTjÐmnÑTnÑoÔoˆØ 4Ô#<Ò<ˆÝ!&¤¨Z¸-Ñ-GÍÔIYÐZaÑIbÔIbÐdkÑ!lÔ!lˆÔð  Ñ-×3Ò3Ñ5Ô5ˆØ-9Ð:NÔ-OÐRYÑ-YˆÐ)Ñ*ð 	Ô×#Ò# GÑ,Ô,Ð,Ø!-Ð.BÔ!CÀ|ÐTkÔGlÒ!lˆÔàÐr   c                 ó&  •— |ri|j         €b| j                             t          j        |j        d         g|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Ð&NØ"œl×IÒIÝ”˜mÔ1°!Ô4Ð5¸mÔ>RÐSÑSÔSñô çŠd‰fŒfð ð ,0Ô+DÀÑ+VÐÔ(Ø%*Ð"Ý‰wŒw×0Ò0ØØ"Ø"ØØØñ
ô 
ð 	
r   c                 óB  •‡
‡—  t          ¦   «         j        |i |¤Ž\  }}}h d£Š
dŠˆ
ˆfd„|                     ¦   «         D ¦   «         } | j        d||                     dd ¦  «        ddœ|¤Ž}||d<   |j        �|j                             d¦  «        }nO|j        j        d	         }	t          j
        |	f|j        j        d
         t          j        |j        j        ¬¦  «        }||d<   t          j        |j        d	         |j        t          j        ¬¦  «        |d<   |||fS )N>   Úattention_maskÚinput_featuresÚoutput_attention_mask)Údecoder_Ú
cross_attnÚ	use_cacheÚpast_key_valuesÚcache_paramsc                 óN   •— i | ]!\  }}|‰v¯	|                      ‰¦  «        °||“Œ"S r1   )Ú
startswith)Ú.0ÚkeyÚvalueÚexplicitÚirrelevant_prefixs      €€r   ú
<dictcomp>zEParakeetRNNTGenerationMixin._prepare_model_inputs.<locals>.<dictcomp>Ä   sF   ø€ ð 
ð 
ð 
á��UØ˜(Ð"Ð"¨3¯>ª>Ð:KÑ+LÔ+LÐ"ð �à"Ð"Ð"r   ry   T)rz   ry   r{   Úencoder_outputsrT   r   r   rC   rX   r   rW   r1   )rM   Ú_prepare_model_inputsÚitemsÚget_audio_featuresÚgetry   ÚsumÚlast_hidden_stater   r   Úfullr`   r   r   )r   rP   rH   ÚinputsÚ
input_namerc   Úencoder_kwargsr‰   rX   r)   r†   r‡   rR   s             @@€r   rŠ   z1ParakeetRNNTGenerationMixin._prepare_model_inputsÀ   sz  øøø€ Ø+H­5©7¬7Ô+HÈ$Ð+YÐRXÐ+YÐ+YÑ(ˆ�
˜LØPÐPÐPˆØfÐð
ð 
ð 
ð 
ð 
à*×0Ò0Ñ2Ô2ð
ñ 
ô 
ˆð 2˜$Ô1ð 
Ø!Ø'×+Ò+Ð,<¸dÑCÔCØ"&ð
ð 
ð ð	
ð 
ˆð +:ˆÐ&Ñ'àÔ)Ð5Ø$3Ô$B×$FÒ$FÀrÑ$JÔ$JÐ!Ð!à(Ô:Ô@ÀÔCˆJÝ$)¤JØ�ØÔ1Ô7¸Ô:Ý”jØ&Ô8Ô?ð	%ñ %ô %Ð!ð 1FˆÐ,Ñ-å-2¬[ØŒL˜ŒOØ”=Ý”*ð.
ñ .
ô .
ˆÐ)Ñ*ð �z <Ð/Ð/r   c                 ó4   — t          | j        ¦  «        |d<   d S )NÚdecoder_cache)r	   r   )r   rq   rc   rP   rH   s        r   Ú_prepare_cache_for_generationz9ParakeetRNNTGenerationMixin._prepare_cache_for_generationæ   s   € Ý(@ÀÄÑ(MÔ(Mˆ�_Ñ%Ð%Ð%r   c                 ó’  •— ddl m}  t          ¦   «         j        |g|¢R i |¤Ž}|                     d¦  «                             |d         j        j        ¦  «        }|d         j        }|j        d         |j        d         }	}| 	                    |	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ÐAÐAÐAÐAÐAà<•u‘w”wÔ<¸YÐXÈÐXÐXÐXÐQWÐXÐXˆØ)×-Ò-Ð.BÑCÔC×FÒFØÐ*Ô+Ô9Ô@ñ
ô 
Ðð %Ð%6Ô7ÔEˆØ&3Ô&9¸!Ô&<¸mÔ>QÐRSÔ>T�Oˆ
Ø/×5Ò5¸/ÈAÑ:MÐ5ÑNÔNÐØ*DÐ*DØ'­¬°ZÑ(@Ô(@ÐBTÐVZÐ(ZÔ[ð+
ñ +
ô +
ˆÐ&Ñ'ð Ðr   Nc                 óˆ  •— d | _         d | _        g | _         t          ¦   «         j        d||dœ|¤Ž}t          j        | j        d¬¦  «        }t          j        t          j        |j	        d         d|j
        |j        ¬¦  «        |gd¬¦  «        }| ` | `| `t          t          |t          ¦  «        r|j        n||¬¦  «        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 Ô 4¸!Ð<Ñ<Ô<ˆ	å”IÝŒ[˜œ¨Ô+¨Q°i´oÈiÔN^Ð_Ñ_Ô_ÐajÐkÐqrð
ñ 
ô 
ˆ	ð Ð" DÐ$:¸DÐ<På)Ý+5°g½{Ñ+KÔ+KÐX�gÔ'Ð'ÐQXØð
ñ 
ô 
ð 	
r   )NN)r.   r/   r0   r9   rN   rY   rp   rŠ   r–   rœ   r£   Ú__classcell__)rR   s   @r   rK   rK   }   s×   ø€ € € € € ðð ðð ð ð ð ð
ð ð ð ð ð0
ð 
ð 
ð 
ð 
ð6$0ð $0ð $0ð $0ð $0ðLNð Nð Nðð ð ð ð ð"
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   rK   c                   ó   — e Zd ZdZd„ ZdS )Ú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|¢R i |¤Ž}|j        d d …dd d …f         }|d d …d | j        j        …f                              d¬¦  «        }|d d …| j        j        d …f                              d¬¦  «        }|| j        j        k    }t          j        ||dk    z  t          j	        |¦  «        |¦  «        }|d         |z   |d<   | 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È4ÐQXÐjÐ[_ÐjÐjÐjÐciÐjÐjˆð ”    2 q q q Ô)ˆØ˜˜˜Ð3˜Tœ[Ô3Ð3Ð3Ô4×;Ò;ÀÐ;ÑCÔCˆØ˜1˜1˜1˜dœkÔ4Ð6Ð6Ð6Ô7×>Ò>À2Ð>ÑFÔFˆ	ð ˜tœ{Ô9Ò9ˆ
Ý”K 
¨i¸1ªnÑ =½u¼ÈyÑ?YÔ?YÐ[dÑeÔ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°      sk  ðð "Ð !Ð !Ð !Ð !Ð !à €€€à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø  Ð  Ð  Ð  Ð  Ð  ð;Oð ;Oð ;Oð ;Oð ;Oñ ;Oô ;Oð ;Oð~ =Ð <Ð <Ð <Ð <Ð6Ñ <Ô <Ð <ð ðAð Að Að Að A ñ Aô Añ „ðAð.	,ð 	,ð 	,ð 	,ð 	,Ð/ñ 	,ô 	,ð 	,ðO
ð O
ð O
ð O
ð O
 /ñ O
ô O
ð O
ðdð ð ð ð Ð!<ñ ô ð ð ð r   