Skip to main content

apr_cli/
model_ops_commands.rs

1
2#[derive(Subcommand, Debug)]
3pub enum ModelOpsCommands {
4    /// Fine-tune model with LoRA/QLoRA (GH-244)
5    Finetune {
6        /// Input model file
7        #[arg(value_name = "FILE")]
8        file: Option<PathBuf>,
9        /// Fine-tuning method: auto, full, lora, qlora
10        #[arg(long, short = 'm', default_value = "auto")]
11        method: String,
12        /// LoRA rank (default: auto-selected)
13        #[arg(long, short = 'r')]
14        rank: Option<u32>,
15        /// Available VRAM in GB
16        #[arg(long, default_value = "16.0")]
17        vram: f64,
18        /// Plan mode (estimate only)
19        #[arg(long)]
20        plan: bool,
21        /// Training data file (JSONL format)
22        #[arg(long, short = 'd', value_name = "FILE")]
23        data: Option<PathBuf>,
24        /// Output path (adapter dir or merged model)
25        #[arg(short, long)]
26        output: Option<PathBuf>,
27        /// Adapter path for merge mode
28        #[arg(long)]
29        adapter: Option<PathBuf>,
30        /// Merge adapter into base model
31        #[arg(long)]
32        merge: bool,
33        /// Training epochs
34        #[arg(long, default_value = "3")]
35        epochs: u32,
36        /// Learning rate
37        #[arg(long, default_value = "0.0002")]
38        learning_rate: f64,
39        /// Model size for planning (e.g., "7B", "1.5B")
40        #[arg(long, value_name = "SIZE")]
41        model_size: Option<String>,
42        /// Fine-tuning task: classify (sequence classification)
43        #[arg(long)]
44        task: Option<String>,
45        /// Number of classes for classification task
46        #[arg(long, default_value = "5")]
47        num_classes: usize,
48        /// Output format for checkpoints: apr, safetensors, or both (comma-separated)
49        #[arg(long, value_name = "FORMAT", default_value = "apr,safetensors")]
50        checkpoint_format: String,
51    },
52    /// Prune model (structured/unstructured pruning) (GH-247)
53    Prune {
54        /// Input model file
55        #[arg(value_name = "FILE")]
56        file: PathBuf,
57        /// Pruning method: magnitude, structured, depth, width, wanda, sparsegpt
58        #[arg(long, short = 'm', default_value = "magnitude")]
59        method: String,
60        /// Target pruning ratio (0-1)
61        #[arg(long, default_value = "0.5")]
62        target_ratio: f32,
63        /// Sparsity level (0-1)
64        #[arg(long, default_value = "0.0")]
65        sparsity: f32,
66        /// Output file path
67        #[arg(short, long)]
68        output: Option<PathBuf>,
69        /// Layers to remove for depth pruning (e.g., "20-24")
70        #[arg(long)]
71        remove_layers: Option<String>,
72        /// Analyze mode (identify pruning opportunities)
73        #[arg(long)]
74        analyze: bool,
75        /// Plan mode (estimate only)
76        #[arg(long)]
77        plan: bool,
78        /// Calibration data file
79        #[arg(long, value_name = "FILE")]
80        calibration: Option<PathBuf>,
81    },
82    /// Knowledge distillation (teacher -> student) (GH-247)
83    Distill {
84        /// Teacher model file
85        #[arg(value_name = "TEACHER")]
86        teacher: PathBuf,
87        /// Student model file
88        #[arg(long, value_name = "FILE")]
89        student: Option<PathBuf>,
90        /// Training data file
91        #[arg(long, short = 'd', value_name = "FILE")]
92        data: Option<PathBuf>,
93        /// Output file path
94        #[arg(short, long)]
95        output: Option<PathBuf>,
96        /// Distillation strategy: standard, progressive, ensemble
97        #[arg(long, default_value = "standard")]
98        strategy: String,
99        /// Temperature for softmax scaling
100        #[arg(long, default_value = "3.0")]
101        temperature: f64,
102        /// Alpha weight for KL vs task loss
103        #[arg(long, default_value = "0.7")]
104        alpha: f64,
105        /// Training epochs
106        #[arg(long, default_value = "3")]
107        epochs: u32,
108        /// Plan mode (estimate only)
109        #[arg(long)]
110        plan: bool,
111    },
112}