llama_core/metadata/
piper.rs1use super::BaseMetadata;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug)]
8pub struct PiperMetadataBuilder {
9    metadata: PiperMetadata,
10}
11impl PiperMetadataBuilder {
12    pub fn new<S: Into<String>>(model_name: S, model_alias: S) -> Self {
13        let metadata = PiperMetadata {
14            model_name: model_name.into(),
15            model_alias: model_alias.into(),
16            ..Default::default()
17        };
18
19        Self { metadata }
20    }
21
22    pub fn enable_debug(mut self, enable: bool) -> Self {
23        self.metadata.debug_log = enable;
24        self
25    }
26
27    pub fn with_speed(mut self, speed: f64) -> Self {
28        self.metadata.speed = speed;
29        self
30    }
31
32    pub fn with_speaker_id(mut self, speaker_id: u32) -> Self {
33        self.metadata.speaker_id = speaker_id;
34        self
35    }
36
37    pub fn with_noise_scale(mut self, noise_scale: f64) -> Self {
38        self.metadata.noise_scale = noise_scale;
39        self
40    }
41
42    pub fn with_length_scale(mut self, length_scale: f64) -> Self {
43        self.metadata.length_scale = length_scale;
44        self
45    }
46
47    pub fn with_noise_w(mut self, noise_w: f64) -> Self {
48        self.metadata.noise_w = noise_w;
49        self
50    }
51
52    pub fn with_sentence_silence(mut self, sentence_silence: f64) -> Self {
53        self.metadata.sentence_silence = sentence_silence;
54        self
55    }
56
57    pub fn with_phoneme_silence(mut self, phoneme_silence: f64) -> Self {
58        self.metadata.phoneme_silence = Some(phoneme_silence);
59        self
60    }
61
62    pub fn enable_json_input(mut self, flag: bool) -> Self {
63        self.metadata.json_input = Some(flag);
64        self
65    }
66
67    pub fn build(self) -> PiperMetadata {
68        self.metadata
69    }
70}
71
72#[derive(Debug, Clone, Deserialize, Serialize)]
74pub struct PiperMetadata {
75    #[serde(skip_serializing)]
77    pub model_name: String,
78    #[serde(skip_serializing)]
80    pub model_alias: String,
81
82    #[serde(rename = "enable-debug-log")]
84    pub debug_log: bool,
85
86    pub speed: f64,
88    pub speaker_id: u32,
90    pub noise_scale: f64,
92    length_scale: f64,
94    pub noise_w: f64,
96    pub sentence_silence: f64,
98    #[serde(skip_serializing_if = "Option::is_none")]
100    phoneme_silence: Option<f64>,
101    #[serde(skip_serializing_if = "Option::is_none")]
110    pub json_input: Option<bool>,
111}
112impl Default for PiperMetadata {
113    fn default() -> Self {
114        Self {
115            model_name: String::new(),
116            model_alias: String::new(),
117            debug_log: false,
118            speed: 1.0,
119            speaker_id: 0,
120            noise_scale: 0.667,
121            length_scale: 1.0,
122            noise_w: 0.8,
123            sentence_silence: 0.2,
124            phoneme_silence: None,
125            json_input: None,
126        }
127    }
128}
129impl BaseMetadata for PiperMetadata {
130    fn model_name(&self) -> &str {
131        &self.model_name
132    }
133
134    fn model_alias(&self) -> &str {
135        &self.model_alias
136    }
137}