Skip to main content

stakpak_agent_core/
compaction.rs

1use 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}