1use std::sync::Arc;
11
12use zeph_llm::any::AnyProvider;
13use zeph_llm::mock::MockProvider;
14
15use crate::embedding_store::EmbeddingStore;
16use crate::error::MemoryError;
17use crate::in_memory_store::InMemoryVectorStore;
18use crate::semantic::SemanticMemory;
19use crate::sqlite::SqliteStore;
20use crate::token_counter::TokenCounter;
21
22pub async fn mock_semantic_memory() -> Result<Arc<SemanticMemory>, MemoryError> {
33 let mut mock = MockProvider::default();
34 mock.supports_embeddings = true;
35 mock.embedding = vec![0.1_f32; 384];
36 let provider = AnyProvider::Mock(mock);
37
38 let sqlite = SqliteStore::with_pool_size(":memory:", 1).await?;
40 let pool = sqlite.pool().clone();
41
42 let qdrant = Some(Arc::new(EmbeddingStore::with_store(
44 Box::new(InMemoryVectorStore::new()),
45 pool,
46 )));
47
48 Ok(Arc::new(SemanticMemory::from_parts(
49 sqlite,
50 qdrant,
51 provider,
52 "mock-embed",
53 0.7,
54 0.3,
55 Arc::new(TokenCounter::new()),
56 )))
57}
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62
63 #[tokio::test]
64 async fn mock_semantic_memory_creates_successfully() {
65 let memory = mock_semantic_memory().await;
66 assert!(memory.is_ok(), "mock_semantic_memory should not fail");
67 }
68}