use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GuardConfig {
pub pii: PiiConfig,
pub injection: InjectionConfig,
pub content_filter: ContentFilterConfig,
pub rate_limit: RateLimitConfig,
pub audit: AuditConfig,
}
impl Default for GuardConfig {
fn default() -> Self {
Self {
pii: PiiConfig::default(),
injection: InjectionConfig::default(),
content_filter: ContentFilterConfig::default(),
rate_limit: RateLimitConfig::default(),
audit: AuditConfig::default(),
}
}
}
impl GuardConfig {
pub fn full() -> Self {
Self {
pii: PiiConfig {
enabled: true,
..Default::default()
},
injection: InjectionConfig {
enabled: true,
..Default::default()
},
content_filter: ContentFilterConfig {
enabled: true,
..Default::default()
},
rate_limit: RateLimitConfig {
enabled: true,
..Default::default()
},
audit: AuditConfig {
enabled: true,
..Default::default()
},
}
}
pub fn minimal() -> Self {
Self {
pii: PiiConfig {
enabled: true,
..Default::default()
},
injection: InjectionConfig {
enabled: false,
..Default::default()
},
content_filter: ContentFilterConfig {
enabled: false,
..Default::default()
},
rate_limit: RateLimitConfig {
enabled: false,
..Default::default()
},
audit: AuditConfig {
enabled: false,
..Default::default()
},
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PiiConfig {
pub enabled: bool,
pub detect_ssn: bool,
pub detect_credit_card: bool,
pub detect_email: bool,
pub detect_phone: bool,
pub detect_ip: bool,
pub detect_api_keys: bool,
pub redaction_format: String,
}
impl Default for PiiConfig {
fn default() -> Self {
Self {
enabled: true,
detect_ssn: true,
detect_credit_card: true,
detect_email: true,
detect_phone: true,
detect_ip: true,
detect_api_keys: true,
redaction_format: "[REDACTED:{TYPE}]".to_string(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InjectionConfig {
pub enabled: bool,
pub block_on_detection: bool,
pub sensitivity: f32,
pub custom_patterns: Vec<String>,
}
impl Default for InjectionConfig {
fn default() -> Self {
Self {
enabled: true,
block_on_detection: true,
sensitivity: 0.7,
custom_patterns: vec![],
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ContentFilterConfig {
pub enabled: bool,
pub api_endpoint: String,
pub api_key: Option<String>,
pub block_controversial: bool,
pub blocked_categories: Vec<String>,
pub timeout_ms: u64,
}
impl Default for ContentFilterConfig {
fn default() -> Self {
Self {
enabled: false, api_endpoint: "https://api.zenlm.ai/v1/guard".to_string(),
api_key: None,
block_controversial: false,
blocked_categories: vec![
"Violent".to_string(),
"IllegalActs".to_string(),
"SexualContent".to_string(),
"SelfHarm".to_string(),
"Jailbreak".to_string(),
],
timeout_ms: 5000,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RateLimitConfig {
pub enabled: bool,
pub requests_per_minute: u32,
pub tokens_per_minute: u32,
pub burst_size: u32,
}
impl Default for RateLimitConfig {
fn default() -> Self {
Self {
enabled: true,
requests_per_minute: 60,
tokens_per_minute: 100_000,
burst_size: 10,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditConfig {
pub enabled: bool,
pub log_content: bool,
pub log_stdout: bool,
pub log_file: Option<String>,
}
impl Default for AuditConfig {
fn default() -> Self {
Self {
enabled: true,
log_content: false, log_stdout: false,
log_file: None,
}
}
}