stakpak_agent_core/
compaction.rs1use crate::error::AgentError;
2use async_trait::async_trait;
3use stakai::{Message, Model};
4
5#[derive(Debug, Clone)]
6pub struct CompactionResult {
7 pub messages: Vec<Message>,
8 pub tokens_before: usize,
9 pub tokens_after: usize,
10 pub truncated: bool,
11}
12
13#[async_trait]
14pub trait CompactionEngine: Send + Sync {
15 async fn compact(
16 &self,
17 messages: Vec<Message>,
18 model: &Model,
19 ) -> Result<CompactionResult, AgentError>;
20}
21
22#[derive(Debug, Default)]
23pub struct PassthroughCompactionEngine;
24
25#[async_trait]
26impl CompactionEngine for PassthroughCompactionEngine {
27 async fn compact(
28 &self,
29 messages: Vec<Message>,
30 _model: &Model,
31 ) -> Result<CompactionResult, AgentError> {
32 let token_like_count = messages
33 .iter()
34 .filter_map(stakai::Message::text)
35 .map(|text| text.split_whitespace().count())
36 .sum();
37
38 Ok(CompactionResult {
39 messages,
40 tokens_before: token_like_count,
41 tokens_after: token_like_count,
42 truncated: false,
43 })
44 }
45}