1use anyhow::{Context, Result};
2use serde::Deserialize;
3
4#[derive(Debug, Clone, Deserialize)]
5pub struct TtmConfig {
6 pub context_length: usize,
7 pub prediction_length: usize,
8 pub patch_length: usize,
9 pub patch_stride: usize,
10 pub d_model: usize,
11 pub num_layers: usize,
12 pub decoder_d_model: usize,
13 pub decoder_num_layers: usize,
14 pub expansion_factor: usize,
15 pub adaptive_patching_levels: usize,
16 pub num_patches: usize,
17 #[serde(default = "default_scaling")]
19 pub scaling: String,
20 #[serde(default)]
21 pub gated_attn: bool,
22 #[serde(default)]
23 pub norm_eps: f64,
24}
25
26fn default_scaling() -> String {
27 "std".into()
28}
29
30impl TtmConfig {
31 pub fn from_json(s: &str) -> Result<Self> {
32 serde_json::from_str(s).context("parse TtmConfig")
33 }
34}