Ë
    ÛÓ^j(‰  ã                   ó  — d dl mZ d dl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 ddlmZmZ dd	l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 ddlm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0  ejb                  e2«      Z3 ed¬«      e G d„ de«      «       «       Z4 G d„ de)«      Z5 G d„ de*«      Z6 G d„ de'«      Z7 G d„ d e$«      Z8 G d!„ d"e%«      Z9 ed#¬«      e G d$„ d%e«      «       «       Z:e G d&„ d'e(e:«      «       Z; G d(„ d)ejx                  «      Z= ed*¬«       G d+„ d,e&e«      «       Z> G d-„ d.ejx                  «      Z?e G d/„ d0e(«      «       Z@ ed1¬«       G d2„ d3e:e0«      «       ZAg d4¢ZBy)5é    )Ú	dataclassNé   )Úinitialization)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚPreTrainedModel)ÚUnpack)ÚModelOutputÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úis_torchdynamo_compiling)Úcapture_outputsé   )Ú	AutoModel)ÚLlamaAttentionÚLlamaDecoderLayerÚLlamaForCausalLMÚLlamaMLPÚ
LlamaModelÚLlamaRMSNormÚLlamaRotaryEmbeddingÚTransformersKwargsé   )Ú	CsmConfigÚCsmDepthDecoderConfig)ÚCsmGenerationMixinz:
    Base class for the model autoregressive outputs.
    )Úcustom_introc                   óÊ  — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
dz  ed<   dZeej                  df   dz  ed<   dZeej                  df   dz  ed<   dZej                  dz  ed	<   dZej                  dz  ed
<   dZe
dz  ed<   dZeej                  df   dz  ed<   dZeej                  df   dz  ed<   dZej                  dz  ed<   y)ÚCsmOutputWithPasta�	  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

        Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see
        `past_key_values` input) to speed up sequential decoding.
    depth_decoder_loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction) of the depth decoder model.
    depth_decoder_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the depth decoder (scores for each vocabulary token before SoftMax).
    depth_decoder_past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).
    depth_decoder_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.

        Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
    depth_decoder_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`.
    backbone_loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction) of the backbone model.
    NÚlossÚlogitsÚpast_key_values.Úhidden_statesÚ
attentionsÚdepth_decoder_lossÚdepth_decoder_logitsÚdepth_decoder_past_key_valuesÚdepth_decoder_hidden_statesÚdepth_decoder_attentionsÚbackbone_loss)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   ÚtorchÚFloatTensorÚ__annotations__r'   r(   r   r)   Útupler*   r+   r,   r-   r.   r/   r0   © ó    ún/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/csm/modular_csm.pyr%   r%   1   s  … ñð8 &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø$(€O�U˜T‘\Ó(Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ó;Ø37Ð˜×)Ñ)¨DÑ0Ó7Ø59Ð˜%×+Ñ+¨dÑ2Ó9Ø26Ð! 5¨4¡<Ó6ØHLÐ  u×'8Ñ'8¸#Ð'=Ñ!>ÀÑ!EÓLØEIÐ˜e E×$5Ñ$5°sÐ$:Ñ;¸dÑBÓIØ.2€M�5×$Ñ$ tÑ+Ô2r:   r%   c                   ó   — e Zd Zy)Ú
CsmRMSNormN©r1   r2   r3   r9   r:   r;   r=   r=   b   ó   „ Ør:   r=   c                   ó   — e Zd Zy)ÚCsmRotaryEmbeddingNr>   r9   r:   r;   rA   rA   f   r?   r:   rA   c                   ó   — e Zd Zy)ÚCsmMLPNr>   r9   r:   r;   rC   rC   j   r?   r:   rC   c                   ó   — e Zd Zy)ÚCsmAttentionNr>   r9   r:   r;   rE   rE   n   r?   r:   rE   c                   ó   — e Zd Zy)ÚCsmDecoderLayerNr>   r9   r:   r;   rG   rG   r   r?   r:   rG   z[
    The bare Csm Model outputting raw hidden-states without any specific head on top.
    c                   ó„   ‡ — e Zd ZU eed<   dZdZdZdgZdgZ	dZ
dZdZdZeedœZ ej$                  «       ˆ fd„«       Zˆ xZS )	ÚCsmPreTrainedModelÚconfigÚmodel)ÚaudioÚtextTrG   r(   )r)   r*   c                 óÎ  •— t         ‰| �  |«       t        |t        «      rV|j                  }t        |dz
  «      D ]8  }t        j                  |j                  d| j                  j                  ¬«       Œ: y t        |t        «      r_t        j                  |j                  t        j                  | j                  j                  «      | j                  j                   z  «       y y )Nr   g        )ÚmeanÚstd)ÚsuperÚ_init_weightsÚ
isinstanceÚCsmCodebooksHeadÚnum_codebooksÚrangeÚinitÚnormal_ÚweightrJ   Úinitializer_rangeÚCsmBackboneModelEmbeddingsÚcopy_Úaudio_tokens_offsetsr5   ÚarangeÚ
vocab_size)ÚselfÚmodulerU   ÚiÚ	__class__s       €r;   rR   z CsmPreTrainedModel._init_weights�   s¨   ø€ ä‰Ñ˜fÔ%Ü�fÔ.Ô/Ø"×0Ñ0ˆMÜ˜=¨1Ñ,Ó-ò Y�Ü—‘˜VŸ]™]°¸$¿+¹+×:WÑ:WÖXñYä˜Ô :Ô;Ü�J‰J�v×2Ñ2´E·L±LÀÇÁ×AZÑAZÓ4[Ð^b×^iÑ^i×^tÑ^tÑ4tÕuð <r:   )r1   r2   r3   r    r7   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphÚ_supports_attention_backendrG   rE   Ú_can_record_outputsr5   Úno_gradrR   Ú__classcell__©rc   s   @r;   rI   rI   v   st   ø… ð ÓØÐØ(ÐØ&*Ð#Ø*Ð+ÐØ#4Ð"5ÐØÐØ€Nð "ÐØ"&Ðà(Ø"ñÐð
 €U‡]�]ƒ_óvó ôvr:   rI   c                   ó  ‡ — e Zd ZU eed<   ˆ fd„Zeee	 	 	 	 	 	 	 d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	j                  dz  d
edz  dee   deez  fd„«       «       «       Zˆ xZS )ÚCsmDepthDecoderModelrJ   c                 óþ   •— t         ‰| �  |«       t        j                  |j                  |j
                  z  |j                  «      | _        t        j                  |j                  |j                  d¬«      | _
        y ©NF)Úbias)rQ   Ú__init__ÚnnÚ	EmbeddingrU   r_   Úbackbone_hidden_sizeÚembed_tokensÚLinearÚhidden_sizeÚinputs_embeds_projector©r`   rJ   rc   s     €r;   rv   zCsmDepthDecoderModel.__init__ž   s]   ø€ Ü‰Ñ˜Ô ÜŸL™L¨&×*>Ñ*>À×ARÑARÑ*RÐU[×UpÑUpÓqˆÔÜ')§y¡y°×1LÑ1LÈf×N`ÑN`ÐglÔ'mˆÕ$r:   NÚ	input_idsÚbackbone_last_hidden_stateÚattention_maskÚposition_idsr(   Úinputs_embedsÚ	use_cacheÚkwargsÚreturnc           
      ó¼  — |�!t        «       st        j                  d«       d}|du |duz  rt        d«      ‚|r|€t	        | j
                  ¬«      }|�|j                  «       nd}	|�|j                  d   n|j                  d   }
|�|j                  n|j                  }t        j                  |	|	|
z   |¬«      }|€rt        j                  |dz
  d¬«      }|| j                  z  }| j                  ||z   «      }|d   dk(  }|�
||dd…df<   n!t        «       s|rt        j                  d	«       | j                  |«      }t!        | j
                  ||||¬
«      }|}|j#                  d«      }| j%                  ||¬«      }| j&                  d| j
                  j(                   D ]  } ||f|||||dœ|¤Ž}Œ | j+                  |«      }t-        ||r|¬«      S d¬«      S )aJ  
        backbone_last_hidden_state (`torch.FloatTensor` of shape `(batch_size, backbone_hidden_size)`, *optional*):
            The last hidden state of the backbone model. Such input is required when the first codebook token (the one generated by the backbone model)
            is provided in the `input_ids` argument.
        NzÕCustom `position_ids` were provided but will be ignored. CSM depth decoder automatically determines position_ids and as it requires them to be identical across the batch, the provided position_ids will be ignored.z;You must specify exactly one of input_ids or inputs_embeds.)rJ   r   r   ©Údevice)ÚminzvWhen the first codebook token is provided, `backbone_last_hidden_state` should also be provided for correct inference.)rJ   rƒ   r�   r(   r‚   )r‚   )r�   r‚   r(   r„   Úposition_embeddings)Úlast_hidden_stater(   )r   ÚloggerÚwarning_onceÚ
ValueErrorr   rJ   Úget_seq_lengthÚshaper‰   r5   r^   Úclampr_   rz   Úwarningr}   r	   Ú	unsqueezeÚ
rotary_embÚlayersÚnum_hidden_layersÚnormr
   )r`   r   r€   r�   r‚   r(   rƒ   r„   r…   Úpast_seen_tokensÚinputs_seq_lengthr‰   Úcodebook_idxsÚoffsetÚinput_ids_are_first_codebookÚcausal_maskr)   r‹   Údecoder_layers                      r;   ÚforwardzCsmDepthDecoderModel.forward£   s'  € ð& Ð#Ô,DÔ,FÜ×Ñðwôð  ˆLØ˜Ð -°tÐ";Ò<ÜÐZÓ[Ð[á˜Ð0Ü*°$·+±+Ô>ˆOà?NÐ?Z˜?×9Ñ9Ô;Ð`aÐØ6CÐ6O˜M×/Ñ/°Ò2ÐU^×UdÑUdÐefÑUgÐØ)6Ð)B�×%Ò%È	×HXÑHXˆÜ—|‘|Ð$4Ð6FÐIZÑ6ZÐciÔjˆàÐ Ü!ŸK™K¨°qÑ(8¸aÔ@ˆMØ" T§_¡_Ñ4ˆFØ ×-Ñ-¨i¸&Ñ.@ÓAˆMà+7¸©?¸aÑ+?Ð(Ø)Ð5Ø&@�ša ˜dÒ#ä/Ô1Ñ6RÜ—N‘Nð Qôð ×4Ñ4°]ÓCˆä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆð $×-Ñ-¨aÓ0ˆØ"Ÿo™o¨mÈ,˜oÓWÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò 		ˆMÙ)Øðà*Ø)Ø /Ø#Ø$7ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆÜ&Ø+Ù/8˜Oô
ð 	
à>Bô
ð 	
r:   )NNNNNNN)r1   r2   r3   r!   r7   rv   r   r   r   r5   Ú
LongTensorr6   ÚTensorr   Úboolr   r   r8   r
   r    ro   rp   s   @r;   rr   rr   š   sö   ø… à!Ó!ônð
  ØØð .2Ø?CØ.2Ø04Ø(,Ø26Ø!%ñN
à×#Ñ# dÑ*ðN
ð %*×$5Ñ$5¸Ñ$<ðN
ð Ÿ™ tÑ+ð	N
ð
 ×&Ñ&¨Ñ-ðN
ð  ™ðN
ð ×(Ñ(¨4Ñ/ðN
ð ˜$‘;ðN
ð Ð+Ñ,ðN
ð 
Ð(Ñ	(òN
ó ó ó  ôN
r:   rr   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )rT   c                 ó¨   •— t         ‰| �  «        || _        t        j                  t        j                  | j                  dz
  ||«      «      | _        y )Nr   )rQ   rv   rU   rw   Ú	Parameterr5   ÚemptyrY   )r`   r|   rU   r_   rc   s       €r;   rv   zCsmCodebooksHead.__init__ø   s?   ø€ Ü‰ÑÔØ*ˆÔÜ—l‘l¤5§;¡;¨t×/AÑ/AÀAÑ/EÀ{ÐT^Ó#_Ó`ˆ�r:   c           
      ó  — |dz
  }| j                   |   }t        |j                  d   «      D �cg c]9  }t        j                  j                  |d d …|d d …f   ||   j                  «      ‘Œ; }}t        j                  |d¬«      }|S c c}w )Nr   r   ©Údim)	rY   rV   r‘   rw   Ú
functionalÚlinearÚTr5   Ústack)r`   r)   Úcodebook_indicesÚcodebook_weightÚcodebook_idxs        r;   r    zCsmCodebooksHead.forwardý   s‘   € à+¨aÑ/ÐØŸ+™+Ð&6Ñ7ˆô !& o×&;Ñ&;¸AÑ&>Ó ?ö
àô �M‰M× Ñ  ªq°,ÂÐ/AÑ!BÀOÐT`ÑDa×DcÑDcÕdð
ˆð 
ô Ÿ™ M°qÔ9ˆàÐùò
s   ¯>B©N©r1   r2   r3   rv   r    ro   rp   s   @r;   rT   rT   ÷   s   ø„ ôa÷
r:   rT   a$  
    The CsmDepthDecoder Model transformer, with a [`CsmCodebooksHead`] on top,
    which can be seen a position-specific language modeling head, allowing to use a different linear layer for each codebook
    (e.g. position 0 is the first codebook and uses the first codebook head, etc.)
    c                   óÞ  ‡ — e Zd ZdZdZdZˆ fd„Z	 	 	 	 	 ddej                  de	dz  de
dz  dej                  dz  dej                  dz  dedz  fˆ fd	„Zee	 	 	 	 	 	 	 	 	 d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j                  dz  dej                  dz  dedz  de	ej                   z  dee   deez  fd„«       «       Zˆ xZS )ÚCsmDepthDecoderForCausalLMNc                 ó¨   •— t         ‰| �  |«       | `t        |j                  |j
                  |j                  «      | _        t        |«      | _	        y r²   )
rQ   rv   Úlm_headrT   r|   rU   r_   Úcodebooks_headrr   rK   r~   s     €r;   rv   z#CsmDepthDecoderForCausalLM.__init__  sE   ø€ Ü‰Ñ˜Ô ØˆLÜ.¨v×/AÑ/AÀ6×CWÑCWÐY_×YjÑYjÓkˆÔÜ)¨&Ó1ˆ�
r:   r   Únext_sequence_lengthr(   r�   rƒ   Úis_first_iterationc                 óx   •— t        ‰	| �  |||||fi |¤Ž}|s|j                  d«       |j                  d«       |S )Nr€   r‚   )rQ   Úprepare_inputs_for_generationÚpop)
r`   r   r¹   r(   r�   rƒ   rº   r…   Úmodel_inputsrc   s
            €r;   r¼   z8CsmDepthDecoderForCausalLM.prepare_inputs_for_generation  sR   ø€ ô ‘wÑ<ØÐ+¨_¸nÈmñ
Ø_eñ
ˆñ "Ø×ÑÐ9Ô:ð 	×Ñ˜Ô(àÐr:   r€   r‚   Úlabelsr„   Úlogits_to_keepr…   r†   c
                 óº  — |�|j                  «       nd}|�|j                  d   n|j                  d   }|�|j                  n|j                  }t        j                  ||¬«      |z   } | j
                  d	|||||||dœ|
¤Ž}|d   }t        |	t        «      r |	dk(  rt        dd«      }nt        |	 d«      }n|	}| j                  |dd…|dd…f   ||   «      }|j                  «       }d}|�B|ddd…f   j                  «       } | j                  d	|d| j                  j                  |dœ|
¤Ž}t        |||j                  |j                   |j"                  ¬«      S )
aî  
        backbone_last_hidden_state (`torch.FloatTensor` of shape `(batch_size, backbone_hidden_size)`, *optional*):
            The last hidden state of the backbone model. Such input is required when the first codebook token (the one generated by the backbone model)
            is provided in the `input_ids` argument.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.
        Nr   r   rˆ   )r   r€   r�   r‚   r(   rƒ   r„   .)r'   r¿   r_   Úshift_labels)r&   r'   r(   r)   r*   r9   )r�   r‘   r‰   r5   r^   rK   rS   ÚintÚslicer¸   Ú
contiguousÚloss_functionrJ   r_   r   r(   r)   r*   )r`   r   r€   r�   r‚   r(   rƒ   r¿   r„   rÀ   r…   r™   Úseq_lenr‰   r¯   Úoutputsr)   Úslice_indicesr'   r&   rÂ   s                        r;   r    z"CsmDepthDecoderForCausalLM.forward3  s•  € ð0 @OÐ?Z˜?×9Ñ9Ô;Ð`aÐØ,9Ð,E�-×%Ñ% aÒ(È9Ï?É?Ð[\ÑK]ˆØ)6Ð)B�×%Ò%È	×HXÑHXˆÜ Ÿ<™<¨¸Ô?ÐBRÑRÐà�$—*‘*ð 	
ØØ'AØ)Ø%Ø+Ø'Øñ	
ð ñ	
ˆð   ™
ˆä�n¤cÔ*Ø Ò"ä % a¨£‘ä % ~ o°tÓ <‘à*ˆMà×$Ñ$ ]²1°mÂQÐ3FÑ%GÐIYÐZgÑIhÓiˆØ×"Ñ"Ó$ˆàˆØÐØ! # q¡r '™?×5Ñ5Ó7ˆLØ%�4×%Ñ%ð Ø d°t·{±{×7MÑ7MÐ\hñØlrñˆDô &ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r:   )NNNNF)	NNNNNNNNr   )r1   r2   r3   Ú_tied_weights_keysÚ_tp_planÚ_pp_planrv   r5   r¡   rÃ   r   r6   r£   r¼   r   r   r¢   r   r   r8   r   r    ro   rp   s   @r;   rµ   rµ     s¡  ø„ ð ÐØ€HØ€Hô2ð ,0Ø(,Ø26Ø26Ø*/ñà×#Ñ#ðð " D™jðð  ™ð	ð
 ×(Ñ(¨4Ñ/ðð ×(Ñ(¨4Ñ/ðð ! 4™Kõð, Øð .2Ø?CØ.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñA
à×#Ñ# dÑ*ðA
ð %*×$5Ñ$5¸Ñ$<ðA
ð Ÿ™ tÑ+ð	A
ð
 ×&Ñ&¨Ñ-ðA
ð  ™ðA
ð ×(Ñ(¨4Ñ/ðA
ð × Ñ  4Ñ'ðA
ð ˜$‘;ðA
ð ˜eŸl™lÑ*ðA
ð Ð+Ñ,ðA
ð 
Ð'Ñ	'òA
ó ó ôA
r:   rµ   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r[   c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  z  |j                  «      | _        | j                  dt        j                  |j                  «      |j
                  z  d¬«       y )Nr]   F)Ú
persistent)rQ   rv   rw   rx   rU   Úcodebook_sizer|   Úembed_audio_tokensÚregister_bufferr5   r^   r~   s     €r;   rv   z#CsmBackboneModelEmbeddings.__init__z  sn   ø€ Ü‰ÑÔÜ"$§,¡,°×0DÑ0DÀv×G[ÑG[Ñ0[Ð^d×^pÑ^pÓ"qˆÔØ×ÑØ"¤E§L¡L°×1EÑ1EÓ$FÈ×I]ÑI]Ñ$]Ðjoð 	õ 	
r:   c                 óf   — | j                  || j                  z   «      }|j                  d¬«      }|S )Nr   r©   )rÑ   r]   Úsum)r`   r   rƒ   s      r;   r    z"CsmBackboneModelEmbeddings.forward�  s6   € Ø×/Ñ/°	¸D×<UÑ<UÑ0UÓVˆØ%×)Ñ)¨aÐ)Ó0ˆØÐr:   r³   rp   s   @r;   r[   r[   y  s   ø„ ô
ör:   r[   c                   óF   ‡ — e Zd Zˆ fd„Zeeeˆ fd„«       «       «       Zˆ xZS )ÚCsmBackboneModelc                 óD   •— t         ‰| �  |«       t        |«      | _        y r²   )rQ   rv   r[   rz   r~   s     €r;   rv   zCsmBackboneModel.__init__‰  s   ø€ Ü‰Ñ˜Ô Ü6°vÓ>ˆÕr:   c                 ó"   •— t        ‰| �  di |¤ŽS )a&  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length, num_codebooks) or (batch_size, sequence_length)`):
            1. (batch_size, sequence_length): corresponds to the input sequence prepared with the processor from the text prompt. Such input
            requires `input_values` to be provided so that audio can be encoded in codebook tokens and then merged with the text tokens.

            2. (batch_size, sequence_length, num_codebooks): codebook tokens generated during the autoregressive decoding. Such input is not meant to be used by end users.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        r9   )rQ   r    )r`   Úsuper_kwargsrc   s     €r;   r    zCsmBackboneModel.forward�  s   ø€ ô  ‰w‰Ñ. Ñ.Ð.r:   )	r1   r2   r3   rv   r   r   r   r    ro   rp   s   @r;   rÖ   rÖ   ‡  s,   ø„ ô?ð  ØØó/ó ó ó  ô/r:   rÖ   zË
    The Csm model consists of two llama-like auto-regressive transformer models: a backbone model that predicts the first codebook token and a depth decoder that predicts the other codebook tokens.
    c                   óÀ  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Zeˆ fd„«       Zˆ fd„Z		 	 	 	 d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  f
d„Z	 	 	 	 dd	e
j                  dedz  dedz  de
j                  dz  de
j                   dz  f
ˆ fd„Zee	 	 	 	 	 	 	 	 	 	 d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
j                   dz  de
j                  dz  dedz  dee
j                  z  dee   deez  fd„«       «       Zˆ xZS )ÚCsmForConditionalGenerationz5backbone_model.embed_tokens.embed_audio_tokens.weightz'depth_decoder.model.embed_tokens.weightc                 óê  •— t         ‰| �  |«       |j                  | _        t        j                  |j
                  |j                  d¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |«      | _        t        j                  |j                  «      | _        t!        j"                  |j$                  «      | _        | j)                  «        y rt   )rQ   rv   r_   rw   r{   r|   r·   rx   Útext_vocab_sizeÚembed_text_tokensrÖ   Ú_from_configÚbackbone_modelrµ   Údepth_decoder_configÚdepth_decoderr   Úfrom_configÚcodec_configÚcodec_modelÚ	post_initr~   s     €r;   rv   z$CsmForConditionalGeneration.__init__ª  s«   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒÜ!#§¡¨f×.DÑ.DÀf×FXÑFXÓ!YˆÔÜ.×;Ñ;¸FÓCˆÔÜ7×DÑDÀV×E`ÑE`ÓaˆÔÜ$×0Ñ0°×1DÑ1DÓEˆÔØ�‰Õr:   c                 ó.   — | j                   j                  S r²   ©rà   rz   )r`   s    r;   Úget_input_embeddingsz0CsmForConditionalGeneration.get_input_embeddings´  s   € Ø×"Ñ"×/Ñ/Ð/r:   c                 ó&   — || j                   _        y r²   rè   )r`   Úvalues     r;   Úset_input_embeddingsz0CsmForConditionalGeneration.set_input_embeddings·  s   € Ø+0ˆ×ÑÕ(r:   c                 óÞ  •— |j                  dd«      rt        ‰
| �  |i |¤Ž\  }}nt        ‰
| �  |i |¤Ž}d}t        |«      }t	        |j
                  «      j                  «       D ��ci c]  \  }}|j                  |«      r||d  |“Œ }	}}t	        |j                  j
                  «      j                  ddi|	¥«       |	D ]  }t        |j
                  ||z   «       Œ d|v r|fS |S c c}}w )NÚoutput_loading_infoFÚdepth_decoder_Ú_from_model_config)ÚgetrQ   Úfrom_pretrainedÚlenÚvarsÚgeneration_configÚitemsÚ
startswithrâ   ÚupdateÚdelattr)ÚclsÚargsr…   rK   Úloading_infoÚprefixÚ
prefix_lenÚattrrë   Údepth_decoder_attrsrc   s             €r;   rò   z+CsmForConditionalGeneration.from_pretrainedº  s  ø€ à�:‰:Ð+¨UÔ3Ü"'¡'Ñ"9¸4Ð"JÀ6Ñ"JÑˆE‘<ä‘GÑ+¨TÐ<°VÑ<ˆEð "ˆÜ˜“[ˆ
ô  $ E×$;Ñ$;Ó<×BÑBÓD÷
á��eØ�‰˜vÔ&ð ��Ð˜uÑ$ð
Ðñ 
ô 	ˆU× Ñ ×2Ñ2Ó3×:Ñ:Ð<PÐRWÐ;oÐ[nÐ;oÔpð (ò 	<ˆDÜ�E×+Ñ+¨V°d©]Õ;ð	<ð ! FÑ*Ø˜,Ð&Ð&àˆLùó
s   Á)!C)c                 óø   •— d}| j                   j                  j                  «       }|j                  dd «       |j	                  «       D ]  \  }}t        | j                  ||z   |«       Œ! t        ‰| �  |i |¤Ž y )Nrï   Útransformers_version)râ   rõ   Úto_diff_dictr½   rö   ÚsetattrrQ   Úsave_pretrained)r`   rû   r…   rý   r   rÿ   rë   rc   s          €r;   r  z+CsmForConditionalGeneration.save_pretrainedÕ  s|   ø€ à!ˆØ"×0Ñ0×BÑB×OÑOÓQÐØ×ÑÐ 6¸Ô=Ø.×4Ñ4Ó6ò 	B‰KˆD�%Ü�D×*Ñ*¨F°T©M¸5ÕAð	Bô 	‰Ñ Ð0¨Ó0r:   Nr   Úinput_valuesÚinput_values_cutoffsr¿   r†   c                 ó  — | j                  |«      }|��Ut        j                  j                  |d«      }||dk\     j	                  «       }||dkD     }t        j                  |j                  «       |j                  ¬«      j                  t        |«      d«      }||j                  d«      k  }t        j                  «       5  g }t        ||«      D ]�  \  }	}
|
|
dk\     }
t        |
j                  d   dz
  «      D ]r  }|
|   }|
|dz      }|	d||…f   }| j                   j#                  |j                  d«      «      }|j$                  j'                  dd«      }|j)                  |d   «       Œt ŒŸ t        d„ |D «       «      }t        j*                  |D �cg c]6  }t        j                  j                  |ddd||j                  d   z
  f«      ‘Œ8 c}«      }| j                   j-                  |«      }ddd«       | j.                  j0                  }||k(  }| j2                  j5                  «      }|   ||<   t        j6                  dd| j.                  j8                  f|j                  t
        j:                  ¬	«      | j.                  j<                  z  }| j2                  j5                  |«      j?                  d«      }|| j.                  j@                  k(  }|jC                  |jE                  «       d«      ||<   |�j|j                  d«      jC                  dd| j.                  j8                  «      }||   ||<   |||<   |d
k(  jG                  d¬«      }d||d   |d   dd…f<   |}||dœS c c}w # 1 sw Y   �Œ‚xY w)a˜  
        Merges the input_ids and input_values to produce a single inputs_embeds tensor:
        1 - Infers the codec model on the input_values to retrieve codebook token.
        2 - Embeds codebook tokens and places them at the correct positions in the inputs_embeds tensor.
        3 - If labels are provided, expands them to match codebook dimensions and position the target codebook tokens in the inputs_embeds tensor.

        Args:
            input_ids (`torch.Tensor` of shape `(batch_size, sequence_length)`):
                The input ids to embed.
            input_values (`torch.Tensor` of shape `(batch_size, channels, audio_sequence_length)`):
                The audio input values to embed.
            input_values_cutoffs (`torch.Tensor` of shape `(batch_size, max_num_audio)`):
                The cutoffs of the audio input values relative to its batch index, padded with -1 when no audio.
        N©r   r   r   rˆ   éÿÿÿÿr   .c              3   ó:   K  — | ]  }|j                   d    –— Œ y­w)r   N)r‘   )Ú.0Úels     r;   ú	<genexpr>zQCsmForConditionalGeneration._merge_input_ids_with_input_values.<locals>.<genexpr>  s   è ø€ Ò&O°r r§x¡x°¥{Ñ&Oùs   ‚)r‰   Údtypei›ÿÿÿT©Úas_tupleéœÿÿÿ)rƒ   r¿   )$rÞ   rw   r«   ÚpadÚdiffr5   r^   Úmaxr‰   Úexpandró   r”   rn   ÚziprV   r‘   rå   ÚencodeÚaudio_codesÚ	transposeÚappendr®   Úget_audio_codes_maskrJ   Úaudio_token_idrà   rz   ÚonesrU   ÚlongÚcodebook_eos_token_idÚsqueezeÚaudio_eos_token_idÚrepeatrÔ   Únonzero)r`   r   r  r  r¿   rƒ   Úaudio_lengthsÚinput_values_maskÚaudio_tokens_listÚbatch_input_valuesÚbatch_input_values_cutoffsrb   Ú	start_idxÚend_idxÚaudio_batchÚcodec_outputsÚcodebook_idsÚmax_audio_framesr  Úbatched_audio_token_idsÚaudio_codes_maskr  Úaudio_token_maskÚaudio_embedsÚaudio_eos_frame_idsÚaudio_eos_embedsÚaudio_eos_token_maskÚlabels_expandedÚ depth_decoder_ignore_frames_idxss                                r;   Ú"_merge_input_ids_with_input_valuesz>CsmForConditionalGeneration._merge_input_ids_with_input_valuesß  s   € ð* ×.Ñ.¨yÓ9ˆàÑ#ä#%§=¡=×#4Ñ#4Ð5IÈ6Ó#RÐ Ø0Ð1EÈÑ1JÑK×PÑPÓRˆMØ)¨-¸!Ñ*;Ñ<ˆMÜ %§¡Ð-A×-EÑ-EÓ-GÐP\×PcÑPcÔ d× kÑ kÜ�MÓ" Bó!Ðð !2°M×4KÑ4KÈAÓ4NÑ NÐô
 —‘“ñ \Ø$&Ð!ÜFIÈ,ÐXlÓFmò BÑBÐ&Ð(BØ1KÐLfÐjkÑLkÑ1lÐ.Ü"Ð#=×#CÑ#CÀAÑ#FÈÑ#JÓKò B˜Ø$>¸qÑ$A˜	Ø"<¸QÀ¹UÑ"C˜Ø&8¸¸iÈÐ>OÐ9OÑ&P˜Ø(,×(8Ñ(8×(?Ñ(?À×@UÑ@UÐVWÓ@XÓ(Y˜Ø'4×'@Ñ'@×'JÑ'JÈ1ÈbÓ'Q˜Ø)×0Ñ0°¸a±ÕAñBðBô $'Ñ&OÐ=NÔ&OÓ#OÐ Ü*/¯+©+Ø`qÖrÐZ\”R—]‘]×&Ñ& r¨A¨q°!Ð5EÈÏÉÐQRÉÑ5SÐ+TÕUÒró+Ð'ð $(×#3Ñ#3×#HÑ#HÐIZÓ#[Ð ÷!\ð$ "Ÿ[™[×7Ñ7ˆNØ(¨NÑ:Ðà×.Ñ.×;Ñ;Ð<SÓTˆLØ.:Ð;KÑ.LˆMÐ*Ñ+ô —
‘
˜A˜q $§+¡+×";Ñ";Ð<ÀY×EUÑEUÔ]b×]gÑ]gÔhØ—+‘+×3Ñ3ñ4ð  ð  $×2Ñ2×?Ñ?Ð@SÓT×\Ñ\Ð]^Ó_Ðà#,°·±×0NÑ0NÑ#NÐ Ø2B×2IÑ2IÐJ^×JbÑJbÓJdÐfgÓ2hˆMÐ.Ñ/ð Ð!Ø"(×"2Ñ"2°2Ó"6×"=Ñ"=¸aÀÀDÇKÁK×D]ÑD]Ó"^�Ø4KÐL\Ñ4]�Ð 0Ñ1Ø8K�Ð 4Ñ5à4:¸d±N×3KÑ3KÐUYÐ3KÓ3ZÐ0Øpt�Ð @ÀÑ CÐEeÐfgÑEhÐjkÑjlÐ lÑmØ(�à!.¸&ÑAÐAùò= s÷\ñ \ús   ÃCM4Æ;M/
Ç"M4Í/M4Í4M>r¹   r(   r�   rƒ   c           	      ó0  •— t        ‰	| �  d	|||||dœ|¤Ž}|�}|j                  dk(  rn|j                  d«      €]| j	                  ||j                  d«      |j                  d«      |j                  d«      ¬«      }|j                  |d   |d   d dœ«       |S )
N)r   r¹   r(   r�   rƒ   r   rƒ   r  r  r¿   )r   r  r  r¿   )rƒ   r¿   r   r9   )rQ   r¼   Úndimrñ   r9  rø   )
r`   r   r¹   r(   r�   rƒ   r…   r¾   Úmerged_inputsrc   s
            €r;   r¼   z9CsmForConditionalGeneration.prepare_inputs_for_generation1  sÁ   ø€ ô ‘wÑ<ð 
ØØ!5Ø+Ø)Ø'ñ
ð ñ
ˆð Ð  Y§^¡^°qÒ%8¸\×=MÑ=MÈoÓ=^Ð=fØ ×CÑCØ#Ø#ŸZ™Z¨Ó7Ø%+§Z¡ZÐ0FÓ%GØ—z‘z (Ó+ð	 Dó ˆMð ×ÑØ"/°Ñ"@ÈMÐZbÑLcÐrvÑwôð Ðr:   r‚   r„   rÀ   r…   c                 óê  — |�/|j                   dk(  r | j                  ||||«      }|d   }|d   }d} | j                  d||||||	dœ|¤Ž}|d   }t        |
t        «      rt        |
 d«      n|
}| j                  |dd…|dd…f   «      }d}d}d}d}|�ð|dd…dd…df   } | j                  d||| j                  j                  dœ|¤Ž}|dd…dd…dd…f   d	k(  j                  d
¬«       }||   dd| j                  j                  dz
  …f   }t        j                  j                  |dd¬«      }|j                  d¬«      }||d   |d   dz
  dd…f   }||   } | j                   d|||	d|dœ|¤Ž}|j"                  }||z   }t%        |||||j&                  |j(                  |j*                  |�|j,                  nd|�|j&                  nd|�|j(                  nd|�|j*                  ¬«      S d¬«      S )a  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length, num_codebooks) or (batch_size, sequence_length)`):
            1. (batch_size, sequence_length): corresponds to the input sequence prepared with the processor from the text prompt. Such input
            requires `input_values` to be provided so that audio can be encoded in codebook tokens and then merged with the text tokens.

            2. (batch_size, sequence_length, num_codebooks): codebook tokens generated during the autoregressive decoding. Such input is not meant to be used by end users.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        input_values_cutoffs (`torch.Tensor` of shape `(batch_size, max_num_audio)`, *optional*):
            Specify the end positions of audio segments within each batch entry, relative to the concatenated audio input.
            If a batch entry has fewer segments than the maximum, it is padded with -1. For example, in a batch of 2 sequences
            where the first contains 2 audio segments of length l1, and the second contains 1 audio segment of length l2,
            the input_values_cutoffs would be: [[l1, 2 * l1], [l2, -1]].
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[config.audio_token_id, -100, -101]`.
            Requires targeted `input_values` to be provided as audio tokens will be inferred from it using the `codec_model`.
            - `config.audio_token_id` indicates an audio frames (considering sequence length elements as frames)
            - `-100` will be ignored in the loss computation
            - `-101` indicates the audio frame will be used only for the backbone model (using the first codebook token as labels)

            Such labels can be prepared using `output_labels=True` when calling [`CsmProcessor`].
        logits_to_keep (`int` or `torch.Tensor`, *optional*):
            Kept for compatibility. Does not support another value than:
            1. `0`, which is equivalent to keeping all logits, used in the training regime
            2. `1`, which is equivalent to keeping only the last logit, used in the generation regime

        Example:

        ```python
        >>> import torch
        >>> from transformers import CsmForConditionalGeneration, AutoProcessor
        >>> from datasets import load_dataset, Audio

        >>> model_id = "sesame/csm-1b"
        >>> torch_device = "cuda" if torch.cuda.is_available() else "cpu"

        >>> processor = AutoProcessor.from_pretrained(model_id)

        >>> ds = load_dataset("hf-internal-testing/dailytalk-dummy", split="train")
        >>> # ensure the audio is 24kHz
        >>> ds = ds.cast_column("audio", Audio(sampling_rate=24000))

        >>> conversation = []
        >>> # prepare a conversation with text and corresponding audio
        >>> for text, audio, speaker_id in zip(ds[:4]["text"], ds[:4]["audio"], ds[:4]["speaker_id"]):
        ...     conversation.append(
        ...         {
        ...             "role": f"{speaker_id}",
        ...             "content": [{"type": "text", "text": text}, {"type": "audio", "path": audio["array"]}],
        ...         }
        ...     )

        >>> inputs = processor.apply_chat_template(
        ...     conversation,
        ...     tokenize=True,
        ...     return_dict=True,
        ...     output_labels=True,
        ... ).to(torch_device)

        >>> model = CsmForConditionalGeneration.from_pretrained(model_id, device_map=torch_device)
        >>> output = model(**inputs)
        >>> output.loss.backward()
        ```Nr   rƒ   r¿   )r   r�   r‚   r(   rƒ   r„   r   )r'   r¿   r_   r   r  r
  r©   .r	  )rë   Tr  )r   r€   r„   Úreturn_dictr¿   )r&   r0   r+   r'   r(   r)   r*   r,   r-   r.   r/   r9   )r;  r9  rà   rS   rÃ   rÄ   r·   rÆ   rJ   r_   ÚallrU   rw   r«   r  r$  râ   r&   r%   r(   r)   r*   r'   )r`   r   r  r�   r  r‚   r(   rƒ   r¿   r„   rÀ   r…   r<  Úbackbone_outputsÚbackbone_hidden_statesrÉ   Úbackbone_logitsr&   r0   r+   Údepth_decoder_outputsÚbackbone_labelsÚ
train_maskÚdepth_decoder_input_idsÚ
train_idxsÚbackbone_last_hidden_statesÚdepth_decoder_labelss                              r;   r    z#CsmForConditionalGeneration.forwardP  s­  € ðd Ð  Y§^¡^°qÒ%8Ø ×CÑCØ˜<Ð)=¸vóˆMð *¨/Ñ:ˆMØ" 8Ñ,ˆFØˆIà.˜4×.Ñ.ð 
ØØ)Ø%Ø+Ø'Øñ
ð ñ
Ðð "2°!Ñ!4Ðä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØŸ,™,Ð'=ºaÀÒPQÐ>QÑ'RÓSˆàˆØˆØ!ÐØ $ÐØÐà$¢Qª¨1 W™oˆOØ.˜D×.Ñ.ð Ø&¨È4Ï;É;×KaÑKañØekñˆMð "¢!¢Q¨© (Ñ+¨tÑ3×8Ñ8¸RÐ8Ó@Ð@ˆJØ&,¨ZÑ&8¸Ð>]ÀÇÁ×@YÑ@YÐ\]Ñ@]Ð>]Ð9]Ñ&^Ð#ä&(§m¡m×&7Ñ&7Ð8OÐQWÐ_`Ð&7Ó&aÐ#à#×+Ñ+°TÐ+Ó:ˆJØ*@ÀÈAÁÐPZÐ[\ÑP]Ð`aÑPaÒcdÐAdÑ*eÐ'Ø#)¨*Ñ#5Ð à$6 D×$6Ñ$6ð %Ø1Ø+FØ#Ø Ø+ñ%ð ñ%Ð!ð "7×!;Ñ!;ÐØ Ð#5Ñ5ˆDä ØØ'Ø1Ø"Ø,×<Ñ<Ø*×8Ñ8Ø'×2Ñ2ØAVÐAbÐ!6×!=Ò!=Ðhlà$Ð0ð +@×*OÒ*Oàà$Ð0ð )>×(KÒ(KàØI^ÐIjÐ%:×%EÑ%Eô
ð 	
ð quô
ð 	
r:   )NNNN)
NNNNNNNNNr   )r1   r2   r3   rÊ   rv   ré   rì   Úclassmethodrò   r  r5   r¢   r9  r¡   rÃ   r   r6   r¼   r   r   r£   r   r   r8   r%   r    ro   rp   s   @r;   rÛ   rÛ      sD  ø„ ð 	@ÐAjðÐôò0ò1ð óó ðô41ð *.Ø,0Ø48Ø&*ñPBà—<‘< $Ñ&ðPBð —l‘l TÑ)ðPBð $Ÿl™l¨TÑ1ð	PBð
 —‘˜tÑ#ðPBð 
�‰˜Ñ	óPBðj ,0Ø(,Ø26Ø26ñà×#Ñ#ðð " D™jðð  ™ð	ð
 ×(Ñ(¨4Ñ/ðð ×(Ñ(¨4Ñ/õð> Øð .2Ø,0Ø.2Ø48Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñY
à×#Ñ# dÑ*ðY
ð —l‘l TÑ)ðY
ð Ÿ™ tÑ+ð	Y
ð
 $Ÿl™l¨TÑ1ðY
ð ×&Ñ&¨Ñ-ðY
ð  ™ðY
ð ×(Ñ(¨4Ñ/ðY
ð × Ñ  4Ñ'ðY
ð ˜$‘;ðY
ð ˜eŸl™lÑ*ðY
ð Ð+Ñ,ðY
ð 
Ð"Ñ	"òY
ó ó ôY
r:   rÛ   )rI   rÖ   rr   rµ   rÛ   )CÚdataclassesr   r5   Útorch.nnrw   Ú r   rW   Úcache_utilsr   r   Ú
generationr   Úmasking_utilsr	   Úmodeling_outputsr
   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.import_utilsr   Úutils.output_capturingr   Úautor   Úllama.modeling_llamar   r   r   r   r   r   r   r   Úconfiguration_csmr    r!   Úgeneration_csmr"   Ú
get_loggerr1   r�   r%   r=   rA   rC   rE   rG   rI   rr   ÚModulerT   rµ   r[   rÖ   rÛ   Ú__all__r9   r:   r;   ú<module>r_     sÀ  ðõ "ã Ý å &ß .Ý )Ý /ß OÝ -Ý &ß KÓ KÝ 7Ý :Ý 5Ý ÷	÷ 	ó 	÷ @Ý .ð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð
 ô'3˜ó '3ó óð'3ôV	�ô 	ô	Ð-ô 	ô	ˆXô 	ô	�>ô 	ô	Ð'ô 	ñ ðôð
 ôv˜ó vó óðvð< ôY
˜:Ð'9ó Y
ó ðY
ôx�r—y‘yô ñ( ðôôd
Ð!1°?ó d
óðd
ôN §¡ô ð ô/�zó /ó ð/ñ0 ðôô
F
Ð"4Ð6Hó F
óð
F
òR
�r:   