
    Iui/                        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'        yy)     N)PredictConfig)PositionEncodingType)vocabs_to_dict)get_model_class)utils)	Converter)common_spectransformer_spec)gelu	fast_gelurelu
gated-siluc                    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k7  rt        d      t        j                  j                  | j                  j                  | j                  j                  f||t        |   || j                   dk(  |	|
|	      }t#        ||       |D ]  }|j%                  |        |D ]  }|j'                  |        |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                    Q/opt/pipecat/venv/lib/python3.12/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$ Y/ 9	--i89 9	--i89     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                  j                  |	t        |   |||| j                  dk(  |||
|      }t        |j                  |d       |D ]  }|j                  |        |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((	) 
 	!!#;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 $   2	&&y12 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y)EoleConverterz(Converts models generated by OpenNMT-py.
model_pathc                     || _         y)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                        }|j                  |      \  }}}t        |      }||_        t        |      \  }}	|j                  j                  j                  dk(  r2t        |j                  |j                         ||	t        |            }
nEt        |j                  |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   modelfor_inferencer   rR   r'   decoder_typerL   
state_dictlenr=   r1   r]   r_   r`   ra   r!   layer_norm_epsilon)rX   rc   r1   model_classrd   vocabsmodel_configvocabs_dictr3   r4   specs              r<   _loadzEoleConverter._load   s;   $*:*:H%fll3&1&?&?&G#v|$V,#!+K!8
J<<,,0@@%  "&)*oD +  "&)*oD /55J.KDKK+ &z 2; ? &z 2; ? &z 2; ?)0T)J&r>   N)__name__
__module____qualname____doc__strrY   ro   rP   r>   r<   rT   rT      s    2&3 &#r>   rT   c                 \    t        | j                  |       t        | j                  |       y N)set_transformer_encoderr*   rI   r'   )rn   r2   s     r<   r.   r.      s    DLL)4DLL)4r>   c                     t        | |d       t        | j                  |d       t        | j                        D ]  \  }}t        ||d|z          y )Nsrc_embzencoder.layer_normzencoder.transformer_layers.%d)set_input_layersset_layer_normr-   	enumeratelayerset_transformer_encoder_layer)rn   r2   ir}   s       r<   rw   rw      sP    T9i04??I/CDdjj) 
5%9=A	

r>   c                     t        | |d       t        | j                  |d       t        | j                        D ]  \  }}t        ||d|z  |        t        | j                  |d       y )Ntgt_embzdecoder.layer_normzdecoder.transformer_layers.%drE   	generator)rz   r{   r-   r|   r}   set_transformer_decoder_layer
set_linear
projection)rn   r2   rF   r   r}   s        r<   rI   rI      sf    T9i04??I/CDdjj) 
5%+a/#9		

 t	;7r>   c                     t        | d      rt        | j                  |d|z         nd| _        | j                  }t        |t              r|d   }t        ||d|z         y )Nposition_encodings%s.peFr   z%s.embeddings)hasattrset_position_encodingsr   scale_embeddingsr"   
isinstancelistset_embeddings)rn   r2   scopeembeddings_specss       r<   rz   rz      sd    t)*##eO	
 !&"D)+A.#Y%0GHr>   c                     t        | j                  |d|z  d       t        | j                  j                  |d|z         t        | j                  j                  |d|z         t        | j                  |d|z         y )N%s.self_attnTself_attention%s.input_layernorm%s.post_attention_layernorm%s.mlp)set_multi_head_attentionr   r{   r-   ffnset_ffnrn   r2   r   s      r<   r~   r~      s|    	 &&	3G%3O Y(E(M DHHiE!12r>   c                    t        | j                  |d|z  d       t        | j                  j                  |d|z         |r>t        | j                  |d|z         t        | j                  j                  |d|z         t        | j
                  j                  |d|z         t        | j
                  |d|z         y )	Nr   Tr   r   z%s.context_attnz%s.precontext_layernormr   r   )r   r   r{   r-   	attentionr   r   )rn   r2   r   rF   s       r<   r   r     s    	 &&	3G%3O  <MPU<UVNN%%y2Ke2S	
 Y(E(M DHHiE!12r>   c                     t        | j                  |d|z         t        | j                  |d|z         t        | d      rt        | j                  |d|z         y y )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     sT    t}}i):U)BCt}}i%)?@t%&4&&	<%3GH 'r>   c                    |rt        d      D cg c]  }t        j                          }}t        |d   |d|z         t        |d   |d|z         t        |d   |d|z         t	        j
                  | j                  d   |       nt        | j                  d   |d|z         t        d      D cg c]  }t        j                          }}t        |d   |d|z         t        |d   |d|z         t	        j
                  | j                  d   |       t        | j                  d   |d	|z         t        | d
      r&t        |d|z        | _	        | j                  | _
        y y c c}w c c}w )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)rn   r2   r   r   _split_layerss         r<   r   r   !  s[   :?(CQ..0CC<?I/@5/HI<?I/?%/GH<?I/AE/IJ$++a.,74;;q>9.?%.GH:?(CQ..0C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*4E/c                     	 t        |d|z        | _        	 t        |d|z        | _        y # t        $ r+ t        |d|z        | _        t        |d|z        | _        Y Iw xY w# t        $ r Y y w xY w)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# 1A A #	A/.A/c                 h    t        |d|z        | _        |j                  d|z        }||| _        y y )Nr   r   )r   weightgetbias)rn   r2   r   r   s       r<   r   r   C  s:    	;+>?DK==U*+D	 r>   c                 ,    t        |d|z        | _        y )Nr   )r   r   r   s      r<   r   r   J  s    	;+>?DKr>   c                 H    t        |d|z        j                         | _        y )Nr   )r   squeeze	encodingsr   s      r<   r   r   N  s    "9go>FFHDNr>   c                     | |   S rv   rP   )r2   names     r<   r   r   R  s    T?r>   c                     t        j                  t         j                        } | j                  ddd       t	        j
                  |        | j                         }t        |j                        j                  |       y )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   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.   rw   rI   rz   r~   r   r   r   r{   r   r   r   r   r   rp   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>   