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 { "std".into() }
27
28impl TtmConfig {
29 pub fn from_json(s: &str) -> Result<Self> {
30 serde_json::from_str(s).context("parse TtmConfig")
31 }
32}