use ferrum_types::{RequestId, TokenId};
use std::{any::Any, fmt::Debug, time::Instant};
#[derive(Debug, Clone, Copy)]
pub struct PrefixCapturePlan {
pub boundary: usize,
pub span: crate::vnext::CheckpointTokenSpanConstraint,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PrefixCaptureStatus {
Pending,
Ready,
Unavailable,
}
pub trait PrefixCaptureLease: Debug + Send + Sync {
fn boundary(&self) -> usize;
fn status(&self) -> PrefixCaptureStatus;
fn as_any(&self) -> &dyn Any;
}
#[derive(Debug, Clone, Copy)]
pub struct PrefixCaptureRequest<'a> {
pub source_request_id: &'a RequestId,
pub source_tokens: &'a [TokenId],
pub maximum_sequence_tokens: usize,
pub boundary: usize,
pub expires_at: Instant,
}
#[derive(Debug, Clone, Copy)]
pub struct PrefixCaptureBoundary<'a> {
pub processed_tokens: usize,
pub source_prompt_tokens: usize,
pub common_prefix_tokens: usize,
pub follower_prompt_tokens: &'a [usize],
}