hippmem_engine/
feedback_api.rs1use crate::{Engine, EngineError, EngineResult, FeedbackInput};
7use hippmem_core::time::{Clock, SystemClock};
8use hippmem_store::activation_log::{ActivationLogger, ActivationRecord};
9
10impl Engine {
11 pub fn feedback(&self, input: FeedbackInput) -> EngineResult<()> {
16 let clock = SystemClock;
17 let now = clock.now();
18
19 let logger = ActivationLogger::new(self.store.db_arc());
20 let rec = ActivationRecord {
21 retrieval_id: input.retrieval_id,
22 used_memory_ids: input.used_memory_ids.iter().map(|id| id.0 as u64).collect(),
23 signal: signal_to_string(&input.signal),
24 recorded_at_ms: now.as_i64(),
25 };
26 logger
27 .record(&rec)
28 .map_err(|e| EngineError::Internal(format!("activation_log: {}", e)))?;
29 Ok(())
30 }
31}
32
33fn signal_to_string(s: &crate::UsageSignal) -> String {
34 match s {
35 crate::UsageSignal::Referenced => "Referenced".into(),
36 crate::UsageSignal::UserConfirmedCorrect => "UserConfirmedCorrect".into(),
37 crate::UsageSignal::TaskSucceeded => "TaskSucceeded".into(),
38 crate::UsageSignal::UserRejected => "UserRejected".into(),
39 }
40}