ONNX・safetensors 相互運用
サポート境界(現状の重要な制約)
相互運用機能(onnx-interop クレート)は現時点で fandhe-ai から 公開されていません。 fandhe-ai が唯一のサポートされる公開 API 面 であるという原則(API Reference参照)に従うと、 onnx-interop を直接 use する経路はサポート対象外の内部利用に あたります。相互運用機能を利用者向けに公開する入口の新設は本ページの スコープ外です。以下は設計の解説であり、動くコード例は用意していま せん。
safetensors: ワイヤフォーマット処理のみ
safetensors クレートはワイヤフォーマットの読み書きのみに使い、 テンソルへのマッピング(fandhe_ai_tensor_core::Tensor への変換)は自作 しています。外部クレートに委ねる範囲を「バイト列の構造化」だけに 絞り込むことで、テンソル抽象自体は完全自作コアの方針 (.claude/rules/coding-rust.md)と両立させています。
dtype は F32 限定・キー充足検査は fail-closed
保存・読込の双方で dtype は F32 のみをサポートします。Tensor<f32> にのみ型付けされた関数群のため型レベルでも保証されますが、読込側は さらに実行時にも dtype を検査し、F32 以外は UnsupportedDtype として 明示的にエラーにします(無言でスキップして後続処理を進めることは しません)。同様に、期待するキー集合に対する充足検査も無言 skip せず fail-closed に倒す設計です(.claude/rules/security.md A03 「外部フォーマットパースは長さ・形状の検証を先に行う」)。
保存 → 読込のラウンドトリップは bit 一致を保証します。これは 数値一致契約の「同一実装同士の比較には 許容誤差を持ち込まない」という考え方と同じ設計思想です。
ONNX: prost 手書き derive
ONNX の protobuf デコードには prost を使いますが、prost-build (ビルド時に protoc を要求する)は使わず、手書き derive で 対応しています。ビルド時の外部ツール依存(protoc のインストール 要求)を避け、CI・開発環境のセットアップを単純に保つための判断です。
外部フォーマットの入力検証を先に行う
safetensors・ONNX(prost)いずれの外部フォーマットパースも、長さ・ 形状の検証をデータ変換より先に行います(OWASP Top 10 の A03 インジェクション対策と同じ考え方: 外部入力を信頼せず、想定外の サイズ・形状のデータで内部状態が壊れる前に検査で弾きます。 .claude/rules/security.md)。