diff options
| author | sigoden <sigoden@gmail.com> | 2024-03-17 08:23:47 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-17 08:23:47 +0800 |
| commit | f3210d622ab362e621169d92510702c1a1d53847 (patch) | |
| tree | de9331b5d53719948c7e7b7e6044ce4f5466b6f6 | |
| parent | 992d5700416cb0e78c898392747e81919dbccac5 (diff) | |
| download | aichat-f3210d622ab362e621169d92510702c1a1d53847.tar.gz | |
refactor: remove role field from session struct (#356)
| -rw-r--r-- | src/config/mod.rs | 12 | ||||
| -rw-r--r-- | src/config/session.rs | 22 |
2 files changed, 9 insertions, 25 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index 4ee5319..1c7fa8a 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -316,7 +316,8 @@ impl Config { pub fn set_role_obj(&mut self, role: Role) -> Result<()> { if let Some(session) = self.session.as_mut() { - session.update_role(Some(role.clone()))?; + session.guard_empty()?; + session.set_temperature(role.temperature); } self.temperature = role.temperature; self.role = Some(role); @@ -324,9 +325,6 @@ impl Config { } pub fn clear_role(&mut self) -> Result<()> { - if let Some(session) = self.session.as_mut() { - session.update_role(None)?; - } self.temperature = self.default_temperature; self.role = None; Ok(()) @@ -335,7 +333,7 @@ impl Config { pub fn get_state(&self) -> State { if let Some(session) = &self.session { if session.is_empty() { - if session.role.is_some() { + if self.role.is_some() { State::EmptySessionWithRole } else { State::EmptySession @@ -592,13 +590,13 @@ impl Config { self.session = Some(Session::new( TEMP_SESSION_NAME, self.model.clone(), - self.role.clone(), + self.temperature, )); } Some(name) => { let session_path = Self::session_file(name)?; if !session_path.exists() { - self.session = Some(Session::new(name, self.model.clone(), self.role.clone())); + self.session = Some(Session::new(name, self.model.clone(), self.temperature)); } else { let session = Session::load(name, &session_path)?; let model = session.model().to_string(); diff --git a/src/config/session.rs b/src/config/session.rs index dd610a5..2e0d69f 100644 --- a/src/config/session.rs +++ b/src/config/session.rs @@ -1,5 +1,4 @@ use super::input::resolve_data_url; -use super::role::Role; use super::{Input, Model}; use crate::client::{Message, MessageContent, MessageRole}; @@ -34,14 +33,11 @@ pub struct Session { #[serde(skip)] pub compressing: bool, #[serde(skip)] - pub role: Option<Role>, - #[serde(skip)] pub model: Model, } impl Session { - pub fn new(name: &str, model: Model, role: Option<Role>) -> Self { - let temperature = role.as_ref().and_then(|v| v.temperature); + pub fn new(name: &str, model: Model, temperature: Option<f64>) -> Self { Self { model_id: model.id(), temperature, @@ -53,7 +49,6 @@ impl Session { path: None, dirty: false, compressing: false, - role, model, } } @@ -189,13 +184,6 @@ impl Session { (tokens, percent) } - pub fn update_role(&mut self, role: Option<Role>) -> Result<()> { - self.guard_empty()?; - self.temperature = role.as_ref().and_then(|v| v.temperature); - self.role = role; - Ok(()) - } - pub fn set_temperature(&mut self, value: Option<f64>) { self.temperature = value; } @@ -216,7 +204,6 @@ impl Session { role: MessageRole::System, content: MessageContent::Text(prompt), }); - self.role = None; self.dirty = true; } @@ -260,13 +247,13 @@ impl Session { } pub fn is_empty(&self) -> bool { - self.messages.is_empty() + self.messages.is_empty() && self.compressed_messages.is_empty() } pub fn add_message(&mut self, input: &Input, output: &str) -> Result<()> { let mut need_add_msg = true; if self.messages.is_empty() { - if let Some(role) = self.role.as_ref() { + if let Some(role) = input.role() { self.messages.extend(role.build_messages(input)); need_add_msg = false; } @@ -282,7 +269,6 @@ impl Session { role: MessageRole::Assistant, content: MessageContent::Text(output.to_string()), }); - self.role = None; self.dirty = true; Ok(()) } @@ -304,7 +290,7 @@ impl Session { let mut need_add_msg = true; let len = messages.len(); if len == 0 { - if let Some(role) = self.role.as_ref() { + if let Some(role) = input.role() { messages = role.build_messages(input); need_add_msg = false; } |
