From d6b68929ca11d6907faae023111398cd4f14f4f6 Mon Sep 17 00:00:00 2001 From: VadimL Date: Fri, 24 Jul 2026 21:36:27 +0300 Subject: [PATCH] Added some comands to manipulate memory --- src/main.rs | 91 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 29 deletions(-) diff --git a/src/main.rs b/src/main.rs index d3e9934..b4e2412 100644 --- a/src/main.rs +++ b/src/main.rs @@ -80,6 +80,25 @@ async fn init_db(db_url: &str) -> Result, Box, session_id: &str) -> Result<(), sqlx::Error> { + let mut tx = pool.begin().await?; + + // Удаляем сообщения сессии + sqlx::query("DELETE FROM messages WHERE session_id = ?") + .bind(session_id) + .execute(&mut *tx) + .await?; + + // Удаляем сжатую память (summary) + sqlx::query("DELETE FROM session_summaries WHERE session_id = ?") + .bind(session_id) + .execute(&mut *tx) + .await?; + + tx.commit().await?; + Ok(()) +} + async fn summarize_context( client: &reqwest::Client, api_url: &str, @@ -118,8 +137,8 @@ async fn summarize_context( - Сохраняй ТОЛЬКО то, что сообщил сам Пользователь, либо явные решения/итоги, к которым пришли. - Пиши максимально кратко, сжато, в виде маркированного списка. - Если новые сообщения не содержат новых фактов о пользователе или его задаче — оставь существующую память без изменений. -НЕ ЗАПИСЫВАЙ: +НЕ ЗАПИСЫВАЙ: О чем пользователь спрашивал или интересовался (например: НЕ пиши "Спрашивал про точки Лагранжа" или "Интересуется столицами"). Записывай только утвердительные факты о самом пользователе или данные. "#, ); @@ -317,7 +336,7 @@ async fn main() -> Result<(), Box> { println!(" History: последние {} сообщений", history_limit); println!(" Config: {}", args.config); println!("=================================================="); - println!("Введите сообщение. Служебные команды: /summary, /clear, exit\n"); + println!("Введите сообщение. Служебные команды: /summary, /flush, /help, /exit\n"); let stdin = tokio::io::stdin(); let mut reader = BufReader::new(stdin); @@ -339,33 +358,47 @@ async fn main() -> Result<(), Box> { continue; } - // --- Служебные команды CLI --- - if trimmed_input.eq_ignore_ascii_case("exit") || trimmed_input.eq_ignore_ascii_case("quit") - { - println!("Завершение работы."); - break; - } - - if trimmed_input == "/summary" { - match get_session_summary(&db_pool, &session_id).await { - Ok(Some(s)) => println!("\n[Текущий Summary]:\n{}\n", s), - Ok(None) => println!("\n[Текущий Summary]: (пусто)\n"), - Err(e) => eprintln!("[Ошибка чтения summary]: {}\n", e), + // Обработка встроенных команд + if trimmed_input.starts_with('/') { + match trimmed_input { + "/flush" => { + if let Err(e) = clear_session_data(&db_pool, &session_id).await { + println!("[System]: Ошибка при очистке базы: {}", e); + } else { + println!("[System]: История диалога и память сессии успешно очищены."); + } + continue; + } + "/summary" => { + match get_session_summary(&db_pool, &session_id).await { + Ok(Some(summary)) => println!( + "\n--- ТЕКУЩАЯ ПАМЯТЬ СЕССИИ ---\n{}\n-----------------------------", + summary + ), + Ok(None) => println!("[System]: Память сессии пока пуста."), + Err(e) => println!("[System]: Ошибка при получении summary: {}", e), + } + continue; + } + "/help" => { + println!("\n--- ДОСТУПНЫЕ КОМАНДЫ ---"); + println!(" /help - Показать это справочное сообщение"); + println!(" /summary - Посмотреть текущую сжатую память (профиль)"); + println!(" /flush - Полностью очистить историю и память сессии"); + println!(" /exit - Завершить работу агента"); + println!(" /quit - Завершить работу агента"); + println!("-------------------------\n"); + continue; + } + "/exit" | "/quit" => { + println!("[System]: Завершение сеанса. До связи!"); + break; + } + _ => { + println!("[System]: Неизвестная команда. Введите /help для списка команд."); + continue; + } } - continue; - } - - if trimmed_input == "/clear" { - let _ = sqlx::query("DELETE FROM messages WHERE session_id = ?") - .bind(&session_id) - .execute(&db_pool) - .await; - let _ = sqlx::query("DELETE FROM session_summaries WHERE session_id = ?") - .bind(&session_id) - .execute(&db_pool) - .await; - println!("\n[Память сессии '{}' очищена]\n", session_id); - continue; } // 1. Сохраняем запрос юзера в историю @@ -438,4 +471,4 @@ async fn main() -> Result<(), Box> { } Ok(()) -} +} \ No newline at end of file