locus_sdk/application/
memory_schema.rs1use crate::domain::memory::MemorySchemaResult;
2
3pub struct MemorySchemaService;
4
5impl MemorySchemaService {
6 pub fn new() -> Self {
7 Self
8 }
9
10 pub fn execute(&self) -> MemorySchemaResult {
11 MemorySchemaResult {
12 schema_version: "locus-sdk.memory.v3".to_string(),
13 sort_fields: vec![
14 "timestamp".to_string(),
15 "updated_at".to_string(),
16 "psi".to_string(),
17 "rho".to_string(),
18 "kappa".to_string(),
19 ],
20 filter_fields: vec![
21 "has_embedding".to_string(),
22 "embedding_model".to_string(),
23 "psi".to_string(),
24 "rho".to_string(),
25 "kappa".to_string(),
26 "text_contains".to_string(),
27 "tags_contains".to_string(),
28 "has_tag".to_string(),
29 "indexed_tags".to_string(),
30 "tag_prefix".to_string(),
31 "has_semantic_links".to_string(),
32 "link_rel".to_string(),
33 "link_target".to_string(),
34 "links_to_ref".to_string(),
35 ],
36 group_by_fields: vec![
37 "session_id".to_string(),
38 "tier".to_string(),
39 "embedding_model".to_string(),
40 "date_day".to_string(),
41 "semantic_tag".to_string(),
42 ],
43 fallback_policies: vec![
44 "never".to_string(),
45 "on_empty".to_string(),
46 "always".to_string(),
47 ],
48 strictness_modes: vec![
49 "precision".to_string(),
50 "balanced".to_string(),
51 "recall".to_string(),
52 ],
53 transform_operations: vec![
54 "embed_backfill".to_string(),
55 "reindex_embeddings".to_string(),
56 "embed_tag_backfill".to_string(),
57 "reindex_tag_embeddings".to_string(),
58 ],
59 evict_operations: vec![
60 "delete_nodes".to_string(),
61 "purge_session".to_string(),
62 ],
63 }
64 }
65}
66
67impl Default for MemorySchemaService {
68 fn default() -> Self {
69 Self::new()
70 }
71}
72
73#[cfg(test)]
74mod tests {
75 use super::MemorySchemaService;
76
77 #[test]
78 fn schema_contains_expected_core_fields() {
79 let service = MemorySchemaService::new();
80 let schema = service.execute();
81
82 assert_eq!(schema.schema_version, "locus-sdk.memory.v3");
83 assert!(schema.sort_fields.contains(&"timestamp".to_string()));
84 assert!(schema.group_by_fields.contains(&"session_id".to_string()));
85 assert!(schema.fallback_policies.contains(&"on_empty".to_string()));
86 assert!(schema
87 .transform_operations
88 .contains(&"embed_backfill".to_string()));
89 assert!(schema.filter_fields.contains(&"has_tag".to_string()));
90 }
91
92 #[test]
93 fn schema_contains_semantic_tag_filters() {
94 let service = MemorySchemaService::new();
95 let schema = service.execute();
96
97 assert!(schema
98 .filter_fields
99 .contains(&"tags_contains".to_string()));
100 assert!(schema
101 .filter_fields
102 .contains(&"indexed_tags".to_string()));
103 assert!(schema
104 .filter_fields
105 .contains(&"link_rel".to_string()));
106 }
107}