pub mod api;
pub mod cache;
pub mod collector;
pub mod fact;
pub mod integration;
pub mod matcher;
pub use api::PersonalKnowledgeApiClient;
pub use cache::PersonalKnowledgeCache;
pub use collector::PersonalFactCollector;
pub use fact::{PersonalFact, PersonalFactCategory, PersonalFactFeedback, PersonalFactSource};
pub use integration::{
DetectedFact, DetectionSource, PksBackgroundProcessor, PksIntegration, PksSseListener,
};
pub use matcher::PersonalFactMatcher;
#[derive(Debug, Clone)]
pub struct PersonalKnowledgeSettings {
pub enabled: bool,
pub enable_explicit_learning: bool,
pub enable_implicit_learning: bool,
pub enable_observed_learning: bool,
pub min_confidence_to_apply: f32,
pub implicit_detection_confidence: f32,
pub ema_alpha: f32,
pub sync_interval_secs: u64,
pub offline_queue_size: usize,
pub default_local_only: bool,
pub show_applied_facts: bool,
}
impl Default for PersonalKnowledgeSettings {
fn default() -> Self {
Self {
enabled: true,
enable_explicit_learning: true,
enable_implicit_learning: true,
enable_observed_learning: true,
min_confidence_to_apply: 0.5,
implicit_detection_confidence: 0.6,
ema_alpha: 0.1,
sync_interval_secs: 300,
offline_queue_size: 50,
default_local_only: false,
show_applied_facts: false,
}
}
}
impl PersonalKnowledgeSettings {
pub fn full() -> Self {
Self::default()
}
pub fn explicit_only() -> Self {
Self {
enable_implicit_learning: false,
enable_observed_learning: false,
..Self::default()
}
}
pub fn local_only() -> Self {
Self {
default_local_only: true,
..Self::default()
}
}
pub fn disabled() -> Self {
Self {
enabled: false,
..Self::default()
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_settings() {
let settings = PersonalKnowledgeSettings::default();
assert!(settings.enabled);
assert!(settings.enable_explicit_learning);
assert!(settings.enable_implicit_learning);
assert!(settings.enable_observed_learning);
assert_eq!(settings.min_confidence_to_apply, 0.5);
assert!(!settings.default_local_only);
}
#[test]
fn test_explicit_only_settings() {
let settings = PersonalKnowledgeSettings::explicit_only();
assert!(settings.enabled);
assert!(settings.enable_explicit_learning);
assert!(!settings.enable_implicit_learning);
assert!(!settings.enable_observed_learning);
}
#[test]
fn test_local_only_settings() {
let settings = PersonalKnowledgeSettings::local_only();
assert!(settings.enabled);
assert!(settings.default_local_only);
}
#[test]
fn test_disabled_settings() {
let settings = PersonalKnowledgeSettings::disabled();
assert!(!settings.enabled);
}
}