1pub mod commands;
6
7use clap::{Parser, Subcommand};
8use std::path::PathBuf;
9
10#[derive(Debug, Parser)]
12#[command(
13 name = "sokuto",
14 version,
15 about = "TypeSafe AI Jev 互換の非自己回帰型判断特化モデル CLI ツール。"
16)]
17pub struct Cli {
18 #[command(subcommand)]
19 pub command: Commands,
20}
21
22#[derive(Debug, Subcommand, PartialEq, Eq)]
24pub enum Commands {
25 ExportOpenapi {
27 #[arg(short, long)]
29 output: Option<PathBuf>,
30 },
31
32 Serve {
34 #[arg(short = 'H', long, env = "SOKUTO_HOST", default_value = "0.0.0.0")]
36 host: String,
37
38 #[arg(short, long, env = "SOKUTO_PORT", default_value_t = 3000)]
40 port: u16,
41
42 #[arg(
44 short,
45 long,
46 env = "SOKUTO_MODEL_DIR",
47 default_value = "models/default"
48 )]
49 model_dir: PathBuf,
50
51 #[arg(long, env = "SOKUTO_POOL_SIZE", default_value_t = 2)]
53 pool_size: usize,
54
55 #[arg(long, env = "SOKUTO_PROVIDER")]
57 provider: Option<String>,
58
59 #[arg(long, env = "SOKUTO_INTRA_THREADS")]
61 intra_threads: Option<usize>,
62
63 #[arg(long, env = "SOKUTO_INTER_THREADS")]
65 inter_threads: Option<usize>,
66 },
67
68 Healthcheck {
70 #[arg(
72 short,
73 long,
74 env = "SOKUTO_HEALTHCHECK_URL",
75 default_value = "http://127.0.0.1:3000/ready"
76 )]
77 url: String,
78
79 #[arg(short, long, default_value_t = 3)]
81 timeout_secs: u64,
82 },
83
84 Benchmark {
86 #[arg(short, long, default_value = "models/default")]
88 model_dir: PathBuf,
89
90 #[arg(short = 'n', long, default_value_t = 50)]
92 iterations: usize,
93
94 #[arg(short = 'w', long, default_value_t = 10)]
96 warmup: usize,
97
98 #[arg(long)]
100 provider: Option<String>,
101
102 #[arg(short = 's', long, default_value = "all")]
104 scenario: String,
105
106 #[arg(long, default_value_t = 1)]
108 pool_size: usize,
109
110 #[arg(long)]
112 intra_threads: Option<usize>,
113
114 #[arg(long)]
116 inter_threads: Option<usize>,
117
118 #[arg(long, default_value_t = false)]
120 no_mem_arena: bool,
121
122 #[arg(long)]
124 json: bool,
125 },
126
127 Quantize {
129 #[arg(short, long, default_value = "models/default")]
131 model_dir: PathBuf,
132
133 #[arg(short, long, default_value = "models/quantized")]
135 output_dir: PathBuf,
136
137 #[arg(long, default_value_t = true, action = clap::ArgAction::Set)]
139 per_channel: bool,
140
141 #[arg(long, default_value_t = true, action = clap::ArgAction::Set)]
143 verify: bool,
144 },
145}