use openmemory::{
core::types::Sector,
AddOptions, EmbeddingKind, OpenMemory, OpenMemoryOptions, QueryOptions,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== OpenMemory Rust SDK Test ===\n");
println!("1. Initializing OpenMemory...");
let om = OpenMemory::new(OpenMemoryOptions {
db_path: ":memory:".into(), embedding_kind: EmbeddingKind::Synthetic, vec_dim: Some(256),
..Default::default()
})
.await?;
println!(" OK: Initialized\n");
println!("2. Adding memories...");
let memories = vec![
("I met a friend at the cafe yesterday.", vec!["daily", "friend"]),
("Python is an interpreted programming language.", vec!["programming", "knowledge"]),
("I learned how to git commit and push today.", vec!["git", "programming"]),
("The weather was great today, I felt happy.", vec!["emotion", "weather"]),
("I am building a habit of waking up at 7am every morning.", vec!["habit", "routine"]),
];
for (content, tags) in memories {
let result = om
.add(
content,
AddOptions {
tags: Some(tags.iter().map(|s| s.to_string()).collect()),
..Default::default()
},
)
.await?;
let preview: String = content.chars().take(30).collect();
println!(
" OK: \"{}...\" -> sector: {:?}",
preview,
result.primary_sector
);
}
println!();
println!("3. Querying memories...\n");
let queries = vec![
"programming related memories",
"what happened today",
"feelings and emotions",
];
for query in queries {
println!(" Query: \"{}\"", query);
let results = om
.query(
query,
QueryOptions {
k: 3,
..Default::default()
},
)
.await?;
if results.is_empty() {
println!(" No results\n");
} else {
for (i, result) in results.iter().enumerate() {
let content_preview: String = result.content.chars().take(40).collect();
println!(
" {}. [score: {:.3}] [sector: {:?}] {}",
i + 1,
result.score,
result.primary_sector,
content_preview
);
}
println!();
}
}
println!("4. Query by sector (Semantic only)...");
let semantic_results = om
.query(
"knowledge",
QueryOptions {
k: 5,
sectors: Some(vec![Sector::Semantic]),
..Default::default()
},
)
.await?;
for result in &semantic_results {
println!(" - {:?}: {}", result.primary_sector, result.content);
}
println!();
println!("5. Running memory decay...");
let decay_stats = om.run_decay().await?;
println!(
" OK: processed: {}, decayed: {}, duration: {}ms\n",
decay_stats.processed, decay_stats.decayed, decay_stats.duration_ms
);
println!("6. All memories:");
let all = om.get_all(100, 0).await?;
for mem in &all {
println!(
" - [{}] salience: {:.2}, sector: {:?}",
&mem.id[..8],
mem.salience,
mem.primary_sector
);
}
println!("\n=== Test Complete ===");
Ok(())
}