
    n i/                     p   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZ ej        j        ej        j        ej        j        ej        j        d	Zd
 Zd Zd Z G d de          Zd Zd Zd dZd Zd Zd dZd Z d!dZ!d Z"d Z#d Z$d Z%d Z&d Z'e(dk    r e'             dS dS )"    N)PredictConfig)PositionEncodingType)vocabs_to_dict)	BaseModel)utils)	Converter)common_spectransformer_spec)gelu	fast_gelurelu
gated-siluc                 b   t          | j        dd          t          j        k    }t          | j        dd          t          j        k    }|rt          d          t          | j        dd          t          j        k    }|rt          d          t          | dd          }t          | j        dd          dk    rd	}	d
}
n| j        j        }	| j        j	        }
t          | j        dd          }|dk    }t          | dd          }|dk    rt          d          t          j                            | j        j        | j        j        f||t          |         || j        dk    |	|
|	  	        }t#          ||           |D ]}|                    |           |D ]}|                    |           |S )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                    _/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/ctranslate2/converters/eole_ct2.py_get_model_spec_seq2seqr=      s   
 	!#;TBB(	) 
 	!#;TBB&	'   
P
 
 	
 	!#;TBB%	&   RPQQQF$7@@M v~~q11Q66 .8 .833I |+GV%5q99NK
 
 	
 "1==		 565)-8"e+
 ('3 >  J$ Y/// 9 9	--i8888 9 9	--i8888    c                    t          | j        dd          t          j        k    }t          | j        dd          t          j        k    }t          | j        dd          t          j        k    }t          | dd          }t          | j        dd          }	t          | j        dd          }
|
|	k    s|
dk    rd}
|rdnd}t          | j        d	d
          }|dk    }t          | dd          }t          j	        
                    | j        j        |	t          |         |||| j        dk    |||
|          }t          |j        |d           |D ]}|                    |           |S )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B(	) 
 	!#;TBB&	' 
 	!#;TBB%	&  F$7@@M33IV^Z33Ffkk!+tJ 24GNN|+GV%5q99N!=II)-85"e++% J  J $      2 2	&&y1111r>   c                 .    | d         g}| d         g}||fS )Nsrctgt )vocabr3   r4   s      r<   
get_vocabsrR      s#    ,J,Jz!!r>   c                   $    e Zd ZdZdefdZd ZdS )EoleConverterz(Converts models generated by OpenNMT-py.
model_pathc                     || _         dS )zInitializes the OpenNMT-py converter.

        Arguments:
          model_path: Path to the OpenNMT-py PyTorch model (.pt file).
        N)_model_path)selfrU   s     r<   __init__zEoleConverter.__init__   s     &r>   c           	         dd l }t          | j        d          }t          j        |          \  }}}t          |          }||_        t          |          \  }}|j        j        j	        dk    r9t          |j        |                                ||t          |                    }	nJt          |j        |                                ||t          |                    }	|d         |	j        _        |d         d         |	j        _        |d         d	         |	j        _        |d         d
         |	j        _        t'          |dd          |	j        _        |	S )Nr   dummy)rU   rN   transformer_lm)r    decoder_start_tokenspecials	bos_token	eos_token	unk_tokennorm_epsgư>)torchr   rW   r   load_test_modelr   modelrR   r'   decoder_typerL   
state_dictlenr=   r1   r]   r_   r`   ra   r!   layer_norm_epsilon)
rX   rc   r1   vocabsre   model_configvocabs_dictr3   r4   specs
             r<   _loadzEoleConverter._load   sL   $*:HHH&/&?&G&G#|$V,,#!+K!8!8
J<,0@@@%  ""&)*oo  DD +  ""&)*oo  D /55J.KDK+ &z 2; ? &z 2; ? &z 2; ?)0T)J)J&r>   N)__name__
__module____qualname____doc__strrY   rn   rP   r>   r<   rT   rT      sD        22&3 & & & &" " " " "r>   rT   c                 Z    t          | j        |           t          | j        |           d S N)set_transformer_encoderr*   rI   r'   )rm   r2   s     r<   r.   r.      s,    DL)444DL)44444r>   c                     t          | |d           t          | j        |d           t          | j                  D ]\  }}t          ||d|z             d S )Nsrc_embzencoder.layer_normzencoder.transformer_layers.%d)set_input_layersset_layer_normr-   	enumeratelayerset_transformer_encoder_layer)rm   r2   ir|   s       r<   rv   rv      st    T9i0004?I/CDDDdj)) 
 
5%9=A	
 	
 	
 	

 
r>   Tc                     t          | |d           t          | j        |d           t          | j                  D ]\  }}t          ||d|z  |           t          | j        |d           d S )Ntgt_embzdecoder.layer_normzdecoder.transformer_layers.%drE   	generator)ry   rz   r-   r{   r|   set_transformer_decoder_layer
set_linear
projection)rm   r2   rF   r~   r|   s        r<   rI   rI      s    T9i0004?I/CDDDdj)) 
 
5%+a/#9		
 	
 	
 	
 	
 t	;77777r>   c                     t          | d          rt          | j        |d|z             nd| _        | j        }t          |t                    r|d         }t          ||d|z             d S )Nposition_encodings%s.peFr   z%s.embeddings)hasattrset_position_encodingsr   scale_embeddingsr"   
isinstancelistset_embeddings)rm   r2   scopeembeddings_specss       r<   ry   ry      s    t)** &#eO	
 	
 	
 	
 !&"D)) /+A.#Y%0GHHHHHr>   c                     t          | j        |d|z  d           t          | j        j        |d|z             t          | j        j        |d|z             t          | j        |d|z             d S )N%s.self_attnTself_attention%s.input_layernorm%s.post_attention_layernorm%s.mlp)set_multi_head_attentionr   rz   r-   ffnset_ffnrm   r2   r   s      r<   r}   r}      s    	    &	3G%3O   Y(E(M   DHiE!122222r>   c                 X   t          | j        |d|z  d           t          | j        j        |d|z             |r7t          | j        |d|z             t          | j        j        |d|z             t          | j        j        |d|z             t          | j        |d|z             d S )	Nr   Tr   r   z%s.context_attnz%s.precontext_layernormr   r   )r   r   rz   r-   	attentionr   r   )rm   r2   r   rF   s       r<   r   r     s    	    &	3G%3O    
 <MPU<UVVVN%y2Ke2S	
 	
 	
 Y(E(M   DHiE!122222r>   c                     t          | j        |d|z             t          | j        |d|z             t          | d          rt          | j        |d|z             d S d S )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     su    t}i):U)BCCCt}i%)?@@@t%&& I4&	<%3GHHHHHI Ir>   Fc                    |rd t          d          D             }t          |d         |d|z             t          |d         |d|z             t          |d         |d|z             t          j        | j        d         |           nt          | j        d         |d|z             d	 t          d          D             }t          |d         |d|z             t          |d         |d|z             t          j        | j        d         |           t          | j        d
         |d|z             t          | d          r&t          |d|z            | _        | j        | _        d S d S )Nc                 4    g | ]}t          j                    S rP   r	   
LinearSpec.0_s     r<   
<listcomp>z,set_multi_head_attention.<locals>.<listcomp>"  !    CCCQ.00CCCr>      r   z%s.linear_queryr   z%s.linear_keys   z%s.linear_valuesc                 4    g | ]}t          j                    S rP   r   r   s     r<   r   z,set_multi_head_attention.<locals>.<listcomp>)  r   r>   r   z%s.final_linearrelative_position_keysz'%s.relative_positions_embeddings.weight)	ranger   r   fuse_linearlinearr   _get_variabler   relative_position_values)rm   r2   r   r   split_layerss        r<   r   r      s    8CC%((CCC<?I/@5/HIII<?I/?%/GHHH<?I/AE/IJJJ$+a.,77774;q>9.?%.GHHHCC%((CCC<?I/?%/GHHH<?I/AE/IJJJ$+a.,777t{2	+<u+DEEEt-.. D&3@5H'
 '
# )-(C%%%	D Dr>   c                    	 t          |d|z            | _        n@# t          $ r3 t          |d|z            | _        t          |d|z            | _        Y nw xY w	 t          |d|z            | _        d S # t          $ r Y d S w xY w)N	%s.weightz%s.a_2z%s.b_2%s.bias)r   gammaKeyErrorbetar   s      r<   rz   rz   5  s    ?"9kE.ABB

 ? ? ?"9h.>??
!)X-=>>			?!)Y->??			   s!    :AAA6 6
BBc                 |    t          |d|z            | _        |                    d|z            }|	|| _        d S d S )Nr   r   )r   weightgetbias)rm   r2   r   r   s       r<   r   r   B  sG    	;+>??DK==U*++D			 r>   c                 6    t          |d|z            | _        d S )Nr   )r   r   r   s      r<   r   r   I  s    	;+>??DKKKr>   c                 Z    t          |d|z                                            | _        d S )Nr   )r   squeeze	encodingsr   s      r<   r   r   M  s'    "9go>>FFHHDNNNr>   c                     | |         S ru   rP   )r2   names     r<   r   r   Q  s    T?r>   c                     t          j        t           j                  } |                     ddd           t	          j        |            |                                 }t          |j                  	                    |           d S )N)formatter_classz--model_pathTzModel path.)requiredhelp)
argparseArgumentParserArgumentDefaultsHelpFormatteradd_argumentr   declare_arguments
parse_argsrT   rU   convert_from_args)parserargss     r<   mainr   U  s    $ >  F MJJ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.   rv   rI   ry   r}   r   r   r   rz   r   r   r   r   r   ro   rP   r>   r<   <module>r      s7    ) ) ) ) ) ) / / / / / / 2 2 2 2 2 2 ' ' ' ' ' ' ( ( ( ( ( ( 6 6 6 6 6 6 ; ; ; ; ; ; ; ; "''0"'(.	  E E EP2 2 2j" " "- - - - -I - - -`5 5 5

 
 
8 8 8 8I I I"3 3 3 3 3 3 3*I I ID D D D*
 
 
  @ @ @I I I  ; ; ; zDFFFFF r>   