use serde::{Deserialize, Serialize};
use vil_macros::{VilAiEvent, VilAiFault, VilAiState};
#[derive(Clone, Debug, Serialize, Deserialize, VilAiEvent)]
pub struct SpeculativeEvent {
pub draft_tokens: u32,
pub accepted_tokens: u32,
pub acceptance_rate: f32,
pub iterations: u32,
pub content_length: usize,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum SpeculativeFaultType {
DraftFailed,
VerificationFailed,
MaxIterationsExceeded,
}
#[derive(Clone, Debug, Serialize, Deserialize, VilAiFault)]
pub struct SpeculativeFault {
pub error_type: SpeculativeFaultType,
pub message: String,
}
impl SpeculativeFault {
pub fn draft_failed(msg: impl Into<String>) -> Self {
Self {
error_type: SpeculativeFaultType::DraftFailed,
message: msg.into(),
}
}
pub fn verification_failed(msg: impl Into<String>) -> Self {
Self {
error_type: SpeculativeFaultType::VerificationFailed,
message: msg.into(),
}
}
pub fn max_iterations_exceeded(msg: impl Into<String>) -> Self {
Self {
error_type: SpeculativeFaultType::MaxIterationsExceeded,
message: msg.into(),
}
}
}
#[derive(Clone, Debug, Default, Serialize, Deserialize, VilAiState)]
pub struct SpeculativeState {
pub total_runs: u64,
pub total_draft_tokens: u64,
pub total_accepted_tokens: u64,
pub avg_acceptance_rate: f32,
}