1use clap::Subcommand;
2use std::path::PathBuf;
3
4#[derive(Subcommand, Debug)]
5pub enum LlmAction {
6 List {
7 #[arg(short, long)]
8 vault_path: Option<PathBuf>,
9 },
10 Duplicates {
11 #[arg(long)]
12 vault_path: Option<PathBuf>,
13 },
14 Load {
15 model: String,
16 #[arg(short, long)]
17 vault_path: Option<PathBuf>,
18 },
19 Status,
20 Eval {
21 prompt: String,
22 #[arg(long)]
23 orchestrated: bool,
24 #[arg(long)]
25 stream: bool,
26 #[arg(long)]
27 lora: Option<PathBuf>,
28 },
29 Evict {
30 model_id: String,
31 },
32 Test {
33 #[arg(short, long)]
34 vault_path: Option<PathBuf>,
35 #[arg(long, value_delimiter = ',')]
36 models: Option<Vec<String>>,
37 #[arg(long)]
38 quantization: Option<String>,
39 #[arg(long, id = "test_verbose")]
40 verbose: bool,
41 },
42 Validate {
43 #[arg(short, long)]
44 vault_path: Option<PathBuf>,
45 #[arg(long)]
46 strict: bool,
47 },
48 ComprehensiveTest {
49 #[arg(short, long)]
50 vault_path: Option<PathBuf>,
51 model: String,
52 #[arg(long, id = "comprehensive_verbose")]
53 verbose: bool,
54 },
55 Benchmark {
56 #[arg(short, long)]
57 vault_path: Option<PathBuf>,
58 #[arg(long, value_delimiter = ',')]
59 models: Option<Vec<String>>,
60 #[arg(long)]
61 iterations: Option<u32>,
62 #[arg(long)]
63 warmup: Option<u32>,
64 },
65 Report {
66 #[arg(short, long)]
67 vault_path: Option<PathBuf>,
68 #[arg(long)]
69 output: Option<PathBuf>,
70 #[arg(long)]
71 format: Option<String>,
72 },
73 Convert {
74 input: PathBuf,
75 #[arg(short, long)]
76 out: PathBuf,
77 #[arg(long, default_value_t = 14)]
78 page_log2: u16,
79 #[arg(long, default_value = "auto")]
80 layout: String,
81 },
82 Optimize {
83 input: PathBuf,
84 #[arg(short, long)]
85 out: Option<PathBuf>,
86 #[arg(long)]
87 skip_passport: bool,
88 },
89 Passport {
90 #[arg(long)]
91 reprobe: bool,
92 #[arg(long, default_value_t = 2048)]
93 gemv_n: usize,
94 #[arg(long)]
95 cache: Option<PathBuf>,
96 #[arg(long)]
97 apply_env_hint: bool,
98 #[arg(long)]
99 decode_proxy: Option<Option<PathBuf>>,
100 #[arg(long, default_value_t = 16)]
101 decode_proxy_tokens: u32,
102 },
103 DecodeProxy {
104 model: PathBuf,
105 #[arg(long, default_value_t = 16)]
106 tokens: u32,
107 },
108 RawDecodeBench {
110 model: PathBuf,
111 #[arg(long, default_value_t = 256)]
112 steps: u32,
113 #[arg(long, default_value_t = 1)]
114 warmups: u16,
115 #[arg(long, default_value_t = 5)]
116 runs: u16,
117 #[arg(long, default_value = "Q8_0")]
118 quantization: String,
119 #[arg(long, default_value = "Write a sequence of distinct short words:")]
120 prompt: String,
121 #[arg(long)]
123 target_prompt_tokens: Option<u32>,
124 #[arg(long)]
126 retain_artifacts: Option<PathBuf>,
127 },
128 Mode {
129 name: Option<String>,
130 },
131 PathSelect {
132 #[arg(long)]
133 reprobe: bool,
134 #[arg(long)]
135 apply: bool,
136 },
137 Profile {
138 name: Option<String>,
139 },
140 Lab {
141 action: String,
142 #[arg(long)]
143 model: Option<PathBuf>,
144 #[arg(long, default_value_t = 0)]
145 tokens: u32,
146 #[arg(long, default_value_t = 256)]
147 n_in: usize,
148 #[arg(long, default_value_t = 64)]
149 n_out: usize,
150 #[arg(long, default_value_t = 512)]
151 gemv_n: usize,
152 #[arg(long)]
153 out: Option<PathBuf>,
154 #[arg(long, default_value_t = 2.0)]
155 hours: f64,
156 #[arg(long, default_value_t = 8)]
157 max_generations: u32,
158 #[arg(long)]
159 ollama_model: Option<String>,
160 #[arg(long, default_value = "http://127.0.0.1:11434")]
161 ollama_url: String,
162 #[arg(long, default_value_t = false)]
163 no_ollama: bool,
164 },
165 Ground {
166 prompt: String,
167 answer: String,
168 },
169 SeedGrounding,
170 CudaTcBench {
171 #[arg(long, default_value_t = 256)]
172 side: usize,
173 },
174 Explore {
175 input: PathBuf,
176 #[arg(short, long)]
177 out: Option<PathBuf>,
178 #[arg(long, default_value_t = 16)]
179 tokens: u32,
180 #[arg(long, default_value = "auto")]
181 layouts: String,
182 #[arg(long)]
183 skip_convert: bool,
184 #[arg(long)]
185 sweep_ffn_f16: bool,
186 #[arg(long)]
187 modes: Option<String>,
188 },
189}