Skip to main content

codei_session/
context.rs

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
7/// Builds the message list sent to the LLM from a session.
8pub 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}