
    n i2                     x   d dl 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ej        j        ej        j        dZ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)utils)	Converter)common_spectransformer_spec)gelu	fast_gelurelusilu)concatsumc           
         t          | dd          dk    }t          | dd          dk    }t          | dd          dk    }t          | dd          }t          | dd          }t          | d	d
          }t          j                    } || j        | j        k    o| j        dv d            ||d
k    d|z              ||t
          v d|dd                    t
                                                    d            || j        |p|p|k    d            ||dk    p|t          v d|dd                    t                                                    d           |
                                 d S )Nmax_relative_positionsr   pos_ffn_activation_fnr	   
feat_merger   self_attn_typez
scaled-dot>   transformertransformer_lmzROptions --encoder_type and --decoder_type must be 'transformer' or 'transformer_lmzNOption --self_attn_type %s is not supported (supported values are: scaled-dot)zOption --pos_ffn_activation_fn z. is not supported (supported activations are: z, )z`Options --position_encoding and --max_relative_positions cannot be both enabled or both disabled   zOption --feat_merge z. is not supported (supported merge modes are:  )getattrr   ConfigurationCheckerencoder_typedecoder_type_SUPPORTED_ACTIVATIONSjoinkeysposition_encoding_SUPPORTED_FEATURES_MERGEvalidate)	optnum_source_embeddingswith_relative_positionwith_rotary
with_alibiactivation_fnr   r   checks	            a/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/ctranslate2/converters/opennmt_py.py	check_optr+      s   $S*BAFFJ#7;;rAK6::b@JC!8&AAMlH55JS"2LAAN&((E	EC,, 	B AA	,   
E,&X
	  
 
E///==$))$:$?$?$A$ABBBB	D  
 
E"8"UK"U:V	  
 
E"Mj4M&M::sxx 9 > > @ @AAAA	C  
 
NN    c                 V   t          | dd          dk    }t          | dd          }t          | dd          }t          | dd          dk    rd}d	}	n| j        }| j        }	t          | d
d          }
t          j                            | j        | j        f|
|t          |         ||	|t          |         t          | dd          	  	        }t          | dd          |j
        _        t          ||           |D ]}|                    |           |D ]}|                    |           |S )5Creates a model specification from the model options.r   r   r   r	   r   r   lambda_alignr   r   heads   
multiqueryF)r%   
activationalignment_layeralignment_headsr$   embeddings_mergemulti_query_attentiondecoder_start_tokenz<s>)r   r4   r5   r   TransformerSpecfrom_config
enc_layers
dec_layersr   r!   configr8   set_transformer_specregister_source_vocabularyregister_target_vocabulary)r#   	variables
src_vocabs
tgt_vocabsr$   r%   r(   r   r4   r5   	num_heads
model_spec	src_vocab	tgt_vocabs                 r*   _get_model_spec_seq2seqrH   :   sY    %S*BAFFJC!8&AAMlH55J sNA&&!++--Wa((I!1==	(5)-8''32:>%c<?? > 
 
J -4C9NPU,V,VJ)Y/// 9 9	--i8888 9 9	--i8888r,   c                    t          | dd          dk    }t          | dd          dk    }t          | dd          dk    }t          | dd          }t          | dd          }	t          | d	d          }
|
|	k    s|
dk    rd
}
|rdnd
}t          | dd          }|dk    }t          | dd          }t          j                            | j        |	t
          |         |||| j        dk    ||t          | dd          |
|          }t          | dd          |j        _        t          |j
        |d           |D ]}|                    |           |S )r.   r   r   r   r   r   r	   r0   r1   num_kvNrotary_interleaveTr
   sliding_windowrmsr2   F)
r3   ffn_glur%   alibirms_norm
rotary_dimrK   r7   num_heads_kvrL   norm_epsgư>with_encoder_attention)r   r   TransformerDecoderModelSpecr:   r<   r   
layer_normr=   layer_norm_epsilonset_transformer_decoderdecoderregister_vocabulary)r#   rA   rB   rC   r$   r%   r&   r'   r(   rD   rJ   rQ   rK   rN   rL   rE   rG   s                    r*   _get_model_spec_lmr\   c   s   $S*BAFFJ#7;;rAK6::b@JC!8&AAMWa((IS(A&&Ffkk!+tJ%8$??v%GS"2A66N!=II)-855(+%c<??% J  J ,33
D+I+IJ($      2 2	&&y1111r,   c                    t          | t                    rd| v rt          | d         t                    rQ| d         g}| d         g}|                     d          }|'|                    |                                           nWd | d         j        D             }d | d         j        D             }n(| d         d         j        g}| d         d         j        g}||fS )Nsrctgt	src_featsc                 2    g | ]}|d          j         j        S r   vocabitos.0fields     r*   
<listcomp>zget_vocabs.<locals>.<listcomp>   !    OOO%%(.-OOOr,   c                 2    g | ]}|d          j         j        S rb   rc   rf   s     r*   ri   zget_vocabs.<locals>.<listcomp>   rj   r,   r   r   )
isinstancedictlistgetextendvaluesfieldsre   )rd   rB   rC   r`   s       r*   
get_vocabsrs      s    % (5E>>eElD)) 		P,J,J		+..I$!!)"2"2"4"4555OO5<;NOOOJOO5<;NOOOJJ Ahqk&'
Ahqk&'
z!!r,   c                   $    e Zd ZdZdefdZd ZdS )OpenNMTPyConverterz(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)selfrv   s     r*   __init__zOpenNMTPyConverter.__init__   s     &r,   c           	         dd l }|                    | j        d          }t          |d                   \  }}t	          |d         t          |                     |d         }|                    d |d	                                         D                        |d         j        d
k    r't          |d         |||t          |                    S t          |d         |||t          |                    S )Nr   cpu)map_locationrd   r#   )r$   modelc                      i | ]\  }}d |z  |S )zgenerator.%s )rg   keyvalues      r*   
<dictcomp>z,OpenNMTPyConverter._load.<locals>.<dictcomp>   s3       C $e  r,   	generatorr   )torchloadrx   rs   r+   lenupdateitemsr   r\   rH   )ry   r   
checkpointrB   rC   rA   s         r*   _loadzOpenNMTPyConverter._load   s!   ZZ 0uZEE
!+Jw,?!@!@
J*U#3z??KKKKw'	 ",["9"?"?"A"A  	
 	
 	
 e)-===%5!&)*oo    +5!&)*oo   r,   N)__name__
__module____qualname____doc__strrz   r   r   r,   r*   ru   ru      sD        22&3 & & & &         r,   ru   c                 Z    t          | j        |           t          | j        |           d S N)set_transformer_encoderencoderrY   rZ   )specrA   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 )Nr   zencoder.layer_normzencoder.transformer.%d)set_input_layersset_layer_normrW   	enumeratelayerset_transformer_encoder_layer)r   rA   ir   s       r*   r   r      sp    T9i0004?I/CDDDdj)) V V5%eY8PST8TUUUUV Vr,   Tc                 0   t          | |d           t          | j        |d           t          | j                  D ]\  }}t          ||d|z  |           	 t          | j        |d           d S # t          $ r t          | j        |d           Y d S w xY w)NrZ   zdecoder.layer_normzdecoder.transformer_layers.%drT   r   zgenerator.0)	r   r   rW   r   r   set_transformer_decoder_layer
set_linear
projectionKeyError)r   rA   rU   r   r   s        r*   rY   rY      s    T9i0004?I/CDDDdj)) 
 
5%+a/#9		
 	
 	
 	
 	
>4?I{;;;;; > > >4?I}======>s   A1 1 BBc                     t          | d          rt          | j        |d|z             nd| _        | j        }t          |t                    s|g}t          |          D ]\  }}t          ||d||fz             d S )Nposition_encodingsz%s.embeddings.make_embedding.peFz(%s.embeddings.make_embedding.emb_luts.%d)	hasattrset_position_encodingsr   scale_embeddings
embeddingsrl   rn   r   set_embeddings)r   rA   scopeembeddings_specsr   embeddings_specs         r*   r   r      s    t)** &#-5	
 	
 	
 	
 !&&-- .,-'(899 
 
?6%C	
 	
 	
 	

 
r,   c                     t          | j        |d|z             t          | j        |d|z  d           t	          | j        j        |d|z             d S )N%s.feed_forward%s.self_attnTself_attention%s.layer_norm)set_ffnffnset_multi_head_attentionr   r   rW   r   rA   r   s      r*   r   r     sm    DHi!2U!:;;;	    4&19oPU>UVVVVVr,   c                     t          | j        |d|z             t          | j        |d|z  d           t	          | j        j        |d|z             |r9t          | j        |d|z             t	          | j        j        |d|z             d S d S )Nr   r   Tr   z%s.layer_norm_1z%s.context_attnz%s.layer_norm_2)r   r   r   r   r   rW   	attention)r   rA   r   rU   s       r*   r   r     s    DHi!2U!:;;;	    4&19>ORW>WXXX X <MPU<UVVVt~0)=NQV=VWWWWWX Xr,   c                     t          | j        |d|z             t          | j        |d|z             t          | j        |d|z             t          | d          rt          | j        |d|z             d S d S )Nr   z%s.w_1z%s.w_2linear_0_noactz%s.w_3)r   rW   r   linear_0linear_1r   r   r   s      r*   r   r     s    4?I/FGGGt}iE)9:::t}iE)9:::t%&& E4&	8e3CDDDDDE E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 r   r   
LinearSpecrg   _s     r*   ri   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 r   r   r   s     r*   ri   z,set_multi_head_attention.<locals>.<listcomp>0  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)r   rA   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   gammar   betar   s      r*   r   r   <  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   weightro   bias)r   rA   r   r   s       r*   r   r   I  sG    	;+>??DK==U*++D			 r,   c                 6    t          |d|z            | _        d S )Nr   )r   r   r   s      r*   r   r   P  s    	;+>??DKKKr,   c                 Z    t          |d|z                                            | _        d S )Nz%s.pe)r   squeeze	encodingsr   s      r*   r   r   T  s'    "9go>>FFHHDNNNr,   c                     | |         S r   r   )rA   names     r*   r   r   X  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_argsru   rv   convert_from_args)parserargss     r*   mainr   \  s    $ >  F MJJJ'''Dt''99$?????r,   __main__)T)F)&r   ctranslate2.convertersr    ctranslate2.converters.converterr   ctranslate2.specsr   r   
ActivationGELUGELUTanhRELUSWISHr   EmbeddingsMergeCONCATADDr!   r+   rH   r\   rs   ru   r>   r   rY   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r*   <module>r      s'    ( ( ( ( ( ( 6 6 6 6 6 6 ; ; ; ; ; ; ; ; "''0"'"(	   )0&*  # # #L& & &R) ) )X" " "(+ + + + + + + +\5 5 5
V V V> > > >$
 
 
.W W WX X X XE E ED D D D*
 
 
  @ @ @I I I  @ @ @ zDFFFFF r,   