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}