o
    ei{                     @   s   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
 eeZG dd	 d	eZG d
d deZG dd deZG dd deZg dZdS )    )Any   )PreTrainedConfiglayer_type_validation)RopeParameters)logging   )SiglipVisionConfigc                2       r  e Zd ZdZdZdgZddddddddZdgdgfd	d
gd	gfd	gd	gfdZdddZ																			 	!	!	!	!d=d"e	d!B d#e	d!B d$e	d!B d%e	d!B d&e	d!B d'e	d!B d(e	d!B d)e
d!B d*e	d!B d+ed!B d,e	d!B d-ed!B d.e	d!B d/e	d!B d0e	d!B d1ed!B d2ed!B d3e	d!B d4e	d!B d5ee
 d!B d6ed!B d7ed!B d8eee
ef B d!B f. fd9d:Zd>d;d<Z  ZS )?T5Gemma2TextConfiga  
    This is the configuration class to store the configuration of a [`T5Gemma2TextModel`]. It is used to instantiate the encoder's
    text model portion of the T5Gemma2 Model according to the specified arguments, defining the model architecture. Instantiating
    a configuration with the defaults will yield a similar configuration to that of the T5Gemma2Text-7B.
    e.g. [google/t5gemma2_text-7b](https://huggingface.co/google/t5gemma2_text-7b)
    Configuration objects inherit from [`PreTrainedConfig`] and can be used to control the model outputs. Read the
    documentation from [`PreTrainedConfig`] for more information.

    Args:
        vocab_size (`int`, *optional*, defaults to 262208):
            Vocabulary size of the T5Gemma2Text model. Defines the number of different tokens that can be represented by the
            `inputs_ids` passed when calling [`T5Gemma2TextModel`]
        hidden_size (`int`, *optional*, defaults to 2304):
            Dimension of the hidden representations.
        intermediate_size (`int`, *optional*, defaults to 9216):
            Dimension of the MLP representations.
        num_hidden_layers (`int`, *optional*, defaults to 26):
            Number of hidden layers in the Transformer decoder.
        num_attention_heads (`int`, *optional*, defaults to 8):
            Number of attention heads for each attention layer in the Transformer decoder.
        num_key_value_heads (`int`, *optional*, defaults to 4):
            This is the number of key_value heads that should be used to implement Grouped Query Attention. If
            `num_key_value_heads=num_attention_heads`, the model will use Multi Head Attention (MHA), if
            `num_key_value_heads=1` the model will use Multi Query Attention (MQA) otherwise GQA is used. When
            converting a multi-head checkpoint to a GQA checkpoint, each group key and value head should be constructed
            by meanpooling all the original heads within that group. For more details, check out [this
            paper](https://huggingface.co/papers/2305.13245). If it is not specified, will default to
            `num_attention_heads`.
        head_dim (`int`, *optional*, defaults to 256):
            The attention head dimension.
        hidden_activation (`str` or `function`, *optional*, defaults to `"gelu_pytorch_tanh"`):
            The non-linear activation function (function or string) in the decoder. Will default to `"gelu_pytorch_tanh"`
            if not specified. `"gelu_pytorch_tanh"` uses an approximation of the `"gelu"` activation function.
        max_position_embeddings (`int`, *optional*, defaults to 131072):
            The maximum sequence length that this model might ever be used with.
        initializer_range (`float`, *optional*, defaults to 0.02):
            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
        rms_norm_eps (`float`, *optional*, defaults to 1e-06):
            The epsilon used by the rms normalization layers.
        use_cache (`bool`, *optional*, defaults to `True`):
            Whether or not the model should return the last key/values attentions (not used by all models). Only
            relevant if `config.is_decoder=True`.
        pad_token_id (`int`, *optional*, defaults to 0):
            Padding token id.
        eos_token_id (`int`, *optional*, defaults to 1):
            End of stream token id.
        bos_token_id (`int`, *optional*, defaults to 2):
            Beginning of stream token id.
        attention_bias (`bool`, defaults to `False`, *optional*, defaults to `False`):
            Whether to use a bias in the query, key, value and output projection layers during self-attention.
        attention_dropout (`float`, *optional*, defaults to 0.0):
            The dropout ratio for the attention probabilities.
        query_pre_attn_scalar (`float`, *optional*, defaults to 256):
            Scaling factor used on the attention scores
        sliding_window (`int`, *optional*, defaults to 4096):
            In T5Gemma2Text, every other layer uses sliding window attention. This is the size of the sliding window.
        layer_types (`list`, *optional*):
            Attention pattern for each layer.
        final_logit_softcapping (`float`, *optional*):
            Scaling factor when applying tanh softcapping on the logits.
        attn_logit_softcapping (`float`, *optional*):
            Scaling factor when applying tanh softcapping on the attention scores.
        rope_parameters (`RopeParameters`, *optional*):
            Dictionary containing the configuration parameters for the RoPE embeddings. The dictionary should contain
            a value for `rope_theta` and optionally parameters used for scaling in case you want to use RoPE
            with longer `max_position_embeddings`.
    t5gemma2_textpast_key_valuescolwiserowwisezlayers.*.self_attn.q_projzlayers.*.self_attn.k_projzlayers.*.self_attn.v_projzlayers.*.self_attn.o_projzlayers.*.mlp.gate_projzlayers.*.mlp.up_projzlayers.*.mlp.down_proj	input_idsinputs_embedshidden_statesattention_maskembed_tokenslayersnorm    .A     @globallocal@   	   $              gelu_pytorch_tanh   {Gz?ư>Tr      r   F           N
vocab_sizehidden_sizeintermediate_sizenum_hidden_layersnum_attention_headsnum_key_value_headshead_dimhidden_activationmax_position_embeddingsinitializer_rangerms_norm_eps	use_cachepad_token_ideos_token_idbos_token_idattention_biasattention_dropoutquery_pre_attn_scalarsliding_windowlayer_typesfinal_logit_softcappingattn_logit_softcappingrope_parametersc                       | _ | _| _| _|	 _| _| _| _| _| _	| _
|
 _| _| _| _| _| _| _| _| _| _| _|dd _ jd u r[ fddt jD  _t j j | _t jdi | d S )Nsliding_window_pattern   c                    &   g | ]}t |d   j rdndqS r)   sliding_attentionfull_attentionbool_sliding_window_pattern.0iself q/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/transformers/models/t5gemma2/configuration_t5gemma2.py
<listcomp>       z/T5Gemma2TextConfig.__init__.<locals>.<listcomp>rR   r8   r:   r9   r,   r4   r-   r.   r/   r0   r2   r1   r5   r6   r7   r;   r<   r3   r=   r>   r@   rA   r?   getrL   ranger   rB   super__init__rQ   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   kwargs	__class__rP   rS   rZ   w   <   

zT5Gemma2TextConfig.__init__c                 K      | dd }ddiddid}| jd ur| jn|| _|d ur&| jd | | jdd u r5ddi| jd< | jd d| d| jd  | jdd u rTddi| jd< | jd d| d	| jd
  |   | j|d |S Nrope_scaling	rope_typedefault)rH   rI   rI   
rope_thetar   rH   rope_local_base_freqr   )ignore_keyspoprB   updaterW   
setdefaultdefault_thetastandardize_rope_paramsvalidate_roperQ   ignore_keys_at_rope_validationr\   rb   default_rope_paramsrR   rR   rS   convert_rope_params_to_dict   (   

z.T5Gemma2TextConfig.convert_rope_params_to_dictr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Tr   r)   r   Fr*   r$   r+   NNNNN__name__
__module____qualname____doc__
model_typekeys_to_ignore_at_inferencebase_model_tp_planbase_model_pp_planrl   intstrfloatrK   listr   dictrZ   rr   __classcell__rR   rR   r]   rS   r           D



	

?r   c                       s   e Zd ZdZdZddddZeedZ					
				ddee	e
ef B dB dee	e
ef B dB dedB dedB dedB dedB dedB dedB f fddZ  ZS )T5Gemma2EncoderConfigaq	  
    This is the configuration class to store the configuration of a [`T5Gemma2EncoderForConditionalGeneration`]. It is used to instantiate an
    T5Gemma2EncoderForConditionalGeneration according to the specified arguments, defining the model architecture. Instantiating a configuration
    with the defaults will yield a similar configuration to that of the PaliGemma-2B.

    e.g. [google/gemma-3-4b](https://huggingface.co/google/gemma-3-4b)

    Configuration objects inherit from [`PreTrainedConfig`] and can be used to control the model outputs. Read the
    documentation from [`PreTrainedConfig`] for more information.

    Args:
        text_config (`Union[T5Gemma2EncoderTextConfig, dict]`, *optional*):
            The config object of the text backbone.
        vision_config (`Union[AutoConfig, dict]`,  *optional*):
            Custom vision config or dict.
        mm_tokens_per_image (`int`, *optional*, defaults to 256):
            The number of tokens per image embedding.
        boi_token_index (`int`, *optional*, defaults to 255999):
            The begin-of-image token index to wrap the image prompt.
        eoi_token_index (`int`, *optional*, defaults to 256000):
            The end-of-image token index to wrap the image prompt.
        image_token_index (`int`, *optional*, defaults to 262144):
            The image token index to encode the image prompt.
        initializer_range (`float`, *optional*, defaults to 0.02):
            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
        tie_word_embeddings (`bool`, *optional*, defaults to `True`):
            Whether to tie weight embeddings

    Example:

    ```python
    >>> from transformers import T5Gemma2EncoderForConditionalGeneration, T5Gemma2EncoderConfig, SiglipVisionConfig, T5Gemma2EncoderTextConfig

    >>> # Initializing a Siglip-like vision config
    >>> vision_config = SiglipVisionConfig()

    >>> # Initializing a T5Gemma2Encoder Text config
    >>> text_config = T5Gemma2EncoderTextConfig()

    >>> # Initializing a T5Gemma2Encoder gemma-3-4b style configuration
    >>> configuration = T5Gemma2EncoderConfig(vision_config, text_config)

    >>> # Initializing a model from the gemma-3-4b style configuration
    >>> model = T5Gemma2EncoderTextConfig(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```t5gemma2_encoderimage_token_indexboi_token_indexeoi_token_index)image_token_idboi_token_ideoi_token_id)text_configvision_configNr$         r'   Tr   r   mm_tokens_per_imager5   tie_word_embeddingsc	           
         s   |d u rt  }td nt|trt di |}t|tr&tdi |}n|d u r2t }td || _|| _|| _|| _	|| _
|| _|| _|| _t jdi |	 d S )NzItext_config is None, using default T5Gemma2EncoderTextConfig text config.zFvision_config is None, using default SiglipVisionConfig vision config.rR   )r   loggerinfo
isinstancer   r	   r   r   r   r   r   r   r5   r   rY   rZ   )
rQ   r   r   r   r   r   r   r5   r   r\   r]   rR   rS   rZ     s&   


zT5Gemma2EncoderConfig.__init__)NNr$   r   r   r   r'   T)rw   rx   ry   rz   r{   attribute_mapr   r	   sub_configsr   r   r   r   r   rK   rZ   r   rR   rR   r]   rS   r      sF    1	r   c                2       r
   )?T5Gemma2DecoderConfiga
  
    This is the configuration class to store the configuration of a [`T5Gemma2DecoderModel`]. It is used to instantiate the decoder
    text model portion of the T5Gemma2 Model according to the specified arguments, defining the model architecture. Instantiating
    a configuration with the defaults will yield a similar configuration to that of the T5Gemma2Decoder-7B.
    e.g. [google/t5gemma2_text-7b](https://huggingface.co/google/t5gemma2_text-7b)
    Configuration objects inherit from [`PreTrainedConfig`] and can be used to control the model outputs. Read the
    documentation from [`PreTrainedConfig`] for more information.

    Args:
        vocab_size (`int`, *optional*, defaults to 262208):
            Vocabulary size of the T5Gemma2Decoder model. Defines the number of different tokens that can be represented by the
            `inputs_ids` passed when calling [`T5Gemma2DecoderModel`]
        hidden_size (`int`, *optional*, defaults to 2304):
            Dimension of the hidden representations.
        intermediate_size (`int`, *optional*, defaults to 9216):
            Dimension of the MLP representations.
        num_hidden_layers (`int`, *optional*, defaults to 26):
            Number of hidden layers in the Transformer decoder.
        num_attention_heads (`int`, *optional*, defaults to 8):
            Number of attention heads for each attention layer in the Transformer decoder.
        num_key_value_heads (`int`, *optional*, defaults to 4):
            This is the number of key_value heads that should be used to implement Grouped Query Attention. If
            `num_key_value_heads=num_attention_heads`, the model will use Multi Head Attention (MHA), if
            `num_key_value_heads=1` the model will use Multi Query Attention (MQA) otherwise GQA is used. When
            converting a multi-head checkpoint to a GQA checkpoint, each group key and value head should be constructed
            by meanpooling all the original heads within that group. For more details, check out [this
            paper](https://huggingface.co/papers/2305.13245). If it is not specified, will default to
            `num_attention_heads`.
        head_dim (`int`, *optional*, defaults to 256):
            The attention head dimension.
        hidden_activation (`str` or `function`, *optional*, defaults to `"gelu_pytorch_tanh"`):
            The non-linear activation function (function or string) in the decoder. Will default to `"gelu_pytorch_tanh"`
            if not specified. `"gelu_pytorch_tanh"` uses an approximation of the `"gelu"` activation function.
        max_position_embeddings (`int`, *optional*, defaults to 131072):
            The maximum sequence length that this model might ever be used with.
        initializer_range (`float`, *optional*, defaults to 0.02):
            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
        rms_norm_eps (`float`, *optional*, defaults to 1e-06):
            The epsilon used by the rms normalization layers.
        use_cache (`bool`, *optional*, defaults to `True`):
            Whether or not the model should return the last key/values attentions (not used by all models). Only
            relevant if `config.is_decoder=True`.
        pad_token_id (`int`, *optional*, defaults to 0):
            Padding token id.
        eos_token_id (`int`, *optional*, defaults to 1):
            End of stream token id.
        bos_token_id (`int`, *optional*, defaults to 2):
            Beginning of stream token id.
        attention_bias (`bool`, defaults to `False`, *optional*, defaults to `False`):
            Whether to use a bias in the query, key, value and output projection layers during self-attention.
        attention_dropout (`float`, *optional*, defaults to 0.0):
            The dropout ratio for the attention probabilities.
        query_pre_attn_scalar (`float`, *optional*, defaults to 256):
            Scaling factor used on the attention scores
        sliding_window (`int`, *optional*, defaults to 4096):
            In T5Gemma2Decoder, every other layer uses sliding window attention. This is the size of the sliding window.
        layer_types (`list`, *optional*):
            Attention pattern for each layer.
        final_logit_softcapping (`float`, *optional*):
            Scaling factor when applying tanh softcapping on the logits.
        attn_logit_softcapping (`float`, *optional*):
            Scaling factor when applying tanh softcapping on the attention scores.
        rope_parameters (`RopeParameters`, *optional*):
            Dictionary containing the configuration parameters for the RoPE embeddings. The dictionary should contain
            a value for `rope_theta` and optionally parameters used for scaling in case you want to use RoPE
            with longer `max_position_embeddings`.
    t5gemma2_decoderr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Tr   r)   r   Fr*   r+   Nr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   c                    rC   )NrD   rE   c                    rF   rG   rJ   rM   rP   rR   rS   rT     rU   z2T5Gemma2DecoderConfig.__init__.<locals>.<listcomp>rR   rV   r[   r]   rP   rS   rZ     r_   zT5Gemma2DecoderConfig.__init__c                 K   r`   ra   rh   ro   rR   rR   rS   rr     rs   z1T5Gemma2DecoderConfig.convert_rope_params_to_dictrt   ru   rv   rR   rR   r]   rS   r   7  r   r   c                       s   e Zd ZdZdZdgZeedZdddZ						
	
	
				ddee
eef B dB dee
eef B dB dedededededededB f fddZ  ZS )T5Gemma2ConfigaV  
    This is the configuration class to store the configuration of a [`T5Gemma2Model`]. It is used to instantiate an T5Gemma2
    model according to the specified arguments, defining the model architecture. Instantiating a configuration with the
    defaults will yield a similar configuration to a hypothetical balanced Gemma3 encoder-decoder model.
    e.g. [google/t5gemma-2-270m-270m](https://huggingface.co/google/t5gemma-2-270m-270m)
    Configuration objects inherit from [PreTrainedConfig] and can be used to control the model outputs. Read the
    documentation from [PreTrainedConfig] for more information.

    Args:
        encoder (`Union[T5Gemma2EncoderConfig, dict]`, optional, *optional*):
            Configuration for the encoder.
        decoder (`Union[T5Gemma2DecoderConfig, dict]`, optional, *optional*):
            Configuration for the decoder.
        is_encoder_decoder (bool, optional, *optional*, defaults to `True`):
            Whether the model is used as an encoder/decoder or not.
        dropout_rate (`float`, *optional*, defaults to 0.0):
            The ratio for all dropout layers (following T5).
        attention_dropout (`float`, *optional*, defaults to 0.0):
            The dropout ratio for attention.
        classifier_dropout_rate (`float`, *optional*, defaults to 0.0):
            The dropout ratio for classifier (following T5).
        initializer_range (`float`, *optional*, defaults to 0.02):
            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
        image_token_index (`int`, *optional*, defaults to 256001):
            The image token index to encode the image prompt. Defaults to 256001, which is right after the eoi_token_index.
            Note this is different from Gemma 3.
        tie_word_embeddings (`bool`, *optional*, defaults to `True`):
            Whether to tie weight embeddings

    ```python
    >>> from transformers import T5Gemma2Config, T5Gemma2Model
    >>> t5gemma2_config = T5Gemma2Config.from_pretrained("google/t5gemma-270m-270m")
    >>> model = T5Gemma2Model(t5gemma2_config)
    ```
    t5gemma2r   )encoderdecoderr   r   )r   r   NTr*   r'    r   r   is_encoder_decoderdropout_rater<   classifier_dropout_rater5   r   c
                    s  t |trtdi |}n|d u rt }td nt |ts(tt| dt |tr5tdi |}n|d u rBt }td nt |tsPtt| d|jj	|j	kretd|jj	 d|j	 d|sktd|jj
|j
krtd|jj
 d|j
 d||j_||j_||j_||_|| _||_||_|| _d	D ]}||
vrt|||
|< q|| _|| _|j| _|| _|	| _t jdd
|i|
 d S )NzDencoder is None, using default T5Gemma2EncoderConfig encoder config.z is not supported.zDdecoder is None, using default T5Gemma2DecoderConfig decoder config.zBImbalanced encoder-decoder is not supported in T5Gemma2: encoder (z) vs decoder (z).z4T5Gemma2Model only support encoder-decoder modeling.zRImbalanced encoder-decoder vocabulary size is not supported in T5Gemma2: encoder ()r:   r8   r9   r,   r   rR   )r   r   r   r   r   
ValueErrortyper   r   r-   r,   r   r<   r   r   r   r   getattrr   r5   r   r   rY   rZ   )rQ   r   r   r   r   r<   r   r5   r   r   r\   special_token_keyr]   rR   rS   rZ     sd   



zT5Gemma2Config.__init__)	NNTr*   r*   r*   r'   r   T)rw   rx   ry   rz   r{   r|   r   r   r   r   r   r   r   rK   r   r   rZ   r   rR   rR   r]   rS   r     sL    $	
r   )r   r   r   r   N)typingr   configuration_utilsr   r   modeling_rope_utilsr   utilsr   siglipr	   
get_loggerrw   r   r   r   r   r   __all__rR   rR   rR   rS   <module>   s   
 6b 6y