Added some comands to manipulate memory
This commit is contained in:
+58
-25
@@ -80,6 +80,25 @@ async fn init_db(db_url: &str) -> Result<Pool<Sqlite>, Box<dyn std::error::Error
|
||||
Ok(pool)
|
||||
}
|
||||
|
||||
async fn clear_session_data(pool: &Pool<Sqlite>, 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<dyn std::error::Error>> {
|
||||
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<dyn std::error::Error>> {
|
||||
continue;
|
||||
}
|
||||
|
||||
// --- Служебные команды CLI ---
|
||||
if trimmed_input.eq_ignore_ascii_case("exit") || trimmed_input.eq_ignore_ascii_case("quit")
|
||||
{
|
||||
println!("Завершение работы.");
|
||||
// Обработка встроенных команд
|
||||
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;
|
||||
}
|
||||
|
||||
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),
|
||||
}
|
||||
_ => {
|
||||
println!("[System]: Неизвестная команда. Введите /help для списка команд.");
|
||||
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. Сохраняем запрос юзера в историю
|
||||
|
||||
Reference in New Issue
Block a user