From 62a701258759262a7442161172198b31f1869074 Mon Sep 17 00:00:00 2001 From: "sweep-ai[bot]" <128439645+sweep-ai[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 21:03:41 +0000 Subject: [PATCH 1/2] feat: Updated src/memory.rs --- src/memory.rs | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/memory.rs b/src/memory.rs index 57149ad..7ea5d46 100644 --- a/src/memory.rs +++ b/src/memory.rs @@ -1,4 +1,5 @@ use crate::long_term_memory::index_messages; +use uuid::Uuid; use crate::models::{ AckResponse, AppState, GetSessionsQuery, MemoryMessage, MemoryMessagesAndContext, MemoryResponse, NamespaceQuery, @@ -88,18 +89,19 @@ pub async fn get_memory( .unwrap_or(0); let messages: Vec = messages - .into_iter() - .filter_map(|message| { - let mut parts = message.splitn(2, ": "); - match (parts.next(), parts.next()) { - (Some(role), Some(content)) => Some(MemoryMessage { - role: role.to_string(), - content: content.to_string(), - }), - _ => None, - } - }) - .collect(); + .into_iter() + .filter_map(|message| { + let mut parts = message.splitn(2, ": "); + match (parts.next(), parts.next()) { + (Some(role), Some(content)) => Some(MemoryMessage { + role: role.to_string(), + content: content.to_string(), + message_id: Uuid::new_v4().to_string(), + }), + _ => None, + } + }) + .collect(); let response = MemoryResponse { messages, @@ -130,7 +132,10 @@ pub async fn post_memory( let messages: Vec = memory_messages .messages .into_iter() - .map(|memory_message| format!("{}: {}", memory_message.role, memory_message.content)) + .map(|memory_message| { + let message_id = Uuid::new_v4().to_string(); + format!("{}: {}", memory_message.role, memory_message.content, message_id) + }) .collect(); // If new context is passed in we overwrite the existing one @@ -237,9 +242,10 @@ pub async fn delete_memory( .map_err(error::ErrorInternalServerError)?; redis::Cmd::del(keys) - .query_async(&mut conn) - .await - .map_err(error::ErrorInternalServerError)?; + .arg(&message_id) + .query_async(&mut conn) + .await + .map_err(error::ErrorInternalServerError)?; let response = AckResponse { status: "Ok" }; Ok(HttpResponse::Ok() From 4455113596ba872d09a59cc2a2a2d6428733a5e2 Mon Sep 17 00:00:00 2001 From: "sweep-ai[bot]" <128439645+sweep-ai[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 21:10:53 +0000 Subject: [PATCH 2/2] feat: Updated src/reducer.rs --- src/reducer.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/reducer.rs b/src/reducer.rs index 3e80cb7..9e80fb0 100644 --- a/src/reducer.rs +++ b/src/reducer.rs @@ -62,7 +62,7 @@ pub async fn handle_compaction( let half = window_size / 2; let session_key = format!("session:{}", &*session_id); let context_key = format!("context:{}", &*session_id); - let (messages, mut context): (Vec, Option) = redis::pipe() + let (messages, mut context): (Vec<(String, String)>, Option) = redis::pipe() .cmd("LRANGE") .arg(session_key.clone()) .arg(half) @@ -71,6 +71,7 @@ pub async fn handle_compaction( .arg(context_key.clone()) .query_async(&mut redis_conn) .await?; +} let max_tokens = 4096usize; let summary_max_tokens = 512usize; @@ -81,13 +82,13 @@ pub async fn handle_compaction( let mut temp_messages = Vec::new(); let mut total_tokens_temp = 0; - for message in messages { + for (message_id, message) in messages { let bpe = p50k_base().unwrap(); let message_tokens = bpe.encode_with_special_tokens(&message); let message_tokens_used = message_tokens.len(); if total_tokens_temp + message_tokens_used <= max_message_tokens { - temp_messages.push(message); + temp_messages.push((message_id, message)); total_tokens_temp += message_tokens_used; } else { let (summary, summary_tokens_used) = incremental_summarization( @@ -101,7 +102,7 @@ pub async fn handle_compaction( total_tokens += summary_tokens_used; context = Some(summary); - temp_messages = vec![message]; + temp_messages = vec![(message_id, message)]; total_tokens_temp = message_tokens_used; } }