use crate::Message;
pub trait TokenCounter: Send + Sync {
fn count_text(&self, text: &str) -> usize;
fn count_messages(&self, messages: &[Message]) -> usize {
messages
.iter()
.map(|m| self.count_text(m.content()) + 4)
.sum()
}
}
pub struct HeuristicTokenCounter;
impl TokenCounter for HeuristicTokenCounter {
fn count_text(&self, text: &str) -> usize {
let count = text.len() / 4;
if text.is_empty() {
0
} else {
count.max(1)
}
}
}