
    C1i/                        S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJr  \R                   R"                  \R                   R$                  \R                   R&                  \R                   R(                  S	.rS
 rS rS r " S S\5      rS rS rSS jrS rS rSS jrS r SS jr!S r"S r#S r$S r%S r&S r'\(S:X  a  \'" 5         gg)     N)PredictConfig)PositionEncodingType)vocabs_to_dict)get_model_class)utils)	Converter)common_spectransformer_spec)gelu	fast_gelurelu
gated-siluc                    [        U R                  SS5      [        R                  :H  n[        U R                  SS5      [        R                  :H  nU(       a  [        S5      e[        U R                  SS5      [        R                  :H  nU(       a  [        S5      e[        U SS5      n[        U R                  SS5      S:X  a  S	n	S
n
O,U R                  R                  n	U R                  R                  n
[        U R                  SS5      nUS:H  n[        U SS5      nUS:w  a  [        S5      e[        R                  R                  U R                  R                  U R                  R                  4UU[        U   UU R                   S:H  U	U
US9	n[#        X5        U H  nUR%                  U5        M     U H  nUR'                  U5        M     U$ )4Creates a model specification from the model config.position_encoding_typeNzBRotary embeddings are not supported yet for encoder/decoder modelsz5Alibi is not supported yet for encoder/decoder modelsmlp_activation_fnr   lambda_alignr      heads   r   sliding_windowz=Sliding window is not suported yet for encoder/decoder modelsrms)with_relative_position
activationffn_glurms_normalignment_layeralignment_headsnum_source_embeddings)getattr
embeddingsr   RelativeRotary
ValueErrorAlibidecoderr   r   r
   TransformerSpecfrom_configencoderlayers_SUPPORTED_ACTIVATIONS
layer_normset_transformer_specregister_source_vocabularyregister_target_vocabulary)config	variables
src_vocabs
tgt_vocabsr    r   with_rotary
with_alibiactivation_fnr   r   	num_headsr   r   
model_spec	src_vocab	tgt_vocabs                    Y/home/james-whalen/.local/lib/python3.13/site-packages/ctranslate2/converters/eole_ct2.py_get_model_spec_seq2seqr=      s   
 	!!#;TB((	) 
 	!!#;TB&&	'  P
 	
 	!!#;TB%%	&  PQQF$7@M v~~~q1Q6 ..88 ..883I |+GV%5q9NK
 	
 "11==			 5 565)-8""e+
 ('3 > J$ /	--i8  	--i8       c                    [        U R                  SS5      [        R                  :H  n[        U R                  SS5      [        R                  :H  n[        U R                  SS5      [        R
                  :H  n[        U SS5      n[        U R                  SS5      n	[        U R                  SS5      n
X:X  d  U
S:X  a  Sn
U(       a  SOSn[        U R                  S	S
5      nUS:H  n[        U SS5      n[        R                  R                  U R                  R                  U	[        U   UUUU R                  S:H  UUU
US9n[        UR                  USS9  U H  nUR                  U5        M     U$ )r   r   Nr   r   r   r   heads_kvr   rotary_interleaveTr   r   r   )	r   r   r   alibir   
rotary_dimrA   num_heads_kvr   Fwith_encoder_attention)r!   r"   r   r#   r$   r&   r'   rope_configr
   TransformerDecoderModelSpecr)   r+   r,   r-   set_transformer_decoderregister_vocabulary)r1   r2   r3   r4   r    r   r5   r6   r7   r8   num_kvrC   rA   r   r   r9   r;   s                    r<   _get_model_spec_lmrL   \   s   
 	!!#;TB((	) 
 	!!#;TB&&	' 
 	!!#;TB%%	&  F$7@M3IV^^Z3Ffk!tJ 2 24GN|+GV%5q9N!==II)-85""e++% J J $  	&&y1   r>   c                      U S   /nU S   /nX4$ )Nsrctgt )vocabr3   r4   s      r<   
get_vocabsrR      s!    ,J,J!!r>   c                   ,    \ rS rSrSrS\4S jrS rSrg)EoleConverter   z(Converts models generated by OpenNMT-py.
model_pathc                     Xl         g)zqInitializes the OpenNMT-py converter.

Arguments:
  model_path: Path to the OpenNMT-py PyTorch model (.pt file).
N_model_path)selfrV   s     r<   __init__EoleConverter.__init__   s
     &r>   c           	         SS K n[        U R                  SS9n[        UR                  5      nUR                  U5      u  pEn[        U5      nXbl        [        U5      u  pUR                  R                  R                  S:X  a/  [        UR                  UR                  5       UU	[        U5      S9n
OB[        UR                  UR                  5       UU	[        U5      S9n
US   U
R                  l        US   S   U
R                  l        US   S	   U
R                  l        US   S
   U
R                  l        ['        USS5      U
R                  l        U
$ )Nr   dummy)rV   rN   transformer_lm)r    decoder_start_tokenspecials	bos_token	eos_token	unk_tokennorm_epsgư>)torchr   rY   r   modelfor_inferencer   rR   r'   decoder_typerL   
state_dictlenr=   r1   r`   rb   rc   rd   r!   layer_norm_epsilon)rZ   rf   r1   model_classrg   vocabsmodel_configvocabs_dictr3   r4   specs              r<   _loadEoleConverter._load   s5   $*:*:H%fll3&1&?&?&G#|$V,#!+K!8
<<,,0@@%  "&)*oD +  "&)*oD /55J.KDKK+ &z 2; ? &z 2; ? &z 2; ?)0T)J&r>   rX   N)	__name__
__module____qualname____firstlineno____doc__strr[   rr   __static_attributes__rP   r>   r<   rT   rT      s    2&3 &#r>   rT   c                 \    [        U R                  U5        [        U R                  U5        g N)set_transformer_encoderr*   rI   r'   )rq   r2   s     r<   r.   r.      s    DLL)4DLL)4r>   c                     [        XS5        [        U R                  US5        [        U R                  5       H  u  p#[        X1SU-  5        M     g )Nsrc_embzencoder.layer_normzencoder.transformer_layers.%d)set_input_layersset_layer_normr-   	enumeratelayerset_transformer_encoder_layer)rq   r2   ir   s       r<   r}   r}      sE    Ti04??I/CDdjj)%=A	
 *r>   c                     [        XS5        [        U R                  US5        [        U R                  5       H  u  p4[        UUSU-  US9  M     [        U R                  US5        g )Ntgt_embzdecoder.layer_normzdecoder.transformer_layers.%drE   	generator)r   r   r-   r   r   set_transformer_decoder_layer
set_linear
projection)rq   r2   rF   r   r   s        r<   rI   rI      s]    Ti04??I/CDdjj)%+a/#9		
 * t	;7r>   c                     [        U S5      (       a  [        U R                  USU-  5        OSU l        U R                  n[        U[        5      (       a  US   n[        X1SU-  5        g )Nposition_encodings%s.peFr   z%s.embeddings)hasattrset_position_encodingsr   scale_embeddingsr"   
isinstancelistset_embeddings)rq   r2   scopeembeddings_specss       r<   r   r      sh    t)**##eO	
 !&"D))+A.#%0GHr>   c                     [        U R                  USU-  SS9  [        U R                  R                  USU-  5        [        U R                  R                  USU-  5        [        U R                  USU-  5        g )N%s.self_attnTself_attention%s.input_layernorm%s.post_attention_layernorm%s.mlp)set_multi_head_attentionr   r   r-   ffnset_ffnrq   r2   r   s      r<   r   r      s|    	 &&	3G%3O Y(E(M DHHiE!12r>   c                    [        U R                  USU-  SS9  [        U R                  R                  USU-  5        U(       a>  [        U R                  USU-  5        [        U R                  R                  USU-  5        [        U R
                  R                  USU-  5        [        U R
                  USU-  5        g )	Nr   Tr   r   z%s.context_attnz%s.precontext_layernormr   r   )r   r   r   r-   	attentionr   r   )rq   r2   r   rF   s       r<   r   r     s    	 &&	3G%3O  <MPU<UVNN%%y2Ke2S	
 Y(E(M DHHiE!12r>   c                     [        U R                  USU-  5        [        U R                  USU-  5        [        U S5      (       a  [        U R                  USU-  5        g g )Nz%s.gate_up_projz%s.down_projlinear_0_noactz
%s.up_proj)r   linear_0linear_1r   r   r   s      r<   r   r     sW    t}}i):U)BCt}}i%)?@t%&&4&&	<%3GH 'r>   c                    U(       a  [        S5       Vs/ s H  n[        R                  " 5       PM     nn[        US   USU-  5        [        US   USU-  5        [        US   USU-  5        [        R
                  " U R                  S   U5        O[        U R                  S   USU-  5        [        S5       Vs/ s H  n[        R                  " 5       PM     nn[        US   USU-  5        [        US   USU-  5        [        R
                  " U R                  S   U5        [        U R                  S   US	U-  5        [        U S
5      (       a&  [        USU-  5      U l	        U R                  U l
        g g s  snf s  snf )N   r   z%s.linear_queryr   z%s.linear_keys   z%s.linear_valuesr   z%s.final_linearrelative_position_keysz'%s.relative_positions_embeddings.weight)ranger	   
LinearSpecr   r   fuse_linearlinearr   _get_variabler   relative_position_values)rq   r2   r   r   _split_layerss         r<   r   r   !  s`   :?(C(Q..0(C<?I/@5/HI<?I/?%/GH<?I/AE/IJ$++a.,74;;q>9.?%.GH:?(C(Q..0(C<?I/?%/GH<?I/AE/IJ$++a.,7t{{2	+<u+DEt-..&3@5H'
# )-(C(C%	 / D Ds   E>>Fc                      [        USU-  5      U l         [        USU-  5      U l        g ! [         a+    [        USU-  5      U l        [        USU-  5      U l         NJf = f! [         a     g f = f)N	%s.weightz%s.a_2z%s.b_2%s.bias)r   gammaKeyErrorbetar   s      r<   r   r   6  s|    ?"9kE.AB

!)Y->?	  ?"9h.>?
!)X-=>	?  s    , A$ 2A! A!$
A10A1c                 h    [        USU-  5      U l        UR                  SU-  5      nUb  X0l        g g )Nr   r   )r   weightgetbias)rq   r2   r   r   s       r<   r   r   C  s8    	;+>?DK==U*+D	 r>   c                 ,    [        USU-  5      U l        g )Nr   )r   r   r   s      r<   r   r   J  s    	;+>?DKr>   c                 H    [        USU-  5      R                  5       U l        g )Nr   )r   squeeze	encodingsr   s      r<   r   r   N  s    "9go>FFHDNr>   c                 
    X   $ r|   rP   )r2   names     r<   r   r   R  s
    ?r>   c                      [         R                  " [         R                  S9n U R                  SSSS9  [        R
                  " U 5        U R                  5       n[        UR                  5      R                  U5        g )N)formatter_classz--model_pathTzModel path.)requiredhelp)
argparseArgumentParserArgumentDefaultsHelpFormatteradd_argumentr   declare_arguments
parse_argsrT   rV   convert_from_args)parserargss     r<   mainr   V  se    $$ >>F MJ'D$//"44T:r>   __main__)T)F))r   eole.config.runr   eole.constantsr   eole.inputters.inputterr   eole.models.modelr   ctranslate2.convertersr    ctranslate2.converters.converterr   ctranslate2.specsr	   r
   
ActivationGELUGELUTanhRELUSWISHr,   r=   rL   rR   rT   r.   r}   rI   r   r   r   r   r   r   r   r   r   r   r   rt   rP   r>   r<   <module>r      s     ) / 2 - ( 6 ; ""''''00""''((..	 EP2j".I .b5

8I"3 3*ID*
@I; zF r>   