summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-03-09 22:28:36 +0800
committerGitHub <noreply@github.com>2024-03-09 22:28:36 +0800
commit8f144989695e089fe3b3e7f4e97ac2b862574bd3 (patch)
tree790ebe5b2be8db2ccbd7b0e67976d4c02a08e7f9
parentc3677e33801cbbf35d6e87601b65c0f8c1680018 (diff)
downloadaichat-8f144989695e089fe3b3e7f4e97ac2b862574bd3.tar.gz
fix: erratic behaviour when using temp role in a session (#347)
-rw-r--r--src/config/mod.rs4
-rw-r--r--src/repl/mod.rs23
2 files changed, 18 insertions, 9 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs
index d616f65..65b573a 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -653,6 +653,10 @@ impl Config {
Ok(())
}
+ pub fn has_session(&self) -> bool {
+ self.session.is_some()
+ }
+
pub fn clear_session_messages(&mut self) -> Result<()> {
if let Some(session) = self.session.as_mut() {
session.clear_messages();
diff --git a/src/repl/mod.rs b/src/repl/mod.rs
index 4c5540c..51a88bb 100644
--- a/src/repl/mod.rs
+++ b/src/repl/mod.rs
@@ -174,15 +174,20 @@ impl Repl {
".role" => match args {
Some(args) => match args.split_once(|c| c == '\n' || c == ' ') {
Some((name, text)) => {
- let name = name.trim();
- let text = text.trim();
- let old_role =
- self.config.read().role.as_ref().map(|v| v.name.to_string());
- self.config.write().set_role(name)?;
- self.ask(text, vec![])?;
- match old_role {
- Some(old_role) => self.config.write().set_role(&old_role)?,
- None => self.config.write().clear_role()?,
+ if self.config.read().has_session() {
+ bail!(r#"Cannot perform this action in a session"#);
+ } else {
+ let name = name.trim();
+ let text = text.trim();
+ let old_role =
+ self.config.read().role.as_ref().map(|v| v.name.to_string());
+ self.config.write().set_role(name)?;
+ let ask_ret = self.ask(text, vec![]);
+ match old_role {
+ Some(old_role) => self.config.write().set_role(&old_role)?,
+ None => self.config.write().clear_role()?,
+ }
+ ask_ret?;
}
}
None => {