1use serde::{Deserialize, Serialize};
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
26#[serde(rename_all = "snake_case")]
27pub enum OpStatus {
28 Pending,
29 Running,
30 Completed,
31 Failed,
32}
33
34#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
36#[serde(rename_all = "snake_case")]
37pub enum VectorMutationOp {
38 Upserted,
39 Deleted,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
51#[serde(tag = "type", rename_all = "snake_case")]
52pub enum DakeraEvent {
53 NamespaceCreated { namespace: String, dimension: usize },
55
56 NamespaceDeleted { namespace: String },
58
59 OperationProgress {
61 operation_id: String,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 namespace: Option<String>,
64 op_type: String,
65 progress: u8,
67 status: OpStatus,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 message: Option<String>,
70 updated_at: u64,
72 },
73
74 JobProgress {
76 job_id: String,
77 job_type: String,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 namespace: Option<String>,
80 progress: u8,
81 status: String,
82 },
83
84 VectorsMutated {
86 namespace: String,
87 op: VectorMutationOp,
88 count: usize,
89 },
90
91 StreamLagged { dropped: u64, hint: String },
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct MemoryEvent {
101 pub event_type: String,
102 pub agent_id: String,
103 pub timestamp: u64,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub memory_id: Option<String>,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub content: Option<String>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub importance: Option<f32>,
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub tags: Option<Vec<String>>,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub session_id: Option<String>,
115}
116
117impl DakeraEvent {
118 pub fn event_type(&self) -> &'static str {
120 match self {
121 DakeraEvent::NamespaceCreated { .. } => "namespace_created",
122 DakeraEvent::NamespaceDeleted { .. } => "namespace_deleted",
123 DakeraEvent::OperationProgress { .. } => "operation_progress",
124 DakeraEvent::JobProgress { .. } => "job_progress",
125 DakeraEvent::VectorsMutated { .. } => "vectors_mutated",
126 DakeraEvent::StreamLagged { .. } => "stream_lagged",
127 }
128 }
129}