diff options
| author | sigoden <sigoden@gmail.com> | 2024-10-05 18:39:42 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-05 18:39:42 +0800 |
| commit | ea4c2131e40be1124110fe4203bd018a8018760c (patch) | |
| tree | 6f52dcdfb06b34401651f8dbd815bed2338d17ec /src/config/mod.rs | |
| parent | 11a706a68d1a1a22817f2264bdbbbe7036897378 (diff) | |
| download | aichat-ea4c2131e40be1124110fe4203bd018a8018760c.tar.gz | |
feat: add `.compress session` REPL command (#907)
Diffstat (limited to 'src/config/mod.rs')
| -rw-r--r-- | src/config/mod.rs | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index 3243c26..97cd302 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -1133,11 +1133,28 @@ impl Config { false } - pub fn compress_session(&mut self, summary: &str) { - if let Some(session) = self.session.as_mut() { - let summary_prompt = self.summary_prompt.as_deref().unwrap_or(SUMMARY_PROMPT); + pub async fn compress_session(config: &GlobalConfig) -> Result<()> { + match config.read().session.as_ref() { + Some(session) => { + if !session.has_user_messages() { + bail!("No need to compress since there are no messages in the session") + } + } + None => bail!("No session"), + } + let input = Input::from_str(config, config.read().summarize_prompt(), None); + let client = input.create_client()?; + let summary = client.chat_completions(input).await?.text; + let summary_prompt = config + .read() + .summary_prompt + .clone() + .unwrap_or_else(|| SUMMARY_PROMPT.into()); + if let Some(session) = config.write().session.as_mut() { session.compress(format!("{}{}", summary_prompt, summary)); } + config.write().last_message = None; + Ok(()) } pub fn summarize_prompt(&self) -> &str { @@ -1155,7 +1172,6 @@ impl Config { if let Some(session) = self.session.as_mut() { session.set_compressing(false); } - self.last_message = None; } pub async fn use_rag( |
