use crate::client::{PgvectorConfig, PgvectorHandle};
use crate::embedder::{DummyEmbedder, Embedder};
use crate::long_term::PgvectorLongTerm;
use klieo_core::error::MemoryError;
use klieo_core::memory::LongTermMemory;
use std::sync::Arc;
#[non_exhaustive]
pub struct MemoryPgvector {
pub long_term: Arc<dyn LongTermMemory>,
pub pgvector_long_term: Arc<PgvectorLongTerm>,
}
impl MemoryPgvector {
pub async fn connect(url: impl Into<String>) -> Result<Self, MemoryError> {
Self::new(PgvectorConfig::new(url), Arc::new(DummyEmbedder)).await
}
pub async fn new(
cfg: PgvectorConfig,
embedder: Arc<dyn Embedder>,
) -> Result<Self, MemoryError> {
let embedder_id = cfg.embedder_id().to_string();
let handle = PgvectorHandle::connect(&cfg).await?;
let pgvector_long_term = Arc::new(PgvectorLongTerm::new(handle, embedder, embedder_id));
let long_term: Arc<dyn LongTermMemory> = pgvector_long_term.clone();
Ok(Self {
long_term,
pgvector_long_term,
})
}
}