use crate::agent::{error::Result, types::{CallConfig, Message, ModelTurn, ToolCall, ToolDef, ToolResult}};
pub trait ModelClient: Send + Sync {
fn complete(
&self,
messages: &[Message],
tools: &[ToolDef],
config: &CallConfig,
system_prompt: &str,
) -> Result<ModelTurn>;
}
pub trait ToolRegistry: Send + Sync {
fn tool_definitions(&self) -> Vec<ToolDef>;
fn execute(&self, call: &ToolCall) -> ToolResult;
}
pub trait MemoryCompactor: Send + Sync {
fn should_compact(&self, current_tokens: usize, context_window: usize) -> bool;
fn compact(&self, messages: &[Message], query: &str) -> Result<CompactionResult>;
}
#[derive(Debug, Clone)]
pub struct CompactionResult {
pub messages: Vec<Message>,
pub removed_messages: usize,
pub summary: String,
pub summary_length: usize,
}