codetether_rlm/context_trace/
trace_events.rs1use super::trace::MAX_EVENTS;
2use super::{ContextEvent, ContextTrace};
3use std::collections::VecDeque;
4
5impl ContextTrace {
6 pub fn log_event(&mut self, event: ContextEvent) {
8 self.total_tokens += event.tokens();
9 self.evict_old_events();
10 self.events.push_back(event);
11 }
12
13 fn evict_old_events(&mut self) {
14 while self.events.len() >= MAX_EVENTS {
15 if let Some(evicted) = self.events.pop_front() {
16 self.total_tokens = self.total_tokens.saturating_sub(evicted.tokens());
17 }
18 }
19 }
20
21 pub fn events(&self) -> &VecDeque<ContextEvent> {
23 &self.events
24 }
25
26 pub fn events_of_type(&self, label: &str) -> Vec<&ContextEvent> {
28 self.events
29 .iter()
30 .filter(|event| event.label() == label)
31 .collect()
32 }
33}