use crate::ids::MemoryId;
use crate::model::unit::TextSpan;
use crate::score::UnitScore;
use crate::time::Timestamp;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MemoryUnderstanding {
pub entities: Vec<EntityMention>,
pub events: Vec<EventFrame>,
pub goals: Vec<GoalFrame>,
pub decisions: Vec<DecisionFrame>,
pub preferences: Vec<PreferenceFrame>,
pub emotions: Vec<EmotionFrame>,
pub causal_claims: Vec<CausalClaim>,
pub contradictions: Vec<ContradictionHint>,
pub topics: Vec<TopicTag>,
pub importance: UnitScore,
pub confidence: UnitScore,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EntityMention {
pub text: String,
pub canonical: String,
pub entity_type: EntityType,
pub span: Option<TextSpan>,
pub confidence: UnitScore,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum EntityType {
Person,
Project,
Library,
File,
Org,
Concept,
Other,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EventFrame {
pub action: String,
pub participants: Vec<String>,
pub occurred_at: Option<Timestamp>,
pub outcome: Option<String>,
pub confidence: UnitScore,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GoalFrame {
pub description: String,
pub status: GoalStatus,
pub constraints: Vec<String>,
pub confidence: UnitScore,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum GoalStatus {
Active,
Achieved,
Abandoned,
Blocked,
Unknown,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DecisionFrame {
pub decision: String,
pub rationale: Option<String>,
pub decided_at: Option<Timestamp>,
pub reverted: bool,
pub confidence: UnitScore,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PreferenceFrame {
pub object: String,
pub polarity: Polarity,
pub strength: UnitScore,
pub still_valid: bool,
pub confidence: UnitScore,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Polarity {
Like,
Dislike,
Neutral,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct EmotionFrame {
pub emotion: EmotionKind,
pub intensity: UnitScore,
pub trigger: Option<String>,
pub confidence: UnitScore,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum EmotionKind {
Joy,
Sadness,
Anger,
Fear,
Surprise,
Disgust,
Frustration,
Anxiety,
Satisfaction,
Neutral,
Other,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CausalClaim {
pub cause: String,
pub effect: String,
pub kind: CausalKind,
pub evidence_span: Option<TextSpan>,
pub confidence: UnitScore,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum CausalKind {
Explicit,
Implicit,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ContradictionHint {
pub statement_a: String,
pub conflicts_with: Option<MemoryId>,
pub note: String,
pub confidence: UnitScore,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TopicTag {
pub label: String,
pub confidence: UnitScore,
}