§
    ‚Štj} ã                   ó<  — d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
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 ddlm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' ddl(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1  e¦   «         rddl2m3Z3 ddlm4Z4  e%j5        e6¦  «        Z7 G d„ dej8        ¦  «        Z9 G d„ de9¦  «        Z:e9e:dœZ; G d„ dej8        ¦  «        Z< G d„ de¦  «        Z=e" G d „ d!e ¦  «        ¦   «         Z> G d"„ d#e>e¦  «        Z? e"d$¬%¦  «         G d&„ d'e?¦  «        ¦   «         Z@ e"d(¬%¦  «         G d)„ d*e?¦  «        ¦   «         ZA e"d+¬%¦  «         G d,„ d-e>¦  «        ¦   «         ZB e"d.¬%¦  «         G d/„ d0e>e¦  «        ¦   «         ZCg d1¢ZDdS )2zPyTorch BARK model.é    N)Únn)Ú
functionalé   )Úinitialization)ÚCacheÚDynamicCache)ÚGenerationMixin)Ú#AlternatingCodebooksLogitsProcessorÚ!BarkEosPrioritizerLogitsProcessorÚSuppressTokensLogitsProcessor)Úcreate_bidirectional_mask)Ú!flash_attn_supports_top_left_maskÚis_flash_attn_available)ÚGradientCheckpointingLayer)ÚCausalLMOutputWithPastÚMaskedLMOutput)ÚPreTrainedModel)Úauto_docstringÚis_accelerate_availableÚis_torch_accelerator_availableÚloggingé   )Ú	AutoModelé   )ÚBarkCoarseConfigÚ
BarkConfigÚBarkFineConfigÚBarkSemanticConfigÚBarkSubModelConfig)ÚBarkCoarseGenerationConfigÚBarkFineGenerationConfigÚBarkSemanticGenerationConfig)Úget_target_dtype)Ú_flash_attention_forwardc                   óD   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zd	d„Z	 	 	 	 d
d„Zˆ xZS )ÚBarkSelfAttentionFNc                 ó>  •— t          ¦   «                              ¦   «          |j        | _        t          j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        |j        | _        |j	        | _	        | j        | j	        z  | _
        || _        |j        |j	        z  dk    r t          d| j        › d| j	        › d�¦  «        ‚t          j        |j        d|j        z  |j        ¬¦  «        | _        t          j        |j        |j        |j        ¬¦  «        | _        || _        || _        |rd|j        }t)          j        t)          j        ||ft.          ¬¦  «        ¦  «                             dd||¦  «        }|                      d	|¦  «         d S d S )
Nr   z;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).r   ©Úbias©Údtyper   r)   )ÚsuperÚ__init__Údropoutr   ÚDropoutÚattn_dropoutÚresid_dropoutÚhidden_sizeÚ	embed_dimÚ	num_headsÚhead_dimÚconfigÚ
ValueErrorÚLinearr)   Úatt_projÚout_projÚ	is_causalÚ	layer_idxÚ
block_sizeÚtorchÚtrilÚonesÚboolÚviewÚregister_buffer)Úselfr6   r;   r<   r=   r)   Ú	__class__s         €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/bark/modeling_bark.pyr-   zBarkSelfAttention.__init__E   sŽ  ø€ Ý‰Œ×ÒÑÔÐð ”~ˆŒÝœJ v¤~Ñ6Ô6ˆÔÝœZ¨¬Ñ7Ô7ˆÔàÔ+ˆŒØÔ)ˆŒØœ¨$¬.Ñ8ˆŒØˆŒàÔ Ô 0Ñ0°AÒ5Ð5Ýð'ÈdÌnð 'ð 'Ø”Nð'ð 'ð 'ñô ð õ œ	 &Ô"4°a¸&Ô:LÑ6LÐSYÔS^Ð_Ñ_Ô_ˆŒåœ	 &Ô"4°fÔ6HÈvÌ{Ð[Ñ[Ô[ˆŒà"ˆŒØ"ˆŒØð 	/ØÔ*ˆJÝ”:�eœj¨*°jÐ)AÍÐNÑNÔNÑOÔO×TÒTÐUVÐXYÐ[eÐgqÑrÔrˆDØ× Ò  ¨Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/ó    c                 óž   — |                      ¦   «         dd…         ||fz   }|                     |¦  «        }|                     dddd¦  «        S )úJ
        Splits hidden_size dim into attn_head_size and num_heads
        Néÿÿÿÿr   r   r   r   )ÚsizerB   Úpermute©rD   Útensorr4   Úattn_head_sizeÚ	new_shapes        rF   Ú_split_headszBarkSelfAttention._split_headse   sM   € ð —K’K‘M”M # 2 #Ô&¨)°^Ð)DÑDˆ	Ø—’˜YÑ'Ô'ˆØ�~Š~˜a  A qÑ)Ô)Ð)rG   c                 óÂ   — |                      dd¦  «                             ¦   «         }|                     |                     ¦   «         dd…         ||z  fz   ¦  «        }|S )úS
        Merges attn_head_size dim and num_attn_heads dim into hidden_size
        r   r   Néþÿÿÿ)Ú	transposeÚ
contiguousrB   rK   ©rD   rN   r4   rO   s       rF   Ú_merge_headszBarkSelfAttention._merge_headsm   sY   € ð ×!Ò! ! QÑ'Ô'×2Ò2Ñ4Ô4ˆØ—’˜VŸ[š[™]œ]¨3¨B¨3Ô/°9¸~Ñ3MÐ2OÑOÑPÔPˆàˆrG   c                 óp  — t          j        ||                     dd¦  «        ¦  «        dt          j        | j        ¦  «        z  z  }| j        rz|                     d¦  «        |                     d¦  «        }}|                     | j	        d d …d d …||z
  |…d |…f         dk    t          j
        |j        ¦  «        j        ¦  «        }|�||z   }t          j                             |d¬¦  «        }|                     |j        ¦  «        }|                      |¦  «        }t          j        ||¦  «        }||fS )NrJ   rT   ç      ð?r   ©Údim)r>   ÚmatmulrU   ÚmathÚsqrtr5   r;   rK   Úmasked_fillr)   Úfinfor+   Úminr   r   ÚsoftmaxÚtor0   )	rD   ÚqueryÚkeyÚvalueÚattention_maskÚattn_weightsÚquery_lengthÚ
key_lengthÚattn_outputs	            rF   Ú_attnzBarkSelfAttention._attny   s)  € å”| E¨3¯=ª=¸¸RÑ+@Ô+@ÑAÔAÀSÍ4Ì9ÐUYÔUbÑKcÔKcÑEcÑdˆàŒ>ð 	Ø',§z¢z°"¡~¤~°s·x²xÀ±|´|˜*ˆLð (×3Ò3Ø”	˜!˜!˜!˜Q˜Q˜Q 
¨\Ñ 9¸JÐ FÈÈÈÐSÔTÐXYÒYÝ”˜LÔ.Ñ/Ô/Ô3ñô ˆLð
 Ð%à'¨.Ñ8ˆLå”}×,Ò,¨\¸rÐ,ÑBÔBˆØ#—’ u¤{Ñ3Ô3ˆØ×(Ò(¨Ñ6Ô6ˆõ ”l <°Ñ7Ô7ˆà˜LÐ(Ð(rG   c                 óD  — |                       |¦  «                             | j        d¬¦  «        \  }}}	|                      || j        | j        ¦  «        }|                      || j        | j        ¦  «        }|                      |	| j        | j        ¦  «        }	|�|                     ||	| j        ¦  «        \  }}	|                      |||	|¦  «        \  }
}|  	                    |
| j        | j        ¦  «        }
|  
                    |
¦  «        }
|                      |
¦  «        }
|
|fS )Nr   r[   )r9   Úsplitr3   rQ   r4   r5   Úupdater<   rm   rX   r:   r1   )rD   Úhidden_statesrh   Úpast_key_valuesÚ	use_cacheÚoutput_attentionsÚkwargsre   rf   rg   rl   ri   s               rF   ÚforwardzBarkSelfAttention.forward”   s  € ð !ŸMšM¨-Ñ8Ô8×>Ò>¸t¼~ÐSTÐ>ÑUÔUÑˆˆs�Eà×!Ò! %¨¬¸¼ÑGÔGˆØ×Ò  T¤^°T´]ÑCÔCˆØ×!Ò! %¨¬¸¼ÑGÔGˆàÐ&Ø(×/Ò/°°U¸D¼NÑKÔK‰JˆC�à$(§J¢J¨u°c¸5À.Ñ$QÔ$QÑ!ˆ�\à×'Ò'¨°T´^ÀTÄ]ÑSÔSˆØ—m’m KÑ0Ô0ˆØ×(Ò(¨Ñ5Ô5ˆà˜LÐ(Ð(rG   ©FN©N©NNFF)	Ú__name__Ú
__module__Ú__qualname__r-   rQ   rX   rm   rv   Ú__classcell__©rE   s   @rF   r&   r&   A   s’   ø€ € € € € ð/ð /ð /ð /ð /ð /ð@*ð *ð *ð
ð 
ð 
ð)ð )ð )ð )ð< ØØØð)ð )ð )ð )ð )ð )ð )ð )rG   r&   c                   ó>   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Z	 	 	 	 dd„Zˆ xZS )	ÚBarkSelfFlashAttention2aH  
    Bark flash attention module. This module inherits from `BarkSelfAttention` as the weights of the module stays
    untouched. The only required change would be on the forward pass where it needs to correctly call the public API of
    flash attention and deal with padding tokens in case the input contains any of them.
    c                 ó`   •—  t          ¦   «         j        |i |¤Ž t          ¦   «         | _        d S rx   )r,   r-   r   Ú_flash_attn_uses_top_left_mask)rD   Úargsru   rE   s      €rF   r-   z BarkSelfFlashAttention2.__init__·   s6   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)õ
 /PÑ.QÔ.QˆÔ+Ð+Ð+rG   c                 ór   — |                      ¦   «         dd…         ||fz   }|                     |¦  «        }|S )rI   NrJ   )rK   rB   rM   s        rF   rQ   z$BarkSelfFlashAttention2._split_heads¿   s<   € ð —K’K‘M”M # 2 #Ô&¨)°^Ð)DÑDˆ	Ø—’˜YÑ'Ô'ˆð ˆrG   c                 ór   — |                      |                     ¦   «         dd…         ||z  fz   ¦  «        }|S )rS   NrT   )rB   rK   rW   s       rF   rX   z$BarkSelfFlashAttention2._merge_headsÉ   s8   € ð —’˜VŸ[š[™]œ]¨3¨B¨3Ô/°9¸~Ñ3MÐ2OÑOÑPÔPˆØˆrG   NFc                 ó¾  — |                      ¦   «         \  }}}	|                      |¦  «                             | j        d¬¦  «        \  }
}}|                      |
| j        | j        ¦  «        }
|                      || j        | j        ¦  «        }|                      || j        | j        ¦  «        }|�|                     ||| j        ¦  «        \  }}t          |
| ¦  «        }t          |
||||| j        r| j        nd| j        | j        |¬¦	  «	        }|                      || j        | j        ¦  «        }|                      |¦  «        }|                      |¦  «        }|d fS )Nr   r[   g        )r.   Úuse_top_left_maskr;   Útarget_dtype)rK   r9   ro   r3   rQ   r4   r5   rp   r<   r#   r$   Útrainingr.   r‚   r;   rX   r:   r1   )rD   rq   rh   rr   rs   rt   ru   Ú
batch_sizeÚ	query_lenÚ_re   rf   rg   rˆ   rl   s                  rF   rv   zBarkSelfFlashAttention2.forwardÒ   s\  € ð $1×#5Ò#5Ñ#7Ô#7Ñ ˆ
�I˜qð !ŸMšM¨-Ñ8Ô8×>Ò>¸t¼~ÐSTÐ>ÑUÔUÑˆˆs�Eà×!Ò! %¨¬¸¼ÑGÔGˆØ×Ò  T¤^°T´]ÑCÔCˆØ×!Ò! %¨¬¸¼ÑGÔGˆàÐ&Ø(×/Ò/°°U¸D¼NÑKÔK‰JˆC�å'¨¨tÑ4Ô4ˆå.ØØØØØØ$(¤MÐ:�D”L�L°sØ"ÔAØ”nØ%ð

ñ 

ô 

ˆð ×'Ò'¨°T´^ÀTÄ]ÑSÔSˆØ—m’m KÑ0Ô0ˆØ×(Ò(¨Ñ5Ô5ˆà˜DÐ Ð rG   ry   )	rz   r{   r|   Ú__doc__r-   rQ   rX   rv   r}   r~   s   @rF   r€   r€   °   s‡   ø€ € € € € ðð ðRð Rð Rð Rð Rðð ð ðð ð ð ØØØð'!ð '!ð '!ð '!ð '!ð '!ð '!ð '!rG   r€   )ÚeagerÚflash_attention_2c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚBarkMLPc                 ól  •— t          ¦   «                              ¦   «          t          j        |j        d|j        z  |j        ¬¦  «        | _        t          j        d|j        z  |j        |j        ¬¦  «        | _        t          j        |j	        ¦  «        | _	        t          j
        ¦   «         | _        d S )Né   r(   )r,   r-   r   r8   r2   r)   Úin_projr:   r/   r.   ÚGELUÚgelu©rD   r6   rE   s     €rF   r-   zBarkMLP.__init__  s‹   ø€ Ý‰Œ×ÒÑÔÐÝ”y Ô!3°Q¸Ô9KÑ5KÐRXÔR]Ð^Ñ^Ô^ˆŒÝœ	 ! fÔ&8Ñ"8¸&Ô:LÐSYÔS^Ð_Ñ_Ô_ˆŒÝ”z &¤.Ñ1Ô1ˆŒÝ”G‘I”IˆŒ	ˆ	ˆ	rG   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rx   )r”   r–   r:   r.   )rD   rq   s     rF   rv   zBarkMLP.forward
  sL   € ØŸš ]Ñ3Ô3ˆØŸ	š	 -Ñ0Ô0ˆØŸš mÑ4Ô4ˆØŸš ]Ñ3Ô3ˆØÐrG   ©rz   r{   r|   r-   rv   r}   r~   s   @rF   r‘   r‘     sG   ø€ € € € € ðð ð ð ð ðð ð ð ð ð ð rG   r‘   c                   ó0   ‡ — e Zd Zdˆ fd„	Z	 	 	 	 dd„Zˆ xZS )Ú	BarkBlockFNc                 óÆ  •— t          ¦   «                              ¦   «          |rKt          j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¬¦  «        | _        n<t          j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        t          |j	                 |||¬¦  «        | _
        t          |¦  «        | _        d S )Nr(   ©r;   r<   )r,   r-   r   Ú	LayerNormr2   r)   Úlayernorm_1Úlayernorm_2ÚBARK_ATTENTION_CLASSESÚ_attn_implementationÚattnr‘   Úmlp)rD   r6   r;   r<   rE   s       €rF   r-   zBarkBlock.__init__  sÁ   ø€ Ý‰Œ×ÒÑÔÐàð 	@õ  "œ|¨FÔ,>ÀVÄ[ÐQÑQÔQˆDÔÝ!œ|¨FÔ,>ÀVÄ[ÐQÑQÔQˆDÔÐå!œ|¨FÔ,>Ñ?Ô?ˆDÔÝ!œ|¨FÔ,>Ñ?Ô?ˆDÔå*¨6Ô+FÔGØ˜i°9ð
ñ 
ô 
ˆŒ	õ ˜6‘?”?ˆŒˆˆrG   c                 óð   — |                       |¦  «        }|                      |||||¬¦  «        }|d         }	|dd …         }
||	z   }||                      |                      |¦  «        ¦  «        z   }|f|
z   S )N©rr   rh   rs   rt   r   r   )rŸ   r£   r¤   r    )rD   rq   rr   rh   rs   rt   ru   Úintermediary_hidden_statesÚattn_outputsrl   Úoutputss              rF   rv   zBarkBlock.forward%  s¢   € ð &*×%5Ò%5°mÑ%DÔ%DÐ"à—y’yØ&Ø+Ø)ØØ/ð !ñ 
ô 
ˆð # 1”oˆØ˜q˜r˜rÔ"ˆà%2°[Ñ%@Ð"Ø%?À$Ç(Â(Ø×ÒÐ7Ñ8Ô8ñC
ô C
ñ &
Ð"ð +Ð,¨wÑ6Ð6rG   rw   ry   r™   r~   s   @rF   r›   r›     s_   ø€ € € € € ð#ð #ð #ð #ð #ð #ð* ØØØð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7rG   r›   c                   ó\   ‡ — e Zd ZU eed<   dZdZedej	        fˆ fd„¦   «         Z	ˆ fd„Z
ˆ xZS )ÚBarkPreTrainedModelr6   FTÚreturnc                 ó@  •— t          | d¦  «        st          ¦   «         j        S |                      ¦   «         D ]S}t          |d¦  «        rAt          |j        d¦  «        r,|j        j        � t          j        |j        j        ¦  «        c S ŒTt          ¦   «         j        S )ú�
        `torch.device`: The device on which the module is (assuming that all the module parameters are on the same
        device).
        Ú_hf_hookÚexecution_device)Úhasattrr,   ÚdeviceÚmodulesr¯   r°   r>   ©rD   ÚmodulerE   s     €rF   r²   zBarkPreTrainedModel.deviceI  sš   ø€ õ �t˜ZÑ(Ô(ð 	"Ý‘7”7”>Ð!Ø—l’l‘n”nð 	Fð 	FˆFå˜ 
Ñ+Ô+ðFå˜FœOÐ-?Ñ@Ô@ðFð ”OÔ4Ð@å”| F¤OÔ$DÑEÔEÐEÐEÐEøå‰wŒwŒ~ÐrG   c                 ó`  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rt|j        ro|j        j        }t          j        t          j	        ||ft          ¬¦  «        ¦  «                             dd||¦  «        }t          j        |j        |¦  «         d S d S d S )Nr*   r   )r,   Ú_init_weightsÚ
isinstancer&   r;   r6   r=   r>   r?   r@   rA   rB   ÚinitÚcopy_r)   )rD   rµ   r=   r)   rE   s       €rF   r·   z!BarkPreTrainedModel._init_weights]  s¬   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ/Ñ0Ô0ð 	.ØÔð .Ø#œ]Ô5�
Ý”z¥%¤*¨j¸*Ð-EÍTÐ"RÑ"RÔ"RÑSÔS×XÒXÐYZÐ\]Ð_iÐkuÑvÔv�Ý”
˜6œ;¨Ñ-Ô-Ð-Ð-Ð-ð		.ð 	.ð.ð .rG   )rz   r{   r|   r   Ú__annotations__Úsupports_gradient_checkpointingÚ_supports_flash_attnÚpropertyr>   r²   r·   r}   r~   s   @rF   r«   r«   C  sƒ   ø€ € € € € € àÐÐÑØ&+Ð#ØÐàð˜œð ð ð ð ð ñ „Xðð&.ð .ð .ð .ð .ð .ð .ð .ð .rG   r«   c                   ó$  ‡ — e Zd ZU eed<   dZˆ fd„Zd„ Zd„ Zd„ Z	e
	 	 	 	 	 	 	 	 	 	 ddej        dz  d	edz  d
ej        dz  dej        dz  dej        dz  dej        dz  dedz  dedz  dedz  dedz  deej                 ez  fd„¦   «         Zˆ xZS )ÚBarkCausalModelr6   )Úaudioc                 ó`  •‡— t          ¦   «                              ‰¦  «         ‰| _        t          j        ‰j        ‰j        ¦  «        | _        t          j        ‰j        ‰j        ¦  «        | _	        t          j
        ‰j        ¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          j        ‰j        ‰j        ¬¦  «        | _        t          j        ‰j        ‰j        d¬¦  «        | _        d| _        |                      ¦   «          d S )Nc                 ó4   •— g | ]}t          ‰d |¬¦  «        ‘ŒS )Tr�   ©r›   ©Ú.0Úir6   s     €rF   ú
<listcomp>z,BarkCausalModel.__init__.<locals>.<listcomp>u  s*   ø€ Ð$vÐ$vÐ$vÐXY¥Y¨vÀÐQRÐ%SÑ%SÔ%SÐ$vÐ$vÐ$vrG   r(   F)r,   r-   r6   r   Ú	EmbeddingÚinput_vocab_sizer2   Úinput_embeds_layerr=   Úposition_embeds_layerr/   r.   ÚdropÚ
ModuleListÚrangeÚ
num_layersÚlayersrž   r)   Úlayernorm_finalr8   Úoutput_vocab_sizeÚlm_headÚgradient_checkpointingÚ	post_initr—   s    `€rF   r-   zBarkCausalModel.__init__k  sú   øø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒõ #%¤,¨vÔ/FÈÔHZÑ"[Ô"[ˆÔÝ%'¤\°&Ô2CÀVÔEWÑ%XÔ%XˆÔ"å”J˜vœ~Ñ.Ô.ˆŒ	å”mÐ$vÐ$vÐ$vÐ$vÕ]bÐciÔctÑ]uÔ]uÐ$vÑ$vÔ$vÑwÔwˆŒå!œ|¨FÔ,>ÀVÄ[ÐQÑQÔQˆÔå”y Ô!3°VÔ5MÐTYÐZÑZÔZˆŒØ&+ˆÔ#ð 	�ŠÑÔÐÐÐrG   c                 ó   — d S rx   © ©rD   s    rF   Úget_output_embeddingsz%BarkCausalModel.get_output_embeddings  s	   € ð ˆtrG   c                 ó   — | j         S rx   ©rË   rÙ   s    rF   Úget_input_embeddingsz$BarkCausalModel.get_input_embeddings„  s   € ØÔ&Ð&rG   c                 ó   — || _         d S rx   rÜ   ©rD   Únew_embeddingss     rF   Úset_input_embeddingsz$BarkCausalModel.set_input_embeddings‡  s   € Ø"0ˆÔÐÐrG   NÚ	input_idsrr   rh   Úposition_idsÚlabelsÚinputs_embedsrs   rt   Úoutput_hidden_statesÚreturn_dictr¬   c                 ó¬  — |�|n| j         j        }|	�|	n| j         j        }	|�|n| j         j        }|
�|
n| j         j        }
d }|�t          d¦  «        ‚|�|�t          d¦  «        ‚|�|€n*|�|                      |¦  «        }n|�nt          d¦  «        ‚|                     ¦   «         d d…         }|d         }| j	        r%| j
        r|rt                               d¦  «         d}|r|€t          | j         ¬¦  «        }|�|                     ¦   «         nd}|                     | j        j        j        ¦  «        }|€It'          j        |||z   t&          j        | j        j        j        ¬	¦  «        }|                     d¦  «        }|                     | j        j        j        ¦  «        }|                      |¦  «        }t/          | j         ||¬
¦  «        }|                      ||z   ¦  «        }||                     d¦  «        fz   }|rdnd }|	rdnd }t3          | j        ¦  «        D ]3\  }}|	r||fz   } ||||||¬¦  «        }|d         }|r||d         fz   }Œ4|                      |¦  «        }|                     |¦  «        }|	r||fz   }|                      |¦  «        }|
st=          d„ d ||||fD ¦   «         ¦  «        S t?          |||||¬¦  «        S )NzXTraining is not implemented yet for Bark - ensure you do not pass `labels` to the model.úDYou cannot specify both input_ids and inputs_embeds at the same timeú5You have to specify either input_ids or inputs_embedsrJ   zZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...F)r6   r   ©r+   r²   ©r6   rå   rh   rØ   r¦   r   c              3   ó   K  — | ]}|®|V — Œ	d S rx   rØ   ©rÆ   Úvs     rF   ú	<genexpr>z*BarkCausalModel.forward.<locals>.<genexpr>ù  s1   è è € ð ð ØÐfgÐfs�ÐfsÐfsÐfsÐfsðð rG   )ÚlossÚlogitsrr   rq   Ú
attentions) r6   rt   ræ   rs   rç   ÚNotImplementedErrorr7   rË   rK   rÕ   r‰   ÚloggerÚwarning_oncer   Úget_seq_lengthrd   rÌ   Úweightr²   r>   ÚarangeÚlongÚ	unsqueezer   rÍ   Ú	enumeraterÑ   rÒ   rB   rÔ   Útupler   )rD   râ   rr   rh   rã   rä   rå   rs   rt   ræ   rç   ru   rñ   Úinput_shapeÚ
seq_lengthÚpast_lengthÚposition_embedsrq   Úoutput_shapeÚall_self_attentionsÚall_hidden_statesrÇ   Úblockr©   rò   s                            rF   rv   zBarkCausalModel.forwardŠ  sº  € ð 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð "+Ð!6�I�I¸D¼KÔ<Qˆ	Ø%0Ð%<�k�kÀ$Ä+ÔBYˆàˆØÐÝ%Øjñô ð ð Ð  ]Ð%>ÝÐcÑdÔdÐdØÐ&¨?Ð+Bð ØÐ"Ø ×3Ò3°IÑ>Ô>ˆMˆMØÐ&ØåÐTÑUÔUÐUà#×(Ò(Ñ*Ô*¨3¨B¨3Ô/ˆØ  ”_ˆ
àÔ&ð 	"¨4¬=ð 	"Øð "Ý×#Ò#Øpñô ð ð "�	àð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOà:IÐ:U�o×4Ò4Ñ6Ô6Ð6Ð[\ˆØ%×(Ò(¨Ô)CÔ)JÔ)QÑRÔRˆàÐÝ œ<ØØ˜[Ñ(Ý”jØÔ1Ô8Ô?ð	ñ ô ˆLð (×1Ò1°!Ñ4Ô4ˆLà#—’ tÔ'AÔ'HÔ'OÑPÔPˆØ×4Ò4°\ÑBÔBˆå2Ø”;Ø'Ø)ð
ñ 
ô 
ˆð Ÿ	š	 -°/Ñ"AÑBÔBˆØ" m×&8Ò&8¸Ñ&<Ô&<Ð%>Ñ>ˆà$5Ð?˜b˜b¸4ÐØ"6Ð@˜B˜B¸DÐå! $¤+Ñ.Ô.ð 	Jð 	J‰HˆAˆuØ#ð IØ$5¸Ð8HÑ$HÐ!à�eØØ /Ø-Ø#Ø"3ðñ ô ˆGð $ AœJˆMà ð JØ&9¸WÀQ¼Z¸MÑ&IÐ#øà×,Ò,¨]Ñ;Ô;ˆà%×*Ò*¨<Ñ8Ô8ˆð  ð 	EØ 1°]Ð4DÑ DÐà—’˜mÑ,Ô,ˆàð 	Ýð ð Ø  &¨/Ð;LÐNaÐbðñ ô ñ ô ð õ &ØØØ+Ø+Ø*ð
ñ 
ô 
ð 	
rG   )
NNNNNNNNNN)rz   r{   r|   r   r»   Úoutput_modalitiesr-   rÚ   rÝ   rá   r   r>   ÚTensorr   Ú
LongTensorrA   rý   r   rv   r}   r~   s   @rF   rÀ   rÀ   g  sƒ  ø€ € € € € € ØÐÐÑØ"Ððð ð ð ð ð(ð ð ð
'ð 'ð 'ð1ð 1ð 1ð ð *.Ø(,Ø.2Ø,0Ø*.Ø-1Ø!%Ø)-Ø,0Ø#'ðx
ð x
à”< $Ñ&ðx
ð  ™ðx
ð œ tÑ+ð	x
ð
 ”l TÑ)ðx
ð Ô  4Ñ'ðx
ð ”| dÑ*ðx
ð ˜$‘;ðx
ð   $™;ðx
ð # T™kðx
ð ˜D‘[ðx
ð 
ˆuŒ|Ô	Ð5Ñ	5ðx
ð x
ð x
ñ „^ðx
ð x
ð x
ð x
ð x
rG   rÀ   z¯
    Bark semantic (or text) model. It shares the same architecture as the coarse model.
    It is a GPT-2 like autoregressive model with a language modeling head on top.
    )Úcustom_introc                   ó–   ‡ — e Zd ZU dZeed<   	 	 	 d
dej        dedz  de	e
ej        f         dz  dej        dz  dej        f
ˆ fd	„Zˆ xZS )ÚBarkSemanticModelÚsemanticr6   Nrâ   Úsemantic_generation_configÚhistory_promptrh   r¬   c           
      óÖ  •— |€t          d¦  «        ‚|j        d         }|j        }||j        z   }|�0|                     d|z
                       ¦   «         |j        ¦  «        }|�L|d         | d…         }t          j         	                    |d|t          |¦  «        z
  f|j        d¬¦  «        }n-t          j        |f|j        | j        t          j        ¬¦  «        }t          j        |d         |d¬	¦  «        }t          j        |j        gg|z  t          j        ¬
¦  «                             | j        ¦  «        }	t          j        |                      |dd…d|…f         ¦  «        |                      |dd…d|dz   …f         ¦  «        z   |                      |	¦  «        gd¬	¦  «        }
t-          t/          |j        |j        ¦  «        ¦  «        }|                     t-          t/          |j        dz   | j        j        ¦  «        ¦  «        ¦  «         t9          ||j        ¬¦  «        }|                     d|j        ¦  «        }t?          |j         ||j        ¬¦  «        } tC          ¦   «         j"        t          j#        ||dz   ft          j        | j        ¬¦  «        f|
||g|dœ|¤Ž}|                     dd¦  «        r|j$        dd…|dz   d…f         }n|dd…|dz   d…f         }|S )a°  
        Generates text semantic tokens from an input prompt and an additional optional `Bark` speaker prompt.

        Args:
            input_ids (`Optional[torch.Tensor]` of shape (batch_size, seq_len), *optional*):
                Input ids, i.e tokenized input sentences. Will be truncated up to
                semantic_generation_config.max_input_semantic_length tokens. Note that the output audios will be as
                long as the longest generation among the batch.
            semantic_generation_config (`BarkSemanticGenerationConfig`):
                Generation config indicating how to generate the semantic tokens.
            history_prompt (`Optional[dict[str,torch.Tensor]]`, *optional*):
                Optional `Bark` speaker prompt.
            attention_mask (`Optional[torch.Tensor]`, *optional*):
                Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

                - 1 for tokens that are **not masked**,
                - 0 for tokens that are **masked**.

                [What are attention masks?](../glossary#attention-mask)
        Returns:
            torch.LongTensor: Output semantic tokens.
        Nú/`semantic_generation_config` has to be providedr   r   Úsemantic_promptÚconstant)rg   Úmode)r²   r+   r[   r*   ©r²   Ú	min_eos_p)Úeos_token_idr  r²   rë   )rå   Úlogits_processorÚgeneration_configÚreturn_dict_in_generateF)%r7   ÚshapeÚmax_input_semantic_lengthÚtext_encoding_offsetr`   rA   Útext_pad_tokenr   r   ÚpadÚlenÚsemantic_pad_tokenr>   Úfullr²   ÚintÚrepeat_interleaverN   Úsemantic_infer_tokenrd   ÚcatrË   ÚlistrÏ   Úsemantic_vocab_sizeÚextendr6   rÓ   r   Úgetr  r   r  r,   Úgenerater@   Ú	sequences)rD   râ   r  r  rh   ru   rŠ   r  Úsemantic_historyÚinfer_arrayrå   Útokens_to_suppressÚ suppress_tokens_logits_processorr  Úearly_stopping_logits_processorÚsemantic_outputrE   s                   €rF   r*  zBarkSemanticModel.generate  si  ø€ ð< &Ð-ÝÐNÑOÔOÐOà”_ QÔ'ˆ
à$>Ô$XÐ!àÐ :Ô OÑOˆ	àÐ%Ø!×-Ò-¨q°>Ñ/A×.GÒ.GÑ.IÔ.IÐKeÔKtÑuÔuˆIàÐ%Ø-Ð.?Ô@ÐB[ÐA[ÐA\ÐA\Ô]ÐÝ!œ}×0Ò0Ø ØÐ-µÐ4DÑ0EÔ0EÑEÐFØ0ÔCØð	  1ñ  ô  ÐÐõ  %œzØ*Ð,Ø*Ô=Ø”{Ý”ið	 ñ  ô  Ðõ !Ô2Ð3CÀDÔ3IÈ:Ð[\Ð]Ñ]Ô]Ðå”lØ(Ô=Ð>Ð?À*ÑLÕTYÔT]ð
ñ 
ô 
ç
Š"ˆTŒ[‰/Œ/ð 	õ œ	à×'Ò'¨	°!°!°!Ð5OÐ6OÐ5OÐ2OÔ(PÑQÔQØ×)Ò)Ð*:¸1¸1¸1Ð>]Ð@YÐ\]Ñ@]Ð>]Ð;]Ô*^Ñ_Ô_ñ`à×'Ò'¨Ñ4Ô4ðð
 ð
ñ 
ô 
ˆõ "ÝÐ,Ô@ÐB\ÔBoÑpÔpñ
ô 
Ðð 	×!Ò!Ý•Ð1ÔDÀqÑHÈ$Ì+ÔJgÑhÔhÑiÔiñ	
ô 	
ð 	
õ ,IÐI[ÐdmÔdtÐ+uÑ+uÔ+uÐ(à—J’J˜{Ð,FÔ,PÑQÔQˆ	Ý*KØ3Ô@ÈIÐ^gÔ^nð+
ñ +
ô +
Ð'ð +�%™'œ'Ô*ÝŒJ˜
Ð$=ÀÑ$AÐBÍ%Ì)Ð\`Ô\gÐhÑhÔhð
à'Ø>Ð@_Ð`Ø8ð	
ð 
ð
 ð
ð 
ˆð �:Š:Ð/°Ñ7Ô7ð 	RØ-Ô7¸¸¸Ð;TÐWXÑ;XÐ;ZÐ;ZÐ8ZÔ[ˆOˆOà-¨a¨a¨aÐ1JÈQÑ1NÐ1PÐ1PÐ.PÔQˆOØÐrG   ©NNN)rz   r{   r|   Úbase_model_prefixr   r»   r>   r  r"   ÚdictÚstrr  r*  r}   r~   s   @rF   r  r    sÈ   ø€ € € € € € ð #ÐØÐÐÑð
 KOØ9=Ø.2ðfð fà”<ðfð %AÀ4Ñ$Gðfð ˜S %¤,Ð.Ô/°$Ñ6ð	fð
 œ tÑ+ðfð 
Ô	ðfð fð fð fð fð fð fð fð fð frG   r  z½
    Bark coarse acoustics model.
    It shares the same architecture as the semantic (or text) model. It is a GPT-2 like autoregressive model with a
    language modeling head on top.
    c                   ó  ‡ — e Zd ZU dZeed<   	 ddededededed	eee	j
        f         dz  fd
„Z	 	 	 	 	 dde	j
        dedz  dedz  ded	eee	j
        f         dz  dedz  de	j        ee	j        e	j        f         z  fˆ fd„Zˆ xZS )ÚBarkCoarseModelÚcoarse_acousticsr6   NÚmax_coarse_historyÚsemantic_to_coarse_ratiorŠ   r  Úcodebook_sizer  c           
      ó  — |��³t          j        |d         d         |d¬¦  «        }|d                              ¦   «         }|�5t          d|j        d         ¦  «        D ]}	||	dd…fxx         ||	z  z  cc<   Œt          j        |dd¦  «                             d¦  «        }||j        z   }t          j        |d         |d¬¦  «        }t          t          j
        ||z  ¦  «        ¦  «        }
t          |
|j        d         |j        d         dz  z
  t          t          j
        |j        d         |z  ¦  «        ¦  «        g¦  «        }t          t          ||z  ¦  «        ¦  «        }|dd…| d…f                              ¦   «         }|dd…| d…f                              ¦   «         }|dd…dd	…f         }nTt          j        g g|z  t           j        | j        ¬
¦  «        }t          j        g g|z  t           j        | j        ¬
¦  «        }||fS )a  
        Preprocess the optional `Bark` speaker prompts before `self.generate`.

        Args:
            max_coarse_history (`int`):
                Maximum size of coarse tokens used.
            semantic_to_coarse_ratio (`int`):
                Ratio of semantic to coarse frequency
            batch_size (`int`):
                Batch size, i.e the number of samples.
            semantic_generation_config (`BarkSemanticGenerationConfig`):
                Generation config indicating how to generate the semantic tokens.
            codebook_size (`int`):
                Codebook channel size, i.e. the size of the output vocabulary per codebook channel.
            history_prompt (`Optional[dict[str,torch.Tensor]]`):
                Optional `Bark` speaker prompt.
        Returns: Returns:
            `tuple(torch.FloatTensor)`:
            - **x_semantic_history** (`torch.FloatTensor` -- Processed semantic speaker prompt.
            - **x_coarse_history** (`torch.FloatTensor`) -- Processed coarse speaker prompt.
        Nr  r   r[   Úcoarse_promptr   rJ   r   rT   rë   )r>   r#  ÚclonerÏ   r  rU   Úreshaper'  r"  ÚnpÚfloorrb   ÚroundrN   r²   )rD   r9  r:  rŠ   r  r;  r  Úx_semantic_historyÚx_coarse_historyÚnÚmax_semantic_historyÚn_semantic_hist_providedÚn_coarse_hist_provideds                rF   Úpreprocess_historiesz$BarkCoarseModel.preprocess_histories„  sQ  € ð< Ñ%Ý!&Ô!8¸ÐHYÔ9ZÐ[_Ô9`ÐblÐrsÐ!tÑ!tÔ!tÐà-¨oÔ>×DÒDÑFÔFÐð Ð(Ý˜qÐ"2Ô"8¸Ô";Ñ<Ô<ð @ð @�Aà$ Q¨¨¨ TÐ*Ð*Ô*¨m¸aÑ.?Ñ?Ð*Ð*Ñ*Ð*õ  %œÐ/?ÀÀAÑFÔF×NÒNÈrÑRÔRÐà/Ð2LÔ2`Ñ`Ðå$Ô6Ð7GÈÔ7MÈzÐ_`ÐaÑaÔaÐõ $'¥r¤xÐ0BÐE]Ñ0]Ñ'^Ô'^Ñ#_Ô#_Ð å'*à(Ø&Ô,¨QÔ/Ð2DÔ2JÈ1Ô2MÐPQÑ2QÑQÝ�œÐ!1Ô!7¸Ô!:Ð=UÑ!UÑVÔVÑWÔWðñ(ô (Ð$õ &)­Ð/GÐJbÑ/bÑ)cÔ)cÑ%dÔ%dÐ"à!3°A°A°AÐ8PÐ7PÐ7QÐ7QÐ4QÔ!R×!VÒ!VÑ!XÔ!XÐØ/°°°Ð4JÐ3JÐ3KÐ3KÐ0KÔL×PÒPÑRÔRÐà/°°°°3°B°3°Ô7ÐÐõ "'¤¨r¨d°ZÑ.?ÅuÄyÐY]ÔYdÐ!eÑ!eÔ!eÐÝ$œ|¨R¨D°:Ñ,=ÅUÄYÐW[ÔWbÐcÑcÔcÐà!Ð#3Ð3Ð3rG   é   r1  Úcoarse_generation_configÚreturn_output_lengthsr¬   c           
      óÖ  •— |€t          d¦  «        ‚|€t          d¦  «        ‚|j        }|j        }	|j        }
|                     ||j        k    |j        ¦  «         |j        |j        z  |j	        z  }t          t          j        |	|z  ¦  «        ¦  «        }||j        k                         d¦  «        }t          j        ||z  |j	        z  ¦  «        }t          j        ||j	        z  ¦  «         
                    ¦   «         }t          j        |¦  «                             ¦   «         }|j        d         }|                      ||	||||¬¦  «        \  }}|j        d         }t          j        ||g¦  «        }t          t          j        ||
z  ¦  «        ¦  «        }d}|j        d         }t-          |¦  «        D �]š}|t          t          ||z  ¦  «        ¦  «        z   }|dd…t          j        d||z
  g¦  «        d…f         }|dd…d|…f         }t/          j        |d||j        d         z
  fd|j        ¦  «        }t          j        |t          j        |j        gg|z  | j        ¬	¦  «        |dd…|	 d…f         g¦  «        }t9          |j        d         |j        |¦  «        } t=          ¦   «         j        |f|gtA          |
||z
  ¦  «        |d
œ|¤Ž}|j        d         }| !                    dd¦  «        r(t          j        ||j"        dd…|d…f         g¦  «        }n"t          j        ||dd…|d…f         g¦  «        }|j        d         |z
  }~�Œœ|dd…|d…f         }|r||fS |S )aW  
        Generates coarse acoustics tokens from input text semantic tokens and an additional optional `Bark` speaker
        prompt.

        Args:
            semantic_output (`torch.Tensor` of shape (batch_size, seq_len), *optional*):
                Input text semantic ids, i.e the output of `BarkSemanticModel.generate`.
            semantic_generation_config (`BarkSemanticGenerationConfig`):
                Generation config indicating how to generate the semantic tokens.
            coarse_generation_config (`BarkCoarseGenerationConfig`):
                Generation config indicating how to generate the coarse tokens.
            codebook_size (`int`, *optional*, defaults to 1024):
                Codebook channel size, i.e. the size of the output vocabulary per codebook channel.
            history_prompt (`Optional[dict[str,torch.Tensor]]`, *optional*):
                Optional `Bark` speaker prompt.
            return_output_lengths (`bool`, *optional*):
                Whether or not to return the output lengths. Useful when batching.
        Returns:
            By default:
                torch.LongTensor: Output coarse acoustics tokens.
            If `return_output_lengths=True`:
                `Tuple(torch.Tensor, torch.Tensor): The output coarse acoustics tokens, and the length of each sample
                of the batch.
        Nr  ú-`coarse_generation_config` has to be providedr   r   )r  r9  r:  rŠ   r  r;  rJ   r  r  )r  Úmax_new_tokensr  r  F)#r7   Úmax_coarse_input_lengthr9  Úsliding_window_lenÚmasked_fill_r   Úcoarse_semantic_pad_tokenÚcoarse_rate_hzÚsemantic_rate_hzÚn_coarse_codebooksr"  r@  rA  Úsumr>   rB  ÚmaxÚitemr  rI  ÚhstackÚceilrÏ   ÚFr  rN   Úcoarse_infer_tokenr²   r
   r'  r,   r*  rb   r)  r+  )rD   r1  r  rK  r;  r  rL  ru   rP  r9  rQ  r:  rF  Úoutput_lengthsÚmax_generated_lenrŠ   rC  Úx_coarseÚbase_semantic_idxÚn_window_stepsÚtotal_generated_lenÚlen_coarse_historyrŒ   Úsemantic_idxÚinput_coarseÚalternatingLogitsProcessorÚoutput_coarseÚinput_coarse_lenÚcoarse_outputrE   s                                €rF   r*  zBarkCoarseModel.generateÎ  s$  ø€ ðF &Ð-ÝÐNÑOÔOÐOà#Ð+ÝÐLÑMÔMÐMà":Ô"RÐØ5ÔHÐØ5ÔHÐð 	×$Ò$ØÐ9ÔLÒLØ$Ô>ñ	
ô 	
ð 	
ð %Ô3Ø(Ô9ñ:à&Ô9ñ:ð 	!õ
  #¥2¤8Ð,>ÐAYÑ,YÑ#ZÔ#ZÑ[Ô[Ðà)Ð-EÔ-_Ò_×dÒdÐefÑgÔgˆÝœØÐ5Ñ5Ð8PÔ8cÑcñ
ô 
ˆõ œ ^Ð6NÔ6aÑ%aÑbÔb×fÒfÑhÔhˆå!œI nÑ5Ô5×:Ò:Ñ<Ô<Ðà$Ô*¨1Ô-ˆ
à'+×'@Ò'@Ø)Ø1Ø%=Ø!Ø'AØ'ð (Añ (
ô (
Ñ$Ð˜Hð /Ô4°QÔ7Ðåœ,Ð(:¸OÐ'LÑMÔMˆå�RœWÐ%6Ð9KÑ%KÑLÔLÑMÔMˆàÐà%œ^¨AÔ.Ðå�~Ñ&Ô&ð +	ñ +	ˆAØ,­sµ5Ð9LÐOgÑ9gÑ3hÔ3hÑ/iÔ/iÑiˆLð +¨1¨1¨1­b¬f°a¸ÐH\Ñ9\Ð5]Ñ.^Ô.^Ð.`Ð.`Ð+`ÔaˆLØ'¨¨¨Ð+CÐ,CÐ+CÐ(CÔDˆLÝœ5ØØÐ+¨lÔ.@ÀÔ.DÑDÐEØØ(ÔBñ	ô ˆLõ !œ<à Ý”LÐ#;Ô#NÐ"OÐ!PÐS]Ñ!]ÐfjÔfqÐrÑrÔrØ˜Q˜Q˜QÐ!3Ð 3Ð 4Ð 4Ð4Ô5ðñô ˆLõ *MØÔ" 1Ô%Ø*Ô>Øñ*ô *Ð&ð -�E™GœGÔ,Øðà"<Ð!=Ý"Ð#5Ð7HÐK^Ñ7^Ñ_Ô_Ø":ð	ð ð
 ðð ˆMð  ,Ô1°!Ô4Ðà�zŠzÐ3°UÑ;Ô;ð YÝ œ<¨°=Ô3JÈ1È1È1ÐN^ÐN_ÐN_ÐK_Ô3`Ð(aÑbÔb��å œ<¨°=ÀÀÀÐDTÐDUÐDUÐAUÔ3VÐ(WÑXÔX�Ø"*¤.°Ô"3Ð6HÑ"HÐà‘à    Ð$6Ð$7Ð$7Ð!7Ô8ˆà ð 	1Ø  .Ð0Ð0àÐrG   rx   )NNrJ  NN)rz   r{   r|   r3  r   r»   r"  r4  r5  r>   r  rI  r"   r    rA   r  rý   r*  r}   r~   s   @rF   r7  r7  y  sp  ø€ € € € € € ð +ÐØÐÐÑð :>ðH4ð H4àðH4ð #&ðH4ð ð	H4ð
 %(ðH4ð ðH4ð ˜S %¤,Ð.Ô/°$Ñ6ðH4ð H4ð H4ð H4ðZ KOØFJØ!Ø9=Ø-1ðIð IàœðIð %AÀ4Ñ$GðIð #=¸tÑ"Cð	Ið
 ðIð ˜S %¤,Ð.Ô/°$Ñ6ðIð  $ d™{ðIð 
Ô	˜E %Ô"2°EÔ4DÐ"DÔEÑ	EðIð Ið Ið Ið Ið Ið Ið Ið Ið IrG   r7  z«
    Bark fine acoustics model. It is a non-causal GPT-like model with `config.n_codes_total` embedding layers and
    language modeling heads, one for each codebook.
    c                   óò  ‡ — e Zd ZU dZeed<   dZˆ fd„Zd„ Zd„ Z	d„ Z
d„ Zd"d„Z	 	 	 d#ded	z  ded	z  dedej        fd„Ze	 	 	 	 	 	 	 	 d$dedej        d	z  dej        d	z  dej        d	z  dej        d	z  dej        d	z  ded	z  ded	z  ded	z  deej                 ez  fd„¦   «         Z ej        ¦   «         	 	 	 	 	 d%dej        ded	z  ded	z  deded eeej        f         d	z  dej        fd!„¦   «         Zˆ xZ S )&ÚBarkFineModelÚfine_acousticsr6   Úcodebook_idxc                 óH  •‡— t          ¦   «                              ‰¦  «         ‰| _        i | _        t	          | j        j        | j        j        z
  ¦  «        D ]}d|dz   › d�| j        d|› d�<   Œt          j        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _	        t          j
        ‰j        ‰j        ¦  «        | _        t          j        ‰j        ¦  «        | _        t          j        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          j        ‰j        ¦  «        | _        t          j        ˆfd„t	          ‰j        ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        ‰j        | _        |                      ¦   «          d S )	Nzinput_embeds_layers.r   z.weightz	lm_heads.c                 óN   •— g | ]!}t          j        ‰j        ‰j        ¦  «        ‘Œ"S rØ   )r   rÉ   rÊ   r2   ©rÆ   rŒ   r6   s     €rF   rÈ   z*BarkFineModel.__init__.<locals>.<listcomp>p  s+   ø€ ÐlÐlÐlÈ1�RŒ\˜&Ô1°6Ô3EÑFÔFÐlÐlÐlrG   c                 ó4   •— g | ]}t          ‰d |¬¦  «        ‘ŒS )Fr�   rÄ   rÅ   s     €rF   rÈ   z*BarkFineModel.__init__.<locals>.<listcomp>w  s(   ø€ Ð_Ð_Ð_À�Y�v¨¸!Ð<Ñ<Ô<Ð_Ð_Ð_rG   c                 óR   •— g | ]#}t          j        ‰j        ‰j        d ¬¦  «        ‘Œ$S )Fr(   )r   r8   r2   rÓ   rq  s     €rF   rÈ   z*BarkFineModel.__init__.<locals>.<listcomp>}  s@   ø€ ð ð ð àõ ”	˜&Ô,¨fÔ.FÈUÐSÑSÔSðð ð rG   F)r,   r-   r6   Ú_tied_weights_keysrÏ   Ún_codes_totalÚn_codes_givenr   rÎ   Úinput_embeds_layersrÉ   r=   r2   rÌ   r/   r.   rÍ   rÐ   rÑ   rž   rÒ   Úlm_headsrÕ   rÖ   )rD   r6   rÇ   rE   s    ` €rF   r-   zBarkFineModel.__init__e  s¬  øø€ å‰Œ×Ò˜Ñ Ô Ð ØˆŒØ"$ˆÔÝ�t”{Ô0°4´;Ô3LÑLÑMÔMð 	dð 	dˆAØ>cÐUVÐYZÑUZÐ>cÐ>cÐ>cˆDÔ#Ð$:°Ð$:Ð$:Ð$:Ñ;Ð;õ $&¤=ØlÐlÐlÐlÕPUÐV\ÔVjÑPkÔPkÐlÑlÔlñ$
ô $
ˆÔ õ &(¤\°&Ô2CÀVÔEWÑ%XÔ%XˆÔ"å”J˜vœ~Ñ.Ô.ˆŒ	å”mØ_Ð_Ð_Ð_ÅeÈFÔL]ÑF^ÔF^Ð_Ñ_Ô_ñ
ô 
ˆŒõ  "œ|¨FÔ,>Ñ?Ô?ˆÔåœðð ð ð å˜vÔ3°VÔ5IÑJÔJðñ ô ñ
ô 
ˆŒð ',ˆÔ#Ø#Ô1ˆÔð 	�ŠÑÔÐÐÐrG   c                 ó   — | j         S rx   ©rw  rÙ   s    rF   rÝ   z"BarkFineModel.get_input_embeddingsˆ  s   € àÔ'Ð'rG   c                 ó   — || _         d S rx   rz  rß   s     rF   rá   z"BarkFineModel.set_input_embeddingsŒ  s   € à#1ˆÔ Ð Ð rG   c                 ó   — | j         S rx   ©rx  rÙ   s    rF   rÚ   z#BarkFineModel.get_output_embeddings�  s
   € àŒ}ÐrG   c                 ó   — || _         d S rx   r}  )rD   Únew_output_embeddingss     rF   Úset_output_embeddingsz#BarkFineModel.set_output_embeddings”  s   € à-ˆŒˆˆrG   NTc                 óÎ  ‡ ‡‡‡— ‰                       ¦   «         }t          j        ˆˆˆˆ fd„|D ¦   «         ¦  «        }‰                      |¦  «         |d         j        j        d         Š‰                      ¦   «         �V‰ j        j        sJ‰                      ¦   «         }t          j        ˆˆ fd„|D ¦   «         ¦  «        }‰  	                    |¦  «         ‰                       ¦   «         S )Nc                 ó@   •— g | ]}‰                      |‰‰‰¦  «        ‘ŒS rØ   )Ú_get_resized_embeddings)rÆ   Úold_embeddingsÚmean_resizingÚnew_num_tokensÚpad_to_multiple_ofrD   s     €€€€rF   rÈ   z:BarkFineModel._resize_token_embeddings.<locals>.<listcomp>›  s?   ø€ ð ð ð à"ð ×,Ò,¨^¸^ÐM_ÐanÑoÔoðð ð rG   r   c                 ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS rØ   )Ú_get_resized_lm_head)rÆ   Úold_lm_headr†  rD   s     €€rF   rÈ   z:BarkFineModel._resize_token_embeddings.<locals>.<listcomp>§  s)   ø€ ÐlÐlÐlÈK�×*Ò*¨;¸ÑGÔGÐlÐlÐlrG   )
rÝ   r   rÎ   rá   rø   r  rÚ   r6   Útie_word_embeddingsr€  )rD   r†  r‡  r…  Úold_embeddings_listÚnew_embeddings_listÚold_lm_head_listÚnew_lm_head_lists   ````    rF   Ú_resize_token_embeddingsz&BarkFineModel._resize_token_embeddings˜  s  øøøø€ Ø"×7Ò7Ñ9Ô9ÐÝ œmðð ð ð ð ð ð à&9ðñ ô ñ
ô 
Ðð 	×!Ò!Ð"5Ñ6Ô6Ð6Ø,¨QÔ/Ô6Ô<¸QÔ?ˆð ×%Ò%Ñ'Ô'Ð3¸D¼KÔ<[Ð3Ø#×9Ò9Ñ;Ô;ÐÝ!œ}ØlÐlÐlÐlÐlÐ[kÐlÑlÔlñ ô  Ðð ×&Ò&Ð'7Ñ8Ô8Ð8à×(Ò(Ñ*Ô*Ð*rG   r†  r‡  r…  r¬   c                 ód  — |                       |||¦  «        }|€|€|S |d         j        j        d         | j        _        |d         j        j        d         | j        _        |d         j        j        d         | _        |d         j        j        d         | _        |                      ¦   «          |S )a­  
        Resizes input token embeddings matrix of the model if `new_num_tokens != config.vocab_size`.

        Takes care of tying weights embeddings afterwards if the model class has a `tie_weights()` method.

        Arguments:
            new_num_tokens (`int`, *optional*):
                The number of new tokens in the embedding matrix. Increasing the size will add newly initialized
                vectors at the end. Reducing the size will remove vectors from the end. If not provided or `None`, just
                returns a pointer to the input tokens `torch.nn.Embedding` module of the model without doing anything.
            pad_to_multiple_of (`int`, *optional*):
                If set will pad the embedding matrix to a multiple of the provided value.

                This is especially useful to enable the use of Tensor Cores on NVIDIA hardware with compute capability
                `>= 7.5` (Volta), or on TPUs which benefit from having sequence lengths be a multiple of 128. For more
                details about this, or help on choosing the correct value for resizing, refer to this guide:
                https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#requirements-tc
            mean_resizing (`bool`):
                Whether to initialize the added embeddings from a multivariate normal distribution that has old embeddings' mean and
                covariance or to initialize them with a normal distribution that has a mean of zero and std equals `config.initializer_range`.

                Setting `mean_resizing` to `True` is useful when increasing the size of the embeddings of causal language models,
                where the generated tokens' probabilities won't be affected by the added embeddings because initializing the new embeddings with the
                old embeddings' mean will reduce the kl-divergence between the next token probability before and after adding the new embeddings.
                Refer to this article for more information: https://nlp.stanford.edu/~johnhew/vocab-expansion.html

        Return:
            `torch.nn.Embedding`: Pointer to the input tokens Embeddings Module of the model.
        Nr   )r�  rø   r  r6   rÓ   Ú
vocab_sizeÚtie_weights)rD   r†  r‡  r…  Úmodel_embedss        rF   Úresize_token_embeddingsz%BarkFineModel.resize_token_embeddings­  s«   € ðF ×4Ò4°^ÐEWÐYfÑgÔgˆØÐ!Ð&8Ð&@ØÐð )5°Q¬Ô(>Ô(DÀQÔ(GˆŒÔ%Ø!-¨a¤Ô!7Ô!=¸aÔ!@ˆŒÔØ!-¨a¤Ô!7Ô!=¸aÔ!@ˆÔØ& qœ/Ô0Ô6°qÔ9ˆŒð 	×ÒÑÔÐàÐrG   râ   rh   rã   rä   rå   rt   ræ   rç   c
                 óš  ‡— |�|n| j         j        }|�|n| j         j        }|	�|	n| j         j        }	d}|�t	          d¦  «        ‚|dk    rt          d¦  «        ‚‰�|�t          d¦  «        ‚‰€|€t          d¦  «        ‚‰�aˆfd„t          | j        ¦  «        D ¦   «         }t          j	        |d¬	¦  «        }|dd…dd…dd…d|d
z   …f          
                    d¬	¦  «        }|                     ¦   «         dd…         }|d
         }|                     | j        j        j        ¦  «        }|€Ft          j        d|t          j        | j        j        j        ¬¦  «        }|                     d¦  «        }|                     | j        j        j        ¦  «        }|                      |¦  «        }t'          | j         ||¬¦  «        }|                      ||z   ¦  «        }||                     d¦  «        fz   }|rdnd}|rdnd}t          | j        ¦  «        D ]1\  }}|r||fz   } ||||¬¦  «        }|d         }|r||d
         fz   }Œ2|                      |¦  «        }|                     |¦  «        }|r||fz   } | j        || j         j        z
           |¦  «        }|	st5          d„ d|||fD ¦   «         ¦  «        S t7          ||||¬¦  «        S )zÜ
        codebook_idx (`int`):
            Index of the codebook that will be predicted.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            NOT IMPLEMENTED YET.
        NzTraining is not implemented yetr   zRCannot predict 0th codebook - 0th codebook should be predicted by the coarse modelré   rê   c                 ól   •— g | ]0\  }} |‰d d …d d …|f         ¦  «                              d¦  «        ‘Œ1S )NrJ   ©rû   )rÆ   rÇ   rË   râ   s      €rF   rÈ   z)BarkFineModel.forward.<locals>.<listcomp>  sZ   ø€ ð ð ð á)�AÐ)ð #Ð" 9¨Q¨Q¨Q°°°°1¨WÔ#5Ñ6Ô6×@Ò@ÀÑDÔDðð ð rG   rJ   r[   r   rë   rì   rØ   )rh   rt   c              3   ó   K  — | ]}|®|V — Œ	d S rx   rØ   rî   s     rF   rð   z(BarkFineModel.forward.<locals>.<genexpr>E  s(   è è € ÐlÐl˜qÐ^_Ð^k˜Ð^kÐ^kÐ^kÐ^kÐlÐlrG   )rñ   rò   rq   ró   )r6   rt   ræ   rç   rô   r7   rü   rw  r>   r%  rW  rK   rd   rÌ   rø   r²   rù   rú   rû   r   rÍ   rÑ   rÒ   rB   rx  rv  rý   r   )rD   rn  râ   rh   rã   rä   rå   rt   ræ   rç   ru   rñ   rþ   rÿ   r  rq   r  r  r  rÇ   r  r©   rò   s     `                    rF   rv   zBarkFineModel.forwardß  sŒ  ø€ ð( 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàˆØÐÝ%Ð&GÑHÔHÐHà˜1ÒÐÝÐqÑrÔrÐràÐ  ]Ð%>ÝÐcÑdÔdÐdàÐ Ð!6ÝÐTÑUÔUÐUàÐ ð
ð ð ð å-6°tÔ7OÑ-PÔ-Pðñ ô ˆMõ "œI m¸Ð<Ñ<Ô<ˆMØ)¨!¨!¨!¨Q¨Q¨Q°°°Ð3E°\ÀAÑ5EÐ3EÐ*EÔF×JÒJÈrÐJÑRÔRˆMà#×(Ò(Ñ*Ô*¨3¨B¨3Ô/ˆØ  ”^ˆ
à%×(Ò(¨Ô)CÔ)JÔ)QÑRÔRˆàÐÝ œ<Ø�:¥U¤Z¸Ô8RÔ8YÔ8`ðñ ô ˆLð (×1Ò1°!Ñ4Ô4ˆLà#—’ tÔ'AÔ'HÔ'OÑPÔPˆØ×4Ò4°\ÑBÔBˆå2Ø”;Ø'Ø)ð
ñ 
ô 
ˆð Ÿ	š	 -°/Ñ"AÑBÔBˆØ" m×&8Ò&8¸Ñ&<Ô&<Ð%>Ñ>ˆà$5Ð?˜b˜b¸4ÐØ"6Ð@˜B˜B¸DÐå! $¤+Ñ.Ô.ð 	Jð 	J‰HˆAˆuØ#ð IØ$5¸Ð8HÑ$HÐ!à�eØØ-Ø"3ðñ ô ˆGð $ AœJˆMà ð JØ&9¸WÀQ¼Z¸MÑ&IÐ#øà×,Ò,¨]Ñ;Ô;ˆØ%×*Ò*¨<Ñ8Ô8ˆð  ð 	EØ 1°]Ð4DÑ DÐàH�”˜|¨d¬kÔ.GÑGÔHÈÑWÔWˆàð 	mÝÐlÐl T¨6Ð3DÐFYÐ$ZÐlÑlÔlÑlÔlÐlåØØØ+Ø*ð	
ñ 
ô 
ð 	
rG   rJ  rj  r  rK  Úfine_generation_configr;  r  c           	      óä  — |€t          d¦  «        ‚|€t          d¦  «        ‚|€t          d¦  «        ‚|                     d|j        ¦  «        }|j        }	|j        }
|                     |j        d         d|j        ¦  «        }t          j	        ||j
        z
  |¦  «        }|j        d         }|�)t          j        |d         j        d         |d¬	¦  «        }nd}|j        }t          j        |d|j        |z
  fd
|¦  «        }|�Ft          j        |dd…|	 d…dd…f         |gd¬	¦  «        }|dd…|	 d…dd…f         j        d         }nd}d}|j        d         |
k     r,|
|j        d         z
  }t          j        |ddd|fd
|¬¦  «        }|j        d         |
|z
  z
  |	z  }t#          t%          j        |¦  «        ¦  «        }t)          d|¦  «        dz   }t+          |¦  «        D �]¡}t-          ||	z  |j        d         |
z
  g¦  «        }t-          |||	z  z   |j        d         |	z
  g¦  «        }||z
  }|dd…|||
z   …dd…f         }t+          ||j        ¦  «        D ]ð}|                      ||¦  «        j        }|�|dk    r'|dd…|d…d|…f         }t          j        |d¦  «        }nw|dd…dd…d|…f         |z  }t          j        |d¬	¦  «        dd…||
…f         }|                     d|f¦  «        }t          j        |d¬¦  «                             |d¦  «        }|                     t          j        ¦  «        }||dd…|d…|f<   ~~Œñt+          ||j        ¦  «        D ]!}|dd…|d…|f         |dd…|||
|z
  z   …|f<   Œ"~�Œ£|                     dd¦  «        dd…dd…|d…f         }|dk    r|dd…dd…d| …f         }|j        d         |j        d         k    rt          d¦  «        ‚|S )ap  
        Generates fine acoustics tokens from input coarse acoustics tokens and an additional optional `Bark` speaker
        prompt.

        Args:
            coarse_output (`torch.Tensor` of shape (batch_size, seq_len)):
                Input coarse acoustics ids, i.e the output of `BarkCoarseModel.generate`.
            semantic_generation_config (`BarkSemanticGenerationConfig`):
                Generation config indicating how to generate the semantic tokens.
            coarse_generation_config (`BarkCoarseGenerationConfig`):
                Generation config indicating how to generate the coarse tokens.
            fine_generation_config (`BarkFineGenerationConfig`):
                Generation config indicating how to generate the fine tokens.
            codebook_size (`int`, *optional*, defaults to 1024):
                Codebook channel size, i.e. the size of the output vocabulary per codebook channel.
            history_prompt (`Optional[dict[str,torch.Tensor]]`, *optional*):
                Optional `Bark` speaker prompt.
        Returns:
            torch.LongTensor: Output fine acoustics tokens.
        Nr  rN  z+`fine_generation_config` has to be providedÚtemperaturer   rJ   Úfine_promptr[   r  r   )r  rg   rZ   )Únum_samplesr   rT   z-input and output should have the same seq_len) r7   r)  rœ  Úmax_fine_history_lengthÚmax_fine_input_lengthrB   r  rV  r>   Ú	remainderr'  r#  ÚTr\  r  Ún_fine_codebooksr%  r"  r@  r[  rX  rÏ   rb   rv   rò   Úargmaxrc   r?  Úmultinomialrd   Úint32rU   )rD   rj  r  rK  rš  r;  r  ru   rœ  rŸ  r   rŠ   Úx_fine_historyÚn_coarseÚ
fine_inputÚ	n_historyÚn_remove_from_endÚn_loopsÚn_outerÚ	start_idxÚstart_fill_idxÚrel_start_fill_idxÚinput_bufferÚn_innerrò   Úrelevant_logitsÚcodebook_predsÚprobss                               rF   r*  zBarkFineModel.generateN  s  € ð> &Ð-ÝÐNÑOÔOÐOà#Ð+ÝÐLÑMÔMÐMà!Ð)ÝÐJÑKÔKÐKð
 —j’j Ð0FÔ0RÑSÔSˆà"8Ô"PÐØ 6Ô LÐð &×*Ò*¨=Ô+>¸qÔ+AÀ2ÐG_ÔGrÑsÔsˆõ œ¨Ð8RÔ8fÑ(fÐhuÑvÔvˆØ"Ô(¨Ô+ˆ
àÐ%Ý"Ô4°^ÀMÔ5RÔ5TÐUYÔ5ZÐ\fÐlmÐnÑnÔnˆNˆNð "ˆNà+Ô>ˆõ ”UØØÐ&Ô7¸(ÑBÐCØØñ	
ô 
ˆ
ð Ð%Ýœ N°1°1°1Ð7NÐ6NÐ6OÐ6OÐQRÐQRÐQRÐ3RÔ$SÐU_Ð#`ÐfgÐhÑhÔhˆJð ' q q qÐ+BÐ*BÐ*CÐ*CÀQÀQÀQÐ'FÔGÔMÈaÔPˆIˆIàˆIàÐàÔ˜AÔÐ!6Ò6Ð6Ø 5¸
Ô8HÈÔ8KÑ KÐÝœ˜z¨A¨q°!Ð5FÐ+GÈjÐ`mÐnÑnÔnˆJð !Ô& qÔ)Ð-BÀYÑ-NÑOÐSjÑjˆÝ•b”g˜gÑ&Ô&Ñ'Ô'ˆÝ�a˜‘/”/ AÑ%ˆå˜W‘~”~ð 	ñ 	ˆGÝ˜WÐ'>Ñ>À
Ô@PÐQRÔ@SÐVkÑ@kÐlÑmÔmˆIå Ø˜WÐ'>Ñ>Ñ>À
Ô@PÐQRÔ@SÐVmÑ@mÐnñô ˆNð "0°)Ñ!;ÐØ% a a a¨°YÐAVÑ5VÐ)VÐXYÐXYÐXYÐ&YÔZˆLÝ  Ð+AÔ+RÑSÔSð +ð +�ØŸš g¨|Ñ<Ô<ÔC�ØÐ&¨+¸Ò*<Ð*<Ø&,¨Q¨Q¨QÐ0BÐ0CÐ0CÀ^ÀmÀ^Ð-SÔ&T�OÝ%*¤\°/À2Ñ%FÔ%F�N�Nà&,¨Q¨Q¨Q°°°°>°M°>Ð-AÔ&BÀ[Ñ&P�OåœI o¸2Ð>Ñ>Ô>¸q¸q¸qÐBTÐUjÐBjÐ?jÔk�Eà!ŸMšM¨2¨}Ð*=Ñ>Ô>�Eå%*Ô%6°uÈ!Ð%LÑ%LÔ%L×%QÒ%QÐR\Ð^`Ñ%aÔ%a�NØ!/×!2Ò!2µ5´;Ñ!?Ô!?�Ø@N�˜Q˜Q˜QÐ 2Ð 3Ð 3°WÐ<Ñ=Ø˜N˜Nõ ! Ð+AÔ+RÑSÔSð Bð B�ð !   Ð$6Ð$7Ð$7¸Ð!@ÔAð Ø�A�A�~¨Ð:OÐRdÑ:dÑ(eÐeÐgnÐnñð ð ‘à×)Ò)¨!¨QÑ/Ô/°°°°1°1°1°i°j°jÐ0@ÔAˆ
Ø˜qÒ Ð Ø# A A A q q qÐ*=Ð,=Ð+=Ð*=Ð$=Ô>ˆJàÔ˜BÔ =Ô#6°rÔ#:Ò:Ð:ÝÐLÑMÔMÐMàÐrG   ©NT)NNT)NNNNNNNN)NNNrJ  N)!rz   r{   r|   r3  r   r»   Úmain_input_namer-   rÝ   rá   rÚ   r€  r�  r"  rA   r   rÉ   r•  r   r>   r  r  rý   r   rv   Úno_gradr"   r    r!   r4  r5  r*  r}   r~   s   @rF   rl  rl  Z  s›  ø€ € € € € € ð )ÐØÐÐÑØ$€Oð!ð !ð !ð !ð !ðF(ð (ð (ð2ð 2ð 2ðð ð ð.ð .ð .ð+ð +ð +ð +ð. &*Ø)-Ø"ð	0ð 0à˜d™
ð0ð   $™Jð0ð ð	0ð
 
Œð0ð 0ð 0ð 0ðd ð *.Ø.2Ø,0Ø*.Ø-1Ø)-Ø,0Ø#'ðl
ð l
àðl
ð ”< $Ñ&ðl
ð œ tÑ+ð	l
ð
 ”l TÑ)ðl
ð Ô  4Ñ'ðl
ð ”| dÑ*ðl
ð   $™;ðl
ð # T™kðl
ð ˜D‘[ðl
ð 
ˆuŒ|Ô	˜~Ñ	-ðl
ð l
ð l
ñ „^ðl
ð\ €U„]�_„_ð KOØFJØ;?Ø!Ø9=ðFð Fà”|ðFð %AÀ4Ñ$GðFð #=¸tÑ"Cð	Fð
 !9ðFð ðFð ˜S %¤,Ð.Ô/°$Ñ6ðFð 
Ô	ðFð Fð Fñ „_ðFð Fð Fð Fð FrG   rl  a7  
    The full Bark model, a text-to-speech model composed of 4 sub-models:
    - [`BarkSemanticModel`] (also referred to as the 'text' model): a causal auto-regressive transformer model that
      takes
    as input tokenized text, and predicts semantic text tokens that capture the meaning of the text.
    - [`BarkCoarseModel`] (also referred to as the 'coarse acoustics' model), also a causal autoregressive transformer,
    that takes into input the results of the last model. It aims at regressing the first two audio codebooks necessary
    to `encodec`.
    - [`BarkFineModel`] (the 'fine acoustics' model), this time a non-causal autoencoder transformer, which iteratively
    predicts the last codebooks based on the sum of the previous codebooks embeddings.
    - having predicted all the codebook channels from the [`EncodecModel`], Bark uses it to decode the output audio
      array.

    It should be noted that each of the first three modules can support conditional speaker embeddings to condition the
    output sound according to specific predefined voice.
    c            
       ó  ‡ — e Zd ZU eed<   ˆ fd„Zedefd„¦   «         Ze	de
j        fˆ fd„¦   «         Z	 ddedz  fd	„Zdd
„Z e
j        ¦   «         	 	 	 dde
j        dz  deee
j        f         dz  dedz  de
j        fd„¦   «         Zˆ xZS )Ú	BarkModelr6   c                 óR  •— t          ¦   «                              |¦  «         t          |j        ¦  «        | _        t          |j        ¦  «        | _        t          |j	        ¦  «        | _
        t          j        |j        ¦  «        | _        || _        |                      ¦   «          d S rx   )r,   r-   r  Úsemantic_configr  r7  Úcoarse_acoustics_configr8  rl  Úfine_acoustics_configrm  r   Úfrom_configÚcodec_configÚcodec_modelr6   rÖ   r—   s     €rF   r-   zBarkModel.__init__í  s†   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å)¨&Ô*@ÑAÔAˆŒÝ /°Ô0NÑ OÔ OˆÔÝ+¨FÔ,HÑIÔIˆÔå$Ô0°Ô1DÑEÔEˆÔàˆŒà�ŠÑÔÐÐÐrG   r¬   c                 ó   — dS r¶  rØ   )Úclss    rF   Úcan_generatezBarkModel.can_generateú  s	   € ð ˆtrG   c                 ó2  •— t          | j        d¦  «        st          ¦   «         j        S | j                             ¦   «         D ]S}t          |d¦  «        rAt          |j        d¦  «        r,|j        j        � t          j        |j        j        ¦  «        c S ŒTdS )r®   r¯   r°   N)r±   r  r,   r²   r³   r¯   r°   r>   r´   s     €rF   r²   zBarkModel.device  s¢   ø€ õ �t”} jÑ1Ô1ð 	"Ý‘7”7”>Ð!Ø”m×+Ò+Ñ-Ô-ð 	Fð 	FˆFå˜ 
Ñ+Ô+ðFå˜FœOÐ-?Ñ@Ô@ðFð ”OÔ4Ð@å”| F¤OÔ$DÑEÔEÐEÐEÐEøð	Fð 	FrG   r   Úaccelerator_idNc                 ód  — t          ¦   «         rddlm} nt          d¦  «        ‚d}t	          ¦   «         r#t
          j                             ¦   «         j        }t          j	        |› d|› �¦  «        }t          t
          |¦  «        }| j	        j        dk    r)|                      d¦  «         |                     ¦   «           || j        j        |¦  «        \  | j        _        }d}| j        | j        | j        fD ]}	 ||	||¬¦  «        \  }}Œ|| _         || j        ||¬¦  «        \  }}|| _        dS )	aÁ  
        Offloads all sub-models to CPU using accelerate, reducing memory usage with a low impact on performance. This
        method moves one whole sub-model at a time to the accelerator when it is used, and the sub-model remains in accelerator until the next sub-model runs.

        Args:
            accelerator_id (`int`, *optional*, defaults to 0):
                accelerator id on which the sub-models will be loaded and offloaded.
        r   )Úcpu_offload_with_hookz1`enable_model_cpu_offload` requires `accelerate`.Úcudaú:ÚcpuN)Úprev_module_hook)r   Ú
acceleraterÈ  ÚImportErrorr   r>   ÚacceleratorÚcurrent_acceleratorÚtyper²   Úgetattrrd   Úempty_cacher  rË   r8  rm  Úfine_acoustics_hookrÁ  Úcodec_model_hook)
rD   rÆ  ru   rÈ  Údevice_typer²   Útorch_accelerator_modulerŒ   ÚhookÚcpu_offloaded_models
             rF   Úenable_cpu_offloadzBarkModel.enable_cpu_offload  sg  € õ #Ñ$Ô$ð 	SØ8Ð8Ð8Ð8Ð8Ð8Ð8åÐQÑRÔRÐRàˆÝ)Ñ+Ô+ð 	GÝÔ+×?Ò?ÑAÔAÔFˆKÝ” Ð?Ð?¨~Ð?Ð?Ñ@Ô@ˆå#*­5°+Ñ#>Ô#>Ð ØŒ;Ô˜uÒ$Ð$Ø�GŠG�E‰NŒNˆNØ$×0Ò0Ñ2Ô2Ð2ð /DÐ.CÀDÄMÔDdÐflÑ.mÔ.mÑ+ˆŒÔ(¨!àˆàŒMØÔ!ØÔð$
ð 	`ð 	`Ðð
 ,Ð+Ð,?ÀÐZ^Ð_Ñ_Ô_‰GˆAˆtˆtà#'ˆÔ à'Ð'¨Ô(8¸&ÐSWÐXÑXÔX‰ˆˆ4ð !%ˆÔÐÐrG   c                 ó&  ‡ — |                      dd¦  «        }‰ j        j                             |¦  «        }|�)d„ t	          ||¦  «        D ¦   «         }ˆ fd„|D ¦   «         }n/‰ j                             |¦  «        }|                     d¦  «        }|S )z:Turn quantized audio codes into audio array using encodec.r   r   Nc                 óV   — g | ]&\  }}|d d …d |…f                               d¦  «        ‘Œ'S )Nr   r˜  )rÆ   ÚsampleÚls      rF   rÈ   z*BarkModel.codec_decode.<locals>.<listcomp>L  s:   € ÐZÐZÐZ±+°6¸1�6˜!˜!˜!˜R˜a˜R˜%”=×*Ò*¨1Ñ-Ô-ÐZÐZÐZrG   c                 óh   •— g | ].}‰j                              |¦  «                             ¦   «         ‘Œ/S rØ   )rÁ  ÚdecoderÚsqueeze)rÆ   rÝ  rD   s     €rF   rÈ   z*BarkModel.codec_decode.<locals>.<listcomp>M  s6   ø€ ÐVÐVÐVÈ˜Ô)×1Ò1°&Ñ9Ô9×AÒAÑCÔCÐVÐVÐVrG   )rU   rÁ  Ú	quantizerÚdecodeÚziprà  rá  )rD   Úfine_outputr^  ÚembÚoutÚ	audio_arrs   `     rF   Úcodec_decodezBarkModel.codec_decodeB  s    ø€ ð "×+Ò+¨A¨qÑ1Ô1ˆØÔÔ(×/Ò/°Ñ<Ô<ˆàÐ%ð [ÐZÅÀSÈ.ÑAYÔAYÐZÑZÔZˆCØVÐVÐVÐVÐRUÐVÑVÔVˆIˆIàÔ"×*Ò*¨3Ñ/Ô/ˆCØŸš A™œˆIàÐrG   râ   r  rL  c           	      ó„  — t          di | j        j        ¤Ž}t          di | j        j        ¤Ž}t          di | j        j        ¤Ž}|                     dd¦  «        |                     dd¦  «        dœ}i }	i }
|                     ¦   «         D ]¶\  }}| 	                    d¦  «        r|t          d¦  «        d…         }|||<   Œ7| 	                    d¦  «        r|t          d¦  «        d…         }||	|<   Œi| 	                    d¦  «        r|t          d¦  «        d…         }||
|<   Œ›||vr|||<   ||	vr||	|<   ||
vr||
|<   Œ·d|v r|                     d¦  «          | j        j        |f||d	œ|¤Ž}d|	v r|	                     d¦  «          | j        j        |f|||| j        j        |d
œ|	¤Ž}d}|r|\  }}||j        z  }d|
v r|
                     d¦  «          | j        j        |f||||| j        j        dœ|
¤Ž}t#          | dd¦  «        �=| j                             ¦   «          | j                             | j        ¦  «        | _        |                      ||¦  «        }t#          | dd¦  «        �| j                             ¦   «          |r7d„ |D ¦   «         }t2          j        j                             |dd¬¦  «        }||fS |S )a^	  
        Generates audio from an input prompt and an additional optional `Bark` speaker prompt.

        Args:
            input_ids (`Optional[torch.Tensor]` of shape (batch_size, seq_len), *optional*):
                Input ids. Will be truncated up to 256 tokens. Note that the output audios will be as long as the
                longest generation among the batch.
            history_prompt (`Optional[dict[str,torch.Tensor]]`, *optional*):
                Optional `Bark` speaker prompt. Note that for now, this model takes only one speaker prompt per batch.
            kwargs (*optional*): Remaining dictionary of keyword arguments. Keyword arguments are of two types:

                - Without a prefix, they will be entered as `**kwargs` for the `generate` method of each sub-model.
                - With a *semantic_*, *coarse_*, *fine_* prefix, they will be input for the `generate` method of the
                semantic, coarse and fine respectively. It has the priority over the keywords without a prefix.

                This means you can, for example, specify a generation strategy for all sub-models except one.
            return_output_lengths (`bool`, *optional*):
                Whether or not to return the waveform lengths. Useful when batching.
        Returns:
            By default:
                - **audio_waveform** (`torch.Tensor` of shape (batch_size, seq_len)): Generated audio waveform.
            When `return_output_lengths=True`:
                Returns a tuple made of:
                - **audio_waveform** (`torch.Tensor` of shape (batch_size, seq_len)): Generated audio waveform.
                - **output_lengths** (`torch.Tensor` of shape (batch_size)): The length of each waveform in the batch
        Example:

        ```python
        >>> from transformers import AutoProcessor, BarkModel

        >>> processor = AutoProcessor.from_pretrained("suno/bark-small")
        >>> model = BarkModel.from_pretrained("suno/bark-small")

        >>> # To add a voice preset, you can pass `voice_preset` to `BarkProcessor.__call__(...)`
        >>> voice_preset = "v2/en_speaker_6"

        >>> inputs = processor("Hello, my dog is cute, I need him in my life", voice_preset=voice_preset)

        >>> audio_array = model.generate(**inputs, semantic_max_new_tokens=100)
        >>> audio_array = audio_array.cpu().numpy().squeeze()
        ```
        rh   Nr  )rh   r  Ú	semantic_Úcoarse_Úfine_r  )r  r  )r  r  rK  r;  rL  )r  r  rK  rš  r;  rÔ  rÕ  c                 ó,   — g | ]}t          |¦  «        ‘ŒS rØ   )r  )rÆ   rÝ  s     rF   rÈ   z&BarkModel.generate.<locals>.<listcomp>à  s   € Ð>Ð>Ð>¨f�c &™kœkÐ>Ð>Ð>rG   Tr   )Úbatch_firstÚpadding_valuerØ   )r"   r  r¼  r    r½  r!   r¾  ÚpopÚitemsÚ
startswithr  r  r*  r8  r;  rV  rm  rÒ  rÔ  ÚoffloadrÁ  rd   r²   ré  rÕ  r   ÚutilsÚrnnÚpad_sequence)rD   râ   r  rL  ru   r  rK  rš  Úkwargs_semanticÚkwargs_coarseÚkwargs_finerf   rg   r1  rj  r^  ÚoutputrÁ   s                     rF   r*  zBarkModel.generateT  s¨  € õh &BÐ%kÐ%kÀDÔDZÔDjÐ%kÐ%kÐ"Ý#=Ð#oÐ#oÀÔ@VÔ@nÐ#oÐ#oÐ Ý!9Ð!iÐ!i¸DÔ<RÔ<hÐ!iÐ!iÐð %ŸjšjÐ)9¸4Ñ@Ô@ØŸš K°Ñ6Ô6ð
ð 
ˆð
 ˆØˆØ Ÿ,š,™.œ.ð 	-ð 	-‰JˆC�Ø�~Š~˜kÑ*Ô*ð -Ø�#˜kÑ*Ô*Ð,Ð,Ô-�Ø',� Ñ$Ð$Ø—’ 	Ñ*Ô*ð -Ø�#˜i™.œ.Ð*Ð*Ô+�Ø%*�˜cÑ"Ð"Ø—’ Ñ(Ô(ð -Ø�#˜g™,œ,˜.˜.Ô)�Ø#(�˜CÑ Ð ð ˜oÐ-Ð-Ø+0�O CÑ(Ø˜mÐ+Ð+Ø).�M #Ñ&Ø˜kÐ)Ð)Ø',�K Ñ$øð  /Ð1Ð1Ø×ÒÐ 3Ñ4Ô4Ð4Ø0˜$œ-Ô0Øð
à)Ø'Að
ð 
ð ð	
ð 
ˆð  -Ð/Ð/Ø×ÒÐ1Ñ2Ô2Ð2Ø6˜Ô-Ô6Øð
à)Ø'AØ%=ØÔ0Ô>Ø"7ð
ð 
ð ð
ð 
ˆð ˆØ ð 	[Ø,9Ñ)ˆM˜>à+Ð/GÔ/ZÑZˆNð  +Ð-Ð-Ø�OŠOÐ/Ñ0Ô0Ð0Ø-�Ô$Ô-Øð
à)Ø'AØ%=Ø#9ØÔ0Ô>ð
ð 
ð ð
ð 
ˆõ �4Ð.°Ñ5Ô5ÐAð Ô$×,Ò,Ñ.Ô.Ð.Ø#Ô/×2Ò2°4´;Ñ?Ô?ˆDÔð ×!Ò! &¨.Ñ9Ô9ˆå�4Ð+¨TÑ2Ô2Ð>àÔ!×)Ò)Ñ+Ô+Ð+à ð 	)Ø>Ð>¸Ð>Ñ>Ô>ˆNÝ”H”L×-Ò-¨eÀÐUVÐ-ÑWÔWˆEØ˜.Ð(Ð(àˆrG   )r   rx   r2  )rz   r{   r|   r   r»   r-   ÚclassmethodrA   rÄ  r¾   r>   r²   r"  rÚ  ré  r¸  r  r4  r5  r  r*  r}   r~   s   @rF   rº  rº  Ø  sr  ø€ € € € € € ð& ÐÐÑðð ð ð ð ð ð˜Tð ð ð ñ „[ðð ðF˜œð Fð Fð Fð Fð Fñ „XðFð& &'ð,%ð ,%à˜d™
ð,%ð ,%ð ,%ð ,%ð\ð ð ð ð$ €U„]�_„_ð *.Ø9=Ø-1ð	Oð Oà”< $Ñ&ðOð ˜S %¤,Ð.Ô/°$Ñ6ðOð  $ d™{ð	Oð 
Ô	ðOð Oð Oñ „_ðOð Oð Oð Oð OrG   rº  )rl  r  r7  rº  r«   rÀ   )Er�   r^   Únumpyr@  r>   r   Útorch.nnr   r\  Ú r   r¹   Úcache_utilsr   r   Ú
generationr	   Úgeneration.logits_processr
   r   r   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   rõ  r   r   r   r   Úautor   Úconfiguration_barkr   r   r   r   r   Úgeneration_configuration_barkr    r!   r"   Úintegrations.flash_attentionr#   r$   Ú
get_loggerrz   rõ   ÚModuler&   r€   r¡   r‘   r›   r«   rÀ   r  r7  rl  rº  Ú__all__rØ   rG   rF   ú<module>r     sõ  ðð Ð à €€€à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $à &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð
 7Ð 6Ð 6Ð 6Ð 6Ð 6Ø hÐ hÐ hÐ hÐ hÐ hÐ hÐ hØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ÐÑÔð KØ@Ð@Ð@Ð@Ð@Ð@ØJÐJÐJÐJÐJÐJð 
ˆÔ	˜HÑ	%Ô	%€ðl)ð l)ð l)ð l)ð l)˜œ	ñ l)ô l)ð l)ð^I!ð I!ð I!ð I!ð I!Ð/ñ I!ô I!ð I!ðZ Ø0ðð Ð ðð ð ð ð ˆbŒiñ ô ð ð .7ð .7ð .7ð .7ð .7Ð*ñ .7ô .7ð .7ðb ð.ð .ð .ð .ð .˜/ñ .ô .ñ „ð.ðF\
ð \
ð \
ð \
ð \
Ð)¨?ñ \
ô \
ð \
ð~ €ððñ ô ðjð jð jð jð j˜ñ jô jñô ðjðZ €ððñ ô ðWð Wð Wð Wð W�oñ Wô Wñô ðWðt €ððñ ô ðuð uð uð uð uÐ'ñ uô uñô ðuðp €ððñ ô ð$zð zð zð zð zÐ# _ñ zô zñ%ô ð$zðzð ð €€€rG   