use crate::message::ChatMessage;
pub fn estimate_tokens(value: &str) -> u64 {
(value.len() as u64).div_ceil(4)
}
pub fn estimate_view_tokens(messages: &[ChatMessage]) -> u64 {
messages.iter().map(estimate_message_tokens).sum()
}
fn estimate_message_tokens(message: &ChatMessage) -> u64 {
match serde_json::to_string(message) {
Ok(wire) => estimate_tokens(&wire),
Err(_) => estimate_tokens(&format!("{message:?}")),
}
}
pub fn format_commas(n: usize) -> String {
let digits = n.to_string();
let bytes = digits.as_bytes();
let mut output = String::with_capacity(bytes.len() + bytes.len() / 3);
for (index, byte) in bytes.iter().enumerate() {
if index > 0 && (bytes.len() - index) % 3 == 0 {
output.push(',');
}
output.push(*byte as char);
}
output
}