use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum StorageType {
LocalFile,
Database,
Redis,
Mysql,
Mongodb,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DatabaseType {
Postgres,
Mysql,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DatabaseConfig {
pub host: String,
pub port: u16,
pub database: String,
pub user: String,
pub password: String,
pub max: Option<u32>,
pub idle_timeout_millis: Option<u64>,
pub connection_timeout_millis: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct WriteEntryOptions {
pub storage_type: StorageType,
pub session_id: String,
pub role: String,
pub content: String,
pub tools: Option<serde_json::Value>,
pub token_consumption: Option<u32>,
pub create_at: Option<String>,
pub database_config: Option<DatabaseConfig>,
}
#[derive(Debug, Clone)]
pub struct WriteCompactedEntryOptions {
pub storage_type: StorageType,
pub session_id: String,
pub summary: String,
pub trigger_entry_id: String,
pub create_at: Option<String>,
pub database_config: Option<DatabaseConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Entry {
pub entry_id: String,
pub session_id: String,
pub content: String,
pub role: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub token_consumption: Option<u32>,
pub status: i16,
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<serde_json::Value>,
pub create_at: String,
pub is_compaction: i16,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Session {
pub session_id: String,
pub status: i16,
pub create_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionData {
pub session: Option<Session>,
pub entries: Vec<Entry>,
pub compacted_entries: Vec<CompactedEntry>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompactedEntry {
pub entry_id: String,
pub session_id: String,
pub trigger_entry_id: String,
pub summary: String,
pub create_at: String,
pub status: i16,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StorageFile {
pub sessions: Vec<StorageSession>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StorageSession {
pub session_id: String,
pub status: i16,
pub create_at: String,
#[serde(default)]
pub entries: Vec<Entry>,
#[serde(default)]
pub compacted_entries: Vec<CompactedEntry>,
}