61 lines
1.6 KiB
Rust
61 lines
1.6 KiB
Rust
//! Worker State
|
|
//!
|
|
//! State marker types for cache protection using the Type-state pattern.
|
|
//! Worker has state transitions from `Mutable` → `Locked`.
|
|
|
|
/// Marker trait representing Worker state
|
|
///
|
|
/// This trait is sealed and cannot be implemented externally.
|
|
pub trait WorkerState: private::Sealed + Send + Sync + 'static {}
|
|
|
|
mod private {
|
|
pub trait Sealed {}
|
|
}
|
|
|
|
/// Mutable state (editable)
|
|
///
|
|
/// In this state, the following operations are available:
|
|
/// - Setting/changing system prompt
|
|
/// - Editing message history (add, delete, clear)
|
|
/// - Registering tools and hooks
|
|
///
|
|
/// Can transition to [`Locked`] state via `Worker::lock()`.
|
|
///
|
|
/// # Examples
|
|
///
|
|
/// ```ignore
|
|
/// use llm_worker::Worker;
|
|
///
|
|
/// let mut worker = Worker::new(client)
|
|
/// .system_prompt("You are helpful.");
|
|
///
|
|
/// // History can be edited
|
|
/// worker.push_message(Message::user("Hello"));
|
|
/// worker.clear_history();
|
|
///
|
|
/// // Lock to protected state
|
|
/// let locked = worker.lock();
|
|
/// ```
|
|
#[derive(Debug, Clone, Copy, Default)]
|
|
pub struct Mutable;
|
|
|
|
impl private::Sealed for Mutable {}
|
|
impl WorkerState for Mutable {}
|
|
|
|
/// Cache locked state (cache protected)
|
|
///
|
|
/// In this state, the following restrictions apply:
|
|
/// - System prompt cannot be changed
|
|
/// - Existing message history cannot be modified (only appending to the end)
|
|
///
|
|
/// To ensure LLM API KV cache hits,
|
|
/// using this state during execution is recommended.
|
|
///
|
|
/// Can return to [`Mutable`] state via `Worker::unlock()`,
|
|
/// but note that cache protection will be released.
|
|
#[derive(Debug, Clone, Copy, Default)]
|
|
pub struct Locked;
|
|
|
|
impl private::Sealed for Locked {}
|
|
impl WorkerState for Locked {}
|