#include "base.h" #include "hnswlib.h" namespace humanus { std::unordered_map> VectorStore::instances_; std::shared_ptr VectorStore::get_instance(const std::string& config_name, const std::shared_ptr& config) { if (instances_.find(config_name) == instances_.end()) { auto config_ = config; if (!config_) { if (Config::get_instance().vector_store().find(config_name) == Config::get_instance().vector_store().end()) { logger->warn("Vector store config not found: " + config_name + ", falling back to default config"); config_ = std::make_shared(Config::get_instance().vector_store().at("default")); } else { config_ = std::make_shared(Config::get_instance().vector_store().at(config_name)); } } if (config_->provider == "hnswlib") { instances_[config_name] = std::make_shared(config_); } else { throw std::invalid_argument("Unsupported embedding model provider: " + config_->provider); } } return instances_[config_name]; } } // namespace humanus