use std::collections::HashMap;
use chrono::{DateTime, Utc};
use cognee_llm::Message;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UsedGraphElementIds {
#[serde(default)]
pub node_ids: Vec<String>,
#[serde(default)]
pub edge_ids: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionQAEntry {
pub id: Uuid,
pub session_id: String,
pub user_id: Option<String>,
pub question: String,
pub answer: String,
pub context: Option<String>,
pub created_at: DateTime<Utc>,
#[serde(default)]
pub feedback_text: Option<String>,
#[serde(default)]
pub feedback_score: Option<i32>,
#[serde(default)]
pub used_graph_element_ids: Option<UsedGraphElementIds>,
#[serde(default)]
pub memify_metadata: Option<HashMap<String, bool>>,
}
#[derive(Debug, Clone, Default)]
pub struct SessionContext {
pub session_id: Option<String>,
pub history: Vec<Message>,
pub formatted_history: String,
pub graph_context: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionTraceStep {
pub trace_id: String,
pub origin_function: String,
pub status: String,
#[serde(default)]
pub memory_query: String,
#[serde(default)]
pub memory_context: String,
#[serde(default = "empty_object")]
pub method_params: serde_json::Value,
#[serde(default)]
pub method_return_value: Option<serde_json::Value>,
#[serde(default)]
pub error_message: String,
#[serde(default)]
pub session_feedback: String,
}
fn empty_object() -> serde_json::Value {
serde_json::Value::Object(serde_json::Map::new())
}