
    Iui                         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        yy)    N)	Converter)common_spec
model_spectransformer_specc                   "    e Zd ZdZdefdZd Zy)OpenAIGPT2Converterz;Converts GPT-2 models from https://github.com/openai/gpt-2.	model_dirc                     || _         y)zInitializes the OpenAI GPT-2 converter.

        Arguments:
          model_dir: Path to the OpenAI GPT-2 model directory.
        N)
_model_dir)selfr	   s     T/opt/pipecat/venv/lib/python3.12/site-packages/ctranslate2/converters/openai_gpt2.py__init__zOpenAIGPT2Converter.__init__   s     $    c                    dd l }|j                  j                  | j                        }|j	                         j                         D ci c]  }||j                  |       }}t        t        j                  j                  | j                  d            5 }t        j                  |      }d d d        t        t        j                  j                  | j                  d            5 }t        j                  |      }t        |j                         d       D 	
cg c]  \  }	}
|		 }}	}
d d d        t        j                   j#                  d   |d   dt$        j&                  j(                  	      }t+        |j,                  |d
       d|_        d|_        d|_        |j5                         |S c c}w # 1 sw Y   xY wc c}
}	w # 1 sw Y   xY w)Nr   zhparams.jsonzencoder.jsonc                     | d   S )N    )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
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   _loadzOpenAIGPT2Converter._load   s   ))$//: 88:??A
 &##D))
 

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

	. 	.	 	s0   
F5F:)5GG*G:GGGN)__name__
__module____qualname____doc__strr   r?   r   r   r   r   r   	   s    E$# $r   r   c                 J   |d|z     | j                   _        |d|z     | j                  _        d| _        | j                   j                  | j
                  _        t        | j                  |d|z         t        | j                        D ]  \  }}t        ||d||fz          y )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)r>   r7   scopei
layer_specs        r   r.   r.   4   s    $X%56DOO(/50@(AD%!D!__33DOO4??GY->?"4::. >:*gx5!*'<=>r   c                 8    |d|z     | _         |d|z     | _        y )Nz%s/g%s/b)gammabetar>   r7   rQ   s      r   rL   rL   >   s"    %(DJ'DIr   c                 p    |d|z     j                         j                         | _        |d|z     | _        y )Nz%s/wrU   )squeeze	transposerG   biasrX   s      r   
set_linearr]   C   s4    &5.)113==?DK'DIr   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         y )	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)rL   self_attentionrM   r]   linearffnlinear_0linear_1rX   s      r   rP   rP   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                  
   t        j                  t         j                        } | j                  ddd       t	        j
                  |        | j                         }t        |j                        }|j                  |       y )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   mainrr   Q   sr    $$ >>F +I   'D#DNN3I%r   __main__)rh   r&   r#    ctranslate2.converters.converterr   ctranslate2.specsr   r   r   r   r.   rL   r]   rP   rr   r@   r   r   r   <module>rv      sR      	 6 G G() (V>(
(
D
& zF r   