(messages: &[SessionMessage], max_tokens: u64)
| 2894 | } |
| 2895 | |
| 2896 | pub fn should_compact(messages: &[SessionMessage], max_tokens: u64) -> bool { |
| 2897 | let total_chars: usize = messages |
| 2898 | .iter() |
| 2899 | .map(|m| { |
| 2900 | m.parts |
| 2901 | .iter() |
| 2902 | .filter_map(|p| match &p.part_type { |
| 2903 | PartType::Text { text, .. } => Some(text.len()), |
| 2904 | _ => None, |
| 2905 | }) |
| 2906 | .sum::<usize>() |
| 2907 | }) |
| 2908 | .sum(); |
| 2909 | |
| 2910 | let estimated_tokens = total_chars / 4; |
| 2911 | estimated_tokens > max_tokens as usize |
| 2912 | } |
| 2913 | |
| 2914 | pub fn trigger_compaction(session: &mut Session, messages: &[SessionMessage]) -> Option<String> { |
| 2915 | if !should_compact(messages, 100000) { |
no outgoing calls