
    qi}                         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j                  e      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Zg dZy)    )Any   )PreTrainedConfiglayer_type_validation)RopeParameters)logging   )SiglipVisionConfigc            2           e Zd ZdZdZdgZdd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z  de	dz  de	dz  de	dz  de	dz  de	dz  de	dz  de
dz  de	dz  dedz  de	dz  dedz  de	dz  de	dz  de	dz  d edz  d!edz  d"e	dz  d#e	dz  d$ee
   dz  d%edz  d&edz  d'eee
ef   z  dz  f. fd(Zd+d)Z x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replicated_with_grad_allreducerowwise	zlayers.*.self_attn.q_projzlayers.*.self_attn.k_projzlayers.*.self_attn.v_projzlayers.*.self_attn.q_normzlayers.*.self_attn.k_normz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localN
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                    || _         || _        || _        || _        |	| _        || _        || _        || _        || _        || _	        || _
        |
| _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        |j-                  dd      | _        | j*                  Et1        | j                        D cg c]!  }t3        |dz   | j.                  z        rdnd# c}| _        t5        | j*                  | j                         || _        t9        | t  di | y c c}w Nsliding_window_pattern      sliding_attentionfull_attention r,   r.   r-   r    r(   r!   r"   r#   r$   r&   r%   r)   r*   r+   r/   r0   r'   r1   r2   r4   r5   r3   get_sliding_window_patternrangeboolr   r6   super__init__selfr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   kwargsi	__class__s                             e/opt/pipecat/venv/lib/python3.12/site-packages/transformers/models/t5gemma2/configuration_t5gemma2.pyrE   zT5Gemma2TextConfig.__init__y   N   6 )(($'>$&!2!2#6  #6 !2(",!2!2%:",'>$&<#& (.zz2JA'N$# t556  (,QUd6R6R,R'S#Yii D 	d..0F0FG."6"    &D;c                    |j                  dd       }ddiddid}| j                  | j                  n|| _        || j                  d   j                  |       | j                  j                  d      ddi| j                  d<   | j                  d   j	                  d|j                  d| j
                  d                | j                  j                  d      ddi| j                  d<   | j                  d   j	                  d|j                  d	| j
                  d
                | j                          | j                  |       |S Nrope_scaling	rope_typedefault)r<   r=   r=   
rope_thetar   r<   rope_local_base_freqr   )ignore_keyspopr6   updater@   
setdefaultdefault_thetastandardize_rope_paramsvalidate_roperG   ignore_keys_at_rope_validationrH   rP   default_rope_paramss        rK   convert_rope_params_to_dictz.T5Gemma2TextConfig.convert_rope_params_to_dict   [   zz.$7
 #.y!9*I6
 8<7K7K7Wt33]p#  !1299,G ##$45=6A95MD  !12-.99&**\43E3Eh3OP	
 ##$78@9Di8PD  !4501<<&**%;T=O=OPW=XY	

 	$$&'EF    i@  i 	  i $              gelu_pytorch_tanhi   {Gz?gư>Tr   r;   r	   F        rg   i   NNNNN__name__
__module____qualname____doc__
model_typekeys_to_ignore_at_inferencebase_model_tp_planbase_model_pp_planrZ   intstrfloatrC   listr   dictrE   r`   __classcell__rJ   s   @rK   r   r       s&   BH !J#4"5%.%.%.%E%E%."+ )"+
 &(9:#%568IJ!"_$56
  +X>M ")"&(,(**+*+"(;.5*.#'!%#$#$#$&+*-,/%)(,04/3MQ1=#$J=# 4Z=# :	=#
 :=# !4Z=# !4Z=# *=# :=# "%t=# !4<=# Dj=# $;=# Dj=# Dj=#  Dj!=#" t#=#$ !4<%=#&  #Tz'=#( d
)=#* #Y%+=#, "'-=#. !&/=#0 ($sN/B*CCdJ1=#~rb   r   c                        e Zd ZdZdZddddZeedZ	 	 	 	 	 	 	 	 dd	ee	e
ef   z  dz  d
ee	e
ef   z  dz  dedz  dedz  dedz  dedz  dedz  dedz  f fdZ x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   mm_tokens_per_imager)   tie_word_embeddingsc	                    | t               }t        j                  d       nt        |t              rt        di |}t        |t              rt        di |}n!|t               }t        j                  d       || _        || _        || _        || _	        || _
        || _        || _        || _        t        
| <  di |	 y )NzItext_config is None, using default T5Gemma2EncoderTextConfig text config.zFvision_config is None, using default SiglipVisionConfig vision config.r>   )r   loggerinfo
isinstancery   r
   r   r   r   r   r   r   r)   r   rD   rE   )rG   r   r   r   r   r   r   r)   r   rH   rJ   s             rK   rE   zT5Gemma2EncoderConfig.__init__  s     ,.KKKcdT*,;{;KmT*.??M".0MKK`a&*#6 ..!2!2#6 "6"rb   )NNrg   i i  i   ri   T)rm   rn   ro   rp   rq   attribute_mapr   r
   sub_configsry   rv   r   ru   rw   rC   rE   rz   r{   s   @rK   r}   r}      s    /b $J-))M *+K CGDH*-&-&-(/*.+/!#'$sCx.84?!# *DcN:TA!# !4Z	!#
 t!# t!# :!# !4<!# "D[!# !#rb   r}   c            2           e Zd ZdZdZdgZdd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z  de	dz  de	dz  de	dz  de	dz  de	dz  de	dz  de
dz  de	dz  dedz  de	dz  dedz  de	dz  de	dz  de	dz  d edz  d!edz  d"e	dz  d#e	dz  d$ee
   dz  d%edz  d&edz  d'eee
ef   z  dz  f. fd(Zd+d)Z xZS ),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   Nr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   c                    || _         || _        || _        || _        |	| _        || _        || _        || _        || _        || _	        || _
        |
| _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        |j-                  dd      | _        | j*                  Et1        | j                        D cg c]!  }t3        |dz   | j.                  z        rdnd# c}| _        t5        | j*                  | j                         || _        t9        | t  di | y c c}w r8   r?   rF   s                             rK   rE   zT5Gemma2DecoderConfig.__init__  rL   rM   c                    |j                  dd       }ddiddid}| j                  | j                  n|| _        || j                  d   j                  |       | j                  j                  d      ddi| j                  d<   | j                  d   j	                  d|j                  d| j
                  d                | j                  j                  d      ddi| j                  d<   | j                  d   j	                  d|j                  d	| j
                  d
                | j                          | j                  |       |S rO   rV   r]   s        rK   r`   z1T5Gemma2DecoderConfig.convert_rope_params_to_dict  ra   rb   rc   rk   rl   r{   s   @rK   r   r   9  s&   BH $J#4"5%.%.%.%E%E%."+ )"+
 &(9:#%568IJ!"_$56
  +X>M ")"&(,(**+*+"(;.5*.#'!%#$#$#$&+*-,/%)(,04/3MQ1=#$J=# 4Z=# :	=#
 :=# !4Z=# !4Z=# *=# :=# "%t=# !4<=# Dj=# $;=# Dj=# Dj=#  Dj!=#" t#=#$ !4<%=#&  #Tz'=#( d
)=#* #Y%+=#, "'-=#. !&/=#0 ($sN/B*CCdJ1=#~rb   r   c                        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   z  dz  d
ee
eef   z  dz  dedededededededz  f fdZ x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   Nr   r   is_encoder_decoderdropout_rater0   classifier_dropout_rater)   r   c
                 ^   t        |t              rt        di |}nI| t               }t        j	                  d       n't        |t              st        t        |       d      t        |t              rt        di |}nI| t               }t        j	                  d       n't        |t              st        t        |       d      |j                  j                  |j                  k7  r0t        d|j                  j                   d|j                   d      |st        d      |j                  j                  |j                  k7  r0t        d|j                  j                   d|j                   d      ||j                  _        ||j                  _        ||j                  _        ||_        || _        ||_        ||_        || _        d	D ]  }||
vst#        ||      |
|<    || _        || _        |j(                  | _        || _        |	| _        t-        | \  dd
|i|
 y )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.   r,   r-   r    r   r>   )r   ry   r}   r   r   
ValueErrortyper   r   r!   r    r   r0   r   r   r   r   getattrr   r)   r   r   rD   rE   )rG   r   r   r   r   r0   r   r)   r   r   rH   special_token_keyrJ   s               rK   rE   zT5Gemma2Config.__init__"  s+    gt$+6g6G_+-GKK^_g'<= DM?2D!EFFgt$+6g6G_+-GKK^_g'<= DM?2D!EFF**g.A.AA#//;;<N7K^K^J__ac 
 "STT))W-?-??#//::;>'J\J\I]]_a  ,8(0A-2C/$5!  ,$5!!_ 	P .,3G=N,O()	P (?$!2&66!2#6 I,>I&Irb   )	NNTrj   rj   rj   ri   i T)rm   rn   ro   rp   rq   rr   r}   r   r   r   ry   rv   r   rC   rw   ru   rE   rz   r{   s   @rK   r   r     s    "H J#4"5 )(K .)M BFAE#'!#&),#'!(+/DJ&c3h7$>DJ 'c3h7$>DJ !	DJ
 DJ !DJ "'DJ !DJ DJ "D[DJ DJrb   r   )r   r   r}   r   N)typingr   configuration_utilsr   r   modeling_rope_utilsr   utilsr   siglipr
   
get_loggerrm   r   r   r}   r   r   __all__r>   rb   rK   <module>r      st   *  J 1  ' 
		H	%t) tn_#, _#Dt, tnvJ% vJr erb   