#![allow(dead_code)]
#[derive(Debug, Clone, Copy, Default)]
pub struct DenialTrackingState {
pub consecutive_denials: u32,
pub total_denials: u32,
}
pub const DENIAL_LIMITS: DenialLimits = DenialLimits {
max_consecutive: 3,
max_total: 20,
};
pub struct DenialLimits {
pub max_consecutive: u32,
pub max_total: u32,
}
pub fn create_denial_tracking_state() -> DenialTrackingState {
DenialTrackingState {
consecutive_denials: 0,
total_denials: 0,
}
}
pub fn record_denial(state: DenialTrackingState) -> DenialTrackingState {
DenialTrackingState {
consecutive_denials: state.consecutive_denials + 1,
total_denials: state.total_denials + 1,
}
}
pub fn record_success(state: DenialTrackingState) -> DenialTrackingState {
if state.consecutive_denials == 0 {
return state; }
DenialTrackingState {
consecutive_denials: 0,
total_denials: state.total_denials,
}
}
pub fn should_fallback_to_prompting(state: DenialTrackingState) -> bool {
state.consecutive_denials >= DENIAL_LIMITS.max_consecutive
|| state.total_denials >= DENIAL_LIMITS.max_total
}