1use codei_config::AgentConfig;
2use codei_llm::Message;
3
4use crate::compact::{compact_messages, estimate_tokens, TokenBudget};
5use crate::model::{to_llm_messages, Session};
6
7pub struct ContextBuilder;
9
10impl ContextBuilder {
11 pub fn build(session: &Session, system_prompt: &str) -> Vec<Message> {
12 Self::build_with_config(session, system_prompt, None)
13 }
14
15 pub fn build_with_config(
16 session: &Session,
17 system_prompt: &str,
18 agent: Option<&AgentConfig>,
19 ) -> Vec<Message> {
20 let messages = to_llm_messages(session, system_prompt);
21 if let Some(cfg) = agent {
22 compact_messages(messages, TokenBudget::from_agent(cfg))
23 } else {
24 messages
25 }
26 }
27
28 pub fn estimate_session_tokens(session: &Session, system_prompt: &str) -> u32 {
29 estimate_tokens(&to_llm_messages(session, system_prompt))
30 }
31}