diff options
| author | sigoden <sigoden@gmail.com> | 2024-06-17 17:03:28 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-17 17:03:28 +0800 |
| commit | 62b297e8bb09e257a61154afddc4017e48bd12f3 (patch) | |
| tree | b402281f625b304ad99ba392597f65d9fca0b21e /src/config/session.rs | |
| parent | ff284779d9757c128acaf690ddf64a87a986e413 (diff) | |
| download | aichat-62b297e8bb09e257a61154afddc4017e48bd12f3.tar.gz | |
feat: add `.regenerate` repl command (#610)
Diffstat (limited to 'src/config/session.rs')
| -rw-r--r-- | src/config/session.rs | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/src/config/session.rs b/src/config/session.rs index 0b48cbd..2149ba5 100644 --- a/src/config/session.rs +++ b/src/config/session.rs @@ -353,30 +353,33 @@ impl Session { } pub fn add_message(&mut self, input: &Input, output: &str) -> Result<()> { - match input.continue_output() { - Some(_) => { - if let Some(message) = self.messages.last_mut() { - if let MessageContent::Text(text) = &mut message.content { - *text = format!("{text}{output}"); - } + if input.continue_output().is_some() { + if let Some(message) = self.messages.last_mut() { + if let MessageContent::Text(text) = &mut message.content { + *text = format!("{text}{output}"); } } - None => { - let mut need_add_msg = true; - if self.messages.is_empty() { - self.messages.extend(input.role().build_messages(input)); - need_add_msg = false; + } else if input.regenerate() { + if let Some(message) = self.messages.last_mut() { + if let MessageContent::Text(text) = &mut message.content { + *text = output.to_string(); } - if need_add_msg { - self.messages - .push(Message::new(MessageRole::User, input.message_content())); - } - self.data_urls.extend(input.data_urls()); - self.messages.push(Message::new( - MessageRole::Assistant, - MessageContent::Text(output.to_string()), - )); } + } else { + let mut need_add_msg = true; + if self.messages.is_empty() { + self.messages.extend(input.role().build_messages(input)); + need_add_msg = false; + } + if need_add_msg { + self.messages + .push(Message::new(MessageRole::User, input.message_content())); + } + self.data_urls.extend(input.data_urls()); + self.messages.push(Message::new( + MessageRole::Assistant, + MessageContent::Text(output.to_string()), + )); } self.dirty = true; Ok(()) @@ -398,6 +401,9 @@ impl Session { let mut messages = self.messages.clone(); if input.continue_output().is_some() { return messages; + } else if input.regenerate() { + messages.pop(); + return messages; } let mut need_add_msg = true; let len = messages.len(); |
