feat: 后台服务模式 + 日志滚动 + 修复 llm_usage 表兼容性
- 新增 logger.rs(tracing-appender,日滚日志,.data/logs/) - service 子命令:等同 listen --llm 但日志同时写入文件 - systemd/ias.service 单元文件 - 迁移 0007:ALTER TABLE llm_usage ADD COLUMN IF NOT EXISTS 修复与 iPet 旧表的结构冲突 - ias usage 命令可正常查询 Token 统计 - 日志滚动保留 7 天,自动删除旧文件
This commit is contained in:
@@ -191,3 +191,38 @@ pub async fn query_llm_usage_stats(
|
||||
|
||||
Ok(row)
|
||||
}
|
||||
|
||||
// ─── 会话摘要 ───
|
||||
|
||||
/// 保存一条摘要到数据库
|
||||
pub async fn save_summary(
|
||||
pool: &PgPool,
|
||||
user_id: &str,
|
||||
text: &str,
|
||||
reason: &str,
|
||||
message_count: i32,
|
||||
) -> Result<(), String> {
|
||||
sqlx::query(
|
||||
"INSERT INTO session_summaries (user_id, summary_text, reason, message_count) VALUES ($1, $2, $3, $4)",
|
||||
)
|
||||
.bind(user_id)
|
||||
.bind(text)
|
||||
.bind(reason)
|
||||
.bind(message_count)
|
||||
.execute(pool)
|
||||
.await
|
||||
.map_err(|e| format!("保存摘要失败: {}", e))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// 加载最近的摘要(用于 read_summaries 工具)
|
||||
pub async fn load_summaries(pool: &PgPool, limit: i64) -> Result<Vec<String>, String> {
|
||||
let rows = sqlx::query_as::<_, (String,)>(
|
||||
"SELECT summary_text FROM session_summaries ORDER BY created_at DESC LIMIT $1",
|
||||
)
|
||||
.bind(limit)
|
||||
.fetch_all(pool)
|
||||
.await
|
||||
.map_err(|e| format!("查询摘要失败: {}", e))?;
|
||||
Ok(rows.into_iter().map(|(t,)| t).collect())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user