o
    TiB	                     @   sj   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 dej
ZG dd dejZG dd	 d	ejZdS )
    )ListOptionalTupleN)common_spec
model_spectransformer_specc                       sd   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dZ  Z	S )
WhisperConfigz$Configuration for the Whisper model.Nsuppress_idssuppress_ids_beginlang_idsalignment_headsc                    s   t  j||||d d S )N)r	   r
   r   r   )super__init__)selfr	   r
   r   r   	__class__ R/home/ubuntu/.local/lib/python3.10/site-packages/ctranslate2/specs/whisper_spec.pyr      s   
zWhisperConfig.__init__)NNNN)
__name__
__module____qualname____doc__r   r   intr   r   __classcell__r   r   r   r   r      s    


r   c                       sH   e Zd ZdZ fddZedd Zedd Zdd	 Zd
d Z	  Z
S )WhisperSpeczDescribes a Whisper model.c                    s8   t    t||| _tj||tjjd| _	d| j	_
dS )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   r   r   r      s   
zWhisperSpec.__init__c                 C      dS )Nr   r   r   r   r   r   name5      zWhisperSpec.namec                 C   r'   )N   r   r(   r   r   r   revision9   r*   zWhisperSpec.revisionc                 C   s   t  S )N)r   r(   r   r   r   get_default_config=   s   zWhisperSpec.get_default_configc                 C   s   | j jjjd S )Nr   )r!   
embeddingsweightshaper(   r   r   r   get_vocabulary_size@   s   zWhisperSpec.get_vocabulary_size)r   r   r   r   r   propertyr)   r,   r-   r1   r   r   r   r   r   r      s    

r   c                   @   s   e Zd Zdd ZdS )r   c                 C   sR   t d|| _t | _t | _t	 | _
t | _dd t|D | _d S )Nint16c                 S   s   g | ]}t  qS r   )r   TransformerEncoderLayerSpec).0_r   r   r   
<listcomp>K   s    z/WhisperEncoderSpec.__init__.<locals>.<listcomp>)npdtypetype	num_headsr   
Conv1DSpecconv1conv2r   PositionEncoderSpecposition_encodingsLayerNormSpec
layer_normrangelayer)r   
num_layersr;   r   r   r   r   E   s   



zWhisperEncoderSpec.__init__N)r   r   r   r   r   r   r   r   r   D   s    r   )typingr   r   r   numpyr8   ctranslate2.specsr   r   r   ModelConfigr   LanguageModelSpecr   	LayerSpecr   r   r   r   r   <module>   s    *