use serde::{Deserialize, Serialize};
use crate::pack::ContextRefId;
use crate::redaction::{PackMode, RedactionPolicy, Sensitivity};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ExclusionReason {
Contradiction,
Staleness,
ScopeMismatch,
TokenBudget,
RedactionPolicy,
CurrentIntent,
Other,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IncludedAuditEntry {
pub ref_id: ContextRefId,
pub rule_id: String,
pub reason: String,
pub sensitivity: Sensitivity,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ExcludedAuditEntry {
#[serde(skip_serializing_if = "Option::is_none")]
pub ref_id: Option<ContextRefId>,
pub ref_kind: String,
pub reason: ExclusionReason,
pub rule_id: String,
pub rationale: String,
pub sensitivity: Sensitivity,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SelectionAudit {
pub pack_mode: PackMode,
pub redaction_policy: RedactionPolicy,
pub included: Vec<IncludedAuditEntry>,
pub exclusions: Vec<ExcludedAuditEntry>,
pub estimated_tokens: usize,
}
impl SelectionAudit {
#[must_use]
pub fn new(
pack_mode: PackMode,
redaction_policy: RedactionPolicy,
estimated_tokens: usize,
) -> Self {
Self {
pack_mode,
redaction_policy,
included: Vec::new(),
exclusions: Vec::new(),
estimated_tokens,
}
}
}