mod embedding;
mod index;
mod search;
mod store;
pub use embedding::{
embed_content, embed_content_api, embed_query_api, embed_via_api, engine_if_ready, get_engine,
};
pub use index::{BRAIN_FILES, index_file, reindex};
pub use search::search;
pub use store::get_store;
fn vector_enabled() -> bool {
let config = read_memory_config();
config.vector_enabled
}
fn read_memory_config() -> crate::config::MemoryConfig {
let config_path = crate::config::opencrabs_home().join("config.toml");
if let Ok(content) = std::fs::read_to_string(&config_path)
&& let Ok(table) = content.parse::<toml::Table>()
&& let Some(memory) = table.get("memory")
&& let Ok(cfg) = toml::from_str::<crate::config::MemoryConfig>(
&toml::to_string(memory).unwrap_or_default(),
)
{
return cfg;
}
crate::config::MemoryConfig::default()
}
fn embedding_api_configured() -> bool {
let cfg = read_memory_config();
cfg.embedding
.as_ref()
.is_some_and(|e| e.url.is_some() && e.model.is_some())
}
fn embedding_api_config() -> Option<crate::config::EmbeddingConfig> {
read_memory_config().embedding
}
fn embedding_dimensions() -> usize {
let cfg = read_memory_config();
if let Some(ref emb) = cfg.embedding
&& let Some(dims) = emb.dimensions
{
return dims;
}
768 }
#[derive(Debug, Clone)]
pub struct MemoryResult {
pub path: String,
pub snippet: String,
pub rank: f64,
}
const COLLECTION_MEMORY: &str = "memory";
const COLLECTION_BRAIN: &str = "brain";