Skip to main content

sokuto_runtime/
error.rs

1//! # ランタイムエラー型定義モジュール
2//!
3//! トークナイザー処理および推論パイプラインで発生するエラーを定義する。
4
5use thiserror::Error;
6
7/// ランタイム推論エンジンおよびトークナイザーで発生するエラー型。
8#[derive(Debug, Error)]
9pub enum RuntimeError {
10    /// トークナイザー定義ファイルの読み込み失敗。
11    #[error("トークナイザーファイルの読み込みに失敗しました: {0}。")]
12    TokenizerLoadError(String),
13
14    /// 必須特殊トークンが未定義。
15    #[error("必須特殊トークン '{token}' がトークナイザー内に存在しません。")]
16    MissingSpecialToken {
17        /// 未定義の特殊トークン文字列。
18        token: &'static str,
19    },
20
21    /// オプションマーカートークン \[OP\] が単一トークンとして分割されていない。
22    #[error(
23        "オプションマーカー [OP] の分割テストに失敗しました: 期待ID={expected}, 実際={actual:?}。"
24    )]
25    InvalidOptionMarkerEncoding {
26        /// 期待される単一トークンID。
27        expected: u32,
28        /// 実際にエンコードされたトークンID列。
29        actual: Vec<u32>,
30    },
31
32    /// トークナイズ処理時の内部エラー。
33    #[error("トークナイズ処理中にエラーが発生しました: {0}。")]
34    TokenizerEncodeError(String),
35
36    /// プロンプトの固定部が最大許容系列長を超過している。
37    #[error(
38        "プロンプト固定長 ({fixed_len}) が最大系列長 ({max_len}) を超過しており、State を収容できません。"
39    )]
40    PromptExceedsMaxLength {
41        /// 固定部分の合計トークン数。
42        fixed_len: usize,
43        /// 許容最大系列長。
44        max_len: usize,
45    },
46
47    /// 検出された \[OP\] マーカー数と質問候補数の不一致。
48    #[error("検出された [OP] マーカー数 ({detected}) が候補数 ({expected}) と一致しません。")]
49    OptionMarkerCountMismatch {
50        /// 検出されたマーカー数。
51        detected: usize,
52        /// 期待される候補数。
53        expected: usize,
54    },
55
56    /// 不正な質問スキーマまたは評価基準。
57    #[error("質問仕様が不正です: {0}。")]
58    InvalidQuestion(String),
59
60    /// ONNX Runtime 内部エラー。
61    #[error("ONNX Runtime 内部エラー: {0}。")]
62    Ort(#[from] ort::Error),
63
64    /// ONNX Runtime セッション構築設定エラー。
65    #[error("ONNX Runtime 設定エラー: {0}。")]
66    OrtConfig(String),
67
68    /// モデルの入出力契約違反(テンソル名や次元数の不整合)。
69    #[error("モデル入出力契約違反: {0}。")]
70    ModelContractViolation(String),
71
72    /// テンソルデータが不正(系列長超過インデックスや NaN/Inf など)。
73    #[error("テンソルデータが不正です: {0}。")]
74    InvalidTensorData(String),
75
76    /// Execution Provider の初期化エラー。
77    #[error("Execution Provider の初期化に失敗しました: {0}。")]
78    ExecutionProviderError(String),
79
80    /// キャッシュ未登録または期限切れ。
81    #[error("キャッシュキー {0} に対応する特徴量が存在しません。")]
82    CacheMiss(u64),
83
84    /// キャッシュと入力テンソルの次元不整合。
85    #[error(
86        "キャッシュ特徴量と入力テンソルの系列長が不一致です: 期待長={expected}, 実際={actual}。"
87    )]
88    CacheDimensionMismatch {
89        /// 期待される系列長。
90        expected: usize,
91        /// 実際の系列長。
92        actual: usize,
93    },
94
95    /// コア数理・型スキーマクレート由来のエラー。
96    #[error("コアエラー: {0}。")]
97    Core(#[from] sokuto_core::error::CoreError),
98}
99
100/// ランタイム処理の標準結果型。
101pub type Result<T> = std::result::Result<T, RuntimeError>;