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    },
43    /// Prune model (structured/unstructured pruning) (GH-247)
44    Prune {
45        /// Input model file
46        #[arg(value_name = "FILE")]
47        file: PathBuf,
48        /// Pruning method: magnitude, structured, depth, width, wanda, sparsegpt
49        #[arg(long, short = 'm', default_value = "magnitude")]
50        method: String,
51        /// Target pruning ratio (0-1)
52        #[arg(long, default_value = "0.5")]
53        target_ratio: f32,
54        /// Sparsity level (0-1)
55        #[arg(long, default_value = "0.0")]
56        sparsity: f32,
57        /// Output file path
58        #[arg(short, long)]
59        output: Option<PathBuf>,
60        /// Layers to remove for depth pruning (e.g., "20-24")
61        #[arg(long)]
62        remove_layers: Option<String>,
63        /// Analyze mode (identify pruning opportunities)
64        #[arg(long)]
65        analyze: bool,
66        /// Plan mode (estimate only)
67        #[arg(long)]
68        plan: bool,
69        /// Calibration data file
70        #[arg(long, value_name = "FILE")]
71        calibration: Option<PathBuf>,
72    },
73    /// Knowledge distillation (teacher -> student) (GH-247)
74    Distill {
75        /// Teacher model file
76        #[arg(value_name = "TEACHER")]
77        teacher: PathBuf,
78        /// Student model file
79        #[arg(long, value_name = "FILE")]
80        student: Option<PathBuf>,
81        /// Training data file
82        #[arg(long, short = 'd', value_name = "FILE")]
83        data: Option<PathBuf>,
84        /// Output file path
85        #[arg(short, long)]
86        output: Option<PathBuf>,
87        /// Distillation strategy: standard, progressive, ensemble
88        #[arg(long, default_value = "standard")]
89        strategy: String,
90        /// Temperature for softmax scaling
91        #[arg(long, default_value = "3.0")]
92        temperature: f64,
93        /// Alpha weight for KL vs task loss
94        #[arg(long, default_value = "0.7")]
95        alpha: f64,
96        /// Training epochs
97        #[arg(long, default_value = "3")]
98        epochs: u32,
99        /// Plan mode (estimate only)
100        #[arg(long)]
101        plan: bool,
102    },
103}