1use clap::{Parser, Subcommand};
2
3#[derive(Parser)]
4#[command(name = "nuviz")]
5#[command(about = "Terminal-native ML training visualization")]
6#[command(version)]
7pub struct Cli {
8 #[command(subcommand)]
9 pub command: Commands,
10
11 #[arg(long, global = true)]
13 pub dir: Option<String>,
14}
15
16#[derive(Subcommand)]
17pub enum Commands {
18 Watch(WatchArgs),
20
21 Ls(LsArgs),
23
24 Leaderboard(LeaderboardArgs),
26
27 Compare(CompareArgs),
29
30 Matrix(MatrixArgs),
32
33 Breakdown(BreakdownArgs),
35
36 Export(ExportArgs),
38
39 Image(ImageArgs),
41
42 Diff(DiffArgs),
44
45 View(ViewArgs),
47
48 Tag(TagArgs),
50
51 Cleanup(CleanupArgs),
53
54 Reproduce(ReproduceArgs),
56}
57
58#[derive(Parser)]
59pub struct WatchArgs {
60 pub experiments: Vec<String>,
62
63 #[arg(long)]
65 pub latest: Option<usize>,
66
67 #[arg(long)]
69 pub project: Option<String>,
70
71 #[arg(long)]
73 pub poll: bool,
74}
75
76#[derive(Parser)]
77pub struct LsArgs {
78 #[arg(long)]
80 pub project: Option<String>,
81
82 #[arg(long, default_value = "date")]
84 pub sort: String,
85}
86
87#[derive(Parser)]
88pub struct LeaderboardArgs {
89 #[arg(long)]
91 pub project: Option<String>,
92
93 #[arg(long)]
95 pub sort: Option<String>,
96
97 #[arg(long)]
99 pub top: Option<usize>,
100
101 #[arg(long)]
103 pub asc: bool,
104
105 #[arg(long, default_value = "table")]
107 pub format: String,
108
109 #[arg(long)]
111 pub aggregate: bool,
112}
113
114#[derive(Parser)]
115pub struct CompareArgs {
116 pub experiments: Vec<String>,
118
119 #[arg(long)]
121 pub project: Option<String>,
122
123 #[arg(long)]
125 pub metric: Option<String>,
126
127 #[arg(long, default_value = "step")]
129 pub align: String,
130
131 #[arg(long)]
133 pub poll: bool,
134}
135
136#[derive(Parser)]
137pub struct MatrixArgs {
138 #[arg(long)]
140 pub rows: String,
141
142 #[arg(long)]
144 pub cols: String,
145
146 #[arg(long)]
148 pub metric: String,
149
150 #[arg(long)]
152 pub project: Option<String>,
153
154 #[arg(long, default_value = "table")]
156 pub format: String,
157}
158
159#[derive(Parser)]
160pub struct BreakdownArgs {
161 pub experiment: String,
163
164 #[arg(long)]
166 pub latex: bool,
167
168 #[arg(long)]
170 pub markdown: bool,
171
172 #[arg(long)]
174 pub diff: Option<String>,
175
176 #[arg(long)]
178 pub project: Option<String>,
179}
180
181#[derive(Parser)]
182pub struct ExportArgs {
183 pub experiment: String,
185
186 #[arg(long, default_value = "csv")]
188 pub format: String,
189
190 #[arg(long)]
192 pub metric: Option<Vec<String>>,
193
194 #[arg(long)]
196 pub project: Option<String>,
197}
198
199#[derive(Parser)]
200pub struct ImageArgs {
201 pub experiment: String,
203
204 #[arg(long)]
206 pub step: Option<u64>,
207
208 #[arg(long)]
210 pub tag: Option<String>,
211
212 #[arg(long)]
214 pub latest: bool,
215
216 #[arg(long)]
218 pub side_by_side: Option<String>,
219
220 #[arg(long)]
222 pub project: Option<String>,
223}
224
225#[derive(Parser)]
226pub struct DiffArgs {
227 pub experiment_a: String,
229
230 pub experiment_b: String,
232
233 #[arg(long)]
235 pub step: Option<u64>,
236
237 #[arg(long, default_value = "render")]
239 pub tag: String,
240
241 #[arg(long)]
243 pub heatmap: bool,
244
245 #[arg(long)]
247 pub scene: Option<String>,
248
249 #[arg(long)]
251 pub project: Option<String>,
252}
253
254#[derive(Parser)]
255pub struct ViewArgs {
256 pub path: String,
258
259 #[arg(long)]
261 pub histogram: bool,
262
263 #[arg(long)]
265 pub project: Option<String>,
266}
267
268#[derive(Parser)]
269pub struct TagArgs {
270 pub experiment: String,
272
273 pub tag: Option<String>,
275
276 #[arg(long)]
278 pub remove: Option<String>,
279
280 #[arg(long)]
282 pub list: bool,
283}
284
285#[derive(Parser)]
286pub struct CleanupArgs {
287 #[arg(long)]
289 pub project: Option<String>,
290
291 #[arg(long)]
293 pub keep_top: Option<usize>,
294
295 #[arg(long)]
297 pub metric: Option<String>,
298
299 #[arg(long)]
301 pub force: bool,
302}
303
304#[derive(Parser)]
305pub struct ReproduceArgs {
306 pub experiment: String,
308}