entrenar/yaml_mode/manifest/
model.rs1use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7
8use super::shorthand::deserialize_human_usize_opt;
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct ModelConfig {
13 pub source: String,
15
16 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub format: Option<String>,
19
20 #[serde(default, skip_serializing_if = "Option::is_none")]
22 pub architecture: Option<ArchitectureConfig>,
23
24 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub freeze: Option<Vec<String>>,
27
28 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub device: Option<String>,
31
32 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub dtype: Option<String>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct ArchitectureConfig {
43 #[serde(rename = "type")]
45 pub arch_type: String,
46
47 #[serde(
49 default,
50 skip_serializing_if = "Option::is_none",
51 deserialize_with = "deserialize_human_usize_opt"
52 )]
53 pub hidden_size: Option<usize>,
54
55 #[serde(
57 default,
58 skip_serializing_if = "Option::is_none",
59 alias = "num_hidden_layers",
60 deserialize_with = "deserialize_human_usize_opt"
61 )]
62 pub num_layers: Option<usize>,
63
64 #[serde(
66 default,
67 skip_serializing_if = "Option::is_none",
68 alias = "num_attention_heads",
69 deserialize_with = "deserialize_human_usize_opt"
70 )]
71 pub num_heads: Option<usize>,
72
73 #[serde(
75 default,
76 skip_serializing_if = "Option::is_none",
77 alias = "num_key_value_heads",
78 deserialize_with = "deserialize_human_usize_opt"
79 )]
80 pub num_kv_heads: Option<usize>,
81
82 #[serde(
84 default,
85 skip_serializing_if = "Option::is_none",
86 deserialize_with = "deserialize_human_usize_opt"
87 )]
88 pub intermediate_size: Option<usize>,
89
90 #[serde(
92 default,
93 skip_serializing_if = "Option::is_none",
94 deserialize_with = "deserialize_human_usize_opt"
95 )]
96 pub vocab_size: Option<usize>,
97
98 #[serde(
100 default,
101 skip_serializing_if = "Option::is_none",
102 alias = "max_position_embeddings",
103 deserialize_with = "deserialize_human_usize_opt"
104 )]
105 pub max_seq_length: Option<usize>,
106
107 #[serde(default, skip_serializing_if = "Option::is_none")]
109 pub rms_norm_eps: Option<f32>,
110
111 #[serde(default, skip_serializing_if = "Option::is_none")]
113 pub rope_theta: Option<f32>,
114
115 #[serde(default, skip_serializing_if = "Option::is_none")]
117 pub use_bias: Option<bool>,
118
119 #[serde(
121 default,
122 skip_serializing_if = "Option::is_none",
123 deserialize_with = "deserialize_human_usize_opt"
124 )]
125 pub head_dim: Option<usize>,
126
127 #[serde(default, skip_serializing_if = "Option::is_none")]
129 pub layers: Option<Vec<HashMap<String, serde_json::Value>>>,
130}