diff --git a/src/config/session.rs b/src/config/session.rs index 792b22d..fe94aee 100644 --- a/src/config/session.rs +++ b/src/config/session.rs @@ -275,7 +275,18 @@ impl Session { self.compressing = compressing; } - pub fn compress(&mut self, prompt: String) { + pub fn compress(&mut self, mut prompt: String) { + if let Some(system_prompt) = self.messages.first().and_then(|v| { + if MessageRole::System == v.role { + let content = v.content.to_text(); + if !content.is_empty() { + return Some(content); + } + } + None + }) { + prompt = format!("{system_prompt}\n\n{prompt}",); + } self.compressed_messages.append(&mut self.messages); self.messages.push(Message::new( MessageRole::System, @@ -403,8 +414,13 @@ impl Session { messages = input.role().build_messages(input); need_add_msg = false; } else if len == 1 && self.compressed_messages.len() >= 2 { - messages - .extend(self.compressed_messages[self.compressed_messages.len() - 2..].to_vec()); + if let Some(index) = self + .compressed_messages + .iter() + .rposition(|v| v.role == MessageRole::User) + { + messages.extend(self.compressed_messages[index..].to_vec()); + } } if need_add_msg { messages.push(Message::new(MessageRole::User, input.message_content()));