Skip to main content

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// }