zernel/commands/
init.rs

1// Copyright (C) 2026 Dyber, Inc. — Proprietary
2
3use crate::validation;
4use anyhow::Result;
5use std::fs;
6use tracing::info;
7
8/// Scaffold a new Zernel ML project.
9pub 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    // Create zernel.toml project config
21    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    // Create a starter training script
38    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}