Skip to main content

sokuto_cli/
lib.rs

1//! # sokuto-cli ライブラリクレート
2//!
3//! Sokuto CLI のコマンド実装および構成パラメータを提供する。
4
5pub mod commands;
6
7use clap::{Parser, Subcommand};
8use std::path::PathBuf;
9
10/// Sokuto CLI 管理ツールのコマンドライン引数定義。
11#[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/// 利用可能なサブコマンド一覧。
23#[derive(Debug, Subcommand, PartialEq, Eq)]
24pub enum Commands {
25    /// OpenAPI 3.1 仕様書を JSON 形式で出力する。
26    ExportOpenapi {
27        /// 出力先ファイルパス (省略時は標準出力)。
28        #[arg(short, long)]
29        output: Option<PathBuf>,
30    },
31
32    /// Jev 互換 HTTP API サーバーを起動する。
33    Serve {
34        /// バインド先ホストアドレス。
35        #[arg(short = 'H', long, env = "SOKUTO_HOST", default_value = "0.0.0.0")]
36        host: String,
37
38        /// バインド先ポート番号。
39        #[arg(short, long, env = "SOKUTO_PORT", default_value_t = 3000)]
40        port: u16,
41
42        /// モデルファイル格納ディレクトリ。
43        #[arg(
44            short,
45            long,
46            env = "SOKUTO_MODEL_DIR",
47            default_value = "models/default"
48        )]
49        model_dir: PathBuf,
50
51        /// セッションプールサイズ。
52        #[arg(long, env = "SOKUTO_POOL_SIZE", default_value_t = 2)]
53        pool_size: usize,
54
55        /// 優先 Execution Provider (auto, coreml, cuda, tensorrt, cpu)。
56        #[arg(long, env = "SOKUTO_PROVIDER")]
57        provider: Option<String>,
58
59        /// 単一オペレータ内の並列スレッド数 (intra-op)。
60        #[arg(long, env = "SOKUTO_INTRA_THREADS")]
61        intra_threads: Option<usize>,
62
63        /// 複数オペレータ間の並列スレッド数 (inter-op)。
64        #[arg(long, env = "SOKUTO_INTER_THREADS")]
65        inter_threads: Option<usize>,
66    },
67
68    /// サーバーエンドポイントの死活監視・準備状態確認を実行する。
69    Healthcheck {
70        /// 監視対象 URL。
71        #[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        /// 応答タイムアウト秒数。
80        #[arg(short, long, default_value_t = 3)]
81        timeout_secs: u64,
82    },
83
84    /// インプロセスでの推論レイテンシおよびスループットを計測する。
85    Benchmark {
86        /// モデルファイル格納ディレクトリ。
87        #[arg(short, long, default_value = "models/default")]
88        model_dir: PathBuf,
89
90        /// 測定反復回数。
91        #[arg(short = 'n', long, default_value_t = 50)]
92        iterations: usize,
93
94        /// ウォームアップ反復回数。
95        #[arg(short = 'w', long, default_value_t = 10)]
96        warmup: usize,
97
98        /// 優先 Execution Provider (auto, coreml, cuda, tensorrt, cpu)。
99        #[arg(long)]
100        provider: Option<String>,
101
102        /// 実行対象シナリオ (all, single, batch, coarse, scratchpad)。
103        #[arg(short = 's', long, default_value = "all")]
104        scenario: String,
105
106        /// セッションプールサイズ。
107        #[arg(long, default_value_t = 1)]
108        pool_size: usize,
109
110        /// 単一オペレータ内の並列スレッド数 (intra-op)。
111        #[arg(long)]
112        intra_threads: Option<usize>,
113
114        /// 複数オペレータ間の並列スレッド数 (inter-op)。
115        #[arg(long)]
116        inter_threads: Option<usize>,
117
118        /// CPU メモリアリーナを無効化する (OS アロケータ mimalloc に都度返却)。
119        #[arg(long, default_value_t = false)]
120        no_mem_arena: bool,
121
122        /// CI 連携用 JSON 形式出力フラグ。
123        #[arg(long)]
124        json: bool,
125    },
126
127    /// FP32 ONNX モデルに対して動的 INT8 PTQ 量子化を実行する。
128    Quantize {
129        /// 元モデルファイル群が存在するディレクトリパス。
130        #[arg(short, long, default_value = "models/default")]
131        model_dir: PathBuf,
132
133        /// 量子化後成果物バンドルの出力先ディレクトリパス。
134        #[arg(short, long, default_value = "models/quantized")]
135        output_dir: PathBuf,
136
137        /// チャンネル単位で重みを量子化する (デフォルト: 有効)。
138        #[arg(long, default_value_t = true, action = clap::ArgAction::Set)]
139        per_channel: bool,
140
141        /// FP32 モデルとのパリティ検証を実行する (デフォルト: 有効)。
142        #[arg(long, default_value_t = true, action = clap::ArgAction::Set)]
143        verify: bool,
144    },
145}