use serde::Deserialize;
use crate::config::{speaker_encoder_config::SpeakerEncoderConfig, talker_config::TalkerConfig};
#[derive(Debug, Clone, Deserialize)]
pub struct Config {
#[serde(default)]
pub talker_config: TalkerConfig,
pub speaker_encoder_config: Option<SpeakerEncoderConfig>,
pub tokenizer_type: Option<String>,
pub tts_model_size: Option<String>,
pub tts_model_type: Option<String>,
#[serde(default = "default_im_start_token_id")]
pub im_start_token_id: usize,
#[serde(default = "default_im_end_token_id")]
pub im_end_token_id: usize,
#[serde(default = "default_tts_pad_token_id")]
pub tts_pad_token_id: usize,
#[serde(default = "default_tts_bos_token_id")]
pub tts_bos_token_id: usize,
#[serde(default = "default_tts_eos_token_id")]
pub tts_eos_token_id: usize,
}
fn default_im_start_token_id() -> usize {
151644
}
fn default_im_end_token_id() -> usize {
151645
}
fn default_tts_pad_token_id() -> usize {
151671
}
fn default_tts_bos_token_id() -> usize {
151672
}
fn default_tts_eos_token_id() -> usize {
151673
}
impl Default for Config {
fn default() -> Self {
Self {
talker_config: TalkerConfig::default(),
speaker_encoder_config: None, tokenizer_type: Some("12hz".to_string()),
tts_model_size: None,
tts_model_type: None,
im_start_token_id: default_im_start_token_id(),
im_end_token_id: default_im_end_token_id(),
tts_pad_token_id: default_tts_pad_token_id(),
tts_bos_token_id: default_tts_bos_token_id(),
tts_eos_token_id: default_tts_eos_token_id(),
}
}
}
impl Config {
pub fn from_json(json: &str) -> Result<Self, serde_json::Error> {
serde_json::from_str(json)
}
pub fn tokenizer_rate(&self) -> usize {
match self.tokenizer_type.as_deref() {
Some("12hz") => 12,
Some("25hz") => 25,
_ => 12, }
}
}