リモートモデルの読み込み
Litsea は、ローカルファイルに加えて HTTP/HTTPS URL からのモデル読み込みに対応しています。
対応する URI スキーム
| スキーム | 例 | 説明 |
|---|---|---|
| (なし) | ./model.model | ローカルファイルパス(デフォルト) |
file:// | file:///path/to/model | 明示的な File URI |
http:// | http://example.com/model | HTTP URL |
https:// | https://example.com/model | HTTPS URL |
CLI での使用
echo "テスト" | litsea segment -l japanese https://example.com/japanese.model
ライブラリでの使用
#![allow(unused)]
fn main() {
let mut learner = AdaBoost::new(0.01, 100);
// Local file
learner.load_model_from_path(Path::new("./models/japanese.model"))?; // local, synchronous
// HTTP URL
learner.load_model("https://example.com/models/japanese.model").await?;
}
フィーチャーの有効化
0.6.0 以降、remote_model フィーチャーはオプトインです(ライブラリのデフォルトはローカル読み込みのみとし、依存関係のツリーをコンパクトに保っています)。CLI ではこのフィーチャーが有効化されているため、litsea segment https://... はそのまま動作します。ライブラリ利用者は以下が必要です:
litsea = { version = "0.13.0", features = ["remote_model"] }
実装の詳細
- HTTP クライアント: reqwest + rustls(OpenSSL 依存なし)
- カスタム User-Agent:
Litsea/<version> load_modelメソッドが**非同期(async)**なのは、HTTP 読み込みに非同期ランタイムが必要なため- CLI では
tokioが非同期ランタイムを提供
制限とエラー処理
- 接続タイムアウト: 10 秒、リクエスト全体のタイムアウト: 60 秒 – 応答が止まったサーバーによってモデル読み込みが無期限にブロックされることはありません
- モデルサイズの上限: 256 MiB。
Content-Lengthがこれより大きい場合は本文を 読み込む前に拒否され、実際の本文サイズが上限を超えた場合も拒否されます - 不完全なダウンロード: サーバーが
Content-Lengthを送信している場合、 受信した本文がそれより短ければ不完全なダウンロードとして報告されます - 2xx 以外のレスポンスは、HTTP ステータスとともにダウンロードエラーとして報告されます
- モデルパーサーはさらに、末尾が欠けたファイルも拒否します(バイアス行を持たない モデルは読み込みに失敗します。モデルファイル形式 を参照)
WASM に関する注意事項
wasm32 ターゲットは、remote_model フィーチャーを無効にした状態でのみ CI で
チェックされています
(cargo check -p litsea --target wasm32-unknown-unknown --no-default-features):
wasm32では HTTP/HTTPS の読み込みは現在サポートされていません – HTTP クライアントの構成が reqwest のClientBuilder::connect_timeoutとtimeoutを使用しており、reqwest の WASM クライアントがこれらを提供していない ため、remote_modelフィーチャーはこのターゲットではビルドできません- ローカルファイルパスと
file://スキームも非対応です – ファイルシステムへのアクセスが利用できないため、read_file_bytesはUnsupportedエラーを返します
したがって wasm32 では、ホスト環境から供給されたモデルのバイト列を
load_model_from_reader に渡すなど、別の手段でモデルを与える必要があります。