61 lines
1.9 KiB
Rust
61 lines
1.9 KiB
Rust
//! Worker状態
|
|
//!
|
|
//! Type-stateパターンによるキャッシュ保護のための状態マーカー型。
|
|
//! Workerは`Mutable` → `CacheLocked`の状態遷移を持ちます。
|
|
|
|
/// Worker状態を表すマーカートレイト
|
|
///
|
|
/// このトレイトはシールされており、外部から実装することはできません。
|
|
pub trait WorkerState: private::Sealed + Send + Sync + 'static {}
|
|
|
|
mod private {
|
|
pub trait Sealed {}
|
|
}
|
|
|
|
/// 編集可能状態
|
|
///
|
|
/// この状態では以下の操作が可能です:
|
|
/// - システムプロンプトの設定・変更
|
|
/// - メッセージ履歴の編集(追加、削除、クリア)
|
|
/// - ツール・Hookの登録
|
|
///
|
|
/// `Worker::lock()`により[`CacheLocked`]状態へ遷移できます。
|
|
///
|
|
/// # Examples
|
|
///
|
|
/// ```ignore
|
|
/// use llm_worker::Worker;
|
|
///
|
|
/// let mut worker = Worker::new(client)
|
|
/// .system_prompt("You are helpful.");
|
|
///
|
|
/// // 履歴を編集可能
|
|
/// worker.push_message(Message::user("Hello"));
|
|
/// worker.clear_history();
|
|
///
|
|
/// // ロックして保護状態へ
|
|
/// let locked = worker.lock();
|
|
/// ```
|
|
#[derive(Debug, Clone, Copy, Default)]
|
|
pub struct Mutable;
|
|
|
|
impl private::Sealed for Mutable {}
|
|
impl WorkerState for Mutable {}
|
|
|
|
/// キャッシュロック状態(キャッシュ保護)
|
|
///
|
|
/// この状態では以下の制限があります:
|
|
/// - システムプロンプトの変更不可
|
|
/// - 既存メッセージ履歴の変更不可(末尾への追記のみ)
|
|
///
|
|
/// LLM APIのKVキャッシュヒットを保証するため、
|
|
/// 実行時にはこの状態の使用が推奨されます。
|
|
///
|
|
/// `Worker::unlock()`により[`Mutable`]状態へ戻せますが、
|
|
/// キャッシュ保護が解除されることに注意してください。
|
|
#[derive(Debug, Clone, Copy, Default)]
|
|
pub struct CacheLocked;
|
|
|
|
impl private::Sealed for CacheLocked {}
|
|
impl WorkerState for CacheLocked {}
|