humanus.cpp/memory/vector_store/base.h

91 lines
2.6 KiB
C
Raw Normal View History

#ifndef HUMANUS_MEMORY_VECTOR_STORE_BASE_H
#define HUMANUS_MEMORY_VECTOR_STORE_BASE_H
2025-03-23 14:35:54 +08:00
#include "config.h"
#include <memory>
#include <unordered_map>
#include <string>
namespace humanus {
class VectorStore {
private:
static std::unordered_map<std::string, std::shared_ptr<VectorStore>> instances_;
protected:
std::shared_ptr<VectorStoreConfig> config_;
2025-03-23 14:35:54 +08:00
// Constructor
VectorStore(const std::shared_ptr<VectorStoreConfig>& config) : config_(config) {}
2025-03-23 14:35:54 +08:00
public:
// Get the singleton instance
static std::shared_ptr<VectorStore> get_instance(const std::string& config_name = "default", const std::shared_ptr<VectorStoreConfig>& config = nullptr);
2025-03-23 14:35:54 +08:00
virtual ~VectorStore() = default;
virtual void reset() = 0;
2025-03-23 14:35:54 +08:00
/**
* @brief
* @param vector
* @param vector_id ID
2025-03-26 19:28:02 +08:00
* @param metadata
2025-03-23 14:35:54 +08:00
*/
virtual void insert(const std::vector<float>& vector,
const size_t vector_id,
const MemoryItem& metadata = MemoryItem()) = 0;
2025-03-23 14:35:54 +08:00
/**
* @brief
* @param query
* @param limit
2025-03-26 19:28:02 +08:00
* @param filter
* @return MemoryItem
2025-03-23 14:35:54 +08:00
*/
virtual std::vector<MemoryItem> search(const std::vector<float>& query,
2025-03-26 19:28:02 +08:00
size_t limit = 5,
const FilterFunc& filter = nullptr) = 0;
2025-03-23 14:35:54 +08:00
/**
* @brief ID
* @param vector_id ID
*/
virtual void remove(size_t vector_id) = 0;
2025-03-23 14:35:54 +08:00
/**
* @brief
* @param vector_id ID
2025-03-26 19:28:02 +08:00
* @param vector
* @param metadata
2025-03-23 14:35:54 +08:00
*/
2025-03-26 19:28:02 +08:00
virtual void update(size_t vector_id, const std::vector<float>& vector = std::vector<float>(), const MemoryItem& metadata = MemoryItem()) = 0;
2025-03-23 14:35:54 +08:00
/**
* @brief ID
* @param vector_id ID
* @return
*/
virtual MemoryItem get(size_t vector_id) = 0;
2025-03-23 14:35:54 +08:00
/**
* @brief Set metadata for a vector
* @param vector_id Vector ID
* @param metadata New metadata
*/
virtual void set(size_t vector_id, const MemoryItem& metadata) = 0;
2025-03-23 14:35:54 +08:00
/**
* @brief
* @param limit
2025-03-26 19:28:02 +08:00
* @param filter isIDAllowed
2025-03-23 14:35:54 +08:00
* @return ID
*/
2025-03-26 19:28:02 +08:00
virtual std::vector<MemoryItem> list(size_t limit = 0, const FilterFunc& filter = nullptr) = 0;
2025-03-23 14:35:54 +08:00
};
} // namespace humanus
2025-03-23 14:35:54 +08:00
#endif // HUMANUS_MEMORY_VECTOR_STORE_BASE_H