use clap::{Args, Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(name = "routerctl")]
#[command(author = "Syntropd Authors")]
#[command(version)]
#[command(about = "Operator control CLI for syntrop-routerd")]
pub struct Cli {
#[arg(short, long, default_value = "/run/syntrop/io.syntrop.Router1", global = true)]
pub socket: PathBuf,
#[arg(long, default_value = "http://127.0.0.1:32768", global = true)]
pub http_url: String,
#[arg(long, global = true)]
pub json: bool,
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
Status,
Providers(ProvidersArgs),
Models,
Default(DefaultArgs),
Route(RouteArgs),
Test(TestArgs),
Info(InfoArgs),
Setup(SetupArgs),
}
#[derive(Args, Debug)]
pub struct ProvidersArgs {
#[command(subcommand)]
pub command: ProvidersCommands,
}
#[derive(Subcommand, Debug)]
pub enum ProvidersCommands {
List,
Test {
provider_id: Option<String>,
},
}
#[derive(Args, Debug)]
pub struct RouteArgs {
#[arg(default_value = "router:fast")]
pub model: String,
#[arg(short, long)]
pub tier: Option<String>,
#[arg(long, default_value_t = 1024)]
pub tokens: usize,
#[arg(long)]
pub stream: bool,
}
#[derive(Args, Debug)]
pub struct TestArgs {
#[arg(short, long, default_value = "router:fast")]
pub model: String,
#[arg(short, long, default_value = "Respond with one short sentence acknowledging this benchmark test.")]
pub prompt: String,
#[arg(short, long)]
pub tier: Option<String>,
}
#[derive(Args, Debug)]
pub struct DefaultArgs {
pub model: Option<String>,
#[arg(long, default_value = "/etc/syntrop/routerd.toml")]
pub config: PathBuf,
#[arg(long)]
pub no_reload: bool,
}
#[derive(Args, Debug)]
pub struct InfoArgs {
pub interface: Option<String>,
}
#[derive(Args, Debug, Clone)]
pub struct SetupArgs {
#[arg(long, default_value = "/etc/syntrop/routerd.toml")]
pub config: PathBuf,
#[arg(long, default_value = "/var/lib/models")]
pub models_dir: PathBuf,
#[arg(long)]
pub no_reload: bool,
#[arg(long)]
pub auto: bool,
}