use std::{net::SocketAddr, path::PathBuf};
use clap::Parser;
use super::ProxyMode;
#[derive(clap::Subcommand, Debug, Clone)]
pub enum Command {
Run,
Setup {
#[arg(long, env = "APHRODITE_API_KEY", hide_env_values = true)]
api_key:Option<String>,
#[arg(long, env = "APHRODITE_API_URL", default_value = "")]
api_url:String,
#[arg(long, env = "APHRODITE_MODEL", default_value = "")]
model:String,
#[arg(long, env = "APHRODITE_CACHE_PORT", default_value = "9797")]
cache_port:u16,
#[arg(long, env = "APHRODITE_TOKEN_PORT", default_value = "9798")]
token_port:u16,
#[arg(long)]
no_launch:bool,
#[arg(long)]
force:bool,
},
}
#[derive(Debug, Clone)]
pub struct SetupArgs {
pub api_key:Option<String>,
pub api_url:String,
pub model:String,
pub cache_port:u16,
pub token_port:u16,
pub no_launch:bool,
pub force:bool,
}
impl From<Command> for SetupArgs {
fn from(cmd:Command) -> Self {
match cmd {
Command::Setup { api_key, api_url, model, cache_port, token_port, no_launch, force } => {
Self { api_key, api_url, model, cache_port, token_port, no_launch, force }
},
_ => {
Self {
api_key:None,
api_url:String::new(),
model:String::new(),
cache_port:9797,
token_port:9798,
no_launch:false,
force:false,
}
},
}
}
}
#[derive(Parser, Debug, Clone)]
#[command(name = "aphrodite", version, about)]
pub struct Cli {
#[command(subcommand)]
pub command:Option<Command>,
#[arg(long, default_value = "token", env = "APHRODITE_MODE")]
pub mode:ProxyMode,
#[arg(long, default_value = "127.0.0.1:9797", env = "APHRODITE_LISTEN")]
pub listen:SocketAddr,
#[arg(long, default_value = "https://api.openai.com", env = "APHRODITE_API_URL")]
pub api_url:String,
#[arg(long, env = "APHRODITE_API_KEY", hide_env_values = true, default_value = "")]
pub api_key:String,
#[arg(long, default_value = "default-model", env = "APHRODITE_MODEL")]
pub model:String,
#[arg(long, default_value = "1000000")]
pub max_context:usize,
#[arg(long, default_value = "384000")]
pub max_output:usize,
#[arg(long, env = "APHRODITE_DB")]
pub ccr_db_path:Option<PathBuf>,
#[arg(long, default_value = "3600", env = "APHRODITE_CCR_TTL")]
pub ccr_ttl_seconds:u64,
#[arg(long)]
pub no_ccr_marker:bool,
#[arg(long)]
pub tool_relay:bool,
#[arg(long, env = "APHRODITE_NOTIFY_URL")]
pub notify_url:Option<String>,
#[arg(long, env = "APHRODITE_NOTIFY_KEY", hide_env_values = true)]
pub notify_key:Option<String>,
#[arg(long)]
pub dev:bool,
#[arg(long, env = "APHRODITE_LOG_COMPACT")]
pub log_compact:bool,
#[arg(long, default_value = "300")]
pub timeout:u64,
}