
    C1i                         S SK r S SKrS SKrS SKJr  S SKJrJrJr   " S S\5      r	S r
S rS rS	 rS
 r\S:X  a  \" 5         gg)    N)	Converter)common_spec
model_spectransformer_specc                   ,    \ rS rSrSrS\4S jrS rSrg)OpenAIGPT2Converter	   z;Converts GPT-2 models from https://github.com/openai/gpt-2.	model_dirc                     Xl         g)zkInitializes the OpenAI GPT-2 converter.

Arguments:
  model_dir: Path to the OpenAI GPT-2 model directory.
N
_model_dir)selfr
   s     \/home/james-whalen/.local/lib/python3.13/site-packages/ctranslate2/converters/openai_gpt2.py__init__OpenAIGPT2Converter.__init__   s	     $    c                    SS K nUR                  R                  U R                  5      nUR	                  5       R                  5        Vs0 s H  nX2R                  U5      _M     nn[        [        R                  R                  U R                  S5      5       n[        R                  " U5      nS S S 5        [        [        R                  R                  U R                  S5      5       n[        R                  " U5      n[        UR                  5       S S9 V	V
s/ s H  u  pU	PM	     nn	n
S S S 5        [        R                   R#                  WS   US   S[$        R&                  R(                  S	9n[+        UR,                  US
5        SUl        SUl        SUl        UR5                  W5        U$ s  snf ! , (       d  f       GN= fs  sn
n	f ! , (       d  f       N= f)Nr   zhparams.jsonzencoder.jsonc                     U S   $ )N    )items    r   <lambda>+OpenAIGPT2Converter._load.<locals>.<lambda>#   s	    4PQ7r   )keyn_layern_headT)pre_norm
activationmodelz<|endoftext|>)
tensorflowtrainload_checkpointr   get_variable_to_shape_mapkeys
get_tensor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readernameweightshparams_filehparams
vocab_filevocabtokenindexspecs               r   _loadOpenAIGPT2Converter._load   s   ))$//: 88:??A
A ##D))A 	 

 "'',,t?@Lii-G A"'',,t?@JIIj)E %+5;;=>R$S$SLE $S   A  ;;GGIH"--66	 H 
 	DLL'73(((  '3

 A@ A@s0   
F5F:,3GG-G:
G	G
G r   N)	__name__
__module____qualname____firstlineno____doc__strr   rC   __static_attributes__r   r   r   r   r   	   s    E$# $r   r   c                 H   USU-     U R                   l        USU-     U R                  l        SU l        U R                   R                  U R
                  l        [        U R                  USU-  5        [        U R                  5       H  u  p4[        XASX#4-  5        M     g )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)rB   r;   scopei
layer_specs        r   r2   r2   4   s    $X%56DOO(/50@(AD%!D!__33DOO4??GY->?"4::.*x5*'<= /r   c                 8    USU-     U l         USU-     U l        g )Nz%s/g%s/b)gammabetarB   r;   rX   s      r   rS   rS   >   s"    %(DJ'DIr   c                 p    USU-     R                  5       R                  5       U l        USU-     U l        g )Nz%s/wr\   )squeeze	transposerN   biasr_   s      r   
set_linearrd   C   s4    &5.)113==?DK'DIr   c                    [        U R                  R                  USU-  5        [        U R                  R                  S   USU-  5        [        U R                  R                  S   USU-  5        [        U R
                  R                  USU-  5        [        U R
                  R                  USU-  5        [        U R
                  R                  USU-  5        g )	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)rS   self_attentionrT   rd   linearffnlinear_0linear_1r_   s      r   rW   rW   H   s    4&&117I<MNt""))!,g7G%7OPt""))!,g7G%7OP488&&U1BCtxx  '=5+@Atxx  '?U+BCr   c                     [         R                  " [         R                  S9n U R                  SSSS9  [        R
                  " U 5        U R                  5       n[        UR                  5      nUR                  U5        g )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   mainry   Q   sr    $$ >>F +I   'D#DNN3I%r   __main__)ro   r*   r'    ctranslate2.converters.converterr   ctranslate2.specsr   r   r   r   r2   rS   rd   rW   ry   rE   r   r   r   <module>r}      sR      	 6 G G() (V>(
(
D
& zF r   