
    n i                         d dl Z d dlZd dlZd dlmZ d dlmZmZmZ  G d de          Z	d Z
d Zd Zd	 Zd
 Zedk    r e             dS dS )    N)	Converter)common_spec
model_spectransformer_specc                   $    e Zd ZdZdefdZd ZdS )OpenAIGPT2Converterz;Converts GPT-2 models from https://github.com/openai/gpt-2.	model_dirc                     || _         dS )zInitializes the OpenAI GPT-2 converter.

        Arguments:
          model_dir: Path to the OpenAI GPT-2 model directory.
        N)
_model_dir)selfr	   s     b/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/ctranslate2/converters/openai_gpt2.py__init__zOpenAIGPT2Converter.__init__   s     $    c                    dd l }|j                            | j                  fd                                                                D             }t          t          j        	                    | j        d                    5 }t          j        |          }d d d            n# 1 swxY w Y   t          t          j        	                    | j        d                    5 }t          j        |          }d t          |                                d           D             }d d d            n# 1 swxY w Y   t          j                            |d         |d	         d
t"          j        j                  }t)          |j        |d           d|_        d|_        d|_        |                    |           |S )Nr   c                 <    i | ]}|                     |          S  )
get_tensor).0namereaders     r   
<dictcomp>z-OpenAIGPT2Converter._load.<locals>.<dictcomp>   s9     
 
 
 &##D))
 
 
r   zhparams.jsonzencoder.jsonc                     g | ]\  }}|S r   r   )r   tokenindexs      r   
<listcomp>z-OpenAIGPT2Converter._load.<locals>.<listcomp>!   s,        E5   r   c                     | d         S )N   r   )items    r   <lambda>z+OpenAIGPT2Converter._load.<locals>.<lambda>#   s    4PQ7 r   )keyn_layern_headT)pre_norm
activationmodelz<|endoftext|>)
tensorflowtrainload_checkpointr   get_variable_to_shape_mapkeysopenospathjoinjsonloadsorteditemsr   TransformerDecoderModelSpecfrom_configr   
ActivationGELUTanhset_decoderdecoder	unk_token	bos_token	eos_tokenregister_vocabulary)	r   tfweightshparams_filehparams
vocab_filevocabspecr   s	           @r   _loadzOpenAIGPT2Converter._load   s!   ))$/::
 
 
 
88::??AA
 
 

 "',,t??@@ 	.Li--G	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	."',,t??@@ 	JIj))E $*5;;==>R>R$S$S$S  E	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  ;GGIH"-6	 H 
 
 	DL'7333(((  '''s%   	B**B.1B.'AD66D:=D:N)__name__
__module____qualname____doc__strr   rD   r   r   r   r   r   	   sD        EE$# $ $ $ $    r   r   c                 &   |d|z           | j         _        |d|z           | j        _        d| _        | j         j        | j        _        t          | j        |d|z             t          | j	                  D ]\  }}t          ||d||fz             d S )Nz%s/wtez%s/wpeFz%s/ln_fz%s/h%d)
embeddingsweightposition_encodings	encodingsscale_embeddings
projectionset_layer_norm
layer_norm	enumeratelayer	set_layer)rC   r>   scopei
layer_specs        r   r7   r7   4   s    $X%56DO(/50@(AD%!D!_3DO4?GY->???"4:.. > >:*gx5!*'<====> >r   c                 F    |d|z           | _         |d|z           | _        d S )Nz%s/g%s/b)gammabetarC   r>   rV   s      r   rQ   rQ   >   s&    %(DJ'DIIIr   c                     |d|z                                                                            | _        |d|z           | _        d S )Nz%s/wrZ   )squeeze	transposerL   biasr]   s      r   
set_linearrb   C   s>    &5.)1133==??DK'DIIIr   c                    t          | j        j        |d|z             t          | j        j        d         |d|z             t          | j        j        d         |d|z             t          | j        j        |d|z             t          | j        j        |d|z             t          | j        j        |d|z             d S )	Nz%s/ln_1r   z%s/attn/c_attnr   z%s/attn/c_projz%s/ln_2z%s/mlp/c_fcz%s/mlp/c_proj)rQ   self_attentionrR   rb   linearffnlinear_0linear_1r]   s      r   rU   rU   H   s    4&17I<MNNNt")!,g7G%7OPPPt")!,g7G%7OPPP48&U1BCCCtx '=5+@AAAtx '?U+BCCCCCr   c                     t          j        t           j                  } |                     ddd           t	          j        |            |                                 }t          |j                  }|	                    |           d S )N)formatter_classz--model_dirTzPath to the model directory.)requiredhelp)
argparseArgumentParserArgumentDefaultsHelpFormatteradd_argumentr   declare_arguments
parse_argsr   r	   convert_from_args)parserargs	converters      r   mainrw   Q   s    $ >  F +I     '''D#DN33I%%%%%r   __main__)rm   r/   r,    ctranslate2.converters.converterr   ctranslate2.specsr   r   r   r   r7   rQ   rb   rU   rw   rE   r   r   r   <module>r{      s      				 6 6 6 6 6 6 G G G G G G G G G G( ( ( ( () ( ( (V> > >( ( (
( ( (
D D D
& 
& 
& zDFFFFF r   