use super::model::ModelVariant;
use super::voices::PredefinedVoice;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PocketTTSConfig {
#[serde(default)]
pub model_variant: ModelVariant,
pub temperature: f32,
pub lsd_decode_steps: usize,
pub eos_threshold: f32,
#[serde(default)]
pub noise_clamp: Option<f32>,
#[serde(default)]
pub default_voice: Option<PredefinedVoice>,
}
impl Default for PocketTTSConfig {
fn default() -> Self {
Self {
model_variant: ModelVariant::default(),
temperature: 0.7,
lsd_decode_steps: 1,
eos_threshold: -4.0,
noise_clamp: None,
default_voice: Some(PredefinedVoice::default()),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_config() {
let config = PocketTTSConfig::default();
assert_eq!(config.temperature, 0.7);
assert_eq!(config.lsd_decode_steps, 1);
assert_eq!(config.eos_threshold, -4.0);
assert_eq!(config.model_variant, ModelVariant::default());
}
#[test]
fn test_config_serialization() {
let config = PocketTTSConfig::default();
let json = serde_json::to_string(&config).unwrap();
let deserialized: PocketTTSConfig = serde_json::from_str(&json).unwrap();
assert_eq!(deserialized.temperature, config.temperature);
}
}