use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(
name = "axonml",
author = "AutomataNexus Development Team",
version,
about = "Axonml ML Framework CLI - Train, evaluate, and deploy ML models",
long_about = "Axonml is a PyTorch-equivalent machine learning framework written in pure Rust.\n\n\
Use this CLI to manage projects, train models, evaluate performance, and deploy to production."
)]
pub struct Cli {
#[arg(short, long, global = true)]
pub verbose: bool,
#[arg(short, long, global = true)]
pub quiet: bool,
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
New(NewArgs),
Init(InitArgs),
Train(TrainArgs),
Resume(ResumeArgs),
Eval(EvalArgs),
Predict(PredictArgs),
Convert(ConvertArgs),
Export(ExportArgs),
Inspect(InspectArgs),
Report(ReportArgs),
#[cfg(feature = "serve")]
Serve(ServeArgs),
#[cfg(feature = "wandb")]
Wandb(WandbArgs),
Upload(UploadArgs),
Data(DataArgs),
Scaffold(ScaffoldArgs),
Zip(ZipArgs),
Rename(RenameArgs),
Quant(QuantArgs),
Load(LoadArgs),
Analyze(AnalyzeArgs),
Bench(BenchArgs),
Gpu(GpuArgs),
Tui(TuiArgs),
Kaggle(KaggleArgs),
Hub(HubArgs),
Dataset(DatasetArgs),
Start(StartArgs),
Stop(StopArgs),
Status(StatusArgs),
Logs(LogsArgs),
#[cfg(feature = "server-sync")]
Login(LoginArgs),
#[cfg(feature = "server-sync")]
Logout,
#[cfg(feature = "server-sync")]
Sync(SyncArgs),
}
#[derive(Parser, Debug)]
pub struct NewArgs {
pub name: String,
#[arg(short, long, default_value = "default")]
pub template: String,
#[arg(long)]
pub no_git: bool,
#[arg(short, long)]
pub path: Option<String>,
}
#[derive(Parser, Debug)]
pub struct InitArgs {
#[arg(short, long)]
pub name: Option<String>,
#[arg(long)]
pub no_git: bool,
#[arg(short, long)]
pub force: bool,
}
#[derive(Parser, Debug)]
pub struct TrainArgs {
#[arg(short, long)]
pub config: Option<String>,
#[arg(short, long)]
pub model: Option<String>,
#[arg(short, long)]
pub data: String,
#[arg(long)]
pub format: Option<String>,
#[arg(short, long)]
pub epochs: Option<usize>,
#[arg(short, long)]
pub batch_size: Option<usize>,
#[arg(short, long)]
pub lr: Option<f64>,
#[arg(short, long, default_value = "./output")]
pub output: String,
#[arg(long, default_value = "cpu")]
pub device: String,
#[arg(long)]
pub seed: Option<u64>,
#[arg(long, default_value = "4")]
pub workers: usize,
}
#[derive(Parser, Debug)]
pub struct ResumeArgs {
pub checkpoint: String,
#[arg(short, long)]
pub data: String,
#[arg(long)]
pub format: Option<String>,
#[arg(short, long)]
pub epochs: Option<usize>,
#[arg(short, long)]
pub lr: Option<f64>,
#[arg(short, long, default_value = "32")]
pub batch_size: usize,
#[arg(short, long)]
pub output: Option<String>,
}
#[derive(Parser, Debug)]
pub struct EvalArgs {
pub model: String,
pub data: String,
#[arg(long)]
pub format: Option<String>,
#[arg(short, long, default_value = "32")]
pub batch_size: usize,
#[arg(long, default_value = "cpu")]
pub device: String,
#[arg(short, long)]
pub output: Option<String>,
#[arg(short, long, default_value = "accuracy,loss")]
pub metrics: String,
}
#[derive(Parser, Debug)]
pub struct PredictArgs {
pub model: String,
pub input: String,
#[arg(short, long)]
pub output: Option<String>,
#[arg(short, long, default_value = "json")]
pub format: String,
#[arg(long, default_value = "cpu")]
pub device: String,
#[arg(short, long)]
pub top_k: Option<usize>,
}
#[derive(Parser, Debug)]
pub struct ConvertArgs {
pub input: String,
pub output: String,
#[arg(long)]
pub from: Option<String>,
#[arg(long)]
pub to: Option<String>,
#[arg(long)]
pub optimize: bool,
}
#[derive(Parser, Debug)]
pub struct ExportArgs {
pub model: String,
pub output: String,
#[arg(short, long, default_value = "onnx")]
pub format: String,
#[arg(long, default_value = "cpu")]
pub target: String,
#[arg(long)]
pub quantize: bool,
#[arg(long, default_value = "fp16")]
pub precision: String,
}
#[derive(Parser, Debug)]
pub struct InspectArgs {
pub model: String,
#[arg(short, long)]
pub detailed: bool,
#[arg(long)]
pub show_params: Option<usize>,
#[arg(short, long, default_value = "text")]
pub format: String,
}
#[derive(Parser, Debug)]
pub struct ReportArgs {
pub model: String,
#[arg(short, long)]
pub data: String,
#[arg(long)]
pub dataset_format: Option<String>,
#[arg(short, long, default_value = "32")]
pub batch_size: usize,
#[arg(long, default_value = "cpu")]
pub device: String,
#[arg(short, long)]
pub output: Option<String>,
#[arg(short, long, default_value = "html")]
pub format: String,
#[arg(long, default_value = "true")]
pub confusion_matrix: bool,
#[arg(long, default_value = "true")]
pub loss_curves: bool,
#[arg(long)]
pub num_classes: Option<usize>,
#[arg(long)]
pub class_names: Option<String>,
#[arg(long, default_value = "true")]
pub per_class_metrics: bool,
#[arg(long)]
pub history: Option<String>,
}
#[cfg(feature = "serve")]
#[derive(Parser, Debug)]
pub struct ServeArgs {
pub model: String,
#[arg(short, long, default_value = "8080")]
pub port: u16,
#[arg(long, default_value = "127.0.0.1")]
pub host: String,
#[arg(long, default_value = "4")]
pub workers: usize,
#[arg(long)]
pub batch: bool,
#[arg(long, default_value = "32")]
pub max_batch_size: usize,
#[arg(long, default_value = "30000")]
pub timeout: u64,
}
#[cfg(feature = "wandb")]
#[derive(Parser, Debug)]
pub struct WandbArgs {
#[command(subcommand)]
pub action: WandbSubcommand,
}
#[cfg(feature = "wandb")]
#[derive(Subcommand, Debug)]
pub enum WandbSubcommand {
Login,
Logout,
Status,
Config(WandbConfigArgs),
Enable,
Disable,
}
#[cfg(feature = "wandb")]
#[derive(Parser, Debug)]
pub struct WandbConfigArgs {
#[arg(long)]
pub api_key: Option<String>,
#[arg(short, long)]
pub entity: Option<String>,
#[arg(short, long)]
pub project: Option<String>,
#[arg(long)]
pub base_url: Option<String>,
#[arg(long)]
pub log_frequency: Option<usize>,
#[arg(long)]
pub log_checkpoints: Option<bool>,
#[arg(long)]
pub log_system_metrics: Option<bool>,
}
#[derive(Parser, Debug)]
pub struct UploadArgs {
pub path: String,
#[arg(short, long)]
pub name: Option<String>,
#[arg(short, long)]
pub description: Option<String>,
#[arg(short, long)]
pub format: Option<String>,
#[arg(long, default_value = "latest")]
pub version: String,
#[arg(short, long, default_value = "./models")]
pub output: String,
#[arg(long, default_value = "true")]
pub validate: bool,
#[arg(long)]
pub overwrite: bool,
#[arg(long)]
pub inspect: bool,
}
#[derive(Parser, Debug)]
pub struct DataArgs {
#[command(subcommand)]
pub action: DataSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum DataSubcommand {
Upload(DataUploadArgs),
Analyze(DataAnalyzeArgs),
List(DataListArgs),
Config(DataConfigArgs),
Preview(DataPreviewArgs),
Validate(DataValidateArgs),
}
#[derive(Parser, Debug)]
pub struct DataUploadArgs {
pub path: String,
#[arg(short, long)]
pub name: Option<String>,
#[arg(short = 't', long)]
pub data_type: Option<String>,
#[arg(long)]
pub task: Option<String>,
#[arg(short, long, default_value = "./data")]
pub output: String,
#[arg(long)]
pub split: Option<String>,
#[arg(long, default_value = "true")]
pub analyze: bool,
}
#[derive(Parser, Debug)]
pub struct DataAnalyzeArgs {
pub path: String,
#[arg(short = 't', long)]
pub data_type: Option<String>,
#[arg(long, default_value = "1000")]
pub max_samples: usize,
#[arg(short, long, default_value = "text")]
pub format: String,
#[arg(short, long)]
pub output: Option<String>,
#[arg(long)]
pub detailed: bool,
#[arg(long, default_value = "true")]
pub recommend: bool,
}
#[derive(Parser, Debug)]
pub struct DataListArgs {
#[arg(short, long, default_value = "./data")]
pub path: String,
#[arg(short, long)]
pub detailed: bool,
}
#[derive(Parser, Debug)]
pub struct DataConfigArgs {
pub path: String,
#[arg(short, long, default_value = "data_config.toml")]
pub output: String,
#[arg(short, long, default_value = "toml")]
pub format: String,
}
#[derive(Parser, Debug)]
pub struct DataPreviewArgs {
pub path: String,
#[arg(short, long, default_value = "5")]
pub num_samples: usize,
#[arg(long)]
pub random: bool,
}
#[derive(Parser, Debug)]
pub struct DataValidateArgs {
pub path: String,
#[arg(long)]
pub num_classes: Option<usize>,
#[arg(long)]
pub input_shape: Option<String>,
#[arg(long, default_value = "true")]
pub check_missing: bool,
#[arg(long, default_value = "true")]
pub check_balance: bool,
}
#[derive(Parser, Debug)]
pub struct ScaffoldArgs {
#[command(subcommand)]
pub action: ScaffoldSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum ScaffoldSubcommand {
Generate(ScaffoldGenerateArgs),
Templates(ScaffoldTemplatesArgs),
}
#[derive(Parser, Debug)]
pub struct ScaffoldGenerateArgs {
pub name: String,
#[arg(short, long, default_value = ".")]
pub output: String,
#[arg(short, long)]
pub model: Option<String>,
#[arg(short, long)]
pub data: Option<String>,
#[arg(short, long, default_value = "training")]
pub template: String,
#[arg(long)]
pub task: Option<String>,
#[arg(long)]
pub architecture: Option<String>,
#[arg(long)]
pub wandb: bool,
#[arg(long)]
pub augmentation: bool,
#[arg(long)]
pub overwrite: bool,
}
#[derive(Parser, Debug)]
pub struct ScaffoldTemplatesArgs {
#[arg(short, long)]
pub detailed: bool,
}
#[derive(Parser, Debug)]
pub struct ZipArgs {
#[command(subcommand)]
pub action: ZipSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum ZipSubcommand {
Create(ZipCreateArgs),
Extract(ZipExtractArgs),
List(ZipListArgs),
}
#[derive(Parser, Debug)]
pub struct ZipCreateArgs {
#[arg(short, long)]
pub output: String,
#[arg(short, long)]
pub model: Option<String>,
#[arg(short, long)]
pub data: Option<String>,
#[arg(long)]
pub include_config: bool,
#[arg(long)]
pub overwrite: bool,
}
#[derive(Parser, Debug)]
pub struct ZipExtractArgs {
pub input: String,
#[arg(short, long, default_value = ".")]
pub output: String,
#[arg(short, long)]
pub verbose: bool,
}
#[derive(Parser, Debug)]
pub struct ZipListArgs {
pub input: String,
#[arg(short, long)]
pub detailed: bool,
}
#[derive(Parser, Debug)]
pub struct RenameArgs {
#[command(subcommand)]
pub action: RenameSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum RenameSubcommand {
Model(RenameModelArgs),
Data(RenameDataArgs),
}
#[derive(Parser, Debug)]
pub struct RenameModelArgs {
pub path: String,
pub new_name: String,
#[arg(short, long)]
pub force: bool,
}
#[derive(Parser, Debug)]
pub struct RenameDataArgs {
pub path: String,
pub new_name: String,
#[arg(short, long)]
pub force: bool,
}
#[derive(Parser, Debug)]
pub struct QuantArgs {
#[command(subcommand)]
pub action: QuantSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum QuantSubcommand {
Convert(QuantConvertArgs),
Info(QuantInfoArgs),
Benchmark(QuantBenchmarkArgs),
List,
}
#[derive(Parser, Debug)]
pub struct QuantConvertArgs {
pub input: String,
#[arg(short, long)]
pub target: String,
#[arg(short, long)]
pub output: String,
#[arg(long)]
pub from: Option<String>,
#[arg(long)]
pub calibration_data: Option<String>,
#[arg(long, default_value = "100")]
pub calibration_samples: usize,
#[arg(long)]
pub overwrite: bool,
}
#[derive(Parser, Debug)]
pub struct QuantInfoArgs {
pub input: String,
#[arg(short, long)]
pub detailed: bool,
}
#[derive(Parser, Debug)]
pub struct QuantBenchmarkArgs {
pub input: String,
#[arg(short, long, default_value = "10")]
pub iterations: usize,
#[arg(short, long)]
pub types: Option<String>,
}
#[derive(Parser, Debug)]
pub struct LoadArgs {
#[command(subcommand)]
pub action: LoadSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum LoadSubcommand {
Model(LoadModelArgs),
Data(LoadDataArgs),
Both(LoadBothArgs),
Status,
Clear,
}
#[derive(Parser, Debug)]
pub struct LoadModelArgs {
pub path: String,
#[arg(short, long)]
pub name: Option<String>,
#[arg(short, long)]
pub format: Option<String>,
}
#[derive(Parser, Debug)]
pub struct LoadDataArgs {
pub path: String,
#[arg(short, long)]
pub name: Option<String>,
#[arg(short = 't', long)]
pub data_type: Option<String>,
}
#[derive(Parser, Debug)]
pub struct LoadBothArgs {
#[arg(short, long)]
pub model: String,
#[arg(short, long)]
pub data: String,
}
#[derive(Parser, Debug)]
pub struct AnalyzeArgs {
#[command(subcommand)]
pub action: AnalyzeSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum AnalyzeSubcommand {
Model(AnalyzeModelArgs),
Data(AnalyzeDataArgs),
Both(AnalyzeBothArgs),
Report(AnalyzeReportArgs),
}
#[derive(Parser, Debug)]
pub struct AnalyzeModelArgs {
#[arg(short, long)]
pub path: Option<String>,
#[arg(short, long)]
pub detailed: bool,
#[arg(short, long)]
pub output: Option<String>,
#[arg(short, long, default_value = "text")]
pub format: String,
}
#[derive(Parser, Debug)]
pub struct AnalyzeDataArgs {
#[arg(short, long)]
pub path: Option<String>,
#[arg(short, long)]
pub detailed: bool,
#[arg(long, default_value = "10000")]
pub max_samples: usize,
#[arg(short, long)]
pub output: Option<String>,
#[arg(short, long, default_value = "text")]
pub format: String,
}
#[derive(Parser, Debug)]
pub struct AnalyzeBothArgs {
#[arg(short, long)]
pub output: Option<String>,
}
#[derive(Parser, Debug)]
pub struct AnalyzeReportArgs {
#[arg(short, long, default_value = "analysis_report.html")]
pub output: String,
#[arg(short, long, default_value = "html")]
pub format: String,
#[arg(long)]
pub visualize: bool,
}
#[derive(Parser, Debug)]
pub struct BenchArgs {
#[command(subcommand)]
pub action: BenchSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum BenchSubcommand {
Model(BenchModelArgs),
Inference(BenchInferenceArgs),
Compare(BenchCompareArgs),
Hardware(BenchHardwareArgs),
}
#[derive(Parser, Debug)]
pub struct BenchModelArgs {
pub input: String,
#[arg(short, long, default_value = "100")]
pub iterations: usize,
#[arg(short, long, default_value = "10")]
pub warmup: usize,
#[arg(short, long, default_value = "1")]
pub batch_size: usize,
#[arg(long, default_value = "cpu")]
pub device: String,
#[arg(short, long)]
pub output: Option<String>,
}
#[derive(Parser, Debug)]
pub struct BenchInferenceArgs {
pub model: String,
#[arg(short, long, default_value = "1,2,4,8,16,32")]
pub batch_sizes: String,
#[arg(short, long, default_value = "50")]
pub iterations: usize,
#[arg(short, long, default_value = "5")]
pub warmup: usize,
#[arg(long, default_value = "cpu")]
pub device: String,
#[arg(short, long)]
pub output: Option<String>,
}
#[derive(Parser, Debug)]
pub struct BenchCompareArgs {
pub models: String,
#[arg(short, long, default_value = "50")]
pub iterations: usize,
#[arg(short, long, default_value = "1")]
pub batch_size: usize,
#[arg(long, default_value = "cpu")]
pub device: String,
#[arg(short, long)]
pub output: Option<String>,
}
#[derive(Parser, Debug)]
pub struct BenchHardwareArgs {
#[arg(short, long, default_value = "10")]
pub iterations: usize,
#[arg(short, long)]
pub output: Option<String>,
}
#[derive(Parser, Debug)]
pub struct GpuArgs {
#[command(subcommand)]
pub action: GpuSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum GpuSubcommand {
List,
Info,
Select(GpuSelectArgs),
Bench(GpuBenchArgs),
Memory,
Status,
}
#[derive(Parser, Debug)]
pub struct GpuSelectArgs {
pub device: String,
#[arg(short, long)]
pub persistent: bool,
}
#[derive(Parser, Debug)]
pub struct GpuBenchArgs {
#[arg(short, long)]
pub device: Option<String>,
#[arg(short, long)]
pub all: bool,
#[arg(short, long, default_value = "10")]
pub iterations: usize,
}
#[derive(Parser, Debug)]
pub struct TuiArgs {
#[arg(short, long)]
pub model: Option<String>,
#[arg(short, long)]
pub data: Option<String>,
}
#[derive(Parser, Debug)]
pub struct KaggleArgs {
#[command(subcommand)]
pub action: KaggleSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum KaggleSubcommand {
Login(KaggleLoginArgs),
Status,
Search(KaggleSearchArgs),
Download(KaggleDownloadArgs),
List,
}
#[derive(Parser, Debug)]
pub struct KaggleLoginArgs {
#[arg(short, long)]
pub username: String,
#[arg(short, long)]
pub key: String,
}
#[derive(Parser, Debug)]
pub struct KaggleSearchArgs {
pub query: String,
#[arg(short, long, default_value = "10")]
pub limit: usize,
}
#[derive(Parser, Debug)]
pub struct KaggleDownloadArgs {
pub dataset: String,
#[arg(short, long)]
pub output: Option<String>,
}
#[derive(Parser, Debug)]
pub struct HubArgs {
#[command(subcommand)]
pub action: HubSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum HubSubcommand {
List,
Info(HubInfoArgs),
Download(HubDownloadArgs),
Cached,
Clear(HubClearArgs),
}
#[derive(Parser, Debug)]
pub struct HubInfoArgs {
pub model: String,
}
#[derive(Parser, Debug)]
pub struct HubDownloadArgs {
pub model: String,
#[arg(short, long)]
pub force: bool,
}
#[derive(Parser, Debug)]
pub struct HubClearArgs {
pub model: Option<String>,
}
#[derive(Parser, Debug)]
pub struct DatasetArgs {
#[command(subcommand)]
pub action: DatasetSubcommand,
}
#[derive(Subcommand, Debug)]
pub enum DatasetSubcommand {
List(DatasetListArgs),
Info(DatasetInfoArgs),
Search(DatasetSearchArgs),
Download(DatasetDownloadArgs),
Sources,
}
#[derive(Parser, Debug)]
pub struct DatasetListArgs {
#[arg(short, long)]
pub source: Option<String>,
}
#[derive(Parser, Debug)]
pub struct DatasetInfoArgs {
pub dataset: String,
}
#[derive(Parser, Debug)]
pub struct DatasetSearchArgs {
pub query: String,
#[arg(short, long)]
pub source: Option<String>,
#[arg(short, long, default_value = "20")]
pub limit: usize,
}
#[derive(Parser, Debug)]
pub struct DatasetDownloadArgs {
pub dataset: String,
#[arg(short, long)]
pub output: Option<String>,
}
#[derive(Parser, Debug)]
pub struct StartArgs {
#[arg(long, conflicts_with = "dashboard")]
pub server: bool,
#[arg(long, conflicts_with = "server")]
pub dashboard: bool,
#[arg(long, default_value = "3000")]
pub port: u16,
#[arg(long, default_value = "8080")]
pub dashboard_port: u16,
#[arg(long, default_value = "127.0.0.1")]
pub host: String,
#[arg(short, long)]
pub foreground: bool,
#[arg(short, long)]
pub config: Option<String>,
}
#[derive(Parser, Debug)]
pub struct StopArgs {
#[arg(long, conflicts_with = "dashboard")]
pub server: bool,
#[arg(long, conflicts_with = "server")]
pub dashboard: bool,
#[arg(short, long)]
pub force: bool,
}
#[derive(Parser, Debug)]
pub struct StatusArgs {
#[arg(short, long)]
pub detailed: bool,
#[arg(short, long, default_value = "text")]
pub format: String,
}
#[derive(Parser, Debug)]
pub struct LogsArgs {
#[arg(long, conflicts_with = "dashboard")]
pub server: bool,
#[arg(long, conflicts_with = "server")]
pub dashboard: bool,
#[arg(short, long, default_value = "50")]
pub lines: usize,
#[arg(short, long)]
pub follow: bool,
#[arg(long)]
pub level: Option<String>,
}
#[cfg(feature = "server-sync")]
#[derive(Parser, Debug)]
pub struct LoginArgs {
#[arg(short, long)]
pub username: Option<String>,
#[arg(short, long)]
pub password: Option<String>,
#[arg(short, long)]
pub server: Option<String>,
}
#[cfg(feature = "server-sync")]
#[derive(Parser, Debug)]
pub struct SyncArgs {
#[arg(long)]
pub status: bool,
#[arg(long)]
pub force: bool,
}