use clap::{Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "aim")]
#[command(version = env!("CARGO_PKG_VERSION"))]
#[command(about = "Universal secure vault for AI model formats (Neural & Neurosymbolic)", long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
#[arg(short, long)]
pub vault: Option<String>,
#[arg(short, long)]
pub config: Option<PathBuf>,
#[cfg(feature = "sqlite")]
#[arg(long, env = "AIM_SQLITE_VERSIONS")]
pub sqlite_versions: bool,
#[arg(long, env = "AIM_TELEMETRY_DISABLED")]
pub no_telemetry: bool,
}
#[derive(Subcommand)]
pub enum Commands {
Init {
#[arg(short, long, default_value = "default")]
name: String,
},
Store {
name: String,
path: PathBuf,
#[arg(short, long)]
format: Option<String>,
#[arg(short, long)]
description: Option<String>,
#[arg(long)]
framework: Option<String>,
#[arg(long)]
task: Option<String>,
},
Get {
name: String,
output: PathBuf,
#[arg(short, long)]
version: Option<u32>,
},
List,
Versions {
name: String,
},
Lineage {
name: String,
version: u32,
},
Delete {
name: String,
version: u32,
#[arg(short, long)]
force: bool,
},
Stats,
Compliance,
ChangePassphrase,
Archive {
#[arg(required = true)]
models: Vec<String>,
output: PathBuf,
#[arg(short, long, default_value = "tar")]
format: String,
#[arg(short, long)]
versions: Option<Vec<u32>>,
},
Extract {
archive: PathBuf,
#[arg(short, long, default_value = ".")]
output: PathBuf,
},
Analyze {
name: String,
#[arg(short, long)]
version: Option<u32>,
},
Deduplicate {
#[arg(short, long)]
detailed: bool,
},
Export {
name: String,
output: PathBuf,
#[arg(short, long)]
version: Option<u32>,
},
Cache,
Convert {
name: String,
#[arg(short = 't', long)]
to_format: String,
#[arg(short, long)]
output: Option<PathBuf>,
#[arg(short, long)]
version: Option<u32>,
#[arg(short, long)]
quantization: Option<String>,
#[arg(long)]
opset: Option<u32>,
#[arg(long)]
validate: bool,
#[arg(long)]
plan_only: bool,
},
ListConversions,
#[cfg(feature = "api")]
Serve {
#[arg(long, default_value = "127.0.0.1", env = "AIM_HOST")]
host: String,
#[arg(short, long, default_value_t = 8080, env = "AIM_PORT")]
port: u16,
#[arg(long, env = "AIM_JWT_SECRET")]
jwt_secret: String,
#[arg(long, default_value_t = 3600)]
token_expiry: u64,
#[arg(long)]
cors_permissive: bool,
#[arg(long)]
no_dashboard: bool,
#[arg(long, env = "AIM_REVOCATION_STORE")]
revocation_store: Option<std::path::PathBuf>,
},
Cloud {
#[command(subcommand)]
command: CloudCommands,
},
Chain {
#[command(subcommand)]
command: ChainCommands,
},
Federation {
#[command(subcommand)]
command: FederationCommands,
},
Card {
#[command(subcommand)]
command: CardCommands,
},
Database {
#[command(subcommand)]
command: DatabaseCommands,
},
Telemetry {
#[command(subcommand)]
command: TelemetryCommands,
},
Introspect {
#[arg(short, long, default_value = "json")]
format: String,
#[arg(long)]
compact: bool,
},
Pull {
source: String,
#[arg(short, long)]
output: Option<PathBuf>,
#[arg(long)]
sha256: Option<String>,
#[arg(long, env = "HF_TOKEN")]
token: Option<String>,
#[arg(long)]
store: bool,
#[arg(long)]
name: Option<String>,
},
Sign {
name: String,
#[arg(short, long)]
version: Option<u32>,
#[arg(short, long)]
key: Option<String>,
#[arg(short, long)]
identity: Option<String>,
#[arg(long)]
file: Option<PathBuf>,
},
Verify {
name: String,
#[arg(short, long)]
version: Option<u32>,
#[arg(short, long)]
signature: PathBuf,
#[arg(short, long)]
key: Option<String>,
#[arg(long)]
file: Option<PathBuf>,
},
Scan {
name: Option<String>,
#[arg(long)]
file: Option<PathBuf>,
#[arg(short, long)]
version: Option<u32>,
#[arg(short, long, default_value = "text")]
format: String,
},
Diff {
left: String,
right: String,
#[arg(short, long, default_value = "text")]
format: String,
},
Register {
name: String,
#[arg(short, long)]
engine: String,
#[arg(short, long)]
version: Option<u32>,
#[arg(long)]
alias: Option<String>,
#[arg(long)]
system_prompt: Option<String>,
},
Benchmark {
#[command(subcommand)]
command: BenchmarkCommands,
},
LicenseScan {
path: PathBuf,
#[arg(short, long, default_value = "text")]
format: String,
},
Tag {
#[command(subcommand)]
command: TagCommands,
},
Search {
#[arg(default_value = "")]
query: String,
#[arg(short, long)]
tag: Vec<String>,
#[arg(short, long)]
format: Option<String>,
},
VaultExport {
output: PathBuf,
},
VaultImport {
archive: PathBuf,
#[arg(short, long)]
target: Option<PathBuf>,
},
Gc {
#[arg(long)]
dry_run: bool,
},
Browse,
Webhook {
#[command(subcommand)]
command: WebhookCommands,
},
Acl {
#[command(subcommand)]
command: AclCommands,
},
Validate {
name: String,
#[arg(short, long)]
version: Option<u32>,
},
Policy {
#[command(subcommand)]
command: PolicyCommands,
},
LineageGraph {
#[command(subcommand)]
command: LineageGraphCommands,
},
Plugin {
#[command(subcommand)]
command: PluginCommands,
},
Profile {
#[command(subcommand)]
command: ProfileCommands,
},
Quantize {
#[command(subcommand)]
command: QuantizeCommands,
},
Eval {
#[command(subcommand)]
command: EvalCommands,
},
Backup {
#[command(subcommand)]
command: BackupCommands,
},
Vaults {
#[command(subcommand)]
command: VaultsCommands,
},
}
#[derive(Subcommand)]
pub enum TelemetryCommands {
Status,
Enable,
Disable,
Reset,
}
#[derive(Subcommand)]
pub enum DatabaseCommands {
Init {
#[arg(short, long)]
path: PathBuf,
#[arg(short = 't', long, default_value = "sqlite")]
db_type: String,
},
Store {
#[arg(short, long)]
path: PathBuf,
#[arg(short, long)]
input: PathBuf,
#[arg(short = 'I', long)]
id: Option<String>,
#[arg(short, long)]
metadata: Vec<String>,
},
Get {
#[arg(short, long)]
path: PathBuf,
id: String,
},
Search {
#[arg(short, long)]
path: PathBuf,
query: String,
#[arg(short = 'n', long, default_value = "10")]
limit: usize,
},
List {
#[arg(short, long)]
path: PathBuf,
},
Delete {
#[arg(short, long)]
path: PathBuf,
id: String,
},
Export {
#[arg(short, long)]
path: PathBuf,
#[arg(short, long)]
output: PathBuf,
},
Import {
#[arg(short, long)]
path: PathBuf,
#[arg(short, long)]
input: PathBuf,
},
Stats {
#[arg(short, long)]
path: PathBuf,
},
BuildIndex {
#[arg(short, long)]
path: PathBuf,
#[arg(short, long)]
output: PathBuf,
},
VectorSearch {
#[arg(short, long)]
index: PathBuf,
#[arg(short, long)]
query: PathBuf,
#[arg(short = 'n', long, default_value = "5")]
limit: usize,
},
}
#[derive(Subcommand)]
pub enum CardCommands {
Create {
name: String,
#[arg(short, long)]
version: String,
#[arg(short, long)]
description: String,
#[arg(short = 't', long)]
model_type: String,
#[arg(short, long)]
architecture: String,
#[arg(short, long)]
output: PathBuf,
#[arg(short, long)]
interactive: bool,
},
Show {
path: PathBuf,
#[arg(short, long, default_value = "markdown")]
format: String,
},
Validate {
path: PathBuf,
#[arg(short, long)]
strict: bool,
},
Convert {
input: PathBuf,
output: PathBuf,
},
Template {
#[arg(short, long, default_value = "basic")]
template_type: String,
#[arg(short, long)]
output: PathBuf,
},
Attach {
model: String,
#[arg(short, long)]
version: Option<u32>,
card: PathBuf,
},
Extract {
model: String,
#[arg(short, long)]
version: Option<u32>,
#[arg(short, long)]
output: PathBuf,
},
Generate {
model: String,
#[arg(short, long)]
version: Option<u32>,
#[arg(short, long)]
output: PathBuf,
#[arg(long)]
include_training: bool,
#[arg(long)]
include_evaluation: bool,
},
}
#[derive(Subcommand)]
pub enum FederationCommands {
Status,
Plan {
peer: String,
},
Sync {
peer: String,
#[arg(long)]
dry_run: bool,
},
Manifest,
}
#[derive(Subcommand)]
pub enum ChainCommands {
Status,
Verify,
Proof {
#[arg(short, long)]
block: u64,
#[arg(short, long)]
entry: usize,
#[arg(short, long)]
output: Option<std::path::PathBuf>,
},
VerifyProof {
proof: std::path::PathBuf,
},
Search {
#[arg(short, long)]
model: Option<String>,
#[arg(short, long)]
event: Option<String>,
#[arg(short, long, default_value = "50")]
limit: usize,
},
}
#[derive(Subcommand)]
pub enum CloudCommands {
Push {
model: String,
#[arg(short, long)]
version: Option<u32>,
#[arg(short, long)]
provider: String,
#[arg(short, long)]
bucket: String,
},
Pull {
model: String,
#[arg(short, long)]
provider: String,
#[arg(short, long)]
bucket: String,
#[arg(short = 'k', long)]
remote_path: String,
},
List {
#[arg(short, long)]
provider: String,
#[arg(short, long)]
bucket: String,
#[arg(short = 'x', long)]
prefix: Option<String>,
},
Config {
#[arg(short, long)]
provider: String,
#[arg(short, long)]
show: bool,
},
}
#[derive(Subcommand)]
pub enum BenchmarkCommands {
Add {
name: String,
#[arg(short, long)]
version: u32,
#[arg(short, long)]
benchmark: String,
#[arg(short, long)]
score: f64,
#[arg(short, long, default_value = "score")]
unit: String,
#[arg(long)]
higher_is_better: bool,
#[arg(long)]
hardware: Option<String>,
#[arg(long)]
dataset: Option<String>,
},
Show {
name: String,
#[arg(short, long)]
version: Option<u32>,
#[arg(short, long, default_value = "text")]
format: String,
},
}
#[derive(Subcommand)]
pub enum TagCommands {
Add {
model: String,
#[arg(required = true)]
tags: Vec<String>,
},
Remove {
model: String,
#[arg(required = true)]
tags: Vec<String>,
},
List {
model: String,
},
}
#[derive(Subcommand)]
pub enum WebhookCommands {
Add {
id: String,
url: String,
#[arg(short, long)]
secret: Option<String>,
#[arg(short, long)]
events: Vec<String>,
},
Remove {
id: String,
},
List,
}
#[derive(Subcommand)]
pub enum AclCommands {
Grant {
identity: String,
role: String,
},
Revoke {
identity: String,
},
List,
}
#[derive(Subcommand)]
pub enum PolicyCommands {
Set {
model: String,
#[arg(long)]
max_versions: Option<usize>,
#[arg(long)]
max_age_days: Option<u64>,
#[arg(long)]
keep_minimum: Option<usize>,
},
Remove {
model: String,
},
Show {
model: String,
},
Apply {
#[arg(short, long)]
model: Option<String>,
#[arg(long)]
dry_run: bool,
},
}
#[derive(Subcommand)]
pub enum LineageGraphCommands {
Add {
parent: String,
child: String,
#[arg(short, long, default_value = "finetune")]
kind: String,
},
Show {
model: String,
#[arg(short, long, default_value = "text")]
format: String,
},
}
#[derive(Subcommand)]
pub enum PluginCommands {
List,
Install {
path: PathBuf,
},
Uninstall {
id: String,
},
Discover,
}
#[derive(Subcommand)]
pub enum ProfileCommands {
Create {
name: String,
#[arg(short, long)]
set: Vec<String>,
},
Activate {
name: String,
},
Deactivate,
List,
Show {
name: String,
},
Delete {
name: String,
},
}
#[derive(Subcommand)]
pub enum QuantizeCommands {
Set {
name: String,
#[arg(short, long)]
method: String,
#[arg(short, long)]
description: Option<String>,
},
Remove {
name: String,
},
List,
Estimate {
#[arg(short, long)]
size: u64,
#[arg(long, default_value = "f32")]
from: String,
#[arg(short, long)]
to: String,
},
}
#[derive(Subcommand)]
pub enum EvalCommands {
Record {
name: String,
#[arg(short, long)]
version: u64,
#[arg(short, long)]
suite: String,
#[arg(short, long, required = true)]
metric: Vec<String>,
#[arg(short, long, default_value = "score")]
unit: String,
#[arg(long, default_value_t = true)]
higher_is_better: bool,
},
List {
name: String,
#[arg(short, long)]
version: Option<u64>,
#[arg(short, long, default_value = "text")]
format: String,
},
Compare {
a: String,
b: String,
#[arg(short, long)]
suite: String,
#[arg(short, long, default_value = "text")]
format: String,
},
Suites,
}
#[derive(Subcommand)]
pub enum BackupCommands {
Set {
name: String,
#[arg(short, long)]
frequency: String,
#[arg(short, long, default_value_t = 7)]
max_backups: usize,
#[arg(short, long)]
output_dir: std::path::PathBuf,
},
Remove {
name: String,
},
List,
History {
#[arg(short, long)]
schedule: Option<String>,
},
}
#[derive(Subcommand)]
pub enum VaultsCommands {
Register {
name: String,
path: std::path::PathBuf,
#[arg(short, long)]
description: Option<String>,
},
Unregister {
name: String,
},
Activate {
name: String,
},
Deactivate,
List,
}