diff options
| author | sigoden <sigoden@gmail.com> | 2024-03-04 11:08:59 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-04 11:08:59 +0800 |
| commit | 3f693ea060d96b0adc397768c3b2dd47708a20ce (patch) | |
| tree | d805b526aa7423d839a1c52907057e13efa0f38c /src/config/mod.rs | |
| parent | 9e15a3409e7080f0cf06b6dcfc0077142e3e8972 (diff) | |
| download | aichat-3f693ea060d96b0adc397768c3b2dd47708a20ce.tar.gz | |
feat: compress session automaticlly (#333)
* feat: compress session automaticlly
* non-block
* update field description
* set compress_threshold
* update session::clear_messages
* able to override session compress_threshold
* enable compress_threshold by default
* make session compress_threshold optional
Diffstat (limited to 'src/config/mod.rs')
| -rw-r--r-- | src/config/mod.rs | 66 |
1 files changed, 58 insertions, 8 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index 804a2fd..4a37378 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -67,6 +67,12 @@ pub struct Config { pub keybindings: Keybindings, /// Set a default role or session (role:<name>, session:<name>) pub prelude: String, + /// Compress session if tokens exceed this value (>=1000) + pub compress_threshold: usize, + /// The prompt for summarizing session messages + pub summarize_prompt: String, + // The prompt for the summary of the session + pub summary_prompt: String, /// REPL left prompt pub left_prompt: String, /// REPL right prompt @@ -104,6 +110,9 @@ impl Default for Config { auto_copy: false, keybindings: Default::default(), prelude: String::new(), + compress_threshold: 2000, + summarize_prompt: "Summarize the discussion briefly in 200 words or less to use as a prompt for future context.".to_string(), + summary_prompt: "This is a summary of the chat history as a recap: ".into(), left_prompt: "{color.green}{?session {session}{?role /}}{role}{color.cyan}{?session )}{!session >}{color.reset} ".to_string(), right_prompt: "{color.purple}{?session {?consume_tokens {consume_tokens}({consume_percent}%)}{!consume_tokens {consume_tokens}}}{color.reset}" .to_string(), @@ -345,12 +354,18 @@ impl Config { self.temperature } - pub fn set_temperature(&mut self, value: Option<f64>) -> Result<()> { + pub fn set_temperature(&mut self, value: Option<f64>) { self.temperature = value; if let Some(session) = self.session.as_mut() { session.set_temperature(value); } - Ok(()) + } + + pub fn set_compress_threshold(&mut self, value: usize) { + self.compress_threshold = value; + if let Some(session) = self.session.as_mut() { + session.set_compress_threshold(value); + } } pub fn echo_messages(&self, input: &Input) -> String { @@ -430,6 +445,7 @@ impl Config { ("auto_copy", self.auto_copy.to_string()), ("keybindings", self.keybindings.stringify().into()), ("prelude", prelude), + ("compress_threshold", self.compress_threshold.to_string()), ("config_file", display_path(&Self::config_file()?)), ("roles_file", display_path(&Self::roles_file()?)), ("messages_file", display_path(&Self::messages_file()?)), @@ -445,7 +461,7 @@ impl Config { pub fn role_info(&self) -> Result<String> { if let Some(role) = &self.role { - role.info() + role.export() } else { bail!("No role") } @@ -455,7 +471,7 @@ impl Config { if let Some(session) = &self.session { let render_options = self.get_render_options()?; let mut markdown_render = MarkdownRender::init(render_options)?; - session.render(&mut markdown_render) + session.info(&mut markdown_render) } else { bail!("No session") } @@ -465,7 +481,7 @@ impl Config { if let Some(session) = &self.session { session.export() } else if let Some(role) = &self.role { - role.info() + role.export() } else { self.sys_info() } @@ -486,6 +502,7 @@ impl Config { ".session" => self.list_sessions(), ".set" => vec