use crate::{
config::QdrantConfig,
error::Result,
llm::LLMClientImpl,
vector_store::{QdrantVectorStore, VectorStore},
};
use tracing::info;
pub async fn initialize_memory_system(
qdrant_config: &QdrantConfig,
llm_config: crate::llm::LLMConfig,
) -> Result<(Box<dyn VectorStore>, Box<dyn crate::llm::LLMClient>)> {
let llm_client = Box::new(LLMClientImpl::new(llm_config)?) as Box<dyn crate::llm::LLMClient>;
let vector_store: Box<dyn VectorStore> = if qdrant_config.embedding_dim.is_some() {
info!("Using configured embedding dimension: {:?}", qdrant_config.embedding_dim);
Box::new(QdrantVectorStore::new(qdrant_config).await?)
} else {
info!("Auto-detecting embedding dimension...");
Box::new(QdrantVectorStore::new_with_llm_client(qdrant_config, llm_client.as_ref()).await?)
};
Ok((vector_store, llm_client))
}
pub async fn create_auto_config(
base_config: &QdrantConfig,
_llm_client: &dyn crate::llm::LLMClient,
) -> Result<QdrantConfig> {
let mut config = base_config.clone();
if config.embedding_dim.is_none() {
info!("Auto-detecting embedding dimension for configuration...");
let detected_dim = std::env::var("EMBEDDING_DIM")
.ok()
.and_then(|s| s.parse().ok())
.unwrap_or(1536); info!("Using embedding dimension: {}", detected_dim);
config.embedding_dim = Some(detected_dim);
}
Ok(config)
}