Ë
    S^(hü.  ã                   óÀ   — d Z ddlmZ ddlmZmZmZmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZ ddlmZ  ej&                  e«      Z G d	„ d
e«      Z G d„ de«      Zd
dgZy)zOpenAI GPT-2 configurationé    )ÚOrderedDict)ÚAnyÚListÚMappingÚOptionalé   )ÚPreTrainedTokenizerÚ
TensorTypeÚis_torch_available)ÚPretrainedConfig)ÚOnnxConfigWithPastÚPatchingSpec)Úloggingc                   ój   ‡ — e Zd ZdZdZdgZdddddœZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
ˆ fd	„	Zˆ xZS )Ú
GPT2ConfigaK  
    This is the configuration class to store the configuration of a [`GPT2Model`] or a [`TFGPT2Model`]. It is used to
    instantiate a GPT-2 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 GPT-2
    [openai-community/gpt2](https://huggingface.co/openai-community/gpt2) architecture.

    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 50257):
            Vocabulary size of the GPT-2 model. Defines the number of different tokens that can be represented by the
            `inputs_ids` passed when calling [`GPT2Model`] or [`TFGPT2Model`].
        n_positions (`int`, *optional*, defaults to 1024):
            The maximum sequence length that this model might ever be used with. Typically set this to something large
            just in case (e.g., 512 or 1024 or 2048).
        n_embd (`int`, *optional*, defaults to 768):
            Dimensionality of the embeddings and hidden states.
        n_layer (`int`, *optional*, defaults to 12):
            Number of hidden layers in the Transformer encoder.
        n_head (`int`, *optional*, defaults to 12):
            Number of attention heads for each attention layer in the Transformer encoder.
        n_inner (`int`, *optional*):
            Dimensionality of the inner feed-forward layers. `None` will set it to 4 times n_embd
        activation_function (`str`, *optional*, defaults to `"gelu_new"`):
            Activation function, to be selected in the list `["relu", "silu", "gelu", "tanh", "gelu_new"]`.
        resid_pdrop (`float`, *optional*, defaults to 0.1):
            The dropout probability for all fully connected layers in the embeddings, encoder, and pooler.
        embd_pdrop (`float`, *optional*, defaults to 0.1):
            The dropout ratio for the embeddings.
        attn_pdrop (`float`, *optional*, defaults to 0.1):
            The dropout ratio for the attention.
        layer_norm_epsilon (`float`, *optional*, defaults to 1e-05):
            The epsilon to use in the layer normalization layers.
        initializer_range (`float`, *optional*, defaults to 0.02):
            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
        summary_type (`string`, *optional*, defaults to `"cls_index"`):
            Argument used when doing sequence summary, used in the models [`GPT2DoubleHeadsModel`] and
            [`TFGPT2DoubleHeadsModel`].

            Has to be one of the following options:

                - `"last"`: Take the last token hidden state (like XLNet).
                - `"first"`: Take the first token hidden state (like BERT).
                - `"mean"`: Take the mean of all tokens hidden states.
                - `"cls_index"`: Supply a Tensor of classification token position (like GPT/GPT-2).
                - `"attn"`: Not implemented now, use multi-head attention.
        summary_use_proj (`bool`, *optional*, defaults to `True`):
            Argument used when doing sequence summary, used in the models [`GPT2DoubleHeadsModel`] and
            [`TFGPT2DoubleHeadsModel`].

            Whether or not to add a projection after the vector extraction.
        summary_activation (`str`, *optional*):
            Argument used when doing sequence summary. Used in for the multiple choice head in
            [`GPT2DoubleHeadsModel`].

            Pass `"tanh"` for a tanh activation to the output, any other value will result in no activation.
        summary_proj_to_labels (`bool`, *optional*, defaults to `True`):
            Argument used when doing sequence summary, used in the models [`GPT2DoubleHeadsModel`] and
            [`TFGPT2DoubleHeadsModel`].

            Whether the projection outputs should have `config.num_labels` or `config.hidden_size` classes.
        summary_first_dropout (`float`, *optional*, defaults to 0.1):
            Argument used when doing sequence summary, used in the models [`GPT2DoubleHeadsModel`] and
            [`TFGPT2DoubleHeadsModel`].

            The dropout ratio to be used after the projection and activation.
        scale_attn_weights (`bool`, *optional*, defaults to `True`):
            Scale attention weights by dividing by sqrt(hidden_size)..
        use_cache (`bool`, *optional*, defaults to `True`):
            Whether or not the model should return the last key/values attentions (not used by all models).
        bos_token_id (`int`, *optional*, defaults to 50256):
            Id of the beginning of sentence token in the vocabulary.
        eos_token_id (`int`, *optional*, defaults to 50256):
            Id of the end of sentence token in the vocabulary.
        scale_attn_by_inverse_layer_idx (`bool`, *optional*, defaults to `False`):
            Whether to additionally scale attention weights by `1 / layer_idx + 1`.
        reorder_and_upcast_attn (`bool`, *optional*, defaults to `False`):
            Whether to scale keys (K) prior to computing attention (dot-product) and upcast attention
            dot-product/softmax to float() when training with mixed precision.

    Example:

    ```python
    >>> from transformers import GPT2Config, GPT2Model

    >>> # Initializing a GPT2 configuration
    >>> configuration = GPT2Config()

    >>> # Initializing a model (with random weights) from the configuration
    >>> model = GPT2Model(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```Úgpt2Úpast_key_valuesÚn_embdÚn_positionsÚn_headÚn_layer)Úhidden_sizeÚmax_position_embeddingsÚnum_attention_headsÚnum_hidden_layersc                 ól  •— || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        t/        ‰| �`  d||dœ|¤Ž y )N)Úbos_token_idÚeos_token_id© )Ú
vocab_sizer   r   r   r   Ún_innerÚactivation_functionÚresid_pdropÚ
embd_pdropÚ
attn_pdropÚlayer_norm_epsilonÚinitializer_rangeÚsummary_typeÚsummary_use_projÚsummary_activationÚsummary_first_dropoutÚsummary_proj_to_labelsÚscale_attn_weightsÚ	use_cacheÚscale_attn_by_inverse_layer_idxÚreorder_and_upcast_attnr   r   ÚsuperÚ__init__)Úselfr    r   r   r   r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r,   r+   r-   r.   r   r   r/   r0   ÚkwargsÚ	__class__s                            €úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/gpt2/configuration_gpt2.pyr2   zGPT2Config.__init__‰   sÍ   ø€ ð6 %ˆŒØ&ˆÔØˆŒØˆŒØˆŒØˆŒØ#6ˆÔ Ø&ˆÔØ$ˆŒØ$ˆŒØ"4ˆÔØ!2ˆÔØ(ˆÔØ 0ˆÔØ"4ˆÔØ%:ˆÔ"Ø&<ˆÔ#Ø"4ˆÔØ"ˆŒØ/NˆÔ,Ø'>ˆÔ$à(ˆÔØ(ˆÔä‰ÑÐX lÀÑXÐQWÓXó    )iQÄ  i   i   é   r8   NÚgelu_newçš™™™™™¹?r:   r:   gñhãˆµøä>g{®Gáz”?Ú	cls_indexTNTr:   TTéPÄ  r<   FF)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typeÚkeys_to_ignore_at_inferenceÚattribute_mapr2   Ú__classcell__©r5   s   @r6   r   r      s€   ø„ ñ_ðB €JØ#4Ð"5ÐàØ#0Ø'Ø&ñ	€Mð ØØØØØØ&ØØØØØØ ØØØ#Ø!ØØØØØ(-Ø %÷14Yñ 4Yr7   r   c                   óè   ‡ — e Zd Z	 	 	 ddededee   defˆ fd„Ze	de
ee
eef   f   fd„«       Ze	defd„«       Ze	defd	„«       Z	 	 	 	 dd
ededededee   de
eef   fˆ fd„Ze	defd„«       Zˆ xZS )ÚGPT2OnnxConfigÚconfigÚtaskÚpatching_specsÚuse_pastc                 ó~   •— t         ‰| �  ||||¬«       t        | j                  dd «      sd| j                  _        y y )N)rI   rJ   rK   Úpad_token_idr   )r1   r2   ÚgetattrÚ_configrM   )r3   rH   rI   rJ   rK   r5   s        €r6   r2   zGPT2OnnxConfig.__init__Á   s=   ø€ ô 	‰Ñ˜ d¸>ÐT\ÐÔ]Ü�t—|‘| ^°TÔ:à()ˆD�L‰LÕ%ð ;r7   Úreturnc                 óˆ   — t        ddddœi«      }| j                  r| j                  |d¬«       dddœ|d<   |S dddœ|d<   |S )	NÚ	input_idsÚbatchÚsequence)r   é   Úinputs)Ú	directionzpast_sequence + sequenceÚattention_mask)r   rK   Úfill_with_past_key_values_)r3   Úcommon_inputss     r6   rV   zGPT2OnnxConfig.inputsÍ   sa   € ä# [°gÀ*Ñ2MÐ$NÓOˆØ�=Š=Ø×+Ñ+¨MÀXÐ+ÔNØ29Ð>XÑ.YˆMÐ*Ñ+ð Ðð 3:¸jÑ.IˆMÐ*Ñ+àÐr7   c                 ó.   — | j                   j                  S ©N)rO   r   ©r3   s    r6   Ú
num_layerszGPT2OnnxConfig.num_layersØ   s   € à�|‰|×#Ñ#Ð#r7   c                 ó.   — | j                   j                  S r\   )rO   r   r]   s    r6   r   z"GPT2OnnxConfig.num_attention_headsÜ   s   € à�|‰|×"Ñ"Ð"r7   Ú	tokenizerÚ
batch_sizeÚ
seq_lengthÚis_pairÚ	frameworkc                 óh  •— t         t        | �  |||||¬«      }t        d|d   i«      }| j                  r§t        «       st        d«      ‚dd l}|d   j                  \  }	}
|
dz   }|	| j                  || j                  j                  | j                  z  f}t        | j                  «      D �cg c]$  }|j                  |«      |j                  |«      f‘Œ& c}|d<   |d   |d<   | j                  r<|d   j                  }j!                  |d   |j#                  	|¬«      gd	¬
«      |d<   |S c c}w )N)ra   rb   rc   rd   rR   zACannot generate dummy past_keys inputs without PyTorch installed.r   é   r   rX   )ÚdtyperU   )Údim)r1   r   Úgenerate_dummy_inputsr   rK   r   Ú
ValueErrorÚtorchÚshaper   rO   r   Úranger^   Úzerosrg   ÚcatÚones)r3   r`   ra   rb   rc   rd   rZ   Úordered_inputsrk   rS   ÚseqlenÚpast_key_values_lengthÚ
past_shapeÚ_Ú
mask_dtyper5   s                  €r6   ri   z$GPT2OnnxConfig.generate_dummy_inputsà   s^  ø€ ô Ô0°$ÑMØ *¸ÈWÐ`ið Nó 
ˆô
 % k°=ÀÑ3MÐ%NÓOˆð �=Š=Ü%Ô'Ü Ð!dÓeÐeãà -¨kÑ :× @Ñ @‘��và)/°!©Ð&àØ×,Ñ,Ø*Ø—L‘L×,Ñ,°×0HÑ0HÑHð	�
ô QVÐVZ×VeÑVeÓPfö5ØKL�U—[‘[ Ó,¨e¯k©k¸*Ó.EÒFò5�Ð0Ñ1ð ,9Ð9IÑ+JˆÐ'Ñ(Ø�=Š=Ø'Ð(8Ñ9×?Ñ?ˆJØ/4¯y©yØÐ 0Ñ1°5·:±:¸eÐE[Ðcm°:Ó3nÐoÐuvð 09ó 0ˆNÐ+Ñ,ð Ðùò5s   Â.)D/c                  ó   — y)Né   r   r]   s    r6   Údefault_onnx_opsetz!GPT2OnnxConfig.default_onnx_opset  s   € àr7   )ÚdefaultNF)éÿÿÿÿr{   FN)r=   r>   r?   r   Ústrr   r   Úboolr2   Úpropertyr   ÚintrV   r^   r   r	   r   r
   r   ri   ry   rD   rE   s   @r6   rG   rG   À   s  ø„ ð Ø-1Øñ
*à ð
*ð ð
*ð ˜\Ñ*ð	
*ð
 õ
*ð ð˜  W¨S°#¨XÑ%6Ð 6Ñ7ò ó ðð ð$˜Cò $ó ð$ð ð# Sò #ó ð#ð ØØØ*.ñ*à&ð*ð ð*ð ð	*ð
 ð*ð ˜JÑ'ð*ð 
��c�Ñ	õ*ðX ð Cò ó ôr7   rG   N)r@   Úcollectionsr   Útypingr   r   r   r   Ú r	   r
   r   Úconfiguration_utilsr   Úonnxr   r   Úutilsr   Ú
get_loggerr=   Úloggerr   rG   Ú__all__r   r7   r6   ú<module>r‰      se   ðñ  !å #ß /Ó /ç CÑ CÝ 3ß 4Ý ð 
ˆ×	Ñ	˜HÓ	%€ô_YÐ!ô _YôDNÐ'ô Nðb Ð)Ð
*�r7   