1use crate::validation;
4use anyhow::Result;
5use std::fs;
6use tracing::info;
7
8pub async fn run(name: &str) -> Result<()> {
10 validation::validate_project_path(name)?;
11 info!(name, "initializing project");
12
13 let project_dir = std::path::Path::new(name);
14 fs::create_dir_all(project_dir)?;
15 fs::create_dir_all(project_dir.join("data"))?;
16 fs::create_dir_all(project_dir.join("models"))?;
17 fs::create_dir_all(project_dir.join("configs"))?;
18 fs::create_dir_all(project_dir.join("scripts"))?;
19
20 let config = format!(
22 r#"[project]
23name = "{name}"
24version = "0.1.0"
25
26[training]
27framework = "pytorch"
28gpus = "auto"
29
30[tracking]
31enabled = true
32auto_log = true
33"#
34 );
35 fs::write(project_dir.join("zernel.toml"), config)?;
36
37 let train_py = r#"#!/usr/bin/env python3
39"""Zernel project training script."""
40
41import torch
42import torch.nn as nn
43
44def main():
45 device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
46 print(f"Training on: {device}")
47
48 # Your model and training loop here
49 pass
50
51if __name__ == "__main__":
52 main()
53"#;
54 fs::write(project_dir.join("train.py"), train_py)?;
55
56 println!("Initialized Zernel project: {name}/");
57 println!(" zernel.toml — project configuration");
58 println!(" train.py — starter training script");
59 println!(" data/ — dataset directory");
60 println!(" models/ — model checkpoints");
61 println!(" configs/ — training configs");
62 println!();
63 println!("Next: cd {name} && zernel run train.py");
64
65 Ok(())
66}