§
    ‚Štj©0  ã                   ó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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 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&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/  ej0        e1¦  «        Z2 G d„ de%¦  «        Z3 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 G d#„ d$e+¦  «        Z: G d%„ d&e)¦  «        Z; G d'„ d(e'¦  «        Z<g d)¢Z=dS )*é    )ÚCallableN)Únné   )Úinitialization)ÚCacheÚDynamicCache)Úcreate_causal_maskÚcreate_recurrent_attention_mask)ÚBaseModelOutputWithPastÚMoeModelOutputWithPast)ÚALL_ATTENTION_FUNCTIONS)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚBambaConfig)Ú
BambaMixerÚBambaRMSNormGated)ÚGemma2RotaryEmbedding)
ÚGraniteFlashAttentionKwargsÚGraniteMoeSharedAttentionÚGraniteMoeSharedDecoderLayerÚGraniteMoeSharedForCausalLMÚGraniteMoeSharedMLPÚGraniteMoeSharedModelÚGraniteMoeSharedMoEÚGraniteMoeSharedPreTrainedModelÚapply_rotary_pos_embÚeager_attention_forwardé   )ÚGraniteMoeHybridConfigc                   ó²   — e Zd ZdZ	 	 d
dej        dej        dz  dedz  deej        ej        f         dz  dee	         deej        ej        f         fd	„Z
dS )ÚGraniteMoeHybridAttentionuæ   Hybrid variant that handles ``position_embeddings is None`` â€” granitemoe-hybrid configs can
    opt out of RoPE via ``position_embedding_type=None``, in which case the model passes ``None``
    instead of a ``(cos, sin)`` tuple.NÚhidden_statesÚattention_maskÚpast_key_valuesÚposition_embeddingsÚkwargsÚreturnc                 ó&  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }	|                      |¦  «                             |¦  «                             dd¦  «        }
|�|\  }}t          ||	||¦  «        \  }}	|�|                     |	|
| j	        ¦  «        \  }	}
t          j        | j        j        t          ¦  «        } || ||	|
|f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )Néÿÿÿÿr#   r   g        )ÚdropoutÚscaling)ÚshapeÚhead_dimÚq_projÚviewÚ	transposeÚk_projÚv_projr!   ÚupdateÚ	layer_idxr   Úget_interfaceÚconfigÚ_attn_implementationr"   ÚtrainingÚattention_dropoutr0   ÚreshapeÚ
contiguousÚo_proj)Úselfr'   r(   r)   r*   r+   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚcosÚsinÚattention_interfaceÚattn_outputÚattn_weightss                   ú{/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/granitemoehybrid/modular_granitemoehybrid.pyÚforwardz!GraniteMoeHybridAttention.forward7   sÆ  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆàÐ*Ø*‰HˆC�Ý';¸LÈ*ÐVYÐ[^Ñ'_Ô'_Ñ$ˆL˜*àÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(ó    )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚtorchÚTensorr   Útupler   r   rN   © rO   rM   r&   r&   2   s­   € € € € € ð*ð *ð )-ØHLð%)ð %)à”|ð%)ð œ tÑ+ð%)ð  ™ð	%)ð
 # 5¤<°´Ð#=Ô>ÀÑEð%)ð Ð+Ô,ð%)ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð%)ð %)ð %)ð %)ð %)ð %)rO   r&   c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )ÚGraniteMoeHybridMambaLayerr;   r9   c                 óf   •— t          ¦   «                              t          |¦  «        |¦  «         d S ©N)ÚsuperÚ__init__r   ©rB   r;   r9   Ú	__class__s      €rM   r]   z#GraniteMoeHybridMambaLayer.__init__`   s+   ø€ Ý‰Œ×Ò� VÑ,Ô,¨iÑ8Ô8Ð8Ð8Ð8rO   )rP   rQ   rR   r$   Úintr]   Ú__classcell__©r_   s   @rM   rY   rY   _   sL   ø€ € € € € ð9Ð5ð 9À#ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9rO   rY   c                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )ÚGraniteMoeHybridRMSNormGatedç�íµ ÷Æ°>c                 óL   •— t          ¦   «                              ||¦  «         d S r[   ©r\   r]   )rB   Úhidden_sizeÚepsr_   s      €rM   r]   z%GraniteMoeHybridRMSNormGated.__init__e   s#   ø€ Ý‰Œ×Ò˜ cÑ*Ô*Ð*Ð*Ð*rO   )re   )rP   rQ   rR   r]   ra   rb   s   @rM   rd   rd   d   s=   ø€ € € € € ð+ð +ð +ð +ð +ð +ð +ð +ð +ð +rO   rd   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚGraniteMoeHybridMLPr;   c                 óJ   •— t          ¦   «                              |¦  «         d S r[   rg   ©rB   r;   r_   s     €rM   r]   zGraniteMoeHybridMLP.__init__j   s!   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ð Ð rO   )rP   rQ   rR   r$   r]   ra   rb   s   @rM   rk   rk   i   sE   ø€ € € € € ð!Ð5ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !rO   rk   c                   ó   — e Zd ZdS )ÚGraniteMoeHybridRotaryEmbeddingN©rP   rQ   rR   rW   rO   rM   ro   ro   n   ó   € € € € € Ø€DrO   ro   c                   ó   — e Zd ZdS )ÚGraniteMoeHybridMoENrp   rW   rO   rM   rs   rs   r   rq   rO   rs   c                   ó  ‡ — e Zd Zdedefˆ fd„Ze	 	 	 	 ddej        dej        dz  de	dz  d	e
dz  d
eej        ej        f         dz  dee         deej        eej        ej        f         dz  f         fd„¦   «         Zˆ xZS )ÚGraniteMoeHybridDecoderLayerr;   r9   c                 ó¢  •— t          ¦   «                              ||¦  «         t          |¦  «        | _        d | _        d | _        |j        |         dk    rt          ||¦  «        | _        nt          ||¦  «        | _        |j        |         | _	        |j
        dk    rt          |¦  «        nd | _        t          |dd¦  «        dk    | _        d S )NÚlinear_attentionr   Únum_local_experts)r\   r]   rk   Ú
shared_mlpÚ	self_attnÚmambaÚlayers_block_typerY   r&   Ú
block_typerx   rs   Úblock_sparse_moeÚgetattrÚhas_expertsr^   s      €rM   r]   z%GraniteMoeHybridDecoderLayer.__init__w   sÌ   ø€ Ý‰Œ×Ò˜ Ñ+Ô+Ð+Ý-¨fÑ5Ô5ˆŒàˆŒØˆŒ
àÔ# IÔ.Ð2DÒDÐDÝ3°F¸IÑFÔFˆDŒJˆJå6°v¸yÑIÔIˆDŒNØ Ô2°9Ô=ˆŒð @FÔ?WÐZ[Ò?[Ð?[Õ 3°FÑ ;Ô ;Ð ;ÐaeˆÔõ # 6Ð+>ÀÑBÔBÀQÒFˆÔÐÐrO   NFr'   r(   r)   Ú	use_cacher*   r+   r,   c           	      óˆ  — |}|                       |¦  «        }| j        � | j        d|||dœ|¤Ž}n | j        d|||||dœ|¤Ž\  }}||| j        z  z   }|}|                      |¦  «        }| j        r.|                      |¦  «        }	|	|                      |¦  «        z   }n|                      |¦  «        }||| j        z  z   }|S )N)r'   Úcache_paramsr(   )r'   r(   r)   r�   r*   rW   )Úinput_layernormr{   rz   Úresidual_multiplierÚpost_attention_layernormr€   r~   ry   )
rB   r'   r(   r)   r�   r*   r+   ÚresidualÚ_Úmoe_hidden_statess
             rM   rN   z$GraniteMoeHybridDecoderLayer.forwardŠ   s  € ð !ˆØ×,Ò,¨]Ñ;Ô;ˆàŒ:Ð!Ø&˜DœJð Ø+Ø,Ø-ðð ð ð	ð ˆMˆMð  .˜tœ~ð  Ø+Ø-Ø /Ø#Ø$7ð ð  ð ð ð  ÑˆM˜1ð ! =°4Ô3KÑ#KÑKˆØ ˆØ×5Ò5°mÑDÔDˆàÔð 	;Ø $× 5Ò 5°mÑ DÔ DÐØ-°·²ÀÑ0NÔ0NÑNˆMˆMà ŸOšO¨MÑ:Ô:ˆMà  =°4Ô3KÑ#KÑKˆØÐrO   )NNFN)rP   rQ   rR   r$   r`   r]   r   rT   rU   r   ÚboolrV   r   r   ÚFloatTensorrN   ra   rb   s   @rM   ru   ru   v   s  ø€ € € € € ðGÐ5ð GÀ#ð Gð Gð Gð Gð Gð Gð& ð /3Ø(,Ø!&ØHLð(ð (à”|ð(ð œ tÑ+ð(ð  ™ð	(ð
 ˜$‘;ð(ð # 5¤<°´Ð#=Ô>ÀÑEð(ð Ð4Ô5ð(ð 
ˆuÔ  %¨Ô(9¸5Ô;LÐ(LÔ"MÐPTÑ"TÐTÔ	Uð(ð (ð (ñ „^ð(ð (ð (ð (ð (rO   ru   c                   ó^   ‡ — e Zd ZU eed<   dgZdZ ej        ¦   «         ˆ fd„¦   «         Z	ˆ xZ
S )ÚGraniteMoeHybridPreTrainedModelr;   ru   Tc           
      óÊ  •— t          ¦   «                              |¦  «         t          |t          ¦  «        r{t	          j        |j        ¦  «         t	          j        |j        t          j
        t          j        d|j        dz   ¦  «        ¦  «        ¦  «         t	          j        |j        ¦  «         d S t          |t          ¦  «        rt	          j        |j        ¦  «         d S d S )Nr#   )r\   Ú_init_weightsÚ
isinstancerY   ÚinitÚones_Údt_biasÚcopy_ÚA_logrT   ÚlogÚarangeÚ	num_headsÚDrd   Úweight)rB   Úmoduler_   s     €rM   r�   z-GraniteMoeHybridPreTrainedModel._init_weights»   sÀ   ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ8Ñ9Ô9ð 	&ÝŒJ�v”~Ñ&Ô&Ð&ÝŒJ�v”|¥U¤Y­u¬|¸A¸vÔ?OÐRSÑ?SÑ/TÔ/TÑ%UÔ%UÑVÔVÐVÝŒJ�v”xÑ Ô Ð Ð Ð Ý˜Õ <Ñ=Ô=ð 	&ÝŒJ�v”}Ñ%Ô%Ð%Ð%Ð%ð	&ð 	&rO   )rP   rQ   rR   r$   Ú__annotations__Ú_no_split_modulesÚ_is_statefulrT   Úno_gradr�   ra   rb   s   @rM   r�   r�   ¶   sf   ø€ € € € € € Ø"Ð"Ð"Ñ"Ø7Ð8ÐØ€Là€U„]�_„_ð&ð &ð &ð &ñ „_ð&ð &ð &ð &ð &rO   r�   c                   óè   ‡ — e Zd Zdefˆ fd„Zeee	 	 	 	 	 	 d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 )ÚGraniteMoeHybridModelr;   c                 ó  •‡— t          ¦   «                              ‰¦  «         t          j        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        ‰j        | _        ‰j        dk    rt          ‰¦  «        nd | _
        d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rW   )ru   )Ú.0r9   r;   s     €rM   ú
<listcomp>z2GraniteMoeHybridModel.__init__.<locals>.<listcomp>Ê   s$   ø€ ÐnÐnÐnÀÕ)¨&°)Ñ<Ô<ÐnÐnÐnrO   Úrope)r\   r]   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersÚembedding_multiplierÚposition_embedding_typero   Ú
rotary_embrm   s    `€rM   r]   zGraniteMoeHybridModel.__init__Ç   s‡   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”mØnÐnÐnÐnÍeÐTZÔTlÑNmÔNmÐnÑnÔnñ
ô 
ˆŒð %+Ô$?ˆÔ!ØEKÔEcÐgmÒEmÐEmÕ9¸&ÑAÔAÐAÐswˆŒˆˆrO   NÚ	input_idsr(   Úposition_idsr)   Úinputs_embedsr�   r+   r,   c           	      óØ  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|| j        z  }|r|€t          | j        ¬¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d         |j	        ¬¦  «        |z   }| 
                    d¦  «        }t          |x}	t          ¦  «        s%| j        |||dœ}
t          d
i |
¤Žt          d
i |
¤Ždœ}	|}d }| j        �|                      ||¦  «        }t!          | j        ¦  «        D ])\  }} ||f|	| j        j        |                  |||dœ|¤Ž}Œ*|                      |¦  «        }t)          ||¬	¦  «        S )Nz:You must specify exactly one of input_ids or inputs_embeds)r;   r   r#   )Údevice)r;   r°   r(   r)   )Úfull_attentionrw   )r(   r)   r�   r*   )Úlast_hidden_stater)   rW   )Ú
ValueErrorÚembed_tokensr«   r   r;   Úget_seq_lengthrT   r—   r1   r²   Ú	unsqueezer�   Údictr	   r
   r­   Ú	enumeraterª   r|   Únormr   )rB   r®   r(   r¯   r)   r°   r�   r+   Úpast_seen_tokensÚcausal_mask_mappingÚmask_kwargsr'   r*   ÚiÚdecoder_layers                  rM   rN   zGraniteMoeHybridModel.forwardÏ   sí  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ×-Ò-¨iÑ8Ô8ˆMà%¨Ô(AÑAˆàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLå°Ð?Ð-ÅÑFÔFð 	ð œ+Ø!.Ø"0Ø#2ð	ð ˆKõ #5Ð"CÐ"C°{Ð"CÐ"CÝ$CÐ$RÐ$RÀkÐ$RÐ$Rð#ð #Ðð &ˆØ"ÐØŒ?Ð&Ø"&§/¢/°-ÀÑ"NÔ"NÐå )¨$¬+Ñ 6Ô 6ð 	ð 	ÑˆAˆ}Ø)˜MØðà2°4´;Ô3PÐQRÔ3SÔTØ /Ø#Ø$7ðð ð ðð ˆMˆMð Ÿ	š	 -Ñ0Ô0ˆå%Ø+Ø+ð
ñ 
ô 
ð 	
rO   )NNNNNN)rP   rQ   rR   r$   r]   r   r   r   rT   Ú
LongTensorrU   r   r‹   rŠ   r   r   rV   r   rN   ra   rb   s   @rM   r¡   r¡   Æ   s  ø€ € € € € ðxÐ5ð xð xð xð xð xð xð ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ð<
ð <
àÔ# dÑ*ð<
ð œ tÑ+ð<
ð Ô&¨Ñ-ð	<
ð
  ™ð<
ð Ô(¨4Ñ/ð<
ð ˜$‘;ð<
ð Ð4Ô5ð<
ð 
Ð(Ñ	(ð<
ð <
ð <
ñ „_ñ  Ôñ „^ð<
ð <
ð <
ð <
ð <
rO   r¡   c                   ó6   ‡ — e Zd ZddiZdefˆ fd„Zˆ fd„Zˆ xZS )ÚGraniteMoeHybridForCausalLMzlm_head.weightzmodel.embed_tokens.weightr;   c                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S r[   )r\   r]   r¡   ÚmodelÚ	post_initrm   s     €rM   r]   z$GraniteMoeHybridForCausalLM.__init__  s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý*¨6Ñ2Ô2ˆŒ
à�ŠÑÔÐÐÐrO   c                 ó6   •—  t          ¦   «         j        di |¤ŽS )a–  
        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]`.

        Example:

        ```python
        >>> from transformers import AutoTokenizer, GraniteMoeHybridForCausalLM

        >>> model = GraniteMoeHybridForCausalLM.from_pretrained("ibm-granite/granite-4.0-h-tiny")
        >>> tokenizer = AutoTokenizer.from_pretrained("ibm-granite/granite-4.0-h-tiny")

        >>> prompt = "Hey, are you conscious? Can you talk to me?"
        >>> inputs = tokenizer(prompt, return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(inputs.input_ids, max_length=30)
        >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
        ```rW   )r\   rN   )rB   Úsuper_kwargsr_   s     €rM   rN   z#GraniteMoeHybridForCausalLM.forward  s!   ø€ ð. �u‰wŒwŒÐ.Ð. Ð.Ð.Ð.rO   )rP   rQ   rR   Ú_tied_weights_keysr$   r]   rN   ra   rb   s   @rM   rÃ   rÃ     sj   ø€ € € € € Ø*Ð,GÐHÐðÐ5ð ð ð ð ð ð ð/ð /ð /ð /ð /ð /ð /ð /ð /rO   rÃ   )rÃ   r¡   r�   )>Úcollections.abcr   rT   r   Ú r   r‘   Úcache_utilsr   r   Úmasking_utilsr	   r
   Úmodeling_outputsr   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   Úbamba.configuration_bambar   Úbamba.modeling_bambar   r   Úgemma2.modeling_gemma2r   Ú*granitemoeshared.modeling_granitemoesharedr   r   r   r   r   r   r   r    r!   r"   Úconfiguration_granitemoehybridr$   Ú
get_loggerrP   Úloggerr&   rY   rd   rk   ro   rs   ru   r�   r¡   rÃ   Ú__all__rW   rO   rM   ú<module>rÜ      sœ  ðð %Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð CÐ BÐ BÐ BÐ BÐ Bð 
ˆÔ	˜HÑ	%Ô	%€ð*)ð *)ð *)ð *)ð *)Ð 9ñ *)ô *)ð *)ðZ9ð 9ð 9ð 9ð 9 ñ 9ô 9ð 9ð
+ð +ð +ð +ð +Ð#4ñ +ô +ð +ð
!ð !ð !ð !ð !Ð-ñ !ô !ð !ð
	ð 	ð 	ð 	ð 	Ð&;ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð-ñ 	ô 	ð 	ð=ð =ð =ð =ð =Ð#?ñ =ô =ð =ð@&ð &ð &ð &ð &Ð&Eñ &ô &ð &ð H
ð H
ð H
ð H
ð H
Ð1ñ H
ô H
ð H
ðV /ð  /ð  /ð  /ð  /Ð"=ñ  /ô  /ð  /ðF fÐ
eÐ
e€€€rO   