summaryrefslogtreecommitdiffstats
path: root/src/config/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/mod.rs')
-rw-r--r--src/config/mod.rs54
1 files changed, 16 insertions, 38 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs
index 4003a63..0240a80 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -19,7 +19,7 @@ use crate::utils::{
};
use anyhow::{anyhow, bail, Context, Result};
-use inquire::{Confirm, Select, Text};
+use inquire::{Confirm, Select};
use is_terminal::IsTerminal;
use parking_lot::RwLock;
use serde::Deserialize;
@@ -363,8 +363,10 @@ impl Config {
}
pub fn exit_role(&mut self) -> Result<()> {
+ if self.session.is_none() {
+ self.restore_model()?;
+ }
self.role = None;
- self.restore_model()?;
Ok(())
}
@@ -386,6 +388,10 @@ impl Config {
flags
}
+ pub fn has_role_or_session(&self) -> bool {
+ self.role.is_some() || self.session.is_some()
+ }
+
pub fn set_temperature(&mut self, value: Option<f64>) {
if let Some(session) = self.session.as_mut() {
session.set_temperature(value);
@@ -437,8 +443,7 @@ impl Config {
}
pub fn set_model(&mut self, value: &str) -> Result<()> {
- let models = list_chat_models(self);
- let model = Model::find(&models, value);
+ let model = Model::find(&list_chat_models(self), value);
match model {
None => bail!("No model '{}'", value),
Some(model) => {
@@ -740,23 +745,10 @@ impl Config {
pub fn exit_session(&mut self) -> Result<()> {
if let Some(mut session) = self.session.take() {
+ let is_repl = self.working_mode == WorkingMode::Repl;
+ let sessions_dir = Self::sessions_dir()?;
+ session.exit(&sessions_dir, is_repl)?;
self.last_message = None;
- let save_session = session.save_session();
- if session.dirty && save_session != Some(false) {
- if save_session.is_none() {
- if self.working_mode != WorkingMode::Repl {
- return Ok(());
- }
- let ans = Confirm::new("Save session?").with_default(false).prompt()?;
- if !ans {
- return Ok(());
- }
- while session.is_temp() {
- session.name = Text::new("Session name:").prompt()?;
- }
- }
- Self::save_session_to_file(&mut session)?;
- }
self.restore_model()?;
}
Ok(())
@@ -767,7 +759,8 @@ impl Config {
if !name.is_empty() {
session.name = name.to_string();
}
- Self::save_session_to_file(session)?;
+ let sessions_dir = Self::sessions_dir()?;
+ session.save(&sessions_dir)?;
}
Ok(())
}
@@ -1032,20 +1025,6 @@ impl Config {
.with_context(|| format!("Failed to create/append {}", path.display()))
}
- fn save_session_to_file(session: &mut Session) -> Result<()> {
- let session_path = Self::session_file(session.name())?;
- let sessions_dir = session_path
- .parent()
- .ok_or_else(|| anyhow!("Unable to save session file to {}", session_path.display()))?;
- if !sessions_dir.exists() {
- create_dir_all(sessions_dir).with_context(|| {
- format!("Failed to create session_dir '{}'", sessions_dir.display())
- })?;
- }
- session.save(&session_path)?;
- Ok(())
- }
-
fn load_config_file(config_path: &Path) -> Result<Self> {
let content = read_to_string(config_path)
.with_context(|| format!("Failed to load config at {}", config_path.display()))?;
@@ -1117,13 +1096,12 @@ impl Config {
bail!("No available model");
}
- let model_id = models[0].id();
- self.model_id.clone_from(&model_id);
- model_id
+ models[0].id()
} else {
self.model_id.clone()
};
self.set_model(&model_id)?;
+ self.model_id = model_id;
Ok(())
}