use clap::{Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "cost-ops")]
#[command(about = "LLM Cost Operations Platform", long_about = None)]
#[command(version)]
pub struct Cli {
#[arg(short, long, value_name = "FILE")]
pub config: Option<PathBuf>,
#[arg(short, long, action = clap::ArgAction::Count)]
pub verbose: u8,
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Init {
#[arg(long)]
database_url: Option<String>,
},
Ingest {
#[arg(short, long)]
file: PathBuf,
#[arg(short, long)]
provider: Option<String>,
},
Query {
#[arg(long, default_value = "last-24-hours")]
range: String,
#[arg(long)]
organization: Option<String>,
#[arg(long)]
group_by: Option<String>,
#[arg(long, default_value = "table")]
output: String,
},
Summary {
#[arg(long, default_value = "last-30-days")]
period: String,
#[arg(long)]
organization: Option<String>,
},
Export {
#[arg(short, long)]
output: PathBuf,
#[arg(short, long, default_value = "json")]
format: String,
#[arg(long)]
period: Option<String>,
},
Pricing {
#[command(subcommand)]
command: PricingCommands,
},
}
#[derive(Subcommand)]
pub enum PricingCommands {
List,
Add {
#[arg(long)]
provider: String,
#[arg(long)]
model: String,
#[arg(long)]
input_price: f64,
#[arg(long)]
output_price: f64,
},
Get {
#[arg(long)]
provider: String,
#[arg(long)]
model: String,
},
}
impl Cli {
pub fn parse_args() -> Self {
Self::parse()
}
}