
    IuiB	                         d dl mZmZmZ d dlZd dlmZmZm	Z	  G d dej                        Z G d dej                        Z G d d	ej                        Zy)
    )ListOptionalTupleN)common_spec
model_spectransformer_specc                   x     e Zd ZdZ	 	 	 	 ddeee      deee      deee      deeeeef         f fdZ xZ	S )WhisperConfigz$Configuration for the Whisper model.suppress_idssuppress_ids_beginlang_idsalignment_headsc                 ,    t         |   ||||       y )N)r   r   r   r   )super__init__)selfr   r   r   r   	__class__s        P/opt/pipecat/venv/lib/python3.12/site-packages/ctranslate2/specs/whisper_spec.pyr   zWhisperConfig.__init__   s#     	%1+	 	 	
    )NNNN)
__name__
__module____qualname____doc__r   r   intr   r   __classcell__r   s   @r   r
   r
      sq    . -126(,;?
tCy)
 %T#Y/
 49%	

 "$uS#X"78
 
r   r
   c                   N     e Zd ZdZ fdZed        Zed        Zd Zd Z	 xZ
S )WhisperSpeczDescribes a Whisper model.c                     t         |           t        ||      | _        t	        j
                  ||t        j                  j                        | _	        d| j                  _
        y)a<  Initializes the model specification.

        Args:
          num_encoder_layers: The number of encoder layers.
          num_encoder_heads: The number of encoder attention heads.
          num_decoder_layers: The number of decoder layers.
          num_decoder_heads: The number of decoder attention heads.
        )
activationFN)r   r   WhisperEncoderSpecencoderr   TransformerDecoderSpecr   
ActivationGELUdecoderscale_embeddings)r   num_encoder_layersnum_encoder_headsnum_decoder_layersnum_decoder_headsr   s        r   r   zWhisperSpec.__init__   sU     	)*<>OP'>>"--22

 ).%r   c                      y)Nr    r   s    r   namezWhisperSpec.name5   s    r   c                      y)N   r-   r.   s    r   revisionzWhisperSpec.revision9   s    r   c                     t               S )N)r
   r.   s    r   get_default_configzWhisperSpec.get_default_config=   s
    r   c                 \    | j                   j                  j                  j                  d   S )Nr   )r&   
embeddingsweightshaper.   s    r   get_vocabulary_sizezWhisperSpec.get_vocabulary_size@   s#    ||&&--33A66r   )r   r   r   r   r   propertyr/   r2   r4   r9   r   r   s   @r   r   r      s=    $.0    7r   r   c                       e Zd Zd Zy)r!   c                    t        j                  d      j                  |      | _        t	        j
                         | _        t	        j
                         | _        t        j                         | _
        t	        j                         | _        t        |      D cg c]  }t        j                          c}| _        y c c}w )Nint16)npdtypetype	num_headsr   
Conv1DSpecconv1conv2r   PositionEncoderSpecposition_encodingsLayerNormSpec
layer_normrangeTransformerEncoderLayerSpeclayer)r   
num_layersrA   _s       r   r   zWhisperEncoderSpec.__init__E   s    '*//	: ++-
 ++-
"2"F"F"H%335DI*DU
?@88:

 
s   B?N)r   r   r   r   r-   r   r   r!   r!   D   s    
r   r!   )typingr   r   r   numpyr>   ctranslate2.specsr   r   r   ModelConfigr
   LanguageModelSpecr   	LayerSpecr!   r-   r   r   <module>rT      sK    ( (  G G
J** 
$'7*.. '7T	
-- 	
r   