use std::collections::HashMap;
use uuid::Uuid;
use crate::{FeedbackEventKind, FeedbackSignal, SectionType};
#[derive(Debug, Clone)]
pub enum BrainSignal {
RecallHit { target_id: Uuid, latency_us: i64 },
RecallMiss,
SearchCompleted { latency_us: i64 },
Feedback {
target_id: Uuid,
signal: FeedbackSignal,
#[allow(dead_code)]
served_by_profile_id: Option<String>,
section_signals: Option<HashMap<SectionType, FeedbackSignal>>,
},
SemanticFeedback {
target_id: Uuid,
event_kind: FeedbackEventKind,
#[allow(dead_code)]
served_by_profile_id: Option<String>,
effective_weight: f64,
},
NoteAccessed { target_id: Uuid },
Irrelevant,
}
pub fn entity_signal(signal: &BrainSignal) -> Option<(Uuid, bool)> {
match signal {
BrainSignal::RecallHit { target_id, .. } => Some((*target_id, true)),
BrainSignal::NoteAccessed { target_id } => Some((*target_id, true)),
BrainSignal::Feedback {
target_id, signal, ..
} => Some((*target_id, matches!(signal, FeedbackSignal::Useful))),
BrainSignal::SemanticFeedback {
target_id,
event_kind,
..
} => Some((*target_id, event_kind.is_positive())),
BrainSignal::RecallMiss | BrainSignal::SearchCompleted { .. } | BrainSignal::Irrelevant => {
None
}
}
}
pub fn is_recall_positive(signal: &BrainSignal) -> Option<bool> {
match signal {
BrainSignal::RecallHit { .. } => Some(true),
BrainSignal::RecallMiss => Some(false),
_ => None,
}
}