#![allow(dead_code)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GigaAmConfig {
pub model_name: String,
pub model_class: String,
pub sample_rate: usize,
pub preprocessor: PreprocessorConfig,
pub encoder: EncoderConfig,
pub head: HeadConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PreprocessorConfig {
pub sample_rate: usize,
pub features: usize,
pub win_length: usize,
pub hop_length: usize,
pub n_fft: usize,
pub mel_scale: String,
#[serde(default)]
pub center: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncoderConfig {
pub feat_in: usize,
pub n_layers: usize,
pub d_model: usize,
pub subsampling: String,
pub subs_kernel_size: usize,
pub subsampling_factor: usize,
pub ff_expansion_factor: usize,
pub self_attention_model: String,
pub pos_emb_max_len: usize,
pub n_heads: usize,
pub conv_kernel_size: usize,
pub conv_norm_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HeadConfig {
pub feat_in: usize,
pub num_classes: usize,
}
impl GigaAmConfig {
pub fn v3_e2e_ctc() -> Self {
Self {
model_name: "gigaam-v3-e2e-ctc".to_string(),
model_class: "ctc".to_string(),
sample_rate: 16000,
preprocessor: PreprocessorConfig {
sample_rate: 16000,
features: 64,
win_length: 320,
hop_length: 160,
n_fft: 320,
mel_scale: "htk".to_string(),
center: false,
},
encoder: EncoderConfig {
feat_in: 64,
n_layers: 16,
d_model: 768,
subsampling: "conv1d".to_string(),
subs_kernel_size: 5,
subsampling_factor: 4,
ff_expansion_factor: 4,
self_attention_model: "rotary".to_string(),
pos_emb_max_len: 5000,
n_heads: 16,
conv_kernel_size: 5,
conv_norm_type: "layer_norm".to_string(),
},
head: HeadConfig {
feat_in: 768,
num_classes: 257,
},
}
}
pub fn d_k(&self) -> usize {
self.encoder.d_model / self.encoder.n_heads
}
pub fn d_ff(&self) -> usize {
self.encoder.d_model * self.encoder.ff_expansion_factor
}
}
impl EncoderConfig {
pub fn v3_rnnt() -> Self {
Self {
feat_in: 64,
n_layers: 16,
d_model: 768,
subsampling: "conv1d".to_string(),
subs_kernel_size: 5,
subsampling_factor: 4,
ff_expansion_factor: 4,
self_attention_model: "rotary".to_string(),
pos_emb_max_len: 5000,
n_heads: 16,
conv_kernel_size: 5,
conv_norm_type: "layer_norm".to_string(),
}
}
}