abu_agent/context.rs
1use abu_base::chat::ChatMessage;
2
3pub struct ContextBuilder {
4 pub system_prompt: String,
5}
6
7impl ContextBuilder {
8 pub fn new(system_prompt: impl Into<String>) -> Self {
9 Self { system_prompt: system_prompt.into() }
10 }
11
12 pub fn build(&self, query: &str, memorys: Vec<ChatMessage>) -> Vec<ChatMessage> {
13 let mut messages = vec![ChatMessage::system(self.system_prompt.clone())];
14 messages.extend(memorys);
15 messages.push(ChatMessage::user(query));
16 messages
17 }
18}
19
20// pub struct ContextBuilder {
21// pub system_prompt: String,
22// pub skill_loader: Option<SkillLoader>,
23// }
24
25// impl ContextBuilder {
26// pub fn new<S, P>(system_prompt: S, skill_path: Option<P>) -> AgentResult<Self>
27// where
28// S: Into<String>,
29// P: Into<PathBuf>
30// {
31// let mut system_prompt: String = system_prompt.into();
32// let skill_loader = match skill_path {
33// Some(path) => {
34// let skill_loader = SkillLoader::load(path).context("load skill")?;
35// system_prompt = format!("{}\n\n{}", system_prompt, skill_loader.get_descriptions());
36// Some(skill_loader)
37// }
38// None => None,
39// };
40
41// Ok(Self { system_prompt, skill_loader })
42// }
43
44// pub fn build(&self, query: &str, memorys: Vec<ChatMessage>) -> Vec<ChatMessage> {
45// let mut messages = vec![ChatMessage::system(self.system_prompt.clone())];
46// messages.extend(memorys);
47// messages.push(ChatMessage::user(query));
48// messages
49// }
50// }