use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
pub struct Cli {
#[arg(short, long, action = clap::ArgAction::Count)]
pub verbose: u8,
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Download {
#[arg(short, long)]
dataset: String,
#[arg(short, long, default_value = "datasets")]
output_dir: String,
#[arg(short, long, default_value = "csv")]
format: String,
},
Convert {
#[arg(short, long)]
input: String,
#[arg(short, long)]
output: String,
#[arg(short, long, default_value = "csv")]
input_format: String,
#[arg(short, long, default_value = "parquet")]
output_format: String,
},
Test,
Benchmark {
#[arg(short, long, default_value = "query")]
operation: String,
#[arg(short, long, default_value = "1000")]
iterations: usize,
#[arg(short, long, default_value = "medium")]
size: String,
},
Info,
FlockSetup {
#[arg(long, default_value = "http://localhost:11434")]
ollama_url: String,
#[arg(long, default_value = "qwen3-coder:30b")]
text_model: String,
#[arg(long, default_value = "qwen3-embedding:8b")]
embedding_model: String,
#[arg(long)]
skip_verification: bool,
},
Complete {
#[arg(short, long)]
prompt: Option<String>,
#[arg(short, long, conflicts_with = "prompt")]
input: Option<String>,
#[arg(short, long)]
output: Option<String>,
#[arg(short, long, default_value = "text_generator")]
model: String,
#[arg(long, default_value = "512")]
max_tokens: usize,
#[arg(short, long, default_value = "0.7")]
temperature: f32,
},
Embed {
#[arg(short, long)]
text: Option<String>,
#[arg(short, long, conflicts_with = "text")]
input: Option<String>,
#[arg(short, long)]
output: Option<String>,
#[arg(short, long, default_value = "embedder")]
model: String,
#[arg(long)]
normalize: bool,
},
Search {
#[arg(short, long)]
query: String,
#[arg(short, long)]
corpus: String,
#[arg(short, long, default_value = "0.7")]
threshold: f32,
#[arg(short, long, default_value = "10")]
limit: usize,
#[arg(short, long, default_value = "text")]
format: String,
},
Filter {
#[arg(short, long)]
criteria: Option<String>,
#[arg(short, long, conflicts_with = "criteria")]
prompt: Option<String>,
#[arg(short, long)]
input: String,
#[arg(short, long)]
output: Option<String>,
#[arg(short, long, default_value = "text_generator")]
model: String,
#[arg(long)]
positive_only: bool,
},
Summarize {
#[arg(short, long)]
input: String,
#[arg(short, long)]
output: Option<String>,
#[arg(short, long, default_value = "reduce")]
strategy: String,
#[arg(short, long, default_value = "150")]
max_length: usize,
#[arg(short, long, default_value = "text_generator")]
model: String,
},
}